diff --git a/.vercel/README.txt b/.vercel/README.txt new file mode 100644 index 000000000..525d8ce8e --- /dev/null +++ b/.vercel/README.txt @@ -0,0 +1,11 @@ +> Why do I have a folder named ".vercel" in my project? +The ".vercel" folder is created when you link a directory to a Vercel project. + +> What does the "project.json" file contain? +The "project.json" file contains: +- The ID of the Vercel project that you linked ("projectId") +- The ID of the user or team your Vercel project is owned by ("orgId") + +> Should I commit the ".vercel" folder? +No, you should not share the ".vercel" folder with anyone. +Upon creation, it will be automatically added to your ".gitignore" file. diff --git a/.vercel/project.json b/.vercel/project.json new file mode 100644 index 000000000..3ffe22dfc --- /dev/null +++ b/.vercel/project.json @@ -0,0 +1 @@ +{"orgId":"EDiU8DZExvM9N4unZGYQbG3d","projectId":"prj_fbAU5smemBgtr5t8lsk5ZoT9zNtI"} \ No newline at end of file diff --git a/bin/solid.pill b/bin/solid.pill index c950b0e75..2d7975b0b 100644 --- a/bin/solid.pill +++ b/bin/solid.pill @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42b81ff30114d982a485d851879bd3f4abbfaa6272351eaca717e10370af293e -size 13645079 +oid sha256:b8972fd91602b0d2cca76ade229d11aaaca0bc3c89da53c42f4f12895190b4b2 +size 13762742 diff --git a/pkg/arvo/app/dojo.hoon b/pkg/arvo/app/dojo.hoon index c298bc938..6e296e56e 100644 --- a/pkg/arvo/app/dojo.hoon +++ b/pkg/arvo/app/dojo.hoon @@ -1356,7 +1356,7 @@ ++ complete-naked-poke |= app=term =/ pax=path - /(scot %p our.hid)/[q.byk.hid]/(scot %da now.hid)/app + /(scot %p our.hid)/[q:he-beam]/(scot %da now.hid)/app %+ complete (cat 3 ':' app) %+ murn ~(tap by dir:.^(arch %cy pax)) |= [=term ~] @@ -1386,7 +1386,7 @@ (cat 3 '|' gen) :((cury cat 3) ':' app '|' gen) =/ pfix=path - /(scot %p our.hid)/[q.byk.hid]/(scot %da now.hid)/gen/[app] + /(scot %p our.hid)/[q:he-beam]/(scot %da now.hid)/gen/[app] :: %^ tab-generators:auto pfix `app %+ murn @@ -1402,7 +1402,7 @@ |= gen=term %+ complete (cat 3 '+' gen) =/ pax=path - /(scot %p our.hid)/[q.byk.hid]/(scot %da now.hid)/gen + /(scot %p our.hid)/[q:he-beam]/(scot %da now.hid)/gen %^ tab-generators:auto pax ~ %+ murn ~(tap by dir:.^(arch %cy pax)) diff --git a/pkg/arvo/app/hood.hoon b/pkg/arvo/app/hood.hoon index 59d3394a1..c9173a3f2 100644 --- a/pkg/arvo/app/hood.hoon +++ b/pkg/arvo/app/hood.hoon @@ -1,10 +1,23 @@ /+ default-agent /+ drum=hood-drum, helm=hood-helm, kiln=hood-kiln |% -+$ state [%16 any-state-tuple] ++$ state + $~ [%17 *state:drum *state:helm *state:kiln] + $>(%17 any-state) +:: +$ any-state $% [ver=?(%1 %2 %3 %4 %5 %6) lac=(map @tas fin-any-state)] - [ver=?(%7 %8 %9 %10 %11 %12 %13 %14 %15 %16) any-state-tuple] + [%7 drum=state-2:drum helm=state:helm kiln=state-0:kiln] + [%8 drum=state-2:drum helm=state:helm kiln=state-0:kiln] + [%9 drum=state-2:drum helm=state:helm kiln=state-0:kiln] + [%10 drum=state-2:drum helm=state:helm kiln=state-0:kiln] + [%11 drum=state-2:drum helm=state:helm kiln=state-0:kiln] + [%12 drum=state-2:drum helm=state:helm kiln=state-0:kiln] + [%13 drum=state-2:drum helm=state:helm kiln=state-1:kiln] + [%14 drum=state-3:drum helm=state:helm kiln=state-1:kiln] + [%15 drum=state-3:drum helm=state:helm kiln=state-2:kiln] + [%16 drum=state-4:drum helm=state:helm kiln=state-3:kiln] + [%17 drum=state-4:drum helm=state:helm kiln=state-4:kiln] == +$ any-state-tuple $: drum=any-state:drum @@ -55,9 +68,9 @@ =-(?>(?=(%kiln -<) ->) (~(got by lac.old) %kiln)) == == - =^ d drum.state (on-load:drum-core -.old drum.tup) - =^ h helm.state (on-load:helm-core -.old helm.tup) - =^ k kiln.state (on-load:kiln-core -.old kiln.tup) + =^ d drum.state (on-load:(drum bowl *state:drum) -.old drum.tup) + =^ h helm.state (on-load:(helm bowl *state:helm) -.old helm.tup) + =^ k kiln.state (on-load:(kiln bowl *state:kiln) -.old kiln.tup) [:(welp d h k) this] :: ++ on-poke diff --git a/pkg/arvo/app/spider.hoon b/pkg/arvo/app/spider.hoon index 5fd232761..e1140a256 100644 --- a/pkg/arvo/app/spider.hoon +++ b/pkg/arvo/app/spider.hoon @@ -285,17 +285,17 @@ ~/ %handle-http-request |= [eyre-id=@ta =inbound-request:eyre] ^- (quip card _state) - ?> authenticated.inbound-request + ::?> authenticated.inbound-request =/ url (parse-request-line:server url.request.inbound-request) - ?> ?=([%spider @t @t @t ~] site.url) - =* input-mark i.t.site.url - =* thread i.t.t.site.url - =* output-mark i.t.t.t.site.url + ?> ?=([%spider @t @t @t @t ~] site.url) + =* desk i.t.site.url + =* input-mark i.t.t.site.url + =* thread i.t.t.t.site.url + =* output-mark i.t.t.t.t.site.url =/ =tid (new-thread-id thread) =. serving.state (~(put by serving.state) tid [eyre-id output-mark]) - =/ =desk %landscape :: TODO: make this generic :: TODO: speed this up somehow. we spend about 15ms in this arm alone :: =+ .^ diff --git a/pkg/arvo/gen/hood/bump.hoon b/pkg/arvo/gen/hood/bump.hoon index 717446667..27d911b55 100644 --- a/pkg/arvo/gen/hood/bump.hoon +++ b/pkg/arvo/gen/hood/bump.hoon @@ -1,7 +1,7 @@ :- %say |= $: [now=@da eny=@uvJ bec=beak] - ~ ~ + ~ + check=_& + except=(set desk) == -:- %kiln-bump -~ - +[%kiln-bump except check] diff --git a/pkg/arvo/gen/hood/rein.hoon b/pkg/arvo/gen/hood/rein.hoon new file mode 100644 index 000000000..d3477ec5e --- /dev/null +++ b/pkg/arvo/gen/hood/rein.hoon @@ -0,0 +1,16 @@ +/- hood +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + $: =desk + arg=(list [? dude:gall]) + == + liv=_& + == +:- %kiln-rein +:- desk +%+ roll arg +=| =rein:hood +|: [*[on=? =dude:gall] rein(liv liv)] +?: on + rein(add (~(put in add.rein) dude)) +rein(sub (~(put in sub.rein) dude)) diff --git a/pkg/arvo/gen/hood/revive.hoon b/pkg/arvo/gen/hood/revive.hoon new file mode 100644 index 000000000..0fe0ff245 --- /dev/null +++ b/pkg/arvo/gen/hood/revive.hoon @@ -0,0 +1,5 @@ +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + [[=desk ~] ~] + == +[%kiln-revive desk] diff --git a/pkg/arvo/gen/hood/suspend.hoon b/pkg/arvo/gen/hood/suspend.hoon new file mode 100644 index 000000000..cd5736f73 --- /dev/null +++ b/pkg/arvo/gen/hood/suspend.hoon @@ -0,0 +1,5 @@ +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + [[=desk ~] ~] + == +[%kiln-suspend desk] diff --git a/pkg/arvo/lib/agentio.hoon b/pkg/arvo/lib/agentio.hoon deleted file mode 100644 index ffd90066b..000000000 --- a/pkg/arvo/lib/agentio.hoon +++ /dev/null @@ -1,135 +0,0 @@ -=> - |% - ++ card card:agent:gall - -- -:: -|_ =bowl:gall -++ scry - |= [desk=@tas =path] - %+ weld - /(scot %p our.bowl)/[desk]/(scot %da now.bowl) - path -:: -++ pass - |_ =wire - ++ poke - |= [=dock =cage] - [%pass wire %agent dock %poke cage] - :: - ++ poke-our - |= [app=term =cage] - ^- card - (poke [our.bowl app] cage) - :: - ++ poke-self - |= =cage - ^- card - (poke-our dap.bowl cage) - :: - ++ arvo - |= =note-arvo - ^- card - [%pass wire %arvo note-arvo] - :: - ++ watch - |= [=dock =path] - [%pass (watch-wire path) %agent dock %watch path] - :: - ++ watch-our - |= [app=term =path] - (watch [our.bowl app] path) - :: - ++ watch-wire - |= =path - ^+ wire - ?. ?=(~ wire) - wire - agentio-watch+path - :: - ++ leave - |= =dock - [%pass wire %agent dock %leave ~] - :: - ++ leave-our - |= app=term - (leave our.bowl app) - :: - ++ leave-path - |= [=dock =path] - =. wire - (watch-wire path) - (leave dock) - :: - ++ wait - |= p=@da - (arvo %b %wait p) - :: - ++ rest - |= p=@da - (arvo %b %wait p) - :: - ++ warp - |= [wer=ship =riff:clay] - (arvo %c %warp wer riff) - :: - ++ warp-our - |= =riff:clay - (warp our.bowl riff) - :: - :: right here, right now - ++ warp-slim - |= [genre=?(%sing %next) =care:clay =path] - =/ =mood:clay - [care r.byk.bowl path] - =/ =rave:clay - ?:(?=(%sing genre) [genre mood] [genre mood]) - (warp-our q.byk.bowl `rave) - -- -:: -++ fact-curry - |* [=mark =mold] - |= [paths=(list path) fac=mold] - (fact mark^!>(fac) paths) -:: -++ fact-kick - |= [=path =cage] - ^- (list card) - :~ (fact cage ~[path]) - (kick ~[path]) - == -:: -++ fact-init - |= =cage - ^- card - [%give %fact ~ cage] -:: -++ fact-init-kick - |= =cage - ^- (list card) - :~ (fact cage ~) - (kick ~) - == -:: -++ fact - |= [=cage paths=(list path)] - ^- card - [%give %fact paths cage] -:: -++ fact-all - |= =cage - ^- (unit card) - =/ paths=(list path) - %+ turn ~(tap by sup.bowl) - |= [duct ship =path] - path - ?~ paths ~ - `[%give %fact paths cage] -:: -++ kick - |= paths=(list path) - [%give %kick paths ~] -:: -++ kick-only - |= [=ship paths=(list path)] - [%give %kick paths `ship] --- diff --git a/pkg/arvo/lib/agentio.hoon b/pkg/arvo/lib/agentio.hoon new file mode 120000 index 000000000..959a49843 --- /dev/null +++ b/pkg/arvo/lib/agentio.hoon @@ -0,0 +1 @@ +../../base-dev/lib/agentio.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/azimuth.hoon b/pkg/arvo/lib/azimuth.hoon deleted file mode 100644 index 0d42991ad..000000000 --- a/pkg/arvo/lib/azimuth.hoon +++ /dev/null @@ -1,454 +0,0 @@ -:: azimuth: constants and utilities -:: -/+ ethereum -:: -=> => [azimuth-types ethereum-types .] - |% - +$ complete-ship - $: state=point - history=(list diff-point) ::TODO maybe block/event nr? :: newest first - keys=(map life pass) - == - :: - ++ fleet (map @p complete-ship) - :: - ++ eth-type - |% - ++ point - :~ [%bytes-n 32] :: encryptionKey - [%bytes-n 32] :: authenticationKey - %bool :: hasSponsor - %bool :: active - %bool :: escapeRequested - %uint :: sponsor - %uint :: escapeRequestedTo - %uint :: cryptoSuiteVersion - %uint :: keyRevisionNumber - %uint :: continuityNumber - == - ++ deed - :~ %address :: owner - %address :: managementProxy - %address :: spawnProxy - %address :: votingProxy - %address :: transferProxy - == - -- - :: - ++ eth-noun - |% - +$ point - $: encryption-key=octs - authentication-key=octs - has-sponsor=? - active=? - escape-requested=? - sponsor=@ud - escape-to=@ud - crypto-suite=@ud - key-revision=@ud - continuity-number=@ud - == - +$ deed - $: owner=address - management-proxy=address - spawn-proxy=address - voting-proxy=address - transfer-proxy=address - == - -- - :: - ++ function - |% - ++ azimuth - $% [%points who=@p] - [%rights who=@p] - [%get-spawned who=@p] - [%dns-domains ind=@ud] - == - -- - :: - :: # diffs - :: - ++ update - $% [%full ships=(map ship point) dns=dnses heard=events] - [%difs dis=(list (pair event-id diff-azimuth))] - == - :: - :: # constants - :: - :: contract addresses - ++ contracts mainnet-contracts - ++ mainnet-contracts - |% - :: azimuth: data contract - :: - ++ azimuth - 0x223c.067f.8cf2.8ae1.73ee.5caf.ea60.ca44.c335.fecb - :: - ++ ecliptic - 0x6ac0.7b7c.4601.b5ce.11de.8dfe.6335.b871.c7c4.dd4d - :: - ++ linear-star-release - 0x86cd.9cd0.992f.0423.1751.e376.1de4.5cec.ea5d.1801 - :: - ++ conditional-star-release - 0x8c24.1098.c3d3.498f.e126.1421.633f.d579.86d7.4aea - :: - ++ delegated-sending - 0xf790.8ab1.f1e3.52f8.3c5e.bc75.051c.0565.aeae.a5fb - :: - :: launch: block number of azimuth deploy - :: - ++ launch 6.784.800 - :: - :: public: block number of azimuth becoming independent - :: - ++ public 7.033.765 - -- - :: - :: Testnet contract addresses - :: - ++ ropsten-contracts - |% - ++ azimuth - 0x308a.b6a6.024c.f198.b57e.008d.0ac9.ad02.1988.6579 - :: - ++ ecliptic - 0x8b9f.86a2.8921.d9c7.05b3.113a.755f.b979.e1bd.1bce - :: - ++ linear-star-release - 0x1f8e.dd03.1ee4.1474.0aed.b39b.84fb.8f2f.66ca.422f - :: - ++ conditional-star-release - 0x0 - :: - ++ delegated-sending - 0x3e8c.a510.354b.c2fd.bbd6.1502.52d9.3105.c9c2.7bbe - :: - ++ launch 4.601.630 - ++ public launch - -- - :: - :: Local contract addresses - :: - :: These addresses are only reproducible if you use the deploy - :: script in bridge - :: - ++ local-contracts - |% - ++ ecliptic - 0x56db.68f2.9203.ff44.a803.faa2.404a.44ec.bb7a.7480 - ++ azimuth - 0x863d.9c2e.5c4c.1335.96cf.ac29.d552.55f0.d0f8.6381 - ++ delegated-sending - 0xb71c.0b6c.ee1b.cae5.6dfe.95cd.9d3e.41dd.d7ea.fc43 - ++ linear-star-release - 0x3c3.dc12.be65.8158.d1d7.f9e6.6e08.ec40.99c5.68e4 - ++ conditional-star-release - 0x35eb.3b10.2d9c.1b69.ac14.69c1.b1fe.1799.850c.d3eb - ++ launch 0 - ++ public 0 - -- - :: - :: ++ azimuth 0x863d.9c2e.5c4c.1335.96cf.ac29.d552.55f0.d0f8.6381 :: local bridge - :: hashes of ship event signatures - ++ azimuth-events - |% - :: - :: OwnerChanged(uint32,address) - ++ owner-changed - 0x16d0.f539.d49c.6cad.822b.767a.9445.bfb1. - cf7e.a6f2.a6c2.b120.a7ea.4cc7.660d.8fda - :: - :: Activated(uint32) - ++ activated - 0xe74c.0380.9d07.69e1.b1f7.06cc.8414.258c. - d1f3.b6fe.020c.d15d.0165.c210.ba50.3a0f - :: - :: Spawned(uint32,uint32) - ++ spawned - 0xb2d3.a6e7.a339.f5c8.ff96.265e.2f03.a010. - a854.1070.f374.4a24.7090.9644.1508.1546 - :: - :: EscapeRequested(uint32,uint32) - ++ escape-requested - 0xb4d4.850b.8f21.8218.141c.5665.cba3.79e5. - 3e9b.b015.b51e.8d93.4be7.0210.aead.874a - :: - :: EscapeCanceled(uint32,uint32) - ++ escape-canceled - 0xd653.bb0e.0bb7.ce83.93e6.24d9.8fbf.17cd. - a590.2c83.28ed.0cd0.9988.f368.90d9.932a - :: - :: EscapeAccepted(uint32,uint32) - ++ escape-accepted - 0x7e44.7c9b.1bda.4b17.4b07.96e1.00bf.7f34. - ebf3.6dbb.7fe6.6549.0b1b.fce6.246a.9da5 - :: - :: LostSponsor(uint32,uint32) - ++ lost-sponsor - 0xd770.4f9a.2519.3dbd.0b0c.b4a8.09fe.ffff. - a7f1.9d1a.ae88.17a7.1346.c194.4482.10d5 - :: - :: ChangedKeys(uint32,bytes32,bytes32,uint32,uint32) - ++ changed-keys - 0xaa10.e7a0.117d.4323.f1d9.9d63.0ec1.69be. - bb3a.988e.8957.70e3.5198.7e01.ff54.23d5 - :: - :: BrokeContinuity(uint32,uint32) - ++ broke-continuity - 0x2929.4799.f1c2.1a37.ef83.8e15.f79d.d91b. - cee2.df99.d63c.d1c1.8ac9.68b1.2951.4e6e - :: - :: ChangedSpawnProxy(uint32,address) - ++ changed-spawn-proxy - 0x9027.36af.7b3c.efe1.0d9e.840a.ed0d.687e. - 35c8.4095.122b.2505.1a20.ead8.866f.006d - :: - :: ChangedTransferProxy(uint32,address) - ++ changed-transfer-proxy - 0xcfe3.69b7.197e.7f0c.f067.93ae.2472.a9b1. - 3583.fecb.ed2f.78df.a14d.1f10.796b.847c - :: - :: ChangedManagementProxy(uint32,address) - ++ changed-management-proxy - 0xab9c.9327.cffd.2acc.168f.afed.be06.139f. - 5f55.cb84.c761.df05.e051.1c25.1e2e.e9bf - :: - :: ChangedVotingProxy(uint32,address) - ++ changed-voting-proxy - 0xcbd6.269e.c714.57f2.c7b1.a227.74f2.46f6. - c5a2.eae3.795e.d730.0db5.1768.0c61.c805 - :: - :: ChangedDns(string,string,string) - ++ changed-dns - 0xfafd.04ad.e1da.ae2e.1fdb.0fc1.cc6a.899f. - d424.063e.d5c9.2120.e67e.0730.53b9.4898 - -- - -- -:: -:: logic -:: -|% -++ pass-from-eth - |= [enc=octs aut=octs sut=@ud] - ^- pass - %^ cat 3 'b' - ?. &(=(1 sut) =(p.enc 32) =(p.aut 32)) - (cat 8 0 0) - (cat 8 q.aut q.enc) -:: -++ point-from-eth - |= [who=@p point:eth-noun deed:eth-noun] - ^- point - :: - :: ownership - :: - :+ :* owner - management-proxy - voting-proxy - transfer-proxy - == - :: - :: network state - :: - ?. active ~ - :- ~ - :* key-revision - :: - (pass-from-eth encryption-key authentication-key crypto-suite) - :: - continuity-number - :: - [has-sponsor `@p`sponsor] - :: - ?. escape-requested ~ - ``@p`escape-to - == - :: - :: spawn state - :: - ?. ?=(?(%czar %king) (clan:title who)) ~ - :- ~ - :* spawn-proxy - ~ ::TODO call getSpawned to fill this - == -:: -++ event-log-to-point-diff - =, azimuth-events - =, abi:ethereum - |= log=event-log:rpc:ethereum - ^- (unit (pair ship diff-point)) - ~? ?=(~ mined.log) %processing-unmined-event - :: - ?: =(i.topics.log owner-changed) - =/ [who=@ wer=address] - (decode-topics t.topics.log ~[%uint %address]) - `[who %owner wer] - :: - ?: =(i.topics.log activated) - =/ who=@ - (decode-topics t.topics.log ~[%uint]) - `[who %activated who] - :: - ?: =(i.topics.log spawned) - =/ [pre=@ who=@] - (decode-topics t.topics.log ~[%uint %uint]) - `[pre %spawned who] - :: - ?: =(i.topics.log escape-requested) - =/ [who=@ wer=@] - (decode-topics t.topics.log ~[%uint %uint]) - `[who %escape `wer] - :: - ?: =(i.topics.log escape-canceled) - =/ who=@ (decode-topics t.topics.log ~[%uint]) - `[who %escape ~] - :: - ?: =(i.topics.log escape-accepted) - =/ [who=@ wer=@] - (decode-topics t.topics.log ~[%uint %uint]) - `[who %sponsor & wer] - :: - ?: =(i.topics.log lost-sponsor) - =/ [who=@ pos=@] - (decode-topics t.topics.log ~[%uint %uint]) - `[who %sponsor | pos] - :: - ?: =(i.topics.log changed-keys) - =/ who=@ (decode-topics t.topics.log ~[%uint]) - =/ [enc=octs aut=octs sut=@ud rev=@ud] - %+ decode-results data.log - ~[[%bytes-n 32] [%bytes-n 32] %uint %uint] - `[who %keys rev (pass-from-eth enc aut sut)] - :: - ?: =(i.topics.log broke-continuity) - =/ who=@ (decode-topics t.topics.log ~[%uint]) - =/ num=@ (decode-results data.log ~[%uint]) - `[who %continuity num] - :: - ?: =(i.topics.log changed-management-proxy) - =/ [who=@ sox=address] - (decode-topics t.topics.log ~[%uint %address]) - `[who %management-proxy sox] - :: - ?: =(i.topics.log changed-voting-proxy) - =/ [who=@ tox=address] - (decode-topics t.topics.log ~[%uint %address]) - `[who %voting-proxy tox] - :: - ?: =(i.topics.log changed-spawn-proxy) - =/ [who=@ sox=address] - (decode-topics t.topics.log ~[%uint %address]) - `[who %spawn-proxy sox] - :: - ?: =(i.topics.log changed-transfer-proxy) - =/ [who=@ tox=address] - (decode-topics t.topics.log ~[%uint %address]) - `[who %transfer-proxy tox] - :: - :: warn about unimplemented events, but ignore - :: the ones we know are harmless. - ~? ?! .= i.topics.log - :: OwnershipTransferred(address,address) - 0x8be0.079c.5316.5914.1344.cd1f.d0a4.f284. - 1949.7f97.22a3.daaf.e3b4.186f.6b64.57e0 - [%unimplemented-event i.topics.log] - ~ -:: -++ apply-point-diff - |= [pot=point dif=diff-point] - ^- point - ?- -.dif - %full new.dif - :: - %activated - %_ pot - net `[0 0 0 &^(^sein:title who.dif) ~] - kid ?. ?=(?(%czar %king) (clan:title who.dif)) ~ - `[0x0 ~] - == - :: - :: ownership - :: - %owner pot(owner.own new.dif) - %transfer-proxy pot(transfer-proxy.own new.dif) - %management-proxy pot(management-proxy.own new.dif) - %voting-proxy pot(voting-proxy.own new.dif) - :: - :: networking - :: - ?(%keys %continuity %sponsor %escape) - ?> ?=(^ net.pot) - ?- -.dif - %keys - pot(life.u.net life.dif, pass.u.net pass.dif) - :: - %sponsor - %= pot - sponsor.u.net new.dif - escape.u.net ?:(has.new.dif ~ escape.u.net.pot) - == - :: - %continuity pot(continuity-number.u.net new.dif) - %escape pot(escape.u.net new.dif) - == - :: - :: spawning - :: - ?(%spawned %spawn-proxy) - ?> ?=(^ kid.pot) - ?- -.dif - %spawned - =- pot(spawned.u.kid -) - (~(put in spawned.u.kid.pot) who.dif) - :: - %spawn-proxy pot(spawn-proxy.u.kid new.dif) - == - == -:: -++ parse-id - |= id=@t - ^- azimuth:function - |^ - ~| id - %+ rash id - ;~ pose - (function %points 'points' shipname) - (function %get-spawned 'getSpawned' shipname) - (function %dns-domains 'dnsDomains' dem:ag) - == - :: - ++ function - |* [tag=@tas fun=@t rul=rule] - ;~(plug (cold tag (jest fun)) (ifix [pal par] rul)) - :: - ++ shipname - ;~(pfix sig fed:ag) - -- -:: -++ function-to-call - |% - ++ azimuth - |= cal=azimuth:function - ^- [id=@t dat=call-data:rpc:ethereum] - ?- -.cal - %points - :- (crip "points({(scow %p who.cal)})") - ['points(uint32)' ~[uint+`@`who.cal]] - :: - %rights - :- (crip "rights({(scow %p who.cal)})") - ['rights(uint32)' ~[uint+`@`who.cal]] - :: - %get-spawned - :- (crip "getSpawned({(scow %p who.cal)})") - ['getSpawned(uint32)' ~[uint+`@`who.cal]] - :: - %dns-domains - :- (crip "dnsDomains({(scow %ud ind.cal)})") - ['dnsDomains(uint256)' ~[uint+ind.cal]] - == - -- --- diff --git a/pkg/arvo/lib/azimuth.hoon b/pkg/arvo/lib/azimuth.hoon new file mode 120000 index 000000000..2bacb02b7 --- /dev/null +++ b/pkg/arvo/lib/azimuth.hoon @@ -0,0 +1 @@ +../../base-dev/lib/azimuth.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/azimuthio.hoon b/pkg/arvo/lib/azimuthio.hoon deleted file mode 100644 index 979c34704..000000000 --- a/pkg/arvo/lib/azimuthio.hoon +++ /dev/null @@ -1,146 +0,0 @@ -/- rpc=json-rpc -/+ ethereum, azimuth, strandio -=, strand=strand:strandio -=, jael -|% -++ tract azimuth:contracts:azimuth -++ fetch-point - |= [url=@ta who=ship] - =/ m (strand ,point:azimuth) - ^- form:m - =/ =request:rpc:ethereum - :+ %eth-call - =- [from=~ to=tract gas=~ price=~ value=~ data=-] - (encode-call:rpc:ethereum 'points(uint32)' [%uint `@`who]~) - [%label %latest] - ;< jon=json bind:m (request-rpc url `'point' request) - =/ res=cord (so:dejs:format jon) - =/ =point:eth-noun:azimuth - (decode-results:abi:ethereum res point:eth-type:azimuth) - :: - =/ =request:rpc:ethereum - :+ %eth-call - =- [from=~ to=tract gas=~ price=~ value=~ data=-] - (encode-call:rpc:ethereum 'rights(uint32)' [%uint `@`who]~) - [%label %latest] - ;< jon=json bind:m (request-rpc url `'deed' request) - =/ res=cord (so:dejs:format jon) - =/ =deed:eth-noun:azimuth - (decode-results:abi:ethereum res deed:eth-type:azimuth) - :: - (pure:m (point-from-eth:azimuth who point deed)) -:: -++ request-rpc - |= [url=@ta id=(unit @t) req=request:rpc:ethereum] - =/ m (strand ,json) - ^- form:m - %+ (retry json) `10 - =/ m (strand ,(unit json)) - ^- form:m - |^ - =/ =request:http - :* method=%'POST' - url=url - header-list=['Content-Type'^'application/json' ~] - ^= body - %- some %- as-octt:mimes:html - %- en-json:html - (request-to-json:rpc:ethereum id req) - == - ;< ~ bind:m (send-request:strandio request) - ;< rep=(unit client-response:iris) bind:m - take-maybe-response:strandio - ?~ rep - (pure:m ~) - (parse-response u.rep) - :: - ++ parse-response - |= =client-response:iris - =/ m (strand ,(unit json)) - ^- form:m - ?> ?=(%finished -.client-response) - ?~ full-file.client-response - (pure:m ~) - =/ body=@t q.data.u.full-file.client-response - =/ jon=(unit json) (de-json:html body) - ?~ jon - (pure:m ~) - =, dejs-soft:format - =/ array=(unit (list response:rpc)) - ((ar parse-one-response) u.jon) - ?~ array - =/ res=(unit response:rpc) (parse-one-response u.jon) - ?~ res - (strand-fail:strandio %request-rpc-parse-error >id< ~) - ?: ?=(%error -.u.res) - (strand-fail:strandio %request-rpc-error >id< >+.res< ~) - ?. ?=(%result -.u.res) - (strand-fail:strandio %request-rpc-fail >u.res< ~) - (pure:m `res.u.res) - (strand-fail:strandio %request-rpc-batch >%not-implemented< ~) - :: (pure:m `[%batch u.array]) - :: - ++ parse-one-response - |= =json - ^- (unit response:rpc) - =/ res=(unit [@t ^json]) - %. json - =, dejs-soft:format - (ot id+so result+some ~) - ?^ res `[%result u.res] - ~| parse-one-response=json - :+ ~ %error %- need - %. json - =, dejs-soft:format - (ot id+so error+(ot code+no message+so ~) ~) - -- -:: -++ retry - |* result=mold - |= [crash-after=(unit @ud) computation=_*form:(strand (unit result))] - =/ m (strand ,result) - =| try=@ud - |- ^- form:m - =* loop $ - ?: =(crash-after `try) - (strand-fail:strandio %retry-too-many ~) - ;< ~ bind:m (backoff:strandio try ~m1) - ;< res=(unit result) bind:m computation - ?^ res - (pure:m u.res) - loop(try +(try)) -:: -++ get-latest-block - |= url=@ta - =/ m (strand ,block) - ^- form:m - ;< =json bind:m (request-rpc url `'block number' %eth-block-number ~) - (get-block-by-number url (parse-eth-block-number:rpc:ethereum json)) -:: -++ get-block-by-number - |= [url=@ta =number:block] - =/ m (strand ,block) - ^- form:m - |^ - ;< =json bind:m - (request-rpc url `'block by number' %eth-get-block-by-number number |) - =/ =block (parse-block json) - ?. =(number number.id.block) - (strand-fail:strandio %reorg-detected >number< >block< ~) - (pure:m block) - :: - ++ parse-block - |= =json - ^- block - =< [[&1 &2] |2] - ^- [@ @ @] - ~| json - %. json - =, dejs:format - %- ot - :~ hash+parse-hex-result:rpc:ethereum - number+parse-hex-result:rpc:ethereum - 'parentHash'^parse-hex-result:rpc:ethereum - == - -- --- diff --git a/pkg/arvo/lib/azimuthio.hoon b/pkg/arvo/lib/azimuthio.hoon new file mode 120000 index 000000000..0b5df7063 --- /dev/null +++ b/pkg/arvo/lib/azimuthio.hoon @@ -0,0 +1 @@ +../../base-dev/lib/azimuthio.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/bip/b158.hoon b/pkg/arvo/lib/bip/b158.hoon deleted file mode 100644 index c48a8ffba..000000000 --- a/pkg/arvo/lib/bip/b158.hoon +++ /dev/null @@ -1,263 +0,0 @@ -/- bc=bitcoin -/+ bcu=bitcoin-utils -~% %bip-158-top ..part ~ -|% -++ params - |% - ++ p 19 - ++ m 784.931 - -- -:: -++ siphash - ~/ %siphash - |= [k=byts m=byts] - ^- byts - |^ - ?> =(wid.k 16) - ?> (lte (met 3 dat.k) wid.k) - ?> (lte (met 3 dat.m) wid.m) - =. k (flim:sha k) - =. m (flim:sha m) - (flim:sha (fin (comp m (init dat.k)))) - :: Initialise internal state - :: - ++ init - |= k=@ - ^- [@ @ @ @] - =/ k0=@ (end [6 1] k) - =/ k1=@ (cut 6 [1 1] k) - :^ (mix k0 0x736f.6d65.7073.6575) - (mix k1 0x646f.7261.6e64.6f6d) - (mix k0 0x6c79.6765.6e65.7261) - (mix k1 0x7465.6462.7974.6573) - :: - :: Compression rounds - ++ comp - |= [m=byts v=[v0=@ v1=@ v2=@ v3=@]] - ^- [@ @ @ @] - =/ len=@ud (div wid.m 8) - =/ last=@ (lsh [3 7] (mod wid.m 256)) - =| i=@ud - =| w=@ - |- - =. w (cut 6 [i 1] dat.m) - ?: =(i len) - =. v3.v (mix v3.v (mix last w)) - =. v (rnd (rnd v)) - =. v0.v (mix v0.v (mix last w)) - v - %= $ - v =. v3.v (mix v3.v w) - =. v (rnd (rnd v)) - =. v0.v (mix v0.v w) - v - i (add i 1) - == - :: - :: Finalisation rounds - ++ fin - |= v=[v0=@ v1=@ v2=@ v3=@] - ^- byts - =. v2.v (mix v2.v 0xff) - =. v (rnd (rnd (rnd (rnd v)))) - :- 8 - :(mix v0.v v1.v v2.v v3.v) - :: - :: Sipround - ++ rnd - |= [v0=@ v1=@ v2=@ v3=@] - ^- [@ @ @ @] - =. v0 (~(sum fe 6) v0 v1) - =. v2 (~(sum fe 6) v2 v3) - =. v1 (~(rol fe 6) 0 13 v1) - =. v3 (~(rol fe 6) 0 16 v3) - =. v1 (mix v1 v0) - =. v3 (mix v3 v2) - =. v0 (~(rol fe 6) 0 32 v0) - =. v2 (~(sum fe 6) v2 v1) - =. v0 (~(sum fe 6) v0 v3) - =. v1 (~(rol fe 6) 0 17 v1) - =. v3 (~(rol fe 6) 0 21 v3) - =. v1 (mix v1 v2) - =. v3 (mix v3 v0) - =. v2 (~(rol fe 6) 0 32 v2) - [v0 v1 v2 v3] - -- -:: +str: bit streams -:: read is from the front -:: write appends to the back -:: -++ str - ~% %str ..params ~ - |% - ++ read-bit - ~/ %read-bit - |= s=bits:bc - ^- [bit=@ub rest=bits:bc] - ?> (gth wid.s 0) - :+ ?:((gth wid.s (met 0 dat.s)) 0b0 0b1) - (dec wid.s) - (end [0 (dec wid.s)] dat.s) - :: - :: - ++ read-bits - ~/ %read-bits - |= [n=@ s=bits:bc] - ^- [bits:bc rest=bits:bc] - =/ r=@ (sub wid.s n) - :- n^(cut 0 [r n] dat.s) - r^(cut 0 [0 r] dat.s) - :: - ++ write-bits - ~/ %write-bits - |= [s1=bits:bc s2=bits:bc] - ^- bits:bc - [(add wid.s1 wid.s2) (can 0 ~[s2 s1])] - -- -:: +gol: Golomb-Rice encoding/decoding -:: -++ gol - ~% %gol ..params ~ - |% - :: +en: encode x and append to end of s - :: - s: bits stream - :: - x: number to add to the stream - :: - p: golomb-rice p param - :: - ++ en - ~/ %en - |= [s=bits:bc x=@ p=@] - ^- bits:bc - =+ q=(rsh [0 p] x) - =+ unary=[+(q) (lsh [0 1] (dec (bex q)))] - =+ r=[p (end [0 p] x)] - %+ write-bits:str s - (write-bits:str unary r) - :: - ++ de - ~/ %de - |= [s=bits:bc p=@] - ^- [delta=@ rest=bits:bc] - |^ ?> (gth wid.s 0) - =^ q s (get-q s) - =^ r s (read-bits:str p s) - [(add dat.r (lsh [0 p] q)) s] - :: - ++ get-q - |= s=bits:bc - =| q=@ - =^ first-bit s (read-bit:str s) - |- - ?: =(0 first-bit) [q s] - =^ b s (read-bit:str s) - $(first-bit b, q +(q)) - -- - -- -:: +hsh -:: -++ hsh - ~% %hsh ..params ~ - |% - :: +to-range - :: - item: scriptpubkey to hash - :: - f: N*M - :: - k: key for siphash (end of blockhash, reversed) - :: - ++ to-range - ~/ %to-range - |= [item=byts f=@ k=byts] - ^- @ - (rsh [0 64] (mul f (rev 3 (siphash k item)))) - :: +set-construct: return sorted hashes of scriptpubkeys - :: - ++ set-construct - |= [items=(list byts) k=byts f=@] - ^- (list @) - %+ sort - %+ turn items - |= item=byts - (to-range item f k) - lth - -- -:: -++ parse-filter - ~/ %parse-filter - |= filter=hexb:bc - ^- [n=@ux gcs-set=bits:bc] - =/ n n:(de:csiz:bcu filter) - =/ lead=@ ?:(=(1 wid.n) 1 +(wid.n)) - :- dat.n - [(mul 8 (sub wid.filter lead)) `@ub`dat:(drop:byt:bcu lead filter)] -:: +to-key: blockhash (little endian) to key for siphash -:: -++ to-key - ~/ %to-key - |= blockhash=tape - ^- byts - %+ take:byt:bcu 16 - %- flip:byt:bcu - (from-cord:hxb:bcu (crip blockhash)) -:: +match: whether block filter matches *any* target scriptpubkeys -:: - filter: full block filter, with leading N -:: - k: key for siphash (end of blockhash, reversed) -:: - targets: scriptpubkeys to match -:: -++ match - ~/ %match - |= [filter=hexb:bc k=byts targets=(list byts)] - ^- ? - =/ [p=@ m=@] [p:params m:params] - =/ [n=@ux gcs-set=bits:bc] (parse-filter filter) - =+ target-hs=(set-construct:hsh targets k (mul n m)) - =+ last-val=0 - |- - ?~ target-hs %.n - ?: =(last-val i.target-hs) - %.y - ?: (gth last-val i.target-hs) - $(target-hs t.target-hs) - :: last-val is less than target: check next val in GCS, if any - :: - ?: (lth wid.gcs-set p) %.n - =^ delta gcs-set - (de:gol gcs-set p) - $(last-val (add delta last-val)) -:: +all-match: returns all target byts that match -:: - filter: full block filter, with leading N -:: - targets: scriptpubkeys to match -:: -++ all-match - ~/ %all-match - |= [filter=hexb:bc blockhash=hexb:bc targets=(list [address:bc byts])] - ^- (set [address:bc hexb:bc]) - =/ k (to-key (trip (to-cord:hxb:bcu blockhash))) - %- ~(gas in *(set [address:bc hexb:bc])) - =/ [p=@ m=@] [p:params m:params] - =/ [n=@ux gcs-set=bits:bc] (parse-filter filter) - =/ target-map=(map @ [address:bc hexb:bc]) - %- ~(gas by *(map @ [address:bc hexb:bc])) - %+ turn targets - |= [a=address:bc t=hexb:bc] - [(to-range:hsh t (mul n m) k) a t] - =+ target-hs=(sort ~(tap in ~(key by target-map)) lth) - =+ last-val=0 - =| matches=(list @) - |- - ?~ target-hs - (murn matches ~(get by target-map)) - ?: =(last-val i.target-hs) - %= $ - target-hs t.target-hs - matches [last-val matches] - == - ?: (gth last-val i.target-hs) - $(target-hs t.target-hs) - :: last-val is less than target: get next val in GCS, if any - :: - ?: (lth wid.gcs-set p) - (murn matches ~(get by target-map)) - =^ delta gcs-set - (de:gol gcs-set p) - $(last-val (add delta last-val)) -:: --- diff --git a/pkg/arvo/lib/bip/b158.hoon b/pkg/arvo/lib/bip/b158.hoon new file mode 120000 index 000000000..cba919a85 --- /dev/null +++ b/pkg/arvo/lib/bip/b158.hoon @@ -0,0 +1 @@ +../../../base-dev/lib/bip/b158.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/bip/b173.hoon b/pkg/arvo/lib/bip/b173.hoon deleted file mode 100644 index e2c46db1a..000000000 --- a/pkg/arvo/lib/bip/b173.hoon +++ /dev/null @@ -1,144 +0,0 @@ -:: BIP173: Bech32 Addresses -:: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki -:: -:: Heavily copies: -:: https://github.com/bitcoinjs/bech32/blob/master/index.js -:: -/- sur=bitcoin -/+ bcu=bitcoin-utils -=, sur -=, bcu -|% -++ prefixes - ^- (map network tape) - (my [[%main "bc"] [%testnet "tb"] ~]) -++ charset "qpzry9x8gf2tvdw0s3jn54khce6mua7l" -+$ raw-decoded [hrp=tape data=(list @) checksum=(list @)] -:: below is a port of: https://github.com/bitcoinjs/bech32/blob/master/index.js -:: -++ polymod - |= values=(list @) - |^ ^- @ - =/ gen=(list @ux) - ~[0x3b6a.57b2 0x2650.8e6d 0x1ea1.19fa 0x3d42.33dd 0x2a14.62b3] - =/ chk=@ 1 - |- ?~ values chk - =/ top (rsh [0 25] chk) - =. chk - (mix i.values (lsh [0 5] (dis chk 0x1ff.ffff))) - $(values t.values, chk (update-chk chk top gen)) -:: - ++ update-chk - |= [chk=@ top=@ gen=(list @ux)] - =/ is (gulf 0 4) - |- ?~ is chk - ?: =(1 (dis 1 (rsh [0 i.is] top))) - $(is t.is, chk (mix chk (snag i.is gen))) - $(is t.is) - -- -:: -++ expand-hrp - |= hrp=tape - ^- (list @) - =/ front (turn hrp |=(p=@tD (rsh [0 5] p))) - =/ back (turn hrp |=(p=@tD (dis 31 p))) - (zing ~[front ~[0] back]) -:: -++ verify-checksum - |= [hrp=tape data-and-checksum=(list @)] - ^- ? - %- |=(a=@ =(1 a)) - %- polymod - (weld (expand-hrp hrp) data-and-checksum) -:: -++ checksum - |= [hrp=tape data=(list @)] - ^- (list @) - :: xor 1 with the polymod - :: - =/ pmod=@ - %+ mix 1 - %- polymod - (zing ~[(expand-hrp hrp) data (reap 6 0)]) - %+ turn (gulf 0 5) - |=(i=@ (dis 31 (rsh [0 (mul 5 (sub 5 i))] pmod))) -:: -++ charset-to-value - |= c=@tD - ^- (unit @) - (find ~[c] charset) -++ value-to-charset - |= value=@ - ^- (unit @tD) - ?: (gth value 31) ~ - `(snag value charset) -:: -++ is-valid - |= [bech=tape last-1-pos=@] ^- ? - ?& ?|(=((cass bech) bech) =((cuss bech) bech)) :: to upper or to lower is same as bech - (gte last-1-pos 1) - (lte (add last-1-pos 7) (lent bech)) - (lte (lent bech) 90) - (levy bech |=(c=@tD (gte c 33))) - (levy bech |=(c=@tD (lte c 126))) - == -:: data should be 5bit words -:: -++ encode-raw - |= [hrp=tape data=(list @)] - ^- cord - =/ combined=(list @) - (weld data (checksum hrp data)) - %- crip - (zing ~[hrp "1" (tape (murn combined value-to-charset))]) -++ decode-raw - |= body=cord - ^- (unit raw-decoded) - =/ bech (cass (trip body)) :: to lowercase - =/ pos (flop (fand "1" bech)) - ?~ pos ~ - =/ last-1=@ i.pos - ?. (is-valid bech last-1) :: check bech32 validity (not segwit validity or checksum) - ~ - =/ hrp (scag last-1 bech) - =/ encoded-data-and-checksum=(list @) - (slag +(last-1) bech) - =/ data-and-checksum=(list @) - %+ murn encoded-data-and-checksum - charset-to-value - ?. =((lent encoded-data-and-checksum) (lent data-and-checksum)) :: ensure all were in CHARSET - ~ - ?. (verify-checksum hrp data-and-checksum) - ~ - =/ checksum-pos (sub (lent data-and-checksum) 6) - `[hrp (scag checksum-pos data-and-checksum) (slag checksum-pos data-and-checksum)] -:: +from-address: BIP173 bech32 address encoding to hex -:: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki -:: expects to drop a leading 5-bit 0 (the witness version) -:: -++ from-address - |= body=cord - ^- hexb - ~| "Invalid bech32 address" - =/ d=(unit raw-decoded) (decode-raw body) - ?> ?=(^ d) - =/ bs=bits (from-atoms:bit 5 data.u.d) - =/ byt-len=@ (div (sub wid.bs 5) 8) - ?> =(5^0b0 (take:bit 5 bs)) - ?> ?| =(20 byt-len) - =(32 byt-len) - == - [byt-len `@ux`dat:(take:bit (mul 8 byt-len) (drop:bit 5 bs))] -:: pubkey is the 33 byte ECC compressed public key -:: -++ encode-pubkey - |= [=network pubkey=byts] - ^- (unit cord) - ?. =(33 wid.pubkey) - ~|('pubkey must be a 33 byte ECC compressed public key' !!) - =/ prefix (~(get by prefixes) network) - ?~ prefix ~ - :- ~ - %+ encode-raw u.prefix - [0v0 (to-atoms:bit 5 [160 `@ub`dat:(hash-160 pubkey)])] --- diff --git a/pkg/arvo/lib/bip/b173.hoon b/pkg/arvo/lib/bip/b173.hoon new file mode 120000 index 000000000..2999150e2 --- /dev/null +++ b/pkg/arvo/lib/bip/b173.hoon @@ -0,0 +1 @@ +../../../base-dev/lib/bip/b173.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/bip/b174.hoon b/pkg/arvo/lib/bip/b174.hoon deleted file mode 100644 index 3bae71d92..000000000 --- a/pkg/arvo/lib/bip/b174.hoon +++ /dev/null @@ -1,182 +0,0 @@ -:: BIP174: PSBTs -:: https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki -:: -/- sur=bitcoin -/+ bcu=bitcoin-utils -=, sur -=, bcu -|% -++ en - |% - ++ globals - |= rawtx=hexb - ^- map:psbt - :~ [[1 0x0] rawtx] - == - :: - ++ input - |= [only-witness=? i=in:psbt] - ^- map:psbt - %+ weld - ?: only-witness ~ - ~[[1^0x0 rawtx.i]] - :~ (witness-tx i) - (hdkey %input hdkey.i) - == - :: - ++ output - |= =out:psbt - ^- map:psbt - ?~ hk.out ~ - :~ (hdkey %output u.hk.out) - == - :: - ++ witness-tx - |= i=in:psbt - ^- keyval:psbt - :- [1 0x1] - %- cat:byt - :~ (flip:byt 8^value.utxo.i) - 1^0x16 - 2^0x14 - (hash-160 pubkey.hdkey.i) - == - :: - ++ hdkey - |= [=target:psbt h=^hdkey] - ^- keyval:psbt - =/ typ=@ux - ?- target - %input 0x6 - %output 0x2 - == - =/ coin-type=hexb - ?- network.h - %main - 1^0x0 - %testnet - 1^0x1 - == - :- (cat:byt ~[1^typ pubkey.h]) - %- cat:byt - :~ fprint.h - 1^`@ux`bipt.h 3^0x80 - coin-type 3^0x80 - 4^0x80 - 1^`@ux`chyg.h 3^0x0 - (flip:byt 4^idx.h) - == - :: - ++ keyval-byts - |= kv=keyval:psbt - ^- hexb - %- cat:byt - :~ 1^wid.key.kv - key.kv - 1^wid.val.kv - val.kv - == - :: - ++ map-byts - |= m=map:psbt - ^- (unit hexb) - ?~ m ~ - :- ~ - %- cat:byt - (turn m keyval-byts) - -- - ++ base64 - |= b=hexb - ^- base64:psbt - %- en:base64:mimes:html - (flip:byt b) -:: +encode: make base64 cord of PSBT -:: - only-witness: don't include non-witness UTXO -:: -++ encode - |= $: only-witness=? - rawtx=hexb - txid=hexb - inputs=(list in:psbt) - outputs=(list out:psbt) - == - ^- base64:psbt - =/ sep=(unit hexb) `1^0x0 - =/ final=(list (unit hexb)) - %+ join sep - %+ turn - %- zing - :~ ~[(globals:en rawtx)] - (turn inputs (cury input:en only-witness)) - (turn outputs output:en) - == - map-byts:en - %- base64:en - ^- byts - %- cat:byt - %+ weld ~[[5 0x70.7362.74ff]] - (murn (snoc final sep) same) -:: -++ parse - |= psbt-base64=cord - ^- (list map:psbt) - =/ todo=hexb - (drop:byt 5 (to-byts psbt-base64)) - =| acc=(list map:psbt) - =| m=map:psbt - |- - ?: =(wid.todo 0) - (snoc acc m) - :: 0x0: map separator - :: - ?: =(1^0x0 (take:byt 1 todo)) - $(acc (snoc acc m), m *map:psbt, todo (drop:byt 1 todo)) - =^ kv todo (next-keyval todo) - $(m (snoc m kv)) -:: +get-txid: extract txid from a valid PSBT -:: -++ get-txid - |= psbt-base64=cord - ^- hexb - =/ tx=hexb - %- raw-tx - %+ drop:byt 5 - (to-byts psbt-base64) - %- flip:byt - (dsha256 tx) -:: +raw-tx: extract hex transaction -:: looks for key 0x0 in global map -:: crashes if tx not in hex -:: -++ raw-tx - |= b=hexb - ^- hexb - |- - ?: =(wid.b 0) !! - ?: =(1^0x0 (take:byt 1 b)) !! - =/ nk (next-keyval b) - ?: =(0x0 dat.key.kv.nk) - val.kv.nk - $(b rest.nk) -:: +next-keyval: returns next key-val in a PSBT map -:: input first byte must be a map key length -:: -++ next-keyval - |= b=hexb - ^- [kv=keyval:psbt rest=hexb] - =/ klen dat:(take:byt 1 b) - =/ k (take:byt klen (drop:byt 1 b)) - =/ vlen dat:(take:byt 1 (drop:byt (add 1 klen) b)) - =/ v (take:byt vlen (drop:byt (add 2 klen) b)) - ?> ?&((gth wid.k 0) (gth wid.v 0)) - :- [k v] - (drop:byt ;:(add 2 klen vlen) b) -:: -++ to-byts - |= psbt-base64=cord - ^- hexb - ~| "Invalid PSBT" - =+ p=(de:base64:mimes:html psbt-base64) - ?~ p !! - (flip:byt u.p) --- diff --git a/pkg/arvo/lib/bip/b174.hoon b/pkg/arvo/lib/bip/b174.hoon new file mode 120000 index 000000000..bc6cae53b --- /dev/null +++ b/pkg/arvo/lib/bip/b174.hoon @@ -0,0 +1 @@ +../../../base-dev/lib/bip/b174.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/bip32.hoon b/pkg/arvo/lib/bip32.hoon deleted file mode 100644 index 02187ad87..000000000 --- a/pkg/arvo/lib/bip32.hoon +++ /dev/null @@ -1,243 +0,0 @@ -:: bip32 implementation in hoon -:: -:: to use, call one of the core initialization arms. -:: using the produced core, derive as needed and take out the data you want. -:: -::NOTE tested to be correct against -:: https://en.bitcoin.it/wiki/BIP_0032_TestVectors -:: -=, hmac:crypto -=, secp:crypto -=+ ecc=secp256k1 -:: -:: prv: private key -:: pub: public key -:: cad: chain code -:: dep: depth in chain -:: ind: index at depth -:: pif: parent fingerprint (4 bytes) -|_ [prv=@ pub=point.ecc cad=@ dep=@ud ind=@ud pif=@] -:: -+$ keyc [key=@ cai=@] :: prv/pub key + chain code -:: -:: elliptic curve operations and values -:: -++ point priv-to-pub.ecc -:: -++ ser-p compress-point.ecc -:: -++ n n:t.ecc -:: -:: core initialization -:: -++ from-seed - |= byts - ^+ +> - =+ der=(hmac-sha512l [12 'dees nioctiB'] [wid dat]) - =+ pri=(cut 3 [32 32] der) - +>.$(prv pri, pub (point pri), cad (cut 3 [0 32] der)) -:: -++ from-private - |= keyc - +>(prv key, pub (point key), cad cai) -:: -++ from-public - |= keyc - +>(pub (decompress-point.ecc key), cad cai) -:: -++ from-public-point - |= [pon=point.ecc cai=@] - +>(pub pon, cad cai) -:: -++ from-extended - |= t=tape - =+ x=(de-base58check 4 t) - => |% - ++ take - |= b=@ud - ^- [v=@ x=@] - :- (end [3 b] x) - (rsh [3 b] x) - -- - =^ k x (take 33) - =^ c x (take 32) - =^ i x (take 4) - =^ p x (take 4) - =^ d x (take 1) - ?> =(0 x) :: sanity check - %. [d i p] - =< set-metadata - =+ v=(swag [1 3] t) - ?: =("prv" v) (from-private k c) - ?: =("pub" v) (from-public k c) - !! -:: -++ set-metadata - |= [d=@ud i=@ud p=@] - +>(dep d, ind i, pif p) -:: -:: derivation -:: -++ derivation-path - ;~ pfix - ;~(pose (jest 'm/') (easy ~)) - %+ most fas - ;~ pose - %+ cook - |=(i=@ (add i (bex 31))) - ;~(sfix dem soq) - :: - dem - == == -:: -++ derive-path - |= t=tape - %- derive-sequence - (scan t derivation-path) -:: -++ derive-sequence - |= j=(list @u) - ?~ j +> - =. +> (derive i.j) - $(j t.j) -:: -++ derive - ?: =(0 prv) - derive-public - derive-private -:: -++ derive-private - |= i=@u - ^+ +> - :: we must have a private key to derive the next one - ?: =(0 prv) - ~| %know-no-private-key - !! - :: derive child at i - =/ [left=@ right=@] - =- [(cut 3 [32 32] -) (cut 3 [0 32] -)] - %+ hmac-sha512l [32 cad] - :- 37 - ?: (gte i (bex 31)) - :: hardened child - (can 3 ~[4^i 32^prv 1^0]) - :: normal child - (can 3 ~[4^i 33^(ser-p (point prv))]) - =+ key=(mod (add left prv) n) - :: rare exception, invalid key, go to the next one - ?: |(=(0 key) (gte left n)) $(i +(i)) - %_ +>.$ - prv key - pub (point key) - cad right - dep +(dep) - ind i - pif fingerprint - == -:: -++ derive-public - |= i=@u - ^+ +> - :: public keys can't be hardened - ?: (gte i (bex 31)) - ~| %cant-derive-hardened-public-key - !! - :: derive child at i - =/ [left=@ right=@] - =- [(cut 3 [32 32] -) (cut 3 [0 32] -)] - %+ hmac-sha512l [32 cad] - 37^(can 3 ~[4^i 33^(ser-p pub)]) - :: rare exception, invalid key, go to the next one - ?: (gte left n) $(i +(i)) ::TODO or child key is "point at infinity" - %_ +>.$ - pub (add-points.ecc (point left) pub) - cad right - dep +(dep) - ind i - pif fingerprint - == -:: -:: rendering -:: -++ private-key ?.(=(0 prv) prv ~|(%know-no-private-key !!)) -++ public-key (ser-p pub) -++ chain-code cad -++ private-chain [private-key cad] -++ public-chain [public-key cad] -:: -++ identity (hash160 public-key) -++ fingerprint (cut 3 [16 4] identity) -:: -++ address - |= network=?(%main %regtest %testnet) - ^- @uc - :: removes checksum - :: - %+ rsh [3 4] - %+ en-base58check - [4 (version-bytes network %pub %.n)] - [20 identity] -:: -++ prv-extended - |= network=?(%main %regtest %testnet) - %+ en-b58c-bip32 (version-bytes network %prv %.y) - (build-extended private-key) -:: -++ pub-extended - |= network=?(%main %regtest %testnet) - %+ en-b58c-bip32 (version-bytes network %pub %.y) - (build-extended public-key) -:: -++ build-extended - |= key=@ - %+ can 3 - :~ 33^key - 32^cad - 4^ind - 4^pif - 1^dep - == -:: -++ en-b58c-bip32 - |= [v=@ k=@] - %- en-base58:mimes:html - (en-base58check [4 v] [74 k]) -:: -:: base58check -:: -++ en-base58check - :: v: version bytes - :: d: data - |= [v=byts d=byts] - =+ p=[(add wid.v wid.d) (can 3 ~[d v])] - =- (can 3 ~[4^- p]) - %+ rsh [3 28] - (sha-256l:sha 32 (sha-256l:sha p)) -:: -++ de-base58check - :: vw: amount of version bytes - |= [vw=@u t=tape] - =+ x=(de-base58:mimes:html t) - =+ hash=(sha-256l:sha 32 (sha-256:sha (rsh [3 4] x))) - ?> =((end [3 4] x) (rsh [3 28] hash)) - (cut 3 [vw (sub (met 3 x) (add 4 vw))] x) -:: -++ hash160 - |= d=@ - (ripemd-160:ripemd:crypto 32 (sha-256:sha d)) -:: -++ version-bytes - |= [network=?(%main %regtest %testnet) type=?(%pub %prv) bip32=?] - ^- @ux - |^ - ?- type - %pub ?:(bip32 xpub-key pay-to-pubkey) - %prv ?:(bip32 xprv-key private-key) - == - :: - ++ pay-to-pubkey ?:(=(network %main) 0x0 0x6f) - ++ private-key ?:(=(network %main) 0x80 0xef) - ++ xpub-key ?:(=(network %main) 0x488.b21e 0x435.87cf) - ++ xprv-key ?:(=(network %main) 0x488.ade4 0x435.8394) - -- --- diff --git a/pkg/arvo/lib/bip32.hoon b/pkg/arvo/lib/bip32.hoon new file mode 120000 index 000000000..1cbb7f892 --- /dev/null +++ b/pkg/arvo/lib/bip32.hoon @@ -0,0 +1 @@ +../../base-dev/lib/bip32.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/bip39.hoon b/pkg/arvo/lib/bip39.hoon deleted file mode 100644 index cc33fe479..000000000 --- a/pkg/arvo/lib/bip39.hoon +++ /dev/null @@ -1,46 +0,0 @@ -:: bip39 implementation in hoon -:: -/+ bip39-english -:: -|% -++ from-entropy - |= byts - ^- tape - =. wid (mul wid 8) - ~| [%unsupported-entropy-bit-length wid] - ?> &((gte wid 128) (lte wid 256)) - :: - =+ cs=(div wid 32) - =/ check=@ - %+ rsh [0 (sub 256 cs)] - (sha-256l:sha (div wid 8) dat) - =/ bits=byts - :- (add wid cs) - %+ can 0 - :~ cs^check - wid^dat - == - :: - =/ pieces - |- ^- (list @) - :- (end [0 11] dat.bits) - ?: (lte wid.bits 11) ~ - $(bits [(sub wid.bits 11) (rsh [0 11] dat.bits)]) - :: - =/ words=(list tape) - %+ turn pieces - |= ind=@ud - (snag ind `(list tape)`bip39-english) - :: - %+ roll (flop words) - |= [nex=tape all=tape] - ?~ all nex - :(weld all " " nex) -:: -::NOTE always produces a 512-bit result -++ to-seed - |= [mnem=tape pass=tape] - ^- @ - %- hmac-sha512t:pbkdf:crypto - [(crip mnem) (crip (weld "mnemonic" pass)) 2.048 64] --- diff --git a/pkg/arvo/lib/bip39.hoon b/pkg/arvo/lib/bip39.hoon new file mode 120000 index 000000000..36c4b7e83 --- /dev/null +++ b/pkg/arvo/lib/bip39.hoon @@ -0,0 +1 @@ +../../base-dev/lib/bip39.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/bip39/english.hoon b/pkg/arvo/lib/bip39/english.hoon deleted file mode 100644 index 60de89317..000000000 --- a/pkg/arvo/lib/bip39/english.hoon +++ /dev/null @@ -1,2052 +0,0 @@ -:: english wordlist for use in bip39 -^- (list tape) -:~ - "abandon" - "ability" - "able" - "about" - "above" - "absent" - "absorb" - "abstract" - "absurd" - "abuse" - "access" - "accident" - "account" - "accuse" - "achieve" - "acid" - "acoustic" - "acquire" - "across" - "act" - "action" - "actor" - "actress" - "actual" - "adapt" - "add" - "addict" - "address" - "adjust" - "admit" - "adult" - "advance" - "advice" - "aerobic" - "affair" - "afford" - "afraid" - "again" - "age" - "agent" - "agree" - "ahead" - "aim" - "air" - "airport" - "aisle" - "alarm" - "album" - "alcohol" - "alert" - "alien" - "all" - "alley" - "allow" - "almost" - "alone" - "alpha" - "already" - "also" - "alter" - "always" - "amateur" - "amazing" - "among" - "amount" - "amused" - "analyst" - "anchor" - "ancient" - "anger" - "angle" - "angry" - "animal" - "ankle" - "announce" - "annual" - "another" - "answer" - "antenna" - "antique" - "anxiety" - "any" - "apart" - "apology" - "appear" - "apple" - "approve" - "april" - "arch" - "arctic" - "area" - "arena" - "argue" - "arm" - "armed" - "armor" - "army" - "around" - "arrange" - "arrest" - "arrive" - "arrow" - "art" - "artefact" - "artist" - "artwork" - "ask" - "aspect" - "assault" - "asset" - "assist" - "assume" - "asthma" - "athlete" - "atom" - "attack" - "attend" - "attitude" - "attract" - "auction" - "audit" - "august" - "aunt" - "author" - "auto" - "autumn" - "average" - "avocado" - "avoid" - "awake" - "aware" - "away" - "awesome" - "awful" - "awkward" - "axis" - "baby" - "bachelor" - "bacon" - "badge" - "bag" - "balance" - "balcony" - "ball" - "bamboo" - "banana" - "banner" - "bar" - "barely" - "bargain" - "barrel" - "base" - "basic" - "basket" - "battle" - "beach" - "bean" - "beauty" - "because" - "become" - "beef" - "before" - "begin" - "behave" - "behind" - "believe" - "below" - "belt" - "bench" - "benefit" - "best" - "betray" - "better" - "between" - "beyond" - "bicycle" - "bid" - "bike" - "bind" - "biology" - "bird" - "birth" - "bitter" - "black" - "blade" - "blame" - "blanket" - "blast" - "bleak" - "bless" - "blind" - "blood" - "blossom" - "blouse" - "blue" - "blur" - "blush" - "board" - "boat" - "body" - "boil" - "bomb" - "bone" - "bonus" - "book" - "boost" - "border" - "boring" - "borrow" - "boss" - "bottom" - "bounce" - "box" - "boy" - "bracket" - "brain" - "brand" - "brass" - "brave" - "bread" - "breeze" - "brick" - "bridge" - "brief" - "bright" - "bring" - "brisk" - "broccoli" - "broken" - "bronze" - "broom" - "brother" - "brown" - "brush" - "bubble" - "buddy" - "budget" - "buffalo" - "build" - "bulb" - "bulk" - "bullet" - "bundle" - "bunker" - "burden" - "burger" - "burst" - "bus" - "business" - "busy" - "butter" - "buyer" - "buzz" - "cabbage" - "cabin" - "cable" - "cactus" - "cage" - "cake" - "call" - "calm" - "camera" - "camp" - "can" - "canal" - "cancel" - "candy" - "cannon" - "canoe" - "canvas" - "canyon" - "capable" - "capital" - "captain" - "car" - "carbon" - "card" - "cargo" - "carpet" - "carry" - "cart" - "case" - "cash" - "casino" - "castle" - "casual" - "cat" - "catalog" - "catch" - "category" - "cattle" - "caught" - "cause" - "caution" - "cave" - "ceiling" - "celery" - "cement" - "census" - "century" - "cereal" - "certain" - "chair" - "chalk" - "champion" - "change" - "chaos" - "chapter" - "charge" - "chase" - "chat" - "cheap" - "check" - "cheese" - "chef" - "cherry" - "chest" - "chicken" - "chief" - "child" - "chimney" - "choice" - "choose" - "chronic" - "chuckle" - "chunk" - "churn" - "cigar" - "cinnamon" - "circle" - "citizen" - "city" - "civil" - "claim" - "clap" - "clarify" - "claw" - "clay" - "clean" - "clerk" - "clever" - "click" - "client" - "cliff" - "climb" - "clinic" - "clip" - "clock" - "clog" - "close" - "cloth" - "cloud" - "clown" - "club" - "clump" - "cluster" - "clutch" - "coach" - "coast" - "coconut" - "code" - "coffee" - "coil" - "coin" - "collect" - "color" - "column" - "combine" - "come" - "comfort" - "comic" - "common" - "company" - "concert" - "conduct" - "confirm" - "congress" - "connect" - "consider" - "control" - "convince" - "cook" - "cool" - "copper" - "copy" - "coral" - "core" - "corn" - "correct" - "cost" - "cotton" - "couch" - "country" - "couple" - "course" - "cousin" - "cover" - "coyote" - "crack" - "cradle" - "craft" - "cram" - "crane" - "crash" - "crater" - "crawl" - "crazy" - "cream" - "credit" - "creek" - "crew" - "cricket" - "crime" - "crisp" - "critic" - "crop" - "cross" - "crouch" - "crowd" - "crucial" - "cruel" - "cruise" - "crumble" - "crunch" - "crush" - "cry" - "crystal" - "cube" - "culture" - "cup" - "cupboard" - "curious" - "current" - "curtain" - "curve" - "cushion" - "custom" - "cute" - "cycle" - "dad" - "damage" - "damp" - "dance" - "danger" - "daring" - "dash" - "daughter" - "dawn" - "day" - "deal" - "debate" - "debris" - "decade" - "december" - "decide" - "decline" - "decorate" - "decrease" - "deer" - "defense" - "define" - "defy" - "degree" - "delay" - "deliver" - "demand" - "demise" - "denial" - "dentist" - "deny" - "depart" - "depend" - "deposit" - "depth" - "deputy" - "derive" - "describe" - "desert" - "design" - "desk" - "despair" - "destroy" - "detail" - "detect" - "develop" - "device" - "devote" - "diagram" - "dial" - "diamond" - "diary" - "dice" - "diesel" - "diet" - "differ" - "digital" - "dignity" - "dilemma" - "dinner" - "dinosaur" - "direct" - "dirt" - "disagree" - "discover" - "disease" - "dish" - "dismiss" - "disorder" - "display" - "distance" - "divert" - "divide" - "divorce" - "dizzy" - "doctor" - "document" - "dog" - "doll" - "dolphin" - "domain" - "donate" - "donkey" - "donor" - "door" - "dose" - "double" - "dove" - "draft" - "dragon" - "drama" - "drastic" - "draw" - "dream" - "dress" - "drift" - "drill" - "drink" - "drip" - "drive" - "drop" - "drum" - "dry" - "duck" - "dumb" - "dune" - "during" - "dust" - "dutch" - "duty" - "dwarf" - "dynamic" - "eager" - "eagle" - "early" - "earn" - "earth" - "easily" - "east" - "easy" - "echo" - "ecology" - "economy" - "edge" - "edit" - "educate" - "effort" - "egg" - "eight" - "either" - "elbow" - "elder" - "electric" - "elegant" - "element" - "elephant" - "elevator" - "elite" - "else" - "embark" - "embody" - "embrace" - "emerge" - "emotion" - "employ" - "empower" - "empty" - "enable" - "enact" - "end" - "endless" - "endorse" - "enemy" - "energy" - "enforce" - "engage" - "engine" - "enhance" - "enjoy" - "enlist" - "enough" - "enrich" - "enroll" - "ensure" - "enter" - "entire" - "entry" - "envelope" - "episode" - "equal" - "equip" - "era" - "erase" - "erode" - "erosion" - "error" - "erupt" - "escape" - "essay" - "essence" - "estate" - "eternal" - "ethics" - "evidence" - "evil" - "evoke" - "evolve" - "exact" - "example" - "excess" - "exchange" - "excite" - "exclude" - "excuse" - "execute" - "exercise" - "exhaust" - "exhibit" - "exile" - "exist" - "exit" - "exotic" - "expand" - "expect" - "expire" - "explain" - "expose" - "express" - "extend" - "extra" - "eye" - "eyebrow" - "fabric" - "face" - "faculty" - "fade" - "faint" - "faith" - "fall" - "false" - "fame" - "family" - "famous" - "fan" - "fancy" - "fantasy" - "farm" - "fashion" - "fat" - "fatal" - "father" - "fatigue" - "fault" - "favorite" - "feature" - "february" - "federal" - "fee" - "feed" - "feel" - "female" - "fence" - "festival" - "fetch" - "fever" - "few" - "fiber" - "fiction" - "field" - "figure" - "file" - "film" - "filter" - "final" - "find" - "fine" - "finger" - "finish" - "fire" - "firm" - "first" - "fiscal" - "fish" - "fit" - "fitness" - "fix" - "flag" - "flame" - "flash" - "flat" - "flavor" - "flee" - "flight" - "flip" - "float" - "flock" - "floor" - "flower" - "fluid" - "flush" - "fly" - "foam" - "focus" - "fog" - "foil" - "fold" - "follow" - "food" - "foot" - "force" - "forest" - "forget" - "fork" - "fortune" - "forum" - "forward" - "fossil" - "foster" - "found" - "fox" - "fragile" - "frame" - "frequent" - "fresh" - "friend" - "fringe" - "frog" - "front" - "frost" - "frown" - "frozen" - "fruit" - "fuel" - "fun" - "funny" - "furnace" - "fury" - "future" - "gadget" - "gain" - "galaxy" - "gallery" - "game" - "gap" - "garage" - "garbage" - "garden" - "garlic" - "garment" - "gas" - "gasp" - "gate" - "gather" - "gauge" - "gaze" - "general" - "genius" - "genre" - "gentle" - "genuine" - "gesture" - "ghost" - "giant" - "gift" - "giggle" - "ginger" - "giraffe" - "girl" - "give" - "glad" - "glance" - "glare" - "glass" - "glide" - "glimpse" - "globe" - "gloom" - "glory" - "glove" - "glow" - "glue" - "goat" - "goddess" - "gold" - "good" - "goose" - "gorilla" - "gospel" - "gossip" - "govern" - "gown" - "grab" - "grace" - "grain" - "grant" - "grape" - "grass" - "gravity" - "great" - "green" - "grid" - "grief" - "grit" - "grocery" - "group" - "grow" - "grunt" - "guard" - "guess" - "guide" - "guilt" - "guitar" - "gun" - "gym" - "habit" - "hair" - "half" - "hammer" - "hamster" - "hand" - "happy" - "harbor" - "hard" - "harsh" - "harvest" - "hat" - "have" - "hawk" - "hazard" - "head" - "health" - "heart" - "heavy" - "hedgehog" - "height" - "hello" - "helmet" - "help" - "hen" - "hero" - "hidden" - "high" - "hill" - "hint" - "hip" - "hire" - "history" - "hobby" - "hockey" - "hold" - "hole" - "holiday" - "hollow" - "home" - "honey" - "hood" - "hope" - "horn" - "horror" - "horse" - "hospital" - "host" - "hotel" - "hour" - "hover" - "hub" - "huge" - "human" - "humble" - "humor" - "hundred" - "hungry" - "hunt" - "hurdle" - "hurry" - "hurt" - "husband" - "hybrid" - "ice" - "icon" - "idea" - "identify" - "idle" - "ignore" - "ill" - "illegal" - "illness" - "image" - "imitate" - "immense" - "immune" - "impact" - "impose" - "improve" - "impulse" - "inch" - "include" - "income" - "increase" - "index" - "indicate" - "indoor" - "industry" - "infant" - "inflict" - "inform" - "inhale" - "inherit" - "initial" - "inject" - "injury" - "inmate" - "inner" - "innocent" - "input" - "inquiry" - "insane" - "insect" - "inside" - "inspire" - "install" - "intact" - "interest" - "into" - "invest" - "invite" - "involve" - "iron" - "island" - "isolate" - "issue" - "item" - "ivory" - "jacket" - "jaguar" - "jar" - "jazz" - "jealous" - "jeans" - "jelly" - "jewel" - "job" - "join" - "joke" - "journey" - "joy" - "judge" - "juice" - "jump" - "jungle" - "junior" - "junk" - "just" - "kangaroo" - "keen" - "keep" - "ketchup" - "key" - "kick" - "kid" - "kidney" - "kind" - "kingdom" - "kiss" - "kit" - "kitchen" - "kite" - "kitten" - "kiwi" - "knee" - "knife" - "knock" - "know" - "lab" - "label" - "labor" - "ladder" - "lady" - "lake" - "lamp" - "language" - "laptop" - "large" - "later" - "latin" - "laugh" - "laundry" - "lava" - "law" - "lawn" - "lawsuit" - "layer" - "lazy" - "leader" - "leaf" - "learn" - "leave" - "lecture" - "left" - "leg" - "legal" - "legend" - "leisure" - "lemon" - "lend" - "length" - "lens" - "leopard" - "lesson" - "letter" - "level" - "liar" - "liberty" - "library" - "license" - "life" - "lift" - "light" - "like" - "limb" - "limit" - "link" - "lion" - "liquid" - "list" - "little" - "live" - "lizard" - "load" - "loan" - "lobster" - "local" - "lock" - "logic" - "lonely" - "long" - "loop" - "lottery" - "loud" - "lounge" - "love" - "loyal" - "lucky" - "luggage" - "lumber" - "lunar" - "lunch" - "luxury" - "lyrics" - "machine" - "mad" - "magic" - "magnet" - "maid" - "mail" - "main" - "major" - "make" - "mammal" - "man" - "manage" - "mandate" - "mango" - "mansion" - "manual" - "maple" - "marble" - "march" - "margin" - "marine" - "market" - "marriage" - "mask" - "mass" - "master" - "match" - "material" - "math" - "matrix" - "matter" - "maximum" - "maze" - "meadow" - "mean" - "measure" - "meat" - "mechanic" - "medal" - "media" - "melody" - "melt" - "member" - "memory" - "mention" - "menu" - "mercy" - "merge" - "merit" - "merry" - "mesh" - "message" - "metal" - "method" - "middle" - "midnight" - "milk" - "million" - "mimic" - "mind" - "minimum" - "minor" - "minute" - "miracle" - "mirror" - "misery" - "miss" - "mistake" - "mix" - "mixed" - "mixture" - "mobile" - "model" - "modify" - "mom" - "moment" - "monitor" - "monkey" - "monster" - "month" - "moon" - "moral" - "more" - "morning" - "mosquito" - "mother" - "motion" - "motor" - "mountain" - "mouse" - "move" - "movie" - "much" - "muffin" - "mule" - "multiply" - "muscle" - "museum" - "mushroom" - "music" - "must" - "mutual" - "myself" - "mystery" - "myth" - "naive" - "name" - "napkin" - "narrow" - "nasty" - "nation" - "nature" - "near" - "neck" - "need" - "negative" - "neglect" - "neither" - "nephew" - "nerve" - "nest" - "net" - "network" - "neutral" - "never" - "news" - "next" - "nice" - "night" - "noble" - "noise" - "nominee" - "noodle" - "normal" - "north" - "nose" - "notable" - "note" - "nothing" - "notice" - "novel" - "now" - "nuclear" - "number" - "nurse" - "nut" - "oak" - "obey" - "object" - "oblige" - "obscure" - "observe" - "obtain" - "obvious" - "occur" - "ocean" - "october" - "odor" - "off" - "offer" - "office" - "often" - "oil" - "okay" - "old" - "olive" - "olympic" - "omit" - "once" - "one" - "onion" - "online" - "only" - "open" - "opera" - "opinion" - "oppose" - "option" - "orange" - "orbit" - "orchard" - "order" - "ordinary" - "organ" - "orient" - "original" - "orphan" - "ostrich" - "other" - "outdoor" - "outer" - "output" - "outside" - "oval" - "oven" - "over" - "own" - "owner" - "oxygen" - "oyster" - "ozone" - "pact" - "paddle" - "page" - "pair" - "palace" - "palm" - "panda" - "panel" - "panic" - "panther" - "paper" - "parade" - "parent" - "park" - "parrot" - "party" - "pass" - "patch" - "path" - "patient" - "patrol" - "pattern" - "pause" - "pave" - "payment" - "peace" - "peanut" - "pear" - "peasant" - "pelican" - "pen" - "penalty" - "pencil" - "people" - "pepper" - "perfect" - "permit" - "person" - "pet" - "phone" - "photo" - "phrase" - "physical" - "piano" - "picnic" - "picture" - "piece" - "pig" - "pigeon" - "pill" - "pilot" - "pink" - "pioneer" - "pipe" - "pistol" - "pitch" - "pizza" - "place" - "planet" - "plastic" - "plate" - "play" - "please" - "pledge" - "pluck" - "plug" - "plunge" - "poem" - "poet" - "point" - "polar" - "pole" - "police" - "pond" - "pony" - "pool" - "popular" - "portion" - "position" - "possible" - "post" - "potato" - "pottery" - "poverty" - "powder" - "power" - "practice" - "praise" - "predict" - "prefer" - "prepare" - "present" - "pretty" - "prevent" - "price" - "pride" - "primary" - "print" - "priority" - "prison" - "private" - "prize" - "problem" - "process" - "produce" - "profit" - "program" - "project" - "promote" - "proof" - "property" - "prosper" - "protect" - "proud" - "provide" - "public" - "pudding" - "pull" - "pulp" - "pulse" - "pumpkin" - "punch" - "pupil" - "puppy" - "purchase" - "purity" - "purpose" - "purse" - "push" - "put" - "puzzle" - "pyramid" - "quality" - "quantum" - "quarter" - "question" - "quick" - "quit" - "quiz" - "quote" - "rabbit" - "raccoon" - "race" - "rack" - "radar" - "radio" - "rail" - "rain" - "raise" - "rally" - "ramp" - "ranch" - "random" - "range" - "rapid" - "rare" - "rate" - "rather" - "raven" - "raw" - "razor" - "ready" - "real" - "reason" - "rebel" - "rebuild" - "recall" - "receive" - "recipe" - "record" - "recycle" - "reduce" - "reflect" - "reform" - "refuse" - "region" - "regret" - "regular" - "reject" - "relax" - "release" - "relief" - "rely" - "remain" - "remember" - "remind" - "remove" - "render" - "renew" - "rent" - "reopen" - "repair" - "repeat" - "replace" - "report" - "require" - "rescue" - "resemble" - "resist" - "resource" - "response" - "result" - "retire" - "retreat" - "return" - "reunion" - "reveal" - "review" - "reward" - "rhythm" - "rib" - "ribbon" - "rice" - "rich" - "ride" - "ridge" - "rifle" - "right" - "rigid" - "ring" - "riot" - "ripple" - "risk" - "ritual" - "rival" - "river" - "road" - "roast" - "robot" - "robust" - "rocket" - "romance" - "roof" - "rookie" - "room" - "rose" - "rotate" - "rough" - "round" - "route" - "royal" - "rubber" - "rude" - "rug" - "rule" - "run" - "runway" - "rural" - "sad" - "saddle" - "sadness" - "safe" - "sail" - "salad" - "salmon" - "salon" - "salt" - "salute" - "same" - "sample" - "sand" - "satisfy" - "satoshi" - "sauce" - "sausage" - "save" - "say" - "scale" - "scan" - "scare" - "scatter" - "scene" - "scheme" - "school" - "science" - "scissors" - "scorpion" - "scout" - "scrap" - "screen" - "script" - "scrub" - "sea" - "search" - "season" - "seat" - "second" - "secret" - "section" - "security" - "seed" - "seek" - "segment" - "select" - "sell" - "seminar" - "senior" - "sense" - "sentence" - "series" - "service" - "session" - "settle" - "setup" - "seven" - "shadow" - "shaft" - "shallow" - "share" - "shed" - "shell" - "sheriff" - "shield" - "shift" - "shine" - "ship" - "shiver" - "shock" - "shoe" - "shoot" - "shop" - "short" - "shoulder" - "shove" - "shrimp" - "shrug" - "shuffle" - "shy" - "sibling" - "sick" - "side" - "siege" - "sight" - "sign" - "silent" - "silk" - "silly" - "silver" - "similar" - "simple" - "since" - "sing" - "siren" - "sister" - "situate" - "six" - "size" - "skate" - "sketch" - "ski" - "skill" - "skin" - "skirt" - "skull" - "slab" - "slam" - "sleep" - "slender" - "slice" - "slide" - "slight" - "slim" - "slogan" - "slot" - "slow" - "slush" - "small" - "smart" - "smile" - "smoke" - "smooth" - "snack" - "snake" - "snap" - "sniff" - "snow" - "soap" - "soccer" - "social" - "sock" - "soda" - "soft" - "solar" - "soldier" - "solid" - "solution" - "solve" - "someone" - "song" - "soon" - "sorry" - "sort" - "soul" - "sound" - "soup" - "source" - "south" - "space" - "spare" - "spatial" - "spawn" - "speak" - "special" - "speed" - "spell" - "spend" - "sphere" - "spice" - "spider" - "spike" - "spin" - "spirit" - "split" - "spoil" - "sponsor" - "spoon" - "sport" - "spot" - "spray" - "spread" - "spring" - "spy" - "square" - "squeeze" - "squirrel" - "stable" - "stadium" - "staff" - "stage" - "stairs" - "stamp" - "stand" - "start" - "state" - "stay" - "steak" - "steel" - "stem" - "step" - "stereo" - "stick" - "still" - "sting" - "stock" - "stomach" - "stone" - "stool" - "story" - "stove" - "strategy" - "street" - "strike" - "strong" - "struggle" - "student" - "stuff" - "stumble" - "style" - "subject" - "submit" - "subway" - "success" - "such" - "sudden" - "suffer" - "sugar" - "suggest" - "suit" - "summer" - "sun" - "sunny" - "sunset" - "super" - "supply" - "supreme" - "sure" - "surface" - "surge" - "surprise" - "surround" - "survey" - "suspect" - "sustain" - "swallow" - "swamp" - "swap" - "swarm" - "swear" - "sweet" - "swift" - "swim" - "swing" - "switch" - "sword" - "symbol" - "symptom" - "syrup" - "system" - "table" - "tackle" - "tag" - "tail" - "talent" - "talk" - "tank" - "tape" - "target" - "task" - "taste" - "tattoo" - "taxi" - "teach" - "team" - "tell" - "ten" - "tenant" - "tennis" - "tent" - "term" - "test" - "text" - "thank" - "that" - "theme" - "then" - "theory" - "there" - "they" - "thing" - "this" - "thought" - "three" - "thrive" - "throw" - "thumb" - "thunder" - "ticket" - "tide" - "tiger" - "tilt" - "timber" - "time" - "tiny" - "tip" - "tired" - "tissue" - "title" - "toast" - "tobacco" - "today" - "toddler" - "toe" - "together" - "toilet" - "token" - "tomato" - "tomorrow" - "tone" - "tongue" - "tonight" - "tool" - "tooth" - "top" - "topic" - "topple" - "torch" - "tornado" - "tortoise" - "toss" - "total" - "tourist" - "toward" - "tower" - "town" - "toy" - "track" - "trade" - "traffic" - "tragic" - "train" - "transfer" - "trap" - "trash" - "travel" - "tray" - "treat" - "tree" - "trend" - "trial" - "tribe" - "trick" - "trigger" - "trim" - "trip" - "trophy" - "trouble" - "truck" - "true" - "truly" - "trumpet" - "trust" - "truth" - "try" - "tube" - "tuition" - "tumble" - "tuna" - "tunnel" - "turkey" - "turn" - "turtle" - "twelve" - "twenty" - "twice" - "twin" - "twist" - "two" - "type" - "typical" - "ugly" - "umbrella" - "unable" - "unaware" - "uncle" - "uncover" - "under" - "undo" - "unfair" - "unfold" - "unhappy" - "uniform" - "unique" - "unit" - "universe" - "unknown" - "unlock" - "until" - "unusual" - "unveil" - "update" - "upgrade" - "uphold" - "upon" - "upper" - "upset" - "urban" - "urge" - "usage" - "use" - "used" - "useful" - "useless" - "usual" - "utility" - "vacant" - "vacuum" - "vague" - "valid" - "valley" - "valve" - "van" - "vanish" - "vapor" - "various" - "vast" - "vault" - "vehicle" - "velvet" - "vendor" - "venture" - "venue" - "verb" - "verify" - "version" - "very" - "vessel" - "veteran" - "viable" - "vibrant" - "vicious" - "victory" - "video" - "view" - "village" - "vintage" - "violin" - "virtual" - "virus" - "visa" - "visit" - "visual" - "vital" - "vivid" - "vocal" - "voice" - "void" - "volcano" - "volume" - "vote" - "voyage" - "wage" - "wagon" - "wait" - "walk" - "wall" - "walnut" - "want" - "warfare" - "warm" - "warrior" - "wash" - "wasp" - "waste" - "water" - "wave" - "way" - "wealth" - "weapon" - "wear" - "weasel" - "weather" - "web" - "wedding" - "weekend" - "weird" - "welcome" - "west" - "wet" - "whale" - "what" - "wheat" - "wheel" - "when" - "where" - "whip" - "whisper" - "wide" - "width" - "wife" - "wild" - "will" - "win" - "window" - "wine" - "wing" - "wink" - "winner" - "winter" - "wire" - "wisdom" - "wise" - "wish" - "witness" - "wolf" - "woman" - "wonder" - "wood" - "wool" - "word" - "work" - "world" - "worry" - "worth" - "wrap" - "wreck" - "wrestle" - "wrist" - "write" - "wrong" - "yard" - "year" - "yellow" - "you" - "young" - "youth" - "zebra" - "zero" - "zone" - "zoo" -== diff --git a/pkg/arvo/lib/bip39/english.hoon b/pkg/arvo/lib/bip39/english.hoon new file mode 120000 index 000000000..f1ea0fe31 --- /dev/null +++ b/pkg/arvo/lib/bip39/english.hoon @@ -0,0 +1 @@ +../../../base-dev/lib/bip39/english.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/dbug.hoon b/pkg/arvo/lib/dbug.hoon deleted file mode 100644 index ce98619e8..000000000 --- a/pkg/arvo/lib/dbug.hoon +++ /dev/null @@ -1,155 +0,0 @@ -:: dbug: agent wrapper for generic debugging tools -:: -:: usage: %-(agent:dbug your-agent) -:: -|% -+$ poke - $% [%bowl ~] - [%state grab=cord] - [%incoming =about] - [%outgoing =about] - == -:: -+$ about - $@ ~ - $% [%ship =ship] - [%path =path] - [%wire =wire] - [%term =term] - == -:: -++ agent - |= =agent:gall - ^- agent:gall - !. - |_ =bowl:gall - +* this . - ag ~(. agent bowl) - :: - ++ on-poke - |= [=mark =vase] - ^- (quip card:agent:gall agent:gall) - ?. ?=(%dbug mark) - =^ cards agent (on-poke:ag mark vase) - [cards this] - =/ dbug - !<(poke vase) - =; =tang - ((%*(. slog pri 1) tang) [~ this]) - ?- -.dbug - %bowl [(sell !>(bowl))]~ - :: - %state - =? grab.dbug =('' grab.dbug) '-' - =; product=^vase - [(sell product)]~ - =/ state=^vase - :: if the underlying app has implemented a /dbug/state scry endpoint, - :: use that vase in place of +on-save's. - :: - =/ result=(each ^vase tang) - (mule |.(q:(need (need (on-peek:ag /x/dbug/state))))) - ?:(?=(%& -.result) p.result on-save:ag) - %+ slap - (slop state !>([bowl=bowl ..zuse])) - (ream grab.dbug) - :: - %incoming - =; =tang - ?^ tang tang - [%leaf "no matching subscriptions"]~ - %+ murn - %+ sort ~(tap by sup.bowl) - |= [[* a=[=ship =path]] [* b=[=ship =path]]] - (aor [path ship]:a [path ship]:b) - |= [=duct [=ship =path]] - ^- (unit tank) - =; relevant=? - ?. relevant ~ - `>[path=path from=ship duct=duct]< - ?: ?=(~ about.dbug) & - ?- -.about.dbug - %ship =(ship ship.about.dbug) - %path ?=(^ (find path.about.dbug path)) - %wire %+ lien duct - |=(=wire ?=(^ (find wire.about.dbug wire))) - %term !! - == - :: - %outgoing - =; =tang - ?^ tang tang - [%leaf "no matching subscriptions"]~ - %+ murn - %+ sort ~(tap by wex.bowl) - |= [[[a=wire *] *] [[b=wire *] *]] - (aor a b) - |= [[=wire =ship =term] [acked=? =path]] - ^- (unit tank) - =; relevant=? - ?. relevant ~ - `>[wire=wire agnt=[ship term] path=path ackd=acked]< - ?: ?=(~ about.dbug) & - ?- -.about.dbug - %ship =(ship ship.about.dbug) - %path ?=(^ (find path.about.dbug path)) - %wire ?=(^ (find wire.about.dbug wire)) - %term =(term term.about.dbug) - == - == - :: - ++ on-peek - |= =path - ^- (unit (unit cage)) - ?. ?=([@ %dbug *] path) - (on-peek:ag path) - ?+ path [~ ~] - [%u %dbug ~] ``noun+!>(&) - [%x %dbug %state ~] ``noun+!>(on-save:ag) - [%x %dbug %subscriptions ~] ``noun+!>([wex sup]:bowl) - == - :: - ++ on-init - ^- (quip card:agent:gall agent:gall) - =^ cards agent on-init:ag - [cards this] - :: - ++ on-save on-save:ag - :: - ++ on-load - |= old-state=vase - ^- (quip card:agent:gall agent:gall) - =^ cards agent (on-load:ag old-state) - [cards this] - :: - ++ on-watch - |= =path - ^- (quip card:agent:gall agent:gall) - =^ cards agent (on-watch:ag path) - [cards this] - :: - ++ on-leave - |= =path - ^- (quip card:agent:gall agent:gall) - =^ cards agent (on-leave:ag path) - [cards this] - :: - ++ on-agent - |= [=wire =sign:agent:gall] - ^- (quip card:agent:gall agent:gall) - =^ cards agent (on-agent:ag wire sign) - [cards this] - :: - ++ on-arvo - |= [=wire =sign-arvo] - ^- (quip card:agent:gall agent:gall) - =^ cards agent (on-arvo:ag wire sign-arvo) - [cards this] - :: - ++ on-fail - |= [=term =tang] - ^- (quip card:agent:gall agent:gall) - =^ cards agent (on-fail:ag term tang) - [cards this] - -- --- diff --git a/pkg/arvo/lib/dbug.hoon b/pkg/arvo/lib/dbug.hoon new file mode 120000 index 000000000..04f6855f7 --- /dev/null +++ b/pkg/arvo/lib/dbug.hoon @@ -0,0 +1 @@ +../../base-dev/lib/dbug.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/default-agent.hoon b/pkg/arvo/lib/default-agent.hoon deleted file mode 100644 index 319bf9524..000000000 --- a/pkg/arvo/lib/default-agent.hoon +++ /dev/null @@ -1,69 +0,0 @@ -/+ skeleton -|* [agent=* help=*] -?: ?=(%& help) - ~| %default-agent-helpfully-crashing - skeleton -|_ =bowl:gall -++ on-init - `agent -:: -++ on-save - !>(~) -:: -++ on-load - |= old-state=vase - `agent -:: -++ on-poke - |= =cage - ~| "unexpected poke to {} with mark {}" - !! -:: -++ on-watch - |= =path - ~| "unexpected subscription to {} on path {}" - !! -:: -++ on-leave - |= path - `agent -:: -++ on-peek - |= =path - ~| "unexpected scry into {} on path {}" - !! -:: -++ on-agent - |= [=wire =sign:agent:gall] - ^- (quip card:agent:gall _agent) - ?- -.sign - %poke-ack - ?~ p.sign - `agent - %- (slog leaf+"poke failed from {} on wire {}" u.p.sign) - `agent - :: - %watch-ack - ?~ p.sign - `agent - =/ =tank leaf+"subscribe failed from {} on wire {}" - %- (slog tank u.p.sign) - `agent - :: - %kick `agent - %fact - ~| "unexpected subscription update to {} on wire {}" - ~| "with mark {}" - !! - == -:: -++ on-arvo - |= [=wire =sign-arvo] - ~| "unexpected system response {<-.sign-arvo>} to {} on wire {}" - !! -:: -++ on-fail - |= [=term =tang] - %- (slog leaf+"error in {}" >term< tang) - `agent --- diff --git a/pkg/arvo/lib/default-agent.hoon b/pkg/arvo/lib/default-agent.hoon new file mode 120000 index 000000000..698f6802d --- /dev/null +++ b/pkg/arvo/lib/default-agent.hoon @@ -0,0 +1 @@ +../../base-dev/lib/default-agent.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/docket.hoon b/pkg/arvo/lib/docket.hoon new file mode 120000 index 000000000..a40ad35b3 --- /dev/null +++ b/pkg/arvo/lib/docket.hoon @@ -0,0 +1 @@ +../../base-dev/lib/docket.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/ethio.hoon b/pkg/arvo/lib/ethio.hoon deleted file mode 100644 index a377290e3..000000000 --- a/pkg/arvo/lib/ethio.hoon +++ /dev/null @@ -1,257 +0,0 @@ -:: ethio: Asynchronous Ethereum input/output functions. -:: -/- rpc=json-rpc -/+ ethereum, strandio -=, ethereum-types -=, jael -:: -=> |% - +$ topics (list ?(@ux (list @ux))) - -- -|% -:: +request-rpc: send rpc request, with retry -:: -++ request-rpc - |= [url=@ta id=(unit @t) req=request:rpc:ethereum] - =/ m (strand:strandio ,json) - ^- form:m - ;< res=(list [id=@t =json]) bind:m - (request-batch-rpc-strict url [id req]~) - ?: ?=([* ~] res) - (pure:m json.i.res) - %+ strand-fail:strandio - %unexpected-multiple-results - [>(lent res)< ~] -:: +request-batch-rpc-strict: send rpc requests, with retry -:: -:: sends a batch request. produces results for all requests in the batch, -:: but only if all of them are successful. -:: -++ request-batch-rpc-strict - |= [url=@ta reqs=(list [id=(unit @t) req=request:rpc:ethereum])] - |^ %+ (retry:strandio results) - `10 - attempt-request - :: - +$ results (list [id=@t =json]) - :: - ++ attempt-request - =/ m (strand:strandio ,(unit results)) - ^- form:m - ;< responses=(list response:rpc) bind:m - (request-batch-rpc-loose url reqs) - =- ?~ err - (pure:m `res) - (pure:m ~) - %+ roll responses - |= $: rpc=response:rpc - [res=results err=(list [id=@t code=@t message=@t])] - == - ?: ?=(%error -.rpc) - [res [+.rpc err]] - ?. ?=(%result -.rpc) - [res [['' 'ethio-rpc-fail' (crip )] err]] - [[+.rpc res] err] - -- -:: +request-batch-rpc-loose: send rpc requests, with retry -:: -:: sends a batch request. produces results for all requests in the batch, -:: including the ones that are unsuccessful. -:: -++ request-batch-rpc-loose - |= [url=@ta reqs=(list [id=(unit @t) req=request:rpc:ethereum])] - |^ %+ (retry:strandio results) - `10 - attempt-request - :: - +$ result response:rpc - +$ results (list response:rpc) - :: - ++ attempt-request - =/ m (strand:strandio ,(unit results)) - ^- form:m - =/ =request:http - :* method=%'POST' - url=url - header-list=['Content-Type'^'application/json' ~] - :: - ^= body - %- some %- as-octt:mimes:html - %- en-json:html - a+(turn reqs request-to-json:rpc:ethereum) - == - ;< ~ bind:m - (send-request:strandio request) - ;< rep=(unit client-response:iris) bind:m - take-maybe-response:strandio - ?~ rep - (pure:m ~) - (parse-responses u.rep) - :: - ++ parse-responses - |= =client-response:iris - =/ m (strand:strandio ,(unit results)) - ^- form:m - ?> ?=(%finished -.client-response) - ?~ full-file.client-response - (pure:m ~) - =/ body=@t q.data.u.full-file.client-response - =/ jon=(unit json) (de-json:html body) - ?~ jon - (pure:m ~) - =/ array=(unit (list response:rpc)) - ((ar:dejs-soft:format parse-one-response) u.jon) - ?~ array - (strand-fail:strandio %rpc-result-incomplete-batch >u.jon< ~) - (pure:m array) - :: - ++ parse-one-response - |= =json - ^- (unit response:rpc) - =/ res=(unit [@t ^json]) - %. json - =, dejs-soft:format - (ot id+so result+some ~) - ?^ res `[%result u.res] - ~| parse-one-response=json - :+ ~ %error %- need - %. json - =, dejs-soft:format - (ot id+so error+(ot code+no message+so ~) ~) - -- -:: -:: +read-contract: calls a read function on a contract, produces result hex -:: -++ read-contract - |= [url=@t req=proto-read-request:rpc:ethereum] - =/ m (strand:strandio ,@t) - ;< res=(list [id=@t res=@t]) bind:m - (batch-read-contract-strict url [req]~) - ?: ?=([* ~] res) - (pure:m res.i.res) - %+ strand-fail:strandio - %unexpected-multiple-results - [>(lent res)< ~] -:: +batch-read-contract-strict: calls read functions on contracts -:: -:: sends a batch request. produces results for all requests in the batch, -:: but only if all of them are successful. -:: -++ batch-read-contract-strict - |= [url=@t reqs=(list proto-read-request:rpc:ethereum)] - |^ =/ m (strand:strandio ,results) - ^- form:m - ;< res=(list [id=@t =json]) bind:m - %+ request-batch-rpc-strict url - (turn reqs proto-to-rpc) - =+ ^- [=results =failures] - (roll res response-to-result) - ?~ failures (pure:m results) - (strand-fail:strandio %batch-read-failed-for >failures< ~) - :: - +$ results (list [id=@t res=@t]) - +$ failures (list [id=@t =json]) - :: - ++ proto-to-rpc - |= proto-read-request:rpc:ethereum - ^- [(unit @t) request:rpc:ethereum] - :- id - :+ %eth-call - ^- call:rpc:ethereum - [~ to ~ ~ ~ `tape`(encode-call:rpc:ethereum function arguments)] - [%label %latest] - :: - ++ response-to-result - |= [[id=@t =json] =results =failures] - ^+ [results failures] - ?: ?=(%s -.json) - [[id^p.json results] failures] - [results [id^json failures]] - -- -:: -:: -++ get-latest-block - |= url=@ta - =/ m (strand:strandio ,block) - ^- form:m - ;< =json bind:m - (request-rpc url `'block number' %eth-block-number ~) - (get-block-by-number url (parse-eth-block-number:rpc:ethereum json)) -:: -++ get-block-by-number - |= [url=@ta =number:block] - =/ m (strand:strandio ,block) - ^- form:m - |^ - %+ (retry:strandio ,block) `10 - =/ m (strand:strandio ,(unit block)) - ^- form:m - ;< =json bind:m - %+ request-rpc url - :- `'block by number' - [%eth-get-block-by-number number |] - (pure:m (parse-block json)) - :: - ++ parse-block - |= =json - ^- (unit block) - =< ?~(. ~ `[[&1 &2] |2]:u) - ^- (unit [@ @ @]) - ~| json - %. json - =, dejs-soft:format - %- ot - :~ hash+parse-hex - number+parse-hex - 'parentHash'^parse-hex - == - :: - ++ parse-hex |=(=json `(unit @)`(some (parse-hex-result:rpc:ethereum json))) - -- -:: -++ get-logs-by-hash - |= [url=@ta =hash:block contracts=(list address) =topics] - =/ m (strand:strandio (list event-log:rpc:ethereum)) - ^- form:m - ;< =json bind:m - %+ request-rpc url - :* `'logs by hash' - %eth-get-logs-by-hash - hash - contracts - topics - == - %- pure:m - (parse-event-logs:rpc:ethereum json) -:: -++ get-logs-by-range - |= $: url=@ta - contracts=(list address) - =topics - =from=number:block - =to=number:block - == - =/ m (strand:strandio (list event-log:rpc:ethereum)) - ^- form:m - ;< =json bind:m - %+ request-rpc url - :* `'logs by range' - %eth-get-logs - `number+from-number - `number+to-number - contracts - topics - == - %- pure:m - (parse-event-logs:rpc:ethereum json) -:: -++ get-next-nonce - |= [url=@ta =address] - =/ m (strand:strandio ,@ud) - ^- form:m - ;< =json bind:m - %^ request-rpc url `'nonce' - [%eth-get-transaction-count address [%label %latest]] - %- pure:m - (parse-eth-get-transaction-count:rpc:ethereum json) --- diff --git a/pkg/arvo/lib/ethio.hoon b/pkg/arvo/lib/ethio.hoon new file mode 120000 index 000000000..9c5b58148 --- /dev/null +++ b/pkg/arvo/lib/ethio.hoon @@ -0,0 +1 @@ +../../base-dev/lib/ethio.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/hood/drum.hoon b/pkg/arvo/lib/hood/drum.hoon index 87168825b..a9d832c15 100644 --- a/pkg/arvo/lib/hood/drum.hoon +++ b/pkg/arvo/lib/hood/drum.hoon @@ -81,8 +81,7 @@ -- :: TODO: remove .ost :: -|= [hid=bowl:gall any-state] -?> ?=(%4 +<+<) +|= [hid=bowl:gall state] =* sat +<+ =/ ost 0 =+ (~(gut by bin) ost *source) diff --git a/pkg/arvo/lib/hood/helm.hoon b/pkg/arvo/lib/hood/helm.hoon index c662b5c57..9cee30851 100644 --- a/pkg/arvo/lib/hood/helm.hoon +++ b/pkg/arvo/lib/hood/helm.hoon @@ -23,8 +23,7 @@ ^- state [%1 mass-timer:(~(got by hoc.s) 0)] -- -|= [=bowl:gall sat=any-state] -?> ?=(%1 -.sat) +|= [=bowl:gall sat=state] =| moz=(list card) |% ++ this . diff --git a/pkg/arvo/lib/hood/kiln.hoon b/pkg/arvo/lib/hood/kiln.hoon index aa5d19dfb..1d6276943 100644 --- a/pkg/arvo/lib/hood/kiln.hoon +++ b/pkg/arvo/lib/hood/kiln.hoon @@ -5,19 +5,21 @@ =, format =* dude dude:gall |% -+$ state state-3 ++$ state state-4 ++$ state-4 [%4 pith-4] +$ state-3 [%3 pith-3] +$ state-2 [%2 pith-2] +$ state-1 [%1 pith-1] +$ state-0 [%0 pith-0] +$ any-state $~ *state - $% state-3 + $% state-4 + state-3 state-2 state-1 state-0 == -+$ pith-3 :: ++$ pith-4 :: $: rem=(map desk per-desk) :: syn=(map kiln-sync let=@ud) :: ark=(map desk arak) :: @@ -31,6 +33,32 @@ :: request is made multiple times. hxs=(map desk @ud) == :: ++$ pith-3 :: + $: rem=(map desk per-desk) :: + syn=(map kiln-sync let=@ud) :: + ark=(map desk arak-3) :: + commit-timer=[way=wire nex=@da tim=@dr mon=term] :: + :: map desk to the currently ongoing fuse request + :: and the latest version numbers for beaks to + fus=(map desk per-fuse) + :: used for fuses - every time we get a fuse we + :: bump this. used when calculating hashes to + :: ensure they're unique even when the same + :: request is made multiple times. + hxs=(map desk @ud) + == ++$ arak-3 + $: =ship + =desk + =aeon + next=(list [=aeon =weft]) + rein=rein-3 + == ++$ rein-3 + $: add=(set dude) + sub=(set dude) + == +:: +$ pith-2 :: $: rem=(map desk per-desk) :: syn=(map kiln-sync let=@ud) :: @@ -116,8 +144,7 @@ :: +$ kiln-fuse-list (unit desk) -- -|= [bowl:gall any-state] -?> ?=(%3 +<+<) +|= [bowl:gall state] ?> =(src our) =| moz=(list card:agent:gall) |% @@ -142,7 +169,7 @@ ++ on-init =< abet ~> %slog.0^leaf/"kiln: boot" - =/ =rein [add=(sy %hood %dojo ~) sub=~] :: TODO questionable + =/ =rein [liv=& add=(sy %hood %dojo ~) sub=~] :: TODO questionable =/ daz (get-apps-want base-bill rein) %- emil %- zing ^- (list (list card:agent:gall)) @@ -190,8 +217,17 @@ fus.old hxs.old == + =? old ?=(%3 -.old) + :* %4 + rem.old + syn.old + ark=(~(run by ark.old) |=(a=arak-3 a(rein [liv=& rein.a]))) + commit-timer.old + fus.old + hxs.old + == :: - ?> ?=(%3 -.old) + ?> ?=(%4 -.old) =. +<+.$.abet old =< abet ?~ old-ota @@ -202,9 +238,23 @@ |= =path ^- (unit (unit cage)) ?+ path [~ ~] - [%x %kiln %vats ~] + [%x %kiln %lag ~] ``loob+!>(.^(? //(scot %p our)//(scot %da now)/zen/lag)) + :: + [%x %kiln %vat @ ~] + =* loc i.t.t.t.path + =/ ego (scot %p our) + =/ wen (scot %da now) + =/ rak=(unit arak) (~(get by ark) loc) + ?~ rak [~ ~] + =/ hog .^(@uv cz+~[ego loc wen]) + =/ cas .^(cass cw+~[ego loc wen]) :^ ~ ~ %noun - !> ^- (list [=desk hash=@uv =cass =arak]) + !> ^- vat + [loc hog cas u.rak] + :: + [%x %kiln %vats ~] + :^ ~ ~ %kiln-vats + !> ^- (list vat) =/ ego (scot %p our) =/ wen (scot %da now) %+ turn ~(tap by ark) @@ -241,11 +291,12 @@ ++ emil |=((list card:agent:gall) vats(kiln (^emil +<))) ++ give |% - ++ snap [%give %fact ~[/vats] %kiln-vats-snap !>(ark)] - ++ diff |=(d=^diff [%give %fact ~[/vats] %kiln-vats-diff !>(d)]) + ++ snap [%give %fact ~[/kiln/vats] %kiln-vats-snap !>(ark)] + ++ diff |=(d=^diff [%give %fact ~[/kiln/vats] %kiln-vats-diff !>(d)]) -- ++ pass |% + ++ pyre |=(=tang [%pass /kiln/vats %pyre tang]) ++ find (warp %find [%sing %y ud+1 /]) ++ sync-da (warp %sync [%sing %w da+now /]) ++ sync-ud (warp %sync [%sing %w ud+aeon.rak /]) @@ -290,18 +341,14 @@ |= lac=desk ^+ kiln ?: =(%base lac) - ~> %slog.0^leaf/"kiln: |uninstall: %base cannot be uninstalled" - !! + =- (^emit (pyre:pass leaf/- ~)) + "kiln: |uninstall: %base cannot be uninstalled" ?. (~(has by ark) lac) ~> %slog.0^leaf/"kiln: |uninstall: {} not installed, ignoring" kiln =. vats (abed lac) ~> %slog.0^leaf/"kiln: uninstalling {here}" - =/ ded (get-apps-live our lac now) - :: hood and dojo must never die - :: - =. ded (skip ded |=(d=dude ?=(?(%hood %dojo) d))) - =. vats (stop-dudes ded) + =. vats stop-agents kiln(ark (~(del by ark) lac)) :: +install: set up desk sync to .lac to install all apps from [her rem] :: @@ -326,24 +373,103 @@ =. vats (emit (diff:give %reset loc rak)) =. ark (~(del by ark) loc) (install loc [ship desk]:rak) + :: +suspend: shut down all agents, keep syncing + :: + ++ suspend + |= lac=desk + ^+ vats + =/ got (~(get by ark) lac) + ?: =(%base lac) + =- (emit (pyre:pass leaf/- ~)) + "kiln: suspend: %base cannot be suspended" + ?. (~(has by ark) lac) + ~> %slog.0^leaf/"kiln: suspend: {} not installed, ignoring" + vats + =. vats (abed lac) + =. liv.rein.rak | + =. vats stop-agents + (emit (diff:give %suspend loc rak)) + :: +revive: restart agents on a suspended desk + :: + ++ revive + |= lac=desk + ^+ vats + =. vats (abed lac) + =. liv.rein.rak & + =. vats (update-running-apps (get-apps-diff our loc now rein.rak)) + (emit (diff:give %revive loc rak)) + :: +set-rein: adjust which agents are forced on or off + :: + ++ set-rein + |= [lac=desk new=rein] + ^+ vats + =. vats (abed lac) + =^ old rein.rak [rein.rak new] + ?+ [liv.old liv.new] !! + [%| %|] vats + [%| %&] (revive lac) + [%& %|] (suspend lac) + [%& %&] (update-running-apps (get-apps-diff our loc now rein.rak)) + == :: +bump: handle kernel kelvin upgrade :: :: Apply merges to revive faded agents on all paused desks. :: ++ bump - |= except=(set desk) + |= [except=(set desk) check=?] ^+ kiln - =/ kel=weft [%zuse zuse] - =/ ded (~(dif in (get-blockers kel)) except) - ?. =(~ ded) - ~> %slog.0^leaf/"kiln: desks blocked upgrade {}" - !! - =/ liv (skip ~(tap by ark) |=([d=desk *] (~(has in except) d))) - ~> %slog.0^leaf/"kiln: bump {}" - =< kiln - |- ^+ vats - ?~ liv vats - $(liv t.liv, vats (emit merge-main:pass(loc p.i.liv, rak q.i.liv))) + |^ ^+ kiln + ?. check + bump-all + =/ ded find-blocked + ?: =(~ ded) + bump-all + =- (^emit (pyre:pass leaf/- ~)) + "kiln: desks blocked upgrade to {}: {}" + :: + ++ find-blocked + ^- (set desk) + (~(dif in (get-blockers zuse/zuse)) (~(put in except) %base)) + :: + ++ bump-all + =/ liv=(list desk) (skip ~(tap in ~(key by ark)) ~(has in except)) + ~> %slog.0^leaf/"kiln: bump {}" + |- ^+ kiln + ?~ liv kiln + $(liv t.liv, kiln (bump-one i.liv)) + :: + ++ bump-one + |= =desk + ^+ kiln + =< abet ^+ vats + =. vats (abed desk) + :: skip to first commit at new kelvin + :: + =/ yon + =* nex next.rak + |- ^- (unit aeon) + ?~ nex ~ + ?: =(kel weft.i.nex) + `aeon.i.nex + $(nex t.nex) + ?~ yon + ?. check + ~> %slog.0^leaf/"kiln: bump: ignoring {}" + vats + =- (emit (pyre:pass leaf/- ~)) + "kiln: {here} killed upgrade to {}" + =. next.rak (crank-next u.yon) + (emit merge-main:pass) + -- + :: +stop-agents: internal helper to suspend agents on .loc + :: + :: Will not shut down %hood or %dojo. + :: + ++ stop-agents + ^+ vats + =/ ded (get-apps-live our loc now) + =. ded (skip ded |=(d=dude ?=(?(%hood %dojo) d))) + (stop-dudes ded) :: ++ take |= [=wire syn=sign-arvo] @@ -409,6 +535,7 @@ =/ =diff [%block loc rak new-weft blockers=(sy %base ~)] (emil sync-ud:pass (diff:give diff) ~) ~> %slog.0^leaf/"kiln: merging into {here}" + =. next.rak (crank-next (dec aeon.rak)) (emil ~[merge-main sync-ud]:pass) :: =/ blockers @@ -418,9 +545,11 @@ :: ?. =(~ blockers) ~> %slog.0^leaf/"kiln: OTA blocked on {}" + =. next.rak (snoc next.rak [(dec aeon.rak) new-weft]) =/ =diff [%block loc rak new-weft blockers] (emil sync-ud:pass (diff:give diff) ~) ~> %slog.0^leaf/"kiln: applying OTA to {here}, kelvin: {}" + =. next.rak (crank-next (dec aeon.rak)) (emil ~[merge-main sync-ud]:pass) :: ++ take-merge-main @@ -439,10 +568,11 @@ vats ~> %slog.0^leaf/"kiln: merge into {here} succeeded" =. vats (emit (diff:give %merge loc rak)) - =. vats (update-running-apps (get-apps-diff our loc now rein.rak)) + =? vats liv.rein.rak + (update-running-apps (get-apps-diff our loc now rein.rak)) ?. =(%base loc) vats - =. kiln (bump (sy %base %kids ~)) + =. kiln (bump (sy %base %kids ~) check=|) (emit merge-kids:pass) :: ++ take-merge-kids @@ -484,14 +614,18 @@ |= daz=(list dude) ~> %slog.0^leaf/"kiln: stopping {}" (emil `(list card:agent:gall)`(zing (turn daz stop-dude:pass))) + :: +crank-next: pop stale aeons from .next.rak + :: + ++ crank-next + |= new=aeon + ^+ next.rak + =/ rog next.rak + |- ^+ next.rak + ?~ rog next.rak + ?: =(new aeon.i.rog) + t.rog + $(rog t.rog) -- -:: +get-ankh: extract $ankh from clay %v response $rant -:: -++ get-ankh - |= =rant - ^- ankh - ?> ?=(%dome p.r.rant) - !<(ankh q.r.rant) :: +get-blockers: find desks that would block a kernel update :: ++ get-blockers @@ -500,11 +634,9 @@ %- ~(gas in *(set desk)) %+ murn ~(tap by ark) |= [=desk =arak] - :: TODO: make this work -- aeon.arak is wrong - :: also, scrying at current doesn't work because middle of event - :: maybe replace with %warp - ::?: =(kel (read-kelvin-local our desk aeon.arak)) - ?: & + ?: =(%base desk) + ~ + ?. liv.rein.arak ~ ?: (lien next.arak |=([* k=weft] =(k kel))) ~ @@ -542,7 +674,10 @@ %kiln-merge =;(f (f !<(_+<.f vase)) poke-merge) %kiln-mount =;(f (f !<(_+<.f vase)) poke-mount) %kiln-nuke =;(f (f !<(_+<.f vase)) poke-nuke) + %kiln-suspend =;(f (f !<(_+<.f vase)) poke-suspend) %kiln-permission =;(f (f !<(_+<.f vase)) poke-permission) + %kiln-revive =;(f (f !<(_+<.f vase)) poke-revive) + %kiln-rein =;(f (f !<(_+<.f vase)) poke-rein) %kiln-rm =;(f (f !<(_+<.f vase)) poke-rm) %kiln-schedule =;(f (f !<(_+<.f vase)) poke-schedule) %kiln-sync =;(f (f !<(_+<.f vase)) poke-sync) @@ -565,7 +700,7 @@ (emit %pass way.commit-timer %arvo %b [%wait nex.commit-timer]) :: ++ poke-bump - |= except=(set desk) + |= [except=(set desk) check=?] abet:(bump:vats +<) :: ++ poke-cancel @@ -699,6 +834,14 @@ =/ =rite [%r ~ ?:(pub %black %white) ~] [%pass /kiln/permission %arvo %c [%perm syd pax rite]] :: +++ poke-rein + |= [=desk =rein] + abet:abet:(set-rein:vats +<) +:: +++ poke-revive + |= =desk + abet:abet:(revive:vats desk) +:: ++ poke-rm |= a=path =+ b=.^(arch %cy a) @@ -714,6 +857,10 @@ =+ old=;;((map @da cord) (fall (file where) ~)) `(foal where %sched !>((~(put by old) tym eve))) :: +++ poke-suspend + |= =desk + abet:abet:(suspend:vats desk) +:: ++ poke-sync |= hos=kiln-sync ?: (~(has by syn) hos) @@ -761,6 +908,8 @@ |= =path ?> (team:title our src) ?+ path ~|(kiln-path/path !!) + [%vats ~] abet + :: [%ark ~] abet(moz :_(moz [%give %fact ~ %kiln-vats-snap !>(ark)])) == diff --git a/pkg/arvo/lib/language-server/build.hoon b/pkg/arvo/lib/language-server/build.hoon deleted file mode 100644 index 015f37b88..000000000 --- a/pkg/arvo/lib/language-server/build.hoon +++ /dev/null @@ -1,61 +0,0 @@ -/- *language-server -:: -|% -++ parse-error - |= =tape - ^- (unit [=path =range]) - =/ parse-pair - %+ cook - |=([row=@ud col=@ud] [(dec row) col]) - (ifix [sel ser] ;~((glue ace) dem dem)) - =/ parse-path - %+ cook - |=(p=path (slag 3 p)) - (ifix [fas (jest '::')] (more fas urs:ab)) - =/ parse-full - ;~(plug parse-path ;~(sfix ;~((glue dot) parse-pair parse-pair) gar)) - (rust tape parse-full) -:: -++ get-errors-from-tang - |= [uri=@t =tang] - ^- (list range) - =/ =path - (uri-to-path uri) - %+ murn tang - |= =tank - ^- (unit range) - ?. ?=([%leaf *] tank) - ~ - =/ error - (parse-error p.tank) - ?~ error - ~ - ?: =(path path.u.error) - `range.u.error - ~ -:: -++ uri-to-path - |= uri=@t - ^- path - =/ pier-root=(set cord) - %- sy - ['app' 'gen' 'lib' 'mar' 'ren' 'sur' 'sys' 'test' ~] - =/ path=(list cord) - (parse-uri uri) - |- - ?< ?=(~ path) - ?: (~(has in pier-root) i.path) - `^path`path - $(path t.path) -:: -++ parse-uri - |= uri=@t - =- (fall - /fail) - %+ rush uri - %+ more - ;~(pose (plus fas) dot) - %+ cook - crip - (star ;~(pose col hep alf)) -:: --- diff --git a/pkg/arvo/lib/language-server/build.hoon b/pkg/arvo/lib/language-server/build.hoon new file mode 120000 index 000000000..749928056 --- /dev/null +++ b/pkg/arvo/lib/language-server/build.hoon @@ -0,0 +1 @@ +../../../base-dev/lib/language-server/build.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/language-server/complete.hoon b/pkg/arvo/lib/language-server/complete.hoon deleted file mode 100644 index 56b3ca498..000000000 --- a/pkg/arvo/lib/language-server/complete.hoon +++ /dev/null @@ -1,386 +0,0 @@ -/+ language-server-parser -:: Autocomplete for hoon. -:: -=/ debug | -|% -+* option [item] - [term=cord detail=item] -:: -:: Like +rose except also produces line number -:: -++ lily - |* [los=tape sab=rule] - =+ vex=(sab [[1 1] los]) - ?~ q.vex - [%| p=p.vex(q (dec q.p.vex))] - ?. =(~ q.q.u.q.vex) - [%| p=p.vex(q (dec q.p.vex))] - [%& p=p.u.q.vex] -:: -:: Get all the identifiers accessible if this type is your subject. -:: -++ get-identifiers - |= ty=type - %- flop - |- ^- (list (option type)) - ?- ty - %noun ~ - %void ~ - [%atom *] ~ - [%cell *] - %+ weld - $(ty p.ty) - $(ty q.ty) - :: - [%core *] - %- weld - :_ ?. ?=(%gold r.p.q.ty) - ~ - $(ty p.ty) - ^- (list (option type)) - %- zing - %+ turn ~(tap by q.r.q.ty) - |= [term =tome] - %+ turn - ~(tap by q.tome) - |= [name=term =hoon] - ^- (pair term type) - ~| term=term - [name ~(play ~(et ut ty) ~[name] ~)] - :: - [%face *] - ?^ p.ty - ~ - [p.ty q.ty]~ - :: - [%fork *] - %= $ - ty - =/ tines ~(tap in p.ty) - ?~ tines - %void - |- ^- type - ?~ t.tines - i.tines - (~(fuse ut $(tines t.tines)) i.tines) - == - :: - [%hint *] $(ty q.ty) - [%hold *] $(ty ~(repo ut ty)) - == -:: -++ search-exact - |* [sid=term options=(list (option))] - =/ match - %+ skim options - |= [id=cord *] - =(sid id) - ?~ match - ~ - [~ i.match] -:: -:: Get all the identifiers that start with sid. -:: -++ search-prefix - |* [sid=cord ids=(list (option))] - ^+ ids - %+ skim ids - |= [id=cord *] - ^- ?(%.y %.n) - =(sid (end [3 (met 3 sid)] id)) -:: -:: Get the longest prefix of a list of identifiers. -:: -++ longest-match - |= matches=(list (option)) - ^- cord - ?~ matches - '' - =/ n 1 - =/ last (met 3 term.i.matches) - |- ^- term - ?: (gth n last) - term.i.matches - =/ prefix (end [3 n] term.i.matches) - ?: |- ^- ? - ?| ?=(~ t.matches) - ?& =(prefix (end [3 n] term.i.t.matches)) - $(t.matches t.t.matches) - == == - $(n +(n)) - (end [3 (dec n)] term.i.matches) -:: -:: Run +find-type safely, printing the first line of the stack trace on -:: error. -:: -++ find-type-mule - |= [sut=type gen=hoon] - ^- (unit [term type]) - =/ res (mule |.((find-type sut gen))) - ?- -.res - %& p.res - %| ((slog (flop (scag 10 p.res))) ~) - == -:: -:: Get the subject type of the wing where you've put the "magic-spoon". -:: -++ find-type - |= [sut=type gen=hoon] - =* loop $ - |^ - ^- (unit [term type]) - ?- gen - [%cnts [%magic-spoon ~] *] `['' sut] - [%cnts [%magic-spoon @ ~] *] `[i.t.p.gen sut] - [%cnts [%magic-spoon @ *] *] - %= $ - sut (~(play ut sut) wing+t.t.p.gen) - t.p.gen t.p.gen(t ~) - == - :: - [%cnts [%magic-fork @ ~] *] - `['' (~(play ut sut) wing+t.p.gen)] - :: - [^ *] (both p.gen q.gen) - [%brcn *] (grow q.gen) - [%brpt *] (grow q.gen) - [%cnts *] - |- ^- (unit [term type]) - =* inner-loop $ - ?~ q.gen - ~ - %+ replace - loop(gen q.i.q.gen) - |. inner-loop(q.gen t.q.gen) - :: - [%dtkt *] (spec-and-hoon p.gen q.gen) - [%dtls *] loop(gen p.gen) - [%rock *] ~ - [%sand *] ~ - [%tune *] ~ - [%dttr *] (both p.gen q.gen) - [%dtts *] (both p.gen q.gen) - [%dtwt *] loop(gen p.gen) - [%hand *] ~ - [%ktbr *] loop(gen p.gen) - [%ktls *] (both p.gen q.gen) - [%ktpm *] loop(gen p.gen) - [%ktsg *] loop(gen p.gen) - [%ktwt *] loop(gen p.gen) - [%note *] loop(gen q.gen) - [%sgzp *] (both p.gen q.gen) - [%sggr *] loop(gen q.gen) :: should check for hoon in p.gen - [%tsgr *] (change p.gen q.gen) - [%tscm *] - %+ replace - loop(gen p.gen) - |.(loop(gen q.gen, sut (~(busk ut sut) p.gen))) - :: - [%wtcl *] (bell p.gen q.gen r.gen) - [%fits *] (both p.gen wing+q.gen) - [%wthx *] loop(gen wing+q.gen) - [%dbug *] loop(gen q.gen) - [%zpcm *] (both p.gen q.gen) - [%lost *] loop(gen p.gen) - [%zpmc *] (both p.gen q.gen) - [%zpts *] loop(gen p.gen) - [%zppt *] (both q.gen r.gen) - [%zpgl *] (spec-and-hoon p.gen q.gen) - [%zpzp *] ~ - * - =+ doz=~(open ap gen) - ?: =(doz gen) - ~_ (show [%c 'hoon'] [%q gen]) - ~> %mean.'play-open' - !! - loop(gen doz) - == - :: - ++ replace - |= [a=(unit [term type]) b=(trap (unit [term type]))] - ^- (unit [term type]) - ?~(a $:b a) - :: - ++ both - |= [a=hoon b=hoon] - (replace loop(gen a) |.(loop(gen b))) - :: - ++ bell - |= [a=hoon b=hoon c=hoon] - %+ replace loop(gen a) - |. %+ replace loop(gen b, sut (~(gain ut sut) a)) - |. loop(gen c, sut (~(lose ut sut) a)) - :: - ++ spec-and-hoon - |= [a=spec b=hoon] - (replace (find-type-in-spec sut a) |.(loop(gen b))) - :: - ++ change - |= [a=hoon b=hoon] - (replace loop(gen a) |.(loop(gen b, sut (~(play ut sut) a)))) - :: - ++ grow - |= m=(map term tome) - =/ tomes ~(tap by m) - |- ^- (unit [term type]) - =* outer-loop $ - ?~ tomes - ~ - =/ arms ~(tap by q.q.i.tomes) - |- ^- (unit [term type]) - =* inner-loop $ - ?~ arms - outer-loop(tomes t.tomes) - %+ replace - loop(gen q.i.arms, sut (~(play ut sut) gen)) - |. inner-loop(arms t.arms) - -- -:: -:: Not implemented yet. I wonder whether we should modify types found -:: in spec mode such that if it's a mold that produces a type, it -:: should just display the type and not that it's technically a -:: function. -:: -++ find-type-in-spec - |= [sut=type pec=spec] - ^- (unit [term type]) - ~ -:: -++ get-id-sym - |= [pos=@ud =tape] - %^ get-id pos tape - ^- $-(nail (like (unit @t))) - ;~(sfix (punt sym) (star ;~(pose prn (just `@`10)))) -:: -++ get-id-cord - |= [pos=@ud =tape] - %^ get-id pos tape - ^- $-(nail (like (unit @t))) - ;~(sfix (punt (cook crip (star prn))) (star ;~(pose prn (just `@`10)))) -:: -++ get-id - |= [pos=@ud txt=tape seek=$-(nail (like (unit @t)))] - ^- [forward=(unit @t) backward=(unit @t) id=(unit @t)] - =/ forward=(unit @t) - (scan (slag pos txt) seek) - =/ backward=(unit @t) - %- (lift |=(t=@t (swp 3 t))) - (scan (flop (scag pos txt)) seek) - =/ id=(unit @t) - ?~ forward - ?~ backward - ~ - `u.backward - ?~ backward - `u.forward - `(cat 3 u.backward u.forward) - [forward backward id] -:: -:: Insert magic marker in hoon source at the given position. -:: -++ insert-magic - |= [pos=@ud txt=tape] - ^- [back-pos=@ud fore-pos=@ud txt=tape] - :: Find beg-pos by searching backward to where the current term - :: begins - =+ (get-id-sym pos txt) - =/ back-pos - ?~ backward - pos - (sub pos (met 3 u.backward)) - =/ fore-pos - ?~ forward - pos - (add pos (met 3 u.forward)) - :+ back-pos fore-pos - :: Insert "magic-spoon" marker so +find-type can identify where to - :: stop. - :: - ;: weld - (scag back-pos txt) - ?: &(?=(~ id) ?=([%'.' *] (slag pos txt))) - "magic-fork" - "magic-spoon" - ?~ id - "" - "." - (slag back-pos txt) - "\0a" - == -:: -:: Produce the longest possible advance without choosing between -:: matches. -:: -:: Takes a +hoon which has already has a magic-spoon marker. Useful if -:: you want to handle your own parsing. -:: -++ advance-hoon - |= [sut=type gen=hoon] - %+ bind (find-type-mule sut gen) - |= [id=term typ=type] - =/ matches=(list (option type)) - (search-prefix id (get-identifiers typ)) - (longest-match matches) -:: -:: Same as +advance-hoon, but takes a position and text directly. -:: -++ advance-tape - |= [sut=type pos=@ud code=tape] - (advance-hoon sut (scan txt:(insert-magic pos code) vest)) -:: -:: Produce a list of matches. -:: -:: Takes a +hoon which has already has a magic-spoon marker. Useful if -:: you want to handle your own parsing. -:: -++ tab-list-hoon - |= [sut=type gen=hoon] - ^- (unit (list (option type))) - %+ bind (find-type-mule sut gen) - |= [id=term typ=type] - (search-prefix id (get-identifiers typ)) -:: -:: Same as +advance-hoon, but takes a position and text directly. -:: -++ tab-list-tape - |= [sut=type pos=@ud code=tape] - ^- (each (unit (list (option type))) [row=@ col=@]) - ~? > debug %start-magick - =/ magicked txt:(insert-magic pos code) - ~? > debug %start-parsing - =/ res (lily magicked (language-server-parser *path)) - ?: ?=(%| -.res) - ~? > debug [%parsing-error p.res] - [%| p.res] - :- %& - ~? > debug %parsed-good - ((cury tab-list-hoon sut) hoon:`pile:clay`p.res) -:: -:: Generators -++ tab-generators - |= [pfix=path app=(unit term) gens=(list term)] - ^- (list (option tank)) - %+ turn gens - |= gen=term - ^- (option tank) - =/ pax=path - (weld pfix ~[gen %hoon]) - =/ file - .^(@t %cx pax) - :_ (render-help file) - ?~ app - (cat 3 '+' gen) - ?: =(%hood u.app) - (cat 3 '|' gen) - :((cury cat 3) ':' u.app '|' gen) -:: Stolen from +help -++ render-help - |= a=@t - ^- tank - :- %leaf - =/ c (to-wain:format a) - ?~ c "~" - ?. =(':: ' (end [3 4] i.c)) - "" - (trip i.c) --- diff --git a/pkg/arvo/lib/language-server/complete.hoon b/pkg/arvo/lib/language-server/complete.hoon new file mode 120000 index 000000000..219d824c7 --- /dev/null +++ b/pkg/arvo/lib/language-server/complete.hoon @@ -0,0 +1 @@ +../../../base-dev/lib/language-server/complete.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/language-server/easy-print.hoon b/pkg/arvo/lib/language-server/easy-print.hoon deleted file mode 100644 index 12558c8a5..000000000 --- a/pkg/arvo/lib/language-server/easy-print.hoon +++ /dev/null @@ -1,484 +0,0 @@ -:: Fast type printing that's easy on the eyes or your money back -:: -=> |% - +$ cape [p=(map @ud wine) q=wine] - +$ wine - $@ $? %noun - %path - %type - %void - %wall - %wool - %yarn - == - $% [%mato p=term] - [%gate p=hoon q=type r=wine] - [%core p=(list @ta) q=wine] - [%face p=term q=wine] - [%list p=term q=wine] - [%pear p=term q=@] - [%bcwt p=(list wine)] - [%plot p=(list wine)] - [%stop p=@ud] - [%tree p=term q=wine] - [%unit p=term q=wine] - == - -- -|_ sut=type -++ dash - |= [mil=tape lim=char lam=tape] - ^- tape - =/ esc (~(gas in *(set @tD)) lam) - :- lim - |- ^- tape - ?~ mil [lim ~] - ?: ?| =(lim i.mil) - =('\\' i.mil) - (~(has in esc) i.mil) - == - ['\\' i.mil $(mil t.mil)] - ?: (lte ' ' i.mil) - [i.mil $(mil t.mil)] - ['\\' ~(x ne (rsh 2 i.mil)) ~(x ne (end 2 i.mil)) $(mil t.mil)] -:: -++ deal |=(lum=* (dish dole lum)) -++ dial - |= ham=cape - =+ gid=*(set @ud) - =| top-level=? :: don't need circumfix punctuation - =< `tank`-:$ - |% - ++ many - |= haz=(list wine) - ^- [(list tank) (set @ud)] - ?~ haz [~ gid] - =^ mor gid $(haz t.haz) - =^ dis gid ^$(q.ham i.haz) - [[dis mor] gid] - :: - ++ $ - ^- [tank (set @ud)] - ?- q.ham - %noun :_(gid [%leaf '*' ~]) - %path :_(gid [%leaf '/' ~]) - %type :_(gid [%leaf '#' 't' ~]) - %void :_(gid [%leaf '#' '!' ~]) - %wool :_(gid [%leaf '*' '"' '"' ~]) - %wall :_(gid [%leaf '*' '\'' '\'' ~]) - %yarn :_(gid [%leaf '"' '"' ~]) - [%mato *] :_(gid [%leaf '@' (trip p.q.ham)]) - [%gate *] - =^ sam gid - ?. ?=([%plot * * *] r.q.ham) - ?: ?=(%plot -.r.q.ham) - %- (slog -:$(q.ham r.q.ham) ~) - `gid - `gid - [`u=- +]:$(q.ham i.p.r.q.ham, top-level |) - :_ gid - :+ %rose - :- ?> ?=(%core -.q.q.ham) - ?: ?=(%dry q.p.q.q.q.ham) - " -> " - " ~> " - ?: top-level - ["" ""] - ["(" ")"] - :+ ?~(sam leaf+"_" u.sam) - =/ res (mule |.((~(play ut q.q.ham) p.q.ham))) - ?- -.res - %& duck(sut p.res) - %| leaf+"###" - == - ~ - :: - [%core *] - =^ sam gid - ?. ?=([%plot * * ~] q.q.ham) - `gid - [`u=- +]:$(q.ham i.p.q.q.ham) - :_ gid - ?~ sam - :+ %rose - [[' ' ~] ['<' ~] ['>' ~]] - |- ^- (list tank) - ?~ p.q.ham ~ - [[%leaf (rip 3 i.p.q.ham)] $(p.q.ham t.p.q.ham)] - :+ %rose - [" -> " "" ""] - :+ u.sam - :+ %rose - [[' ' ~] ['<' ~] ['>' ~]] - |- ^- (list tank) - ?~ p.q.ham ~ - [[%leaf (rip 3 i.p.q.ham)] $(p.q.ham t.p.q.ham)] - ~ - :: - [%face *] - =^ cox gid $(q.ham q.q.ham) - :_(gid [%palm [['=' ~] ~ ~ ~] [%leaf (trip p.q.ham)] cox ~]) - :: - [%list *] - =^ cox gid $(q.ham q.q.ham) - :_(gid [%rose [" " (weld (trip p.q.ham) "(") ")"] cox ~]) - :: - [%bcwt *] - =^ coz gid (many p.q.ham) - :_(gid [%rose [[' ' ~] ['?' '(' ~] [')' ~]] coz]) - :: - [%plot *] - =^ coz gid (many p.q.ham) - :_(gid [%rose [[' ' ~] ['[' ~] [']' ~]] coz]) - :: - [%pear *] - :_(gid [%leaf '$' ~(rend co [%$ p.q.ham q.q.ham])]) - :: - [%stop *] - =+ num=~(rend co [%$ %ud p.q.ham]) - ?: (~(has in gid) p.q.ham) - :_(gid [%leaf '#' num]) - =^ cox gid - %= $ - gid (~(put in gid) p.q.ham) - q.ham (~(got by p.ham) p.q.ham) - == - :_(gid [%palm [['.' ~] ~ ~ ~] [%leaf ['^' '#' num]] cox ~]) - :: - [%tree *] - =^ cox gid $(q.ham q.q.ham) - :_(gid [%rose [" " (weld (trip p.q.ham) "(") ")"] cox ~]) - :: - [%unit *] - =^ cox gid $(q.ham q.q.ham) - :_(gid [%rose [" " (weld (trip p.q.ham) "(") ")"] cox ~]) - == - -- -:: -++ dish !: - |= [ham=cape lum=*] ^- tank - ~| [%dish-h ?@(q.ham q.ham -.q.ham)] - ~| [%lump lum] - ~| [%ham ham] - %- need - =| gil=(set [@ud *]) - |- ^- (unit tank) - ?- q.ham - %noun - %= $ - q.ham - ?: ?=(@ lum) - [%mato %$] - :- %plot - |- ^- (list wine) - [%noun ?:(?=(@ +.lum) [[%mato %$] ~] $(lum +.lum))] - == - :: - %path - :- ~ - :+ %rose - [['/' ~] ['/' ~] ~] - |- ^- (list tank) - ?~ lum ~ - ?@ lum !! - ?> ?=(@ -.lum) - [[%leaf (rip 3 -.lum)] $(lum +.lum)] - :: - %type - =+ tyr=|.((dial dole)) - =+ vol=tyr(sut lum) - =+ cis=;;(tank .*(vol [%9 2 %0 1])) - :^ ~ %palm - [~ ~ ~ ~] - [[%leaf '#' 't' '/' ~] cis ~] - :: - %wall - :- ~ - :+ %rose - [[' ' ~] ['<' '|' ~] ['|' '>' ~]] - |- ^- (list tank) - ?~ lum ~ - ?@ lum !! - [[%leaf (trip ;;(@ -.lum))] $(lum +.lum)] - :: - %wool - :- ~ - :+ %rose - [[' ' ~] ['<' '<' ~] ['>' '>' ~]] - |- ^- (list tank) - ?~ lum ~ - ?@ lum !! - [(need ^$(q.ham %yarn, lum -.lum)) $(lum +.lum)] - :: - %yarn - [~ %leaf (dash (tape lum) '"' "\{")] - :: - %void - ~ - :: - [%mato *] - ?. ?=(@ lum) - ~ - :+ ~ - %leaf - ?+ (rash p.q.ham ;~(sfix (cook crip (star low)) (star hig))) - ~(rend co [%$ p.q.ham lum]) - %$ ~(rend co [%$ %ud lum]) - %t (dash (rip 3 lum) '\'' ~) - %tas ['%' ?.(=(0 lum) (rip 3 lum) ['$' ~])] - == - :: - [%gate *] - !! - :: - [%core *] - :: XX needs rethinking for core metal - :: ?. ?=(^ lum) ~ - :: => .(lum `*`lum) - :: =- ?~(tok ~ [~ %rose [[' ' ~] ['<' ~] ['>' ~]] u.tok]) - :: ^= tok - :: |- ^- (unit (list tank)) - :: ?~ p.q.ham - :: =+ den=^$(q.ham q.q.ham) - :: ?~(den ~ [~ u.den ~]) - :: =+ mur=$(p.q.ham t.p.q.ham, lum +.lum) - :: ?~(mur ~ [~ [[%leaf (rip 3 i.p.q.ham)] u.mur]]) - [~ (dial ham)] - :: - [%face *] - =+ wal=$(q.ham q.q.ham) - ?~ wal - ~ - [~ %palm [['=' ~] ~ ~ ~] [%leaf (trip p.q.ham)] u.wal ~] - :: - [%list *] - ?: =(~ lum) - [~ %leaf '~' ~] - =- ?~ tok - ~ - [~ %rose [[' ' ~] ['~' '[' ~] [']' ~]] u.tok] - ^= tok - |- ^- (unit (list tank)) - ?: ?=(@ lum) - ?.(=(~ lum) ~ [~ ~]) - =+ [for=^$(q.ham q.q.ham, lum -.lum) aft=$(lum +.lum)] - ?. &(?=(^ for) ?=(^ aft)) - ~ - [~ u.for u.aft] - :: - [%bcwt *] - |- ^- (unit tank) - ?~ p.q.ham - ~ - =+ wal=^$(q.ham i.p.q.ham) - ?~ wal - $(p.q.ham t.p.q.ham) - wal - :: - [%plot *] - =- ?~ tok - ~ - [~ %rose [[' ' ~] ['[' ~] [']' ~]] u.tok] - ^= tok - |- ^- (unit (list tank)) - ?~ p.q.ham - ~ - ?: ?=([* ~] p.q.ham) - =+ wal=^$(q.ham i.p.q.ham) - ?~(wal ~ [~ [u.wal ~]]) - ?@ lum - ~ - =+ gim=^$(q.ham i.p.q.ham, lum -.lum) - ?~ gim - ~ - =+ myd=$(p.q.ham t.p.q.ham, lum +.lum) - ?~ myd - ~ - [~ u.gim u.myd] - :: - [%pear *] - ?. =(lum q.q.ham) - ~ - =. p.q.ham - (rash p.q.ham ;~(sfix (cook crip (star low)) (star hig))) - =+ fox=$(q.ham [%mato p.q.ham]) - ?> ?=([~ %leaf ^] fox) - ?: ?=(?(%n %tas) p.q.ham) - fox - [~ %leaf '%' p.u.fox] - :: - [%stop *] - ?: (~(has in gil) [p.q.ham lum]) ~ - =+ kep=(~(get by p.ham) p.q.ham) - ?~ kep - ~|([%stop-loss p.q.ham] !!) - $(gil (~(put in gil) [p.q.ham lum]), q.ham u.kep) - :: - [%tree *] - =- ?~ tok - ~ - [~ %rose [[' ' ~] ['{' ~] ['}' ~]] u.tok] - ^= tok - =+ tuk=*(list tank) - |- ^- (unit (list tank)) - ?: =(~ lum) - [~ tuk] - ?. ?=([n=* l=* r=*] lum) - ~ - =+ rol=$(lum r.lum) - ?~ rol - ~ - =+ tim=^$(q.ham q.q.ham, lum n.lum) - ?~ tim - ~ - $(lum l.lum, tuk [u.tim u.rol]) - :: - [%unit *] - ?@ lum - ?.(=(~ lum) ~ [~ %leaf '~' ~]) - ?. =(~ -.lum) - ~ - =+ wal=$(q.ham q.q.ham, lum +.lum) - ?~ wal - ~ - [~ %rose [[' ' ~] ['[' ~] [']' ~]] [%leaf '~' ~] u.wal ~] - == -:: -++ doge - |= ham=cape - =- ?+ woz woz - [%list * [%mato %'ta']] %path - [%list * [%mato %'t']] %wall - [%list * [%mato %'tD']] %yarn - [%list * %yarn] %wool - == - ^= woz - ^- wine - ?. ?=([%stop *] q.ham) - ?: ?& ?= [%bcwt [%pear %n %0] [%plot [%pear %n %0] [%face *] ~] ~] - q.ham - =(1 (met 3 p.i.t.p.i.t.p.q.ham)) - == - [%unit =<([p q] i.t.p.i.t.p.q.ham)] - q.ham - =+ may=(~(get by p.ham) p.q.ham) - ?~ may - q.ham - =+ nul=[%pear %n 0] - ?. ?& ?=([%bcwt *] u.may) - ?=([* * ~] p.u.may) - |(=(nul i.p.u.may) =(nul i.t.p.u.may)) - == - q.ham - =+ din=?:(=(nul i.p.u.may) i.t.p.u.may i.p.u.may) - ?: ?& ?=([%plot [%face *] [%face * %stop *] ~] din) - =(p.q.ham p.q.i.t.p.din) - =(1 (met 3 p.i.p.din)) - =(1 (met 3 p.i.t.p.din)) - == - :+ %list - (cat 3 p.i.p.din p.i.t.p.din) - q.i.p.din - ?: ?& ?= $: %plot - [%face *] - [%face * %stop *] - [[%face * %stop *] ~] - == - din - =(p.q.ham p.q.i.t.p.din) - =(p.q.ham p.q.i.t.t.p.din) - =(1 (met 3 p.i.p.din)) - =(1 (met 3 p.i.t.p.din)) - =(1 (met 3 p.i.t.t.p.din)) - == - :+ %tree - %^ cat - 3 - p.i.p.din - (cat 3 p.i.t.p.din p.i.t.t.p.din) - q.i.p.din - q.ham -:: -++ dole - ^- cape - =+ gil=*(set type) - =+ dex=[p=*(map type @) q=*(map @ wine)] - =< [q.p q] - |- ^- [p=[p=(map type @) q=(map @ wine)] q=wine] - =- [p.tez (doge q.p.tez q.tez)] - ^= tez - ^- [p=[p=(map type @) q=(map @ wine)] q=wine] - ?: (~(meet ut sut) -:!>(*type)) - [dex %type] - ?- sut - %noun [dex sut] - %void [dex sut] - [%atom *] [dex ?~(q.sut [%mato p.sut] [%pear p.sut u.q.sut])] - [%cell *] - =+ hin=$(sut p.sut) - =+ yon=$(dex p.hin, sut q.sut) - :- p.yon - :- %plot - ?:(?=([%plot *] q.yon) [q.hin p.q.yon] [q.hin q.yon ~]) - :: - [%core *] - ?: ?=([[%$ * [[%$ @ *] ~ ~]] ~ ~] q.r.q.sut) - =/ dad $(sut p.sut) - :- p.dad - ~! q.r.q.sut - [%gate q.n.q.q.n.q.r.q.sut sut(r.p.q %gold) q.dad] - =+ yad=$(sut p.sut) - :- p.yad - =+ ^= doy ^- [p=(list @ta) q=wine] - ?: ?=([%core *] q.yad) - [p.q.yad q.q.yad] - [~ q.yad] - :- %core - :_ q.doy - :_ p.doy - %^ cat 3 - %~ rent co - :+ %$ %ud - %- ~(rep by (~(run by q.r.q.sut) |=(tome ~(wyt by q.+<)))) - |=([[@ a=@u] b=@u] (add a b)) - %^ cat 3 - ?-(r.p.q.sut %gold '.', %iron '|', %lead '?', %zinc '&') - =+ gum=(mug q.r.q.sut) - %+ can 3 - :~ [1 (add 'a' (mod gum 26))] - [1 (add 'a' (mod (div gum 26) 26))] - [1 (add 'a' (mod (div gum 676) 26))] - == - :: - [%hint *] - $(sut q.sut) - :: - [%face *] - =+ yad=$(sut q.sut) - ?^(p.sut yad [p.yad [%face p.sut q.yad]]) - :: - [%fork *] - =+ yed=(sort ~(tap in p.sut) aor) - =- [p [%bcwt q]] - |- ^- [p=[p=(map type @) q=(map @ wine)] q=(list wine)] - ?~ yed - [dex ~] - =+ mor=$(yed t.yed) - =+ dis=^$(dex p.mor, sut i.yed) - [p.dis q.dis q.mor] - :: - [%hold *] - =+ hey=(~(get by p.dex) sut) - ?^ hey - [dex [%stop u.hey]] - ?: (~(has in gil) sut) - =+ dyr=+(~(wyt by p.dex)) - [[(~(put by p.dex) sut dyr) q.dex] [%stop dyr]] - =+ rom=$(gil (~(put in gil) sut), sut ~(repo ut sut)) - =+ rey=(~(get by p.p.rom) sut) - ?~ rey - rom - [[p.p.rom (~(put by q.p.rom) u.rey q.rom)] [%stop u.rey]] - == -:: -++ duck (dial dole) --- diff --git a/pkg/arvo/lib/language-server/easy-print.hoon b/pkg/arvo/lib/language-server/easy-print.hoon new file mode 120000 index 000000000..2160e2f5a --- /dev/null +++ b/pkg/arvo/lib/language-server/easy-print.hoon @@ -0,0 +1 @@ +../../../base-dev/lib/language-server/easy-print.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/language-server/json.hoon b/pkg/arvo/lib/language-server/json.hoon deleted file mode 100644 index a817766df..000000000 --- a/pkg/arvo/lib/language-server/json.hoon +++ /dev/null @@ -1,301 +0,0 @@ -/- lsp=language-server -|% -:: -++ util - |% - ++ get-json-string - |= [jon=(map @t json) key=@t] - ^- (unit cord) - =/ cord-jon=(unit json) - (~(get by jon) key) - ?~ cord-jon - ~ - ?> ?=([%s *] u.cord-jon) - `p.u.cord-jon - -- -:: -:: -++ dejs - =, dejs:format - |% - ++ request - |= jon=json - ?> ?=([%o *] jon) - =/ method=cord - %- method - (trip (need (get-json-string:util p.jon 'method'))) - =/ id=cord - (need (get-json-string:util p.jon 'id')) - =/ params=json - (~(got by p.jon) 'params') - ^- all:request:lsp - |^ - ?+ method [%unknown jon] - %text-document--hover (text-document--hover params id) - %text-document--completion (text-document--completion params id) - == - :: - ++ text-document--hover - |= [params=json id=cord] - ^- text-document--hover:request:lsp - :+ %text-document--hover - id - %. params - %: ot - position+position - 'textDocument'^text-document-id - ~ - == - :: - ++ text-document--completion - |= [params=json id=cord] - :+ %text-document--completion id - %. params - %: ot - position+position - 'textDocument'^text-document-id - ~ - == - -- - :: - ++ notification - |= jon=json - ?> ?=([%o *] jon) - =/ method=cord - %- method - (trip (need (get-json-string:util p.jon 'method'))) - =/ params=json - (~(got by p.jon) 'params') - ^- all:notification:lsp - |^ - ?+ method [%unknown jon] - %text-document--did-change - (text-document--did-change params) - %text-document--did-open - (text-document--did-open params) - %text-document--did-save - (text-document--did-save params) - %text-document--did-close - (text-document--did-close params) - == - :: - ++ text-document--did-save - |= jon=json - ^- text-document--did-save:notification:lsp - ?> ?=([%o *] jon) - =/ doc-id - (~(got by p.jon) 'textDocument') - :- %text-document--did-save - (text-document-id doc-id) - :: - ++ text-document--did-close - |= jon=json - ^- text-document--did-close:notification:lsp - ?> ?=([%o *] jon) - =/ doc-id - (~(got by p.jon) 'textDocument') - :- %text-document--did-close - (text-document-id doc-id) - :: - ++ text-document--did-change - |= jon=json - ^- text-document--did-change:notification:lsp - :- %text-document--did-change - %. jon - %: ot - 'textDocument'^text-document-id - 'contentChanges'^text-document-changes - ~ - == - :: - ++ text-document--did-open - |= jon=json - ^- text-document--did-open:notification:lsp - ?> ?=([%o *] jon) - :- %text-document--did-open - (text-document-item (~(got by p.jon) 'textDocument')) - -- - :: Utilities - :: - ++ text-document-item - |= jon=json - ^- text-document-item:lsp - %. jon - %: ot - uri+so - version+(mu ni) - text+so - ~ - == - :: - ++ text-document-id - %: ou - uri+(un so) - version+(uf ~ (pe ~ ni)) - ~ - == - :: - ++ text-document-changes - %- ar - %: ou - range+(uf ~ (pe ~ range)) - 'rangeLength'^(uf ~ (pe ~ ni)) - text+(un so) - ~ - == - :: - ++ method - |= =tape - ^- cord - %- crip %- zing - %+ join "--" - ^- (list ^tape) - %+ turn - ^- (list (list ^tape)) - %+ scan - tape - %+ more - fas - ;~ plug - (star low) - (star ;~(plug (cook |=(a=@ (add a 32)) hig) (star low))) - == - |= words=(list ^tape) - ^- ^tape - (zing (join "-" words)) - :: - ++ range - %: ot - start+position - end+position - ~ - == - :: - ++ position - %: ot - line+ni - character+ni - ~ - == - -- -:: -++ enjs - =, enjs:format - |% - ++ text-document--publish-diagnostics - |= pub=text-document--publish-diagnostics:notification:lsp - ^- json - %: pairs - uri+s+uri.pub - diagnostics+a+(turn diagnostics.pub diagnostic) - ~ - == - ++ notification - |= notification=all:notification:lsp - ^- json - =/ params=json - ?+ -.notification !! - %text-document--publish-diagnostics - (text-document--publish-diagnostics notification) - == - ~! -.notification - =/ method=cord (crip (unparse-method -.notification)) - %: pairs - method+s+method - params+params - ~ - == - :: - ++ response - |= res=all:response:lsp - ^- json - |^ - ?- -.res - %text-document--hover (text-document--hover res) - %text-document--completion (text-document--completion res) - == - :: - ++ wrap-in-id - |= [id=cord res=json] - %: pairs - id+s+id - result+res - ~ - == - ++ text-document--hover - |= hov=text-document--hover:response:lsp - %+ wrap-in-id id.hov - %+ frond 'contents' - ?~ contents.hov - ~ - s+u.contents.hov - :: - ++ text-document--completion - |= com=text-document--completion:response:lsp - %+ wrap-in-id id.com - [%a (turn completion.com completion-item)] - -- - ++ unparse-method - |= =cord - ^- ^tape - %+ rash cord - %+ cook |=(l=(list ^tape) (zing (join "/" l))) - %+ more (jest '--') - %+ cook - |= tapes=(list ^tape) - ^- ^tape - ?~ tapes ~ - %- zing - :- i.tapes - %+ turn t.tapes - |= t=^tape - ^- ^tape - ?~ t ~ - [`@tD`(sub i.t 32) t.t] - %+ more - ;~(less (jest '--') hep) - (star alf) - :: - ++ completion-item - |= com=completion-item:lsp - ^- json - %: pairs - label+s+label.com - detail+s+detail.com - kind+(numb kind.com) - 'documentation'^s+doc.com - 'insertText'^s+insert-text.com - 'insertTextFormat'^(numb insert-text-format.com) - ~ - == - :: - ++ position - |= =position:lsp - ^- json - %: pairs - line+(numb row.position) - character+(numb col.position) - ~ - == - :: - ++ range - |= =range:lsp - ^- json - %: pairs - start+(position start.range) - end+(position end.range) - ~ - == - :: - ++ diagnostic - |= diag=diagnostic:lsp - ^- json - %: pairs - range+(range range.diag) - severity+(numb severity.diag) - message+s+message.diag - ~ - == - :: - -- --- diff --git a/pkg/arvo/lib/language-server/json.hoon b/pkg/arvo/lib/language-server/json.hoon new file mode 120000 index 000000000..96fe5b516 --- /dev/null +++ b/pkg/arvo/lib/language-server/json.hoon @@ -0,0 +1 @@ +../../../base-dev/lib/language-server/json.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/language-server/parser.hoon b/pkg/arvo/lib/language-server/parser.hoon deleted file mode 100644 index cf5779092..000000000 --- a/pkg/arvo/lib/language-server/parser.hoon +++ /dev/null @@ -1,72 +0,0 @@ -:: lifted directly from ford, should probably be in zuse -=, clay -=< pile-rule -|% -++ pile-rule - |= pax=path - %- full - %+ ifix - :_ gay - :: parse optional /? and ignore - :: - ;~(plug gay (punt ;~(plug fas wut gap dem gap))) - |^ - ;~ plug - %+ cook (bake zing (list (list taut))) - %+ rune hep - (most ;~(plug com gaw) taut-rule) - :: - %+ cook (bake zing (list (list taut))) - %+ rune lus - (most ;~(plug com gaw) taut-rule) - :: - %+ rune tis - ;~(plug sym ;~(pfix gap stap)) - :: - %+ rune sig - ;~((glue gap) sym wyde:vast stap) - :: - %+ rune cen - ;~(plug sym ;~(pfix gap ;~(pfix cen sym))) - :: - %+ rune buc - ;~ (glue gap) - sym - ;~(pfix cen sym) - ;~(pfix cen sym) - == - :: - %+ rune tar - ;~ (glue gap) - sym - ;~(pfix cen sym) - stap - == - :: - %+ stag %tssg - (most gap tall:(vang & pax)) - == - :: - ++ pant - |* fel=^rule - ;~(pose fel (easy ~)) - :: - ++ mast - |* [bus=^rule fel=^rule] - ;~(sfix (more bus fel) bus) - :: - ++ rune - |* [bus=^rule fel=^rule] - %- pant - %+ mast gap - ;~(pfix fas bus gap fel) - -- -:: -++ taut-rule - %+ cook |=(taut +<) - ;~ pose - (stag ~ ;~(pfix tar sym)) - ;~(plug (stag ~ sym) ;~(pfix tis sym)) - (cook |=(a=term [`a a]) sym) - == --- diff --git a/pkg/arvo/lib/language-server/parser.hoon b/pkg/arvo/lib/language-server/parser.hoon new file mode 120000 index 000000000..327e1a5de --- /dev/null +++ b/pkg/arvo/lib/language-server/parser.hoon @@ -0,0 +1 @@ +../../../base-dev/lib/language-server/parser.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/language-server/rune-snippet.hoon b/pkg/arvo/lib/language-server/rune-snippet.hoon deleted file mode 100644 index b25e306be..000000000 --- a/pkg/arvo/lib/language-server/rune-snippet.hoon +++ /dev/null @@ -1,532 +0,0 @@ -/- lsp-sur=language-server -/+ auto=language-server-complete -=> -|% -++ snippet - |= [rune=tape text=tape] - ^- json - =, enjs:format - %- pairs - :~ 'label'^(tape rune) - 'insertTextFormat'^(numb 2) - 'insertText'^(tape text) - == -:: -++ runes - ^- (list (option:auto tape)) - :~ :- '|$' - """ - $\{1:sample} - $\{2:body} - """ - :- '|_' - """ - $\{1:sample} - ++ $\{2:arm} - $\{3:body} - -- - """ - :- '|:' - """ - $\{1:sample} - $\{2:body} - """ - :- '|%' - """ - - ++ $\{1:arm} - $\{2:body} - -- - """ - :- '|.' - """ - $\{1:body} - """ - :- '|^' - """ - - $\{1:body} - :: - ++ $\{2:arm} - $\{3:body} - -- - """ - :- '|-' - """ - $\{1:body} - """ - :- '|~' - """ - $\{1:sample} - $\{2:body} - """ - :- '|*' - """ - $\{1:sample} - $\{2:body} - """ - :- '|=' - """ - $\{1:sample} - $\{2:body} - """ - :- '|@' - """ - ++ $\{1:arm} - $\{2:body} - -- - """ - :- '|?' - """ - $\{1:sample} - """ - :: - :- ':_' - """ - $\{1:tail} - $\{2:head} - """ - :- ':^' - """ - $\{1:car} - $\{2:cadr} - $\{3:caddr} - $\{4:cddr} - """ - :- ':-' - """ - $\{1:tail} - $\{2:head} - """ - :- ':+' - """ - $\{1:car} - $\{2:cadr} - $\{3:cddr} - """ - :- ':~' - """ - $\{1:item} - == - """ - :- ':*' - """ - $\{1:item} - == - """ - :: - :- '%_' - """ - $\{1:target} - $\{2:wing} $\{3:new-value} - == - """ - :- '%.' - """ - $\{1:arg} - $\{2:gate} - """ - :- '%-' - """ - $\{1:gate} - $\{2:arg} - """ - :- '%:' - """ - $\{1:gate} - $\{2:args} - == - """ - :- '%*' - """ - $\{1:target-wing} $\{2:from} - $\{3:wing} $\{4:new-value} - == - """ - :- '%^' - """ - $\{1:gate} - $\{2:arg1} - $\{3:arg2} - $\{4:arg3} - """ - :- '%+' - """ - $\{1:gate} - $\{2:arg1} - $\{3:arg2} - """ - :- '%~' - """ - $\{1:arm} - $\{2:core} - $\{3:arg} - """ - :- '%=' - """ - $\{1:target} - $\{2:wing} $\{3:new-value} - == - """ - :: - :- '.^' - """ - $\{1:mold} - $\{2:path} - """ - :- '.+' - """ - $\{1:atom} - """ - :- '.*' - """ - $\{1:subject} - $\{2:formula} - """ - :- '.=' - """ - $\{1:a} - $\{2:b} - """ - :- '.?' - """ - $\{1:noun} - """ - :: - :- '^|' - """ - $\{1:iron-core} - """ - :- '^.' - """ - $\{1:a} - $\{2:b} - """ - :- '^+' - """ - $\{1:like} - $\{2:body} - """ - :- '^-' - """ - $\{1:type} - $\{2:body} - """ - :- '^&' - """ - $\{1:zinc-core} - """ - :- '^~' - """ - $\{1:constant} - """ - :- '^=' - """ - $\{1:face} - $\{2:body} - """ - :- '^?' - """ - $\{1:lead-core} - """ - :- '^*' - """ - $\{1:type} - """ - :- '^:' - """ - $\{1:type} - """ - :: - :- '~|' - """ - $\{1:trace} - $\{2:body} - """ - :- '~_' - """ - $\{1:tank} - $\{2:body} - """ - :- '~%' - """ - $\{1:name} - $\{2:parent} - ~ - $\{3:body} - """ - :- '~/' - """ - $\{1:name} - $\{2:body} - """ - :- '~<' - """ - $\{1:hint} - $\{2:body} - """ - :- '~>' - """ - $\{1:hint} - $\{2:body} - """ - :- '~$' - """ - $\{1:name} - $\{2:body} - """ - :- '~+' - """ - - $\{1:body} - """ - :- '~&' - """ - $\{1:printf} - $\{2:body} - """ - :- '~=' - """ - $\{1:a} - $\{2:b} - """ - :- '~?' - """ - $\{1:condition} - $\{2:printf} - $\{3:body} - """ - :- '~!' - """ - $\{1:type} - $\{2:body} - """ - :: - :- ';=' - """ - $\{1:manx} - == - """ - :- ';:' - """ - $\{1:gate} - $\{2:args} - == - """ - :- ';/' - """ - $\{1:tape} - """ - :- ';<' - """ - $\{1:type} bind:m $\{2:body1} - $\{3:body2} - """ - :- ';~' - """ - $\{1:gate} - $\{2:args} - == - """ - :- ';;' - """ - $\{1:type} - $\{2:body} - """ - :: - :- '=|' - """ - $\{1:type} - $\{2:body} - """ - :- '=:' - """ - $\{1:wing} $\{2:value} - == - $\{3:body} - """ - :- '=/' - """ - $\{1:face} - $\{2:value} - $\{3:body} - """ - :- '=;' - """ - $\{1:face} - $\{2:body} - $\{3:value} - """ - :- '=.' - """ - $\{1:wing} - $\{2:value} - $\{3:body} - """ - :- '=?' - """ - $\{1:wing} $\{2:condition} - $\{3:value} - $\{4:body} - """ - :- '=<' - """ - $\{1:formula} - $\{2:subject} - """ - :- '=-' - """ - $\{1:body} - $\{2:value} - """ - :- '=>' - """ - $\{1:subject} - $\{2:formula} - """ - :- '=^' - """ - $\{1:face} $\{2:wing} - $\{3:computation} - $\{4:body} - """ - :- '=+' - """ - $\{1:value} - $\{2:body} - """ - :- '=~' - """ - - $\{1:body} - """ - :- '=*' - """ - $\{1:alias} $\{2:value} - $\{3:body} - """ - :- '=,' - """ - $\{1:alias} - $\{3:body} - """ - :: - :- '?|' - """ - $\{1:condition} - == - """ - :- '?-' - """ - $\{1:case} - $\{2:type} $\{3:value} - == - """ - :- '?:' - """ - $\{1:if} - $\{2:then} - $\{3:else} - """ - :- '?.' - """ - $\{1:if} - $\{2:else} - $\{3:then} - """ - :- '?^' - """ - $\{1:value} - $\{2:if-cell} - $\{3:if-atom} - """ - :- '?<' - """ - $\{1:assertion} - $\{2:body} - """ - :- '?>' - """ - $\{1:assertion} - $\{2:body} - """ - :- '?+' - """ - $\{1:case} $\{2:else} - $\{3:type} $\{4:value} - == - """ - :- '?&' - """ - $\{1:condition} - == - """ - :- '?@' - """ - $\{1:value} - $\{2:if-atom} - $\{3:if-cell} - """ - :- '?~' - """ - $\{1:value} - $\{2:if-null} - $\{3:if-nonnull} - """ - :- '?#' - """ - $\{1:skin} - $\{2:wing} - """ - :- '?=' - """ - $\{1:type} - $\{2:wing} - """ - :- '?!' - """ - $\{1:loobean} - """ - :: - :- '!,' - """ - *hoon - $\{1:ast} - """ - :- '!>' - """ - $\{1:value} - """ - :- '!;' - """ - $\{1:type} - $\{2:body} - """ - :- '!=' - """ - $\{1:body} - """ - :- '!@' - """ - $\{1:wing} - $\{2:if-exists} - $\{3:if-not-exists} - """ - :- '!?' - """ - $\{1:version} - $\{2:body} - """ - :- '!!' - "" - == --- -|= rune=tape -^- (list completion-item:lsp-sur) -=? rune =(' ' (snag 0 rune)) - (slag 1 rune) -~& rune -%+ turn (search-prefix:auto (crip rune) runes) -|= [name=cord snippet=tape] -^- completion-item:lsp-sur -[name 1 '' '' (crip snippet) 2] diff --git a/pkg/arvo/lib/language-server/rune-snippet.hoon b/pkg/arvo/lib/language-server/rune-snippet.hoon new file mode 120000 index 000000000..387505b59 --- /dev/null +++ b/pkg/arvo/lib/language-server/rune-snippet.hoon @@ -0,0 +1 @@ +../../../base-dev/lib/language-server/rune-snippet.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/server.hoon b/pkg/arvo/lib/server.hoon deleted file mode 100644 index 431b5db8a..000000000 --- a/pkg/arvo/lib/server.hoon +++ /dev/null @@ -1,159 +0,0 @@ -=, eyre -|% -+$ request-line - $: [ext=(unit @ta) site=(list @t)] - args=(list [key=@t value=@t]) - == -:: +parse-request-line: take a cord and parse out a url -:: -++ parse-request-line - |= url=@t - ^- request-line - (fall (rush url ;~(plug apat:de-purl:html yque:de-purl:html)) [[~ ~] ~]) -:: -++ manx-to-octs - |= man=manx - ^- octs - (as-octt:mimes:html (en-xml:html man)) -:: -++ json-to-octs - |= jon=json - ^- octs - (as-octt:mimes:html (en-json:html jon)) -:: -++ app - |% - :: - :: +require-authorization: - :: redirect to the login page when unauthenticated - :: otherwise call handler on inbound request - :: - ++ require-authorization - |= $: =inbound-request:eyre - handler=$-(inbound-request:eyre simple-payload:http) - == - ^- simple-payload:http - :: - ?: authenticated.inbound-request - ~! this - ~! +:*handler - (handler inbound-request) - :: - =- [[307 ['location' -]~] ~] - %^ cat 3 - '/~/login?redirect=' - url.request.inbound-request - :: - :: +require-authorization-simple: - :: redirect to the login page when unauthenticated - :: otherwise pass through simple-paylod - :: - ++ require-authorization-simple - |= [=inbound-request:eyre =simple-payload:http] - ^- simple-payload:http - :: - ?: authenticated.inbound-request - ~! this - simple-payload - :: - =- [[307 ['location' -]~] ~] - %^ cat 3 - '/~/login?redirect=' - url.request.inbound-request - :: - ++ give-simple-payload - |= [eyre-id=@ta =simple-payload:http] - ^- (list card:agent:gall) - =/ header-cage - [%http-response-header !>(response-header.simple-payload)] - =/ data-cage - [%http-response-data !>(data.simple-payload)] - :~ [%give %fact ~[/http-response/[eyre-id]] header-cage] - [%give %fact ~[/http-response/[eyre-id]] data-cage] - [%give %kick ~[/http-response/[eyre-id]] ~] - == - -- -++ gen - |% - :: - ++ max-1-da ['cache-control' 'max-age=86400'] - ++ max-1-wk ['cache-control' 'max-age=604800'] - :: - ++ html-response - =| cache=? - |= =octs - ^- simple-payload:http - :_ `octs - [200 [['content-type' 'text/html'] ?:(cache [max-1-wk ~] ~)]] - :: - ++ css-response - =| cache=? - |= =octs - ^- simple-payload:http - :_ `octs - [200 [['content-type' 'text/css'] ?:(cache [max-1-wk ~] ~)]] - :: - ++ js-response - =| cache=? - |= =octs - ^- simple-payload:http - :_ `octs - [200 [['content-type' 'text/javascript'] ?:(cache [max-1-wk ~] ~)]] - :: - ++ png-response - =| cache=? - |= =octs - ^- simple-payload:http - :_ `octs - [200 [['content-type' 'image/png'] ?:(cache [max-1-wk ~] ~)]] - :: - ++ svg-response - =| cache=? - |= =octs - ^- simple-payload:http - :_ `octs - [200 [['content-type' 'image/svg+xml'] ?:(cache [max-1-wk ~] ~)]] - :: - ++ ico-response - |= =octs - ^- simple-payload:http - [[200 [['content-type' 'image/x-icon'] max-1-wk ~]] `octs] - :: - ++ woff2-response - =| cache=? - |= =octs - ^- simple-payload:http - [[200 [['content-type' 'font/woff2'] max-1-wk ~]] `octs] - :: - ++ json-response - =| cache=_| - |= =json - ^- simple-payload:http - :_ `(json-to-octs json) - [200 [['content-type' 'application/json'] ?:(cache [max-1-da ~] ~)]] - :: - ++ manx-response - =| cache=_| - |= man=manx - ^- simple-payload:http - :_ `(manx-to-octs man) - [200 [['content-type' 'text/html'] ?:(cache [max-1-da ~] ~)]] - :: - ++ not-found - ^- simple-payload:http - [[404 ~] ~] - :: - ++ login-redirect - |= =request:http - ^- simple-payload:http - =- [[307 ['location' -]~] ~] - %^ cat 3 - '/~/login?redirect=' - url.request - :: - ++ redirect - |= redirect=cord - ^- simple-payload:http - [[307 ['location' redirect]~] ~] - -- --- diff --git a/pkg/arvo/lib/server.hoon b/pkg/arvo/lib/server.hoon new file mode 120000 index 000000000..6176cfc00 --- /dev/null +++ b/pkg/arvo/lib/server.hoon @@ -0,0 +1 @@ +../../base-dev/lib/server.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/shoe.hoon b/pkg/arvo/lib/shoe.hoon deleted file mode 100644 index 0348e10e5..000000000 --- a/pkg/arvo/lib/shoe.hoon +++ /dev/null @@ -1,532 +0,0 @@ -:: shoe: console application library -:: -:: /lib/sole: draw some characters -:: /lib/shoe: draw the rest of the fscking app -:: -:: call +agent with a type, then call the resulting function with a core -:: of the shape described in +shoe. -:: you may produce classic gall cards and "shoe-effects", shorthands for -:: sending cli events to connected clients. -:: default implementations for the shoe-specific arms are in +default. -:: for a simple usage example, see /app/shoe. -:: -/- *sole -/+ sole, auto=language-server-complete -|% -+$ state-0 - $: %0 - soles=(map @ta sole-share) - == -:: $card: standard gall cards plus shoe effects -:: -+$ card - $% card:agent:gall - [%shoe sole-ids=(list @ta) effect=shoe-effect] :: ~ sends to all soles - == -:: $shoe-effect: easier sole-effects -:: -+$ shoe-effect - $% :: %sole: raw sole-effect - :: - [%sole effect=sole-effect] - :: %table: sortable, filterable data, with suggested column char widths - :: - [%table head=(list dime) wide=(list @ud) rows=(list (list dime))] - :: %row: line sections with suggested char widths - :: - [%row wide=(list @ud) cols=(list dime)] - == -:: +shoe: gall agent core with extra arms -:: -++ shoe - |* command-type=mold - $_ ^| - |_ bowl:gall - :: +command-parser: input parser for a specific session - :: - :: if the head of the result is true, instantly run the command - :: - ++ command-parser - |~ sole-id=@ta - |~(nail *(like [? command-type])) - :: +tab-list: autocomplete options for the session (to match +command-parser) - :: - ++ tab-list - |~ sole-id=@ta - :: (list [@t tank]) - *(list (option:auto tank)) - :: +on-command: called when a valid command is run - :: - ++ on-command - |~ [sole-id=@ta command=command-type] - *(quip card _^|(..on-init)) - :: - ++ can-connect - |~ sole-id=@ta - *? - :: - ++ on-connect - |~ sole-id=@ta - *(quip card _^|(..on-init)) - :: - ++ on-disconnect - |~ sole-id=@ta - *(quip card _^|(..on-init)) - :: - ::NOTE standard gall agent arms below, though they may produce %shoe cards - :: - ++ on-init - *(quip card _^|(..on-init)) - :: - ++ on-save - *vase - :: - ++ on-load - |~ vase - *(quip card _^|(..on-init)) - :: - ++ on-poke - |~ [mark vase] - *(quip card _^|(..on-init)) - :: - ++ on-watch - |~ path - *(quip card _^|(..on-init)) - :: - ++ on-leave - |~ path - *(quip card _^|(..on-init)) - :: - ++ on-peek - |~ path - *(unit (unit cage)) - :: - ++ on-agent - |~ [wire sign:agent:gall] - *(quip card _^|(..on-init)) - :: - ++ on-arvo - |~ [wire sign-arvo] - *(quip card _^|(..on-init)) - :: - ++ on-fail - |~ [term tang] - *(quip card _^|(..on-init)) - -- -:: +default: bare-minimum implementations of shoe arms -:: -++ default - |* [shoe=* command-type=mold] - |_ =bowl:gall - ++ command-parser - |= sole-id=@ta - (easy *[? command-type]) - :: - ++ tab-list - |= sole-id=@ta - ~ - :: - ++ on-command - |= [sole-id=@ta command=command-type] - [~ shoe] - :: - ++ can-connect - |= sole-id=@ta - (team:title [our src]:bowl) - :: - ++ on-connect - |= sole-id=@ta - [~ shoe] - :: - ++ on-disconnect - |= sole-id=@ta - [~ shoe] - -- -:: +agent: creates wrapper core that handles sole events and calls shoe arms -:: -++ agent - |* command-type=mold - |= =(shoe command-type) - =| state-0 - =* state - - ^- agent:gall - => - |% - ++ deal - |= cards=(list card) - %+ turn cards - |= =card - ^- card:agent:gall - ?. ?=(%shoe -.card) card - ?- -.effect.card - %sole - =- [%give %fact - %sole-effect !>(effect.effect.card)] - %+ turn - ?^ sole-ids.card sole-ids.card - ~(tap in ~(key by soles)) - |= sole-id=@ta - /sole/[sole-id] - :: - %table - =; fez=(list sole-effect) - $(effect.card [%sole %mor fez]) - =, +.effect.card - :- (row:draw & wide head) - %+ turn rows - (cury (cury row:draw |) wide) - :: - %row - $(effect.card [%sole (row:draw | +.effect.card)]) - == - -- - :: - |_ =bowl:gall - +* this . - og ~(. shoe bowl) - :: - ++ on-init - ^- (quip card:agent:gall agent:gall) - =^ cards shoe on-init:og - [(deal cards) this] - :: - ++ on-save !>([%shoe-app on-save:og state]) - :: - ++ on-load - |= old-state=vase - ^- (quip card:agent:gall agent:gall) - :: we could be upgrading from a shoe-less app, in which case the vase - :: contains inner application state instead of our +on-save. - :: to distinguish between the two, we check for the presence of our own - :: +on-save tag in the vase. - :: - ?. ?=([%shoe-app ^] q.old-state) - =^ cards shoe (on-load:og old-state) - [(deal cards) this] - =^ old-inner state +:!<([%shoe-app vase state-0] old-state) - =^ cards shoe (on-load:og old-inner) - [(deal cards) this] - :: - ++ on-poke - |= [=mark =vase] - ^- (quip card:agent:gall agent:gall) - ?. ?=(%sole-action mark) - =^ cards shoe (on-poke:og mark vase) - [(deal cards) this] - :: - =/ act !<(sole-action vase) - =* sole-id id.act - =/ cli-state=sole-share - (~(gut by soles) sole-id *sole-share) - |^ =^ [cards=(list card) =_cli-state] shoe - ?- -.dat.act - %det (apply-edit +.dat.act) - %clr [[~ cli-state] shoe] - %ret try-command - %tab [(tab +.dat.act) shoe] - == - :- (deal cards) - this(soles (~(put by soles) sole-id cli-state)) - :: - ++ effect - |= =sole-effect - ^- card - [%shoe [sole-id]~ %sole sole-effect] - :: - ++ apply-edit - |= =sole-change - ^+ [[*(list card) cli-state] shoe] - =^ inverse cli-state - (~(transceive sole cli-state) sole-change) - :: res: & for fully parsed, | for parsing failure at location - :: - =/ res=(each (unit [run=? cmd=command-type]) @ud) - %+ rose (tufa buf.cli-state) - (command-parser:og sole-id) - ?: ?=(%& -.res) - :: only auto-run eligible commands if they were typed out - :: (that is, not retrieved from command history) - :: - ?. &(?=(^ p.res) run.u.p.res !?=(%set -.ted.sole-change)) - [[~ cli-state] shoe] - (run-command cmd.u.p.res) - :_ shoe - :: parsing failed - :: - ?. &(?=(%del -.inverse) =(+(p.inverse) (lent buf.cli-state))) - :: if edit was somewhere in the middle, let it happen anyway - :: - [~ cli-state] - :: if edit was insertion at buffer tail, revert it - :: - =^ undo cli-state - (~(transmit sole cli-state) inverse) - :_ cli-state - :_ ~ - %+ effect %mor - :~ [%det undo] :: undo edit - [%err p.res] :: cursor to error location - == - :: - ++ try-command - ^+ [[*(list card) cli-state] shoe] - =/ res=(unit [? cmd=command-type]) - %+ rust (tufa buf.cli-state) - (command-parser:og sole-id) - ?^ res (run-command cmd.u.res) - [[[(effect %bel ~)]~ cli-state] shoe] - :: - ++ run-command - |= cmd=command-type - ^+ [[*(list card) cli-state] shoe] - =^ cards shoe (on-command:og sole-id cmd) - :: clear buffer - :: - =^ clear cli-state (~(transmit sole cli-state) [%set ~]) - =- [[[- cards] cli-state] shoe] - %+ effect %mor - :~ [%nex ~] - [%det clear] - == - :: - ++ tab - |= pos=@ud - ^- (quip card _cli-state) - =+ (get-id-cord:auto pos (tufa buf.cli-state)) - =/ needle=term - (fall id %$) - :: autocomplete empty command iff user at start of command - :: - =/ options=(list (option:auto tank)) - (search-prefix:auto needle (tab-list:og sole-id)) - =/ advance=term - (longest-match:auto options) - =/ to-send=tape - %- trip - (rsh [3 (met 3 needle)] advance) - =/ send-pos=@ud - %+ add pos - (met 3 (fall forward '')) - =| cards=(list card) - :: only render the option list if we couldn't complete anything - :: - =? cards &(?=(~ to-send) ?=(^ options)) - [(effect %tab options) cards] - |- ^- (quip card _cli-state) - ?~ to-send - [(flop cards) cli-state] - =^ char cli-state - (~(transmit sole cli-state) [%ins send-pos `@c`i.to-send]) - %_ $ - cards [(effect %det char) cards] - send-pos +(send-pos) - to-send t.to-send - == - -- - :: - ++ on-watch - |= =path - ^- (quip card:agent:gall agent:gall) - ?. ?=([%sole @ ~] path) - =^ cards shoe - (on-watch:og path) - [(deal cards) this] - =* sole-id i.t.path - ?> (can-connect:og sole-id) - =. soles (~(put by soles) sole-id *sole-share) - =^ cards shoe - (on-connect:og sole-id) - :_ this - %- deal - :_ cards - [%shoe [sole-id]~ %sole %pro & dap.bowl "> "] - :: - ++ on-leave - |= =path - ^- (quip card:agent:gall agent:gall) - =^ cards shoe (on-leave:og path) - [(deal cards) this] - :: - ++ on-peek - |= =path - ^- (unit (unit cage)) - ?. =(/x/dbug/state path) ~ - ``noun+(slop on-save:og !>(shoe=state)) - :: - ++ on-agent - |= [=wire =sign:agent:gall] - ^- (quip card:agent:gall agent:gall) - =^ cards shoe (on-agent:og wire sign) - [(deal cards) this] - :: - ++ on-arvo - |= [=wire =sign-arvo] - ^- (quip card:agent:gall agent:gall) - =^ cards shoe (on-arvo:og wire sign-arvo) - [(deal cards) this] - :: - ++ on-fail - |= [=term =tang] - ^- (quip card:agent:gall agent:gall) - =^ cards shoe (on-fail:og term tang) - [(deal cards) this] - -- -:: -++ draw - |% - ++ row - |= [bold=? wide=(list @ud) cols=(list dime)] - ^- sole-effect - :- %mor - ^- (list sole-effect) - =/ cows=(list [wid=@ud col=dime]) - %- head - %^ spin cols wide - |= [col=dime wiz=(list @ud)] - ~| [%too-few-wide col] - ?> ?=(^ wiz) - [[i.wiz col] t.wiz] - =/ cobs=(list [wid=@ud (list tape)]) - (turn cows col-as-lines) - =+ [lin=0 any=|] - =| fez=(list sole-effect) - |- ^+ fez - =; out=tape - :: done when we're past the end of all columns - :: - ?: (levy out (cury test ' ')) - (flop fez) - =; fec=sole-effect - $(lin +(lin), fez [fec fez]) - ?. bold txt+out - klr+[[`%br ~ ~]^[(crip out)]~]~ - %+ roll cobs - |= [[wid=@ud lines=(list tape)] out=tape] - %+ weld out - %+ weld ?~(out "" " ") - =+ l=(swag [lin 1] lines) - ?^(l i.l (reap wid ' ')) - :: - ++ col-as-lines - |= [wid=@ud col=dime] - ^- [@ud (list tape)] - :- wid - %+ turn - (break wid (col-as-text col) (break-sets -.col)) - (cury (cury pad wid) (alignment -.col)) - :: - ++ col-as-text - |= col=dime - ^- tape - ?+ p.col (scow col) - %t (trip q.col) - %tas ['%' (scow col)] - == - :: - ++ alignment - |= wut=@ta - ^- ?(%left %right) - ?: ?=(?(%t %ta %tas %da) wut) - %left - %right - :: - ++ break-sets - |= wut=@ta - :: for: may break directly before these characters - :: aft: may break directly after these characters - :: new: always break on these characters, consuming them - :: - ^- [for=(set @t) aft=(set @t) new=(set @t)] - ?+ wut [(sy " ") (sy ".:-/") (sy "\0a")] - ?(%p %q) [(sy "-") (sy "-") ~] - %ux [(sy ".") ~ ~] - == - :: - ++ break - |= [wid=@ud cot=tape brs=_*break-sets] - ^- (list tape) - ~| [wid cot] - ?: =("" cot) ~ - =; [lin=tape rem=tape] - [lin $(cot rem)] - :: take snip of max width+1, search for breakpoint on that. - :: we grab one char extra, to look-ahead for for.brs. - :: later on, we always transfer _at least_ the extra char. - :: - =^ lin=tape cot - [(scag +(wid) cot) (slag +(wid) cot)] - =+ len=(lent lin) - :: find the first newline character - :: - =/ new=(unit @ud) - =+ new=~(tap in new.brs) - =| las=(unit @ud) - |- - ?~ new las - $(new t.new, las (hunt lth las (find [i.new]~ lin))) - :: if we found a newline, break on it - :: - ?^ new - :- (scag u.new lin) - (weld (slag +(u.new) lin) cot) - :: if it fits, we're done - :: - ?: (lte len wid) - [lin cot] - =+ nil=(flop lin) - :: search for latest aft match - :: - =/ aft=(unit @ud) - :: exclude the look-ahead character from search - :: - =. len (dec len) - =. nil (slag 1 nil) - =- ?~(- ~ `+(u.-)) - ^- (unit @ud) - =+ aft=~(tap in aft.brs) - =| las=(unit @ud) - |- - ?~ aft (bind las (cury sub (dec len))) - $(aft t.aft, las (hunt lth las (find [i.aft]~ nil))) - :: search for latest for match - :: - =/ for=(unit @ud) - =+ for=~(tap in for.brs) - =| las=(unit @ud) - |- - ?~ for (bind las (cury sub (dec len))) - =- $(for t.for, las (hunt lth las -)) - =+ (find [i.for]~ nil) - :: don't break before the first character - :: - ?:(=(`(dec len) -) ~ -) - :: if any result, break as late as possible - :: - =+ brk=(hunt gth aft for) - ?~ brk - :: lin can't break, produce it in its entirety - :: (after moving the look-ahead character back) - :: - :- (scag wid lin) - (weld (slag wid lin) cot) - :- (scag u.brk lin) - =. cot (weld (slag u.brk lin) cot) - :: eat any leading whitespace the next line might have, "clean break" - :: - |- ^+ cot - ?~ cot ~ - ?. ?=(?(%' ' %'\09') i.cot) - cot - $(cot t.cot) - :: - ++ pad - |= [wid=@ud lyn=?(%left %right) lin=tape] - ^+ lin - =+ l=(lent lin) - ?: (gte l wid) lin - =+ p=(reap (sub wid l) ' ') - ?- lyn - %left (weld lin p) - %right (weld p lin) - == - -- --- diff --git a/pkg/arvo/lib/shoe.hoon b/pkg/arvo/lib/shoe.hoon new file mode 120000 index 000000000..a4aab1dd7 --- /dev/null +++ b/pkg/arvo/lib/shoe.hoon @@ -0,0 +1 @@ +../../base-dev/lib/shoe.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/skeleton.hoon b/pkg/arvo/lib/skeleton.hoon deleted file mode 100644 index 982c371b8..000000000 --- a/pkg/arvo/lib/skeleton.hoon +++ /dev/null @@ -1,51 +0,0 @@ -:: Similar to default-agent except crashes everywhere -^- agent:gall -|_ bowl:gall -++ on-init - ^- (quip card:agent:gall agent:gall) - !! -:: -++ on-save - ^- vase - !! -:: -++ on-load - |~ old-state=vase - ^- (quip card:agent:gall agent:gall) - !! -:: -++ on-poke - |~ in-poke-data=cage - ^- (quip card:agent:gall agent:gall) - !! -:: -++ on-watch - |~ path - ^- (quip card:agent:gall agent:gall) - !! -:: -++ on-leave - |~ path - ^- (quip card:agent:gall agent:gall) - !! -:: -++ on-peek - |~ path - ^- (unit (unit cage)) - !! -:: -++ on-agent - |~ [wire sign:agent:gall] - ^- (quip card:agent:gall agent:gall) - !! -:: -++ on-arvo - |~ [wire =sign-arvo] - ^- (quip card:agent:gall agent:gall) - !! -:: -++ on-fail - |~ [term tang] - ^- (quip card:agent:gall agent:gall) - !! --- diff --git a/pkg/arvo/lib/skeleton.hoon b/pkg/arvo/lib/skeleton.hoon new file mode 120000 index 000000000..77626a327 --- /dev/null +++ b/pkg/arvo/lib/skeleton.hoon @@ -0,0 +1 @@ +../../base-dev/lib/skeleton.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/sole.hoon b/pkg/arvo/lib/sole.hoon deleted file mode 100644 index 66684668a..000000000 --- a/pkg/arvo/lib/sole.hoon +++ /dev/null @@ -1,139 +0,0 @@ -:: -:::: /hoon/sole/lib - :: -/? 310 -/- *sole -:::: - :: -|_ sole-share :: shared-state engine -++ abet +< -++ apply - |= ted=sole-edit - ^+ +> - ?- -.ted - %del +>.$(buf (weld (scag p.ted buf) (slag +(p.ted) buf))) - %ins +>.$(buf (weld (scag p.ted buf) `_buf`[q.ted (slag p.ted buf)])) - %mor |- ^+ +>.^$ - ?~ p.ted - +>.^$ - $(p.ted t.p.ted, +>.^$ ^$(ted i.p.ted)) - %nop +>.$ - %set +>.$(buf p.ted) - == -:: -:::: -:: ++transmute: symmetric operational transformation. -:: -:: for any sole state +>, obeys -:: -:: =+ [x=(transmute a b) y=(transmute b a)] -:: .= (apply:(apply a) x) -:: (apply:(apply b) y) -:: -++ transmute :: dex as after sin - |= [sin=sole-edit dex=sole-edit] - ~| [%transmute sin dex] - ^- sole-edit - ?: ?=(%mor -.sin) - |- ^- sole-edit - ?~ p.sin dex - $(p.sin t.p.sin, dex ^$(sin i.p.sin)) - :: - ?: ?=(%mor -.dex) - :- %mor - |- ^- (list sole-edit) - ?~ p.dex ~ - [^$(dex i.p.dex) $(p.dex t.p.dex)] - :: - ?: |(?=(%nop -.sin) ?=(%nop -.dex)) dex - ?: ?=(%set -.sin) [%nop ~] - ?: ?=(%set -.dex) dex - :: - ?- -.sin - %del - ?- -.dex - %del ?: =(p.sin p.dex) [%nop ~] - ?:((lth p.sin p.dex) dex(p (dec p.dex)) dex) - %ins ?:((lth p.sin p.dex) dex(p (dec p.dex)) dex) - == - :: - %ins - ?- -.dex - %del ?:((lte p.sin p.dex) dex(p +(p.dex)) dex) - %ins ?: =(p.sin p.dex) - ?:((lth q.sin q.dex) dex dex(p +(p.dex))) - ?:((lte p.sin p.dex) dex(p +(p.dex)) dex) - == - == -:: -++ commit :: local change - |= ted=sole-edit - ^- sole-share - abet:(apply(own.ven +(own.ven), leg [ted leg]) ted) -:: -:::: -:: ++inverse: inverse of change in context. -:: -:: for any sole state +>, obeys -:: -:: =(+> (apply:(apply a) (inverse a))) -:: -++ inverse :: relative inverse - |= ted=sole-edit - ^- sole-edit - =. ted ?.(?=([%mor * ~] ted) ted i.p.ted) - ?- -.ted - %del [%ins p.ted (snag p.ted buf)] - %ins [%del p.ted] - %mor :- %mor - %- flop - |- ^- (list sole-edit) - ?~ p.ted ~ - :- ^$(ted i.p.ted) - $(p.ted t.p.ted, +>.^$ (apply i.p.ted)) - %nop [%nop ~] - %set [%set buf] - == -:: -++ receive :: naturalize event - |= sole-change - ^- [sole-edit sole-share] - ?. &(=(his.ler his.ven) (lte own.ler own.ven)) - ~| [%receive-sync his+[his.ler his.ven] own+[own.ler own.ven]] - !! - ?> &(=(his.ler his.ven) (lte own.ler own.ven)) - ?> |(!=(own.ler own.ven) =(`@`0 haw) =(haw (sham buf))) - =. leg (scag (sub own.ven own.ler) leg) - :: ~? !=(own.ler own.ven) [%miss-leg leg] - =+ dat=(transmute [%mor leg] ted) - :: ~? !=(~ leg) [%transmute from+ted to+dat ~] - [dat abet:(apply(his.ven +(his.ven)) dat)] -:: -++ remit :: conditional accept - |= [cal=sole-change ask=$-((list @c) ?)] - ^- [(unit sole-change) sole-share] - =+ old=buf - =^ dat +>+<.$ (receive cal) - ?: (ask buf) - [~ +>+<.$] - =^ lic +>+<.$ (transmit (inverse(buf old) dat)) - [`lic +>+<.$] -:: -++ transmit :: outgoing change - |= ted=sole-edit - ^- [sole-change sole-share] - [[[his.ven own.ven] (sham buf) ted] (commit ted)] -:: -++ transceive :: receive and invert - |= sole-change - ^- [sole-edit sole-share] - =+ old=buf - =^ dat +>+<.$ (receive +<.$) - [(inverse(buf old) dat) +>+<.$] -:: -++ transpose :: adjust position - |= pos=@ud - =+ dat=(transmute [%mor leg] [%ins pos `@c`0]) - ?> ?=(%ins -.dat) - p.dat --- diff --git a/pkg/arvo/lib/sole.hoon b/pkg/arvo/lib/sole.hoon new file mode 120000 index 000000000..f776890f2 --- /dev/null +++ b/pkg/arvo/lib/sole.hoon @@ -0,0 +1 @@ +../../base-dev/lib/sole.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/strand.hoon b/pkg/arvo/lib/strand.hoon deleted file mode 100644 index b618f2d4e..000000000 --- a/pkg/arvo/lib/strand.hoon +++ /dev/null @@ -1,167 +0,0 @@ -|% -+$ card card:agent:gall -+$ input - $% [%poke =cage] - [%sign =wire =sign-arvo] - [%agent =wire =sign:agent:gall] - [%watch =path] - == -+$ strand-input [=bowl in=(unit input)] -+$ tid @tatid -+$ bowl - $: our=ship - src=ship - tid=tid - mom=(unit tid) - wex=boat:gall - sup=bitt:gall - eny=@uvJ - now=@da - byk=beak - == -:: -:: cards: cards to send immediately. These will go out even if a -:: later stage of the computation fails, so they shouldn't have -:: any semantic effect on the rest of the system. -:: Alternately, they may record an entry in contracts with -:: enough information to undo the effect if the computation -:: fails. -:: wait: don't move on, stay here. The next sign should come back -:: to this same callback. -:: skip: didn't expect this input; drop it down to be handled -:: elsewhere -:: cont: continue computation with new callback. -:: fail: abort computation; don't send effects -:: done: finish computation; send effects -:: -++ strand-output-raw - |* a=mold - $~ [~ %done *a] - $: cards=(list card) - $= next - $% [%wait ~] - [%skip ~] - [%cont self=(strand-form-raw a)] - [%fail err=(pair term tang)] - [%done value=a] - == - == -:: -++ strand-form-raw - |* a=mold - $-(strand-input (strand-output-raw a)) -:: -:: Abort strand computation with error message -:: -++ strand-fail - |= err=(pair term tang) - |= strand-input - [~ %fail err] -:: -:: Asynchronous transcaction monad. -:: -:: Combo of four monads: -:: - Reader on input -:: - Writer on card -:: - Continuation -:: - Exception -:: -++ strand - |* a=mold - |% - ++ output (strand-output-raw a) - :: - :: Type of an strand computation. - :: - ++ form (strand-form-raw a) - :: - :: Monadic pure. Identity computation for bind. - :: - ++ pure - |= arg=a - ^- form - |= strand-input - [~ %done arg] - :: - :: Monadic bind. Combines two computations, associatively. - :: - ++ bind - |* b=mold - |= [m-b=(strand-form-raw b) fun=$-(b form)] - ^- form - |= input=strand-input - =/ b-res=(strand-output-raw b) - (m-b input) - ^- output - :- cards.b-res - ?- -.next.b-res - %wait [%wait ~] - %skip [%skip ~] - %cont [%cont ..$(m-b self.next.b-res)] - %fail [%fail err.next.b-res] - %done [%cont (fun value.next.b-res)] - == - :: - :: The strand monad must be evaluted in a particular way to maintain - :: its monadic character. +take:eval implements this. - :: - ++ eval - |% - :: Indelible state of a strand - :: - +$ eval-form - $: =form - == - :: - :: Convert initial form to eval-form - :: - ++ from-form - |= =form - ^- eval-form - form - :: - :: The cases of results of +take - :: - +$ eval-result - $% [%next ~] - [%fail err=(pair term tang)] - [%done value=a] - == - :: - :: Take a new sign and run the strand against it - :: - ++ take - :: cards: accumulate throughout recursion the cards to be - :: produced now - =| cards=(list card) - |= [=eval-form =strand-input] - ^- [[(list card) =eval-result] _eval-form] - =* take-loop $ - :: run the strand callback - :: - =/ =output (form.eval-form strand-input) - :: add cards to cards - :: - =. cards - %+ welp - cards - :: XX add tag to wires? - cards.output - :: case-wise handle next steps - :: - ?- -.next.output - %wait [[cards %next ~] eval-form] - %skip [[cards %next ~] eval-form] - %fail [[cards %fail err.next.output] eval-form] - %done [[cards %done value.next.output] eval-form] - %cont - :: recurse to run continuation with initialization input - :: - %_ take-loop - form.eval-form self.next.output - strand-input [bowl.strand-input ~] - == - == - -- - -- --- diff --git a/pkg/arvo/lib/strand.hoon b/pkg/arvo/lib/strand.hoon new file mode 120000 index 000000000..d95df7948 --- /dev/null +++ b/pkg/arvo/lib/strand.hoon @@ -0,0 +1 @@ +../../base-dev/lib/strand.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/strandio.hoon b/pkg/arvo/lib/strandio.hoon deleted file mode 100644 index 03ad35079..000000000 --- a/pkg/arvo/lib/strandio.hoon +++ /dev/null @@ -1,742 +0,0 @@ -/- spider -/+ libstrand=strand -=, strand=strand:libstrand -=, strand-fail=strand-fail:libstrand -|% -++ send-raw-cards - |= cards=(list =card:agent:gall) - =/ m (strand ,~) - ^- form:m - |= strand-input:strand - [cards %done ~] -:: -++ send-raw-card - |= =card:agent:gall - =/ m (strand ,~) - ^- form:m - (send-raw-cards card ~) -:: -++ ignore - |= tin=strand-input:strand - `[%fail %ignore ~] -:: -++ get-bowl - =/ m (strand ,bowl:strand) - ^- form:m - |= tin=strand-input:strand - `[%done bowl.tin] -:: -++ get-beak - =/ m (strand ,beak) - ^- form:m - |= tin=strand-input:strand - `[%done [our q.byk da+now]:bowl.tin] -:: -++ get-time - =/ m (strand ,@da) - ^- form:m - |= tin=strand-input:strand - `[%done now.bowl.tin] -:: -++ get-our - =/ m (strand ,ship) - ^- form:m - |= tin=strand-input:strand - `[%done our.bowl.tin] -:: -++ get-entropy - =/ m (strand ,@uvJ) - ^- form:m - |= tin=strand-input:strand - `[%done eny.bowl.tin] -:: -:: Convert skips to %ignore failures. -:: -:: This tells the main loop to try the next handler. -:: -++ handle - |* a=mold - =/ m (strand ,a) - |= =form:m - ^- form:m - |= tin=strand-input:strand - =/ res (form tin) - =? next.res ?=(%skip -.next.res) - [%fail %ignore ~] - res -:: -:: Wait for a poke with a particular mark -:: -++ take-poke - |= =mark - =/ m (strand ,vase) - ^- form:m - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ `[%wait ~] - [~ %poke @ *] - ?. =(mark p.cage.u.in.tin) - `[%skip ~] - `[%done q.cage.u.in.tin] - == -:: -:: -:: -++ take-sign-arvo - =/ m (strand ,[wire sign-arvo]) - ^- form:m - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ `[%wait ~] - [~ %sign *] - `[%done [wire sign-arvo]:u.in.tin] - == -:: -:: Wait for a subscription update on a wire -:: -++ take-fact-prefix - |= =wire - =/ m (strand ,[path cage]) - ^- form:m - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ `[%wait ~] - [~ %agent * %fact *] - ?. =(watch+wire (scag +((lent wire)) wire.u.in.tin)) - `[%skip ~] - `[%done (slag (lent wire) wire.u.in.tin) cage.sign.u.in.tin] - == -:: -:: Wait for a subscription update on a wire -:: -++ take-fact - |= =wire - =/ m (strand ,cage) - ^- form:m - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ `[%wait ~] - [~ %agent * %fact *] - ?. =(watch+wire wire.u.in.tin) - `[%skip ~] - `[%done cage.sign.u.in.tin] - == -:: -:: Wait for a subscription close -:: -++ take-kick - |= =wire - =/ m (strand ,~) - ^- form:m - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ `[%wait ~] - [~ %agent * %kick *] - ?. =(watch+wire wire.u.in.tin) - `[%skip ~] - `[%done ~] - == -:: -++ echo - =/ m (strand ,~) - ^- form:m - %- (main-loop ,~) - :~ |= ~ - ^- form:m - ;< =vase bind:m ((handle ,vase) (take-poke %echo)) - =/ message=tape !<(tape vase) - %- (slog leaf+"{message}..." ~) - ;< ~ bind:m (sleep ~s2) - %- (slog leaf+"{message}.." ~) - (pure:m ~) - :: - |= ~ - ^- form:m - ;< =vase bind:m ((handle ,vase) (take-poke %over)) - %- (slog leaf+"over..." ~) - (pure:m ~) - == -:: -++ take-watch - =/ m (strand ,path) - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ `[%wait ~] - [~ %watch *] - `[%done path.u.in.tin] - == -:: -++ take-wake - |= until=(unit @da) - =/ m (strand ,~) - ^- form:m - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ `[%wait ~] - [~ %sign [%wait @ ~] %behn %wake *] - ?. |(?=(~ until) =(`u.until (slaw %da i.t.wire.u.in.tin))) - `[%skip ~] - ?~ error.sign-arvo.u.in.tin - `[%done ~] - `[%fail %timer-error u.error.sign-arvo.u.in.tin] - == -:: -++ take-poke-ack - |= =wire - =/ m (strand ,~) - ^- form:m - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ `[%wait ~] - [~ %agent * %poke-ack *] - ?. =(wire wire.u.in.tin) - `[%skip ~] - ?~ p.sign.u.in.tin - `[%done ~] - `[%fail %poke-fail u.p.sign.u.in.tin] - == -:: -++ take-watch-ack - |= =wire - =/ m (strand ,~) - ^- form:m - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ `[%wait ~] - [~ %agent * %watch-ack *] - ?. =(watch+wire wire.u.in.tin) - `[%skip ~] - ?~ p.sign.u.in.tin - `[%done ~] - `[%fail %watch-ack-fail u.p.sign.u.in.tin] - == -:: -++ poke - |= [=dock =cage] - =/ m (strand ,~) - ^- form:m - =/ =card:agent:gall [%pass /poke %agent dock %poke cage] - ;< ~ bind:m (send-raw-card card) - (take-poke-ack /poke) -:: -++ raw-poke - |= [=dock =cage] - =/ m (strand ,~) - ^- form:m - =/ =card:agent:gall [%pass /poke %agent dock %poke cage] - ;< ~ bind:m (send-raw-card card) - =/ m (strand ,~) - ^- form:m - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ - `[%wait ~] - :: - [~ %agent * %poke-ack *] - ?. =(/poke wire.u.in.tin) - `[%skip ~] - `[%done ~] - == -:: -++ raw-poke-our - |= [app=term =cage] - =/ m (strand ,~) - ^- form:m - ;< =bowl:spider bind:m get-bowl - (raw-poke [our.bowl app] cage) -:: -++ poke-our - |= [=term =cage] - =/ m (strand ,~) - ^- form:m - ;< our=@p bind:m get-our - (poke [our term] cage) -:: -++ watch - |= [=wire =dock =path] - =/ m (strand ,~) - ^- form:m - =/ =card:agent:gall [%pass watch+wire %agent dock %watch path] - ;< ~ bind:m (send-raw-card card) - (take-watch-ack wire) -:: -++ watch-our - |= [=wire =term =path] - =/ m (strand ,~) - ^- form:m - ;< our=@p bind:m get-our - (watch wire [our term] path) -:: -++ scry - |* [=mold =path] - =/ m (strand ,mold) - ^- form:m - ?> ?=(^ path) - ?> ?=(^ t.path) - ;< =bowl:spider bind:m get-bowl - %- pure:m - .^(mold i.path (scot %p our.bowl) i.t.path (scot %da now.bowl) t.t.path) -:: -++ leave - |= [=wire =dock] - =/ m (strand ,~) - ^- form:m - =/ =card:agent:gall [%pass watch+wire %agent dock %leave ~] - (send-raw-card card) -:: -++ leave-our - |= [=wire =term] - =/ m (strand ,~) - ^- form:m - ;< our=@p bind:m get-our - (leave wire [our term]) -:: -++ rewatch - |= [=wire =dock =path] - =/ m (strand ,~) - ;< ~ bind:m ((handle ,~) (take-kick wire)) - ;< ~ bind:m (flog-text "rewatching {} {}") - ;< ~ bind:m (watch wire dock path) - (pure:m ~) -:: -++ wait - |= until=@da - =/ m (strand ,~) - ^- form:m - ;< ~ bind:m (send-wait until) - (take-wake `until) -:: -++ sleep - |= for=@dr - =/ m (strand ,~) - ^- form:m - ;< now=@da bind:m get-time - (wait (add now for)) -:: -++ send-wait - |= until=@da - =/ m (strand ,~) - ^- form:m - =/ =card:agent:gall - [%pass /wait/(scot %da until) %arvo %b %wait until] - (send-raw-card card) -:: -++ map-err - |* computation-result=mold - =/ m (strand ,computation-result) - |= [f=$-([term tang] [term tang]) computation=form:m] - ^- form:m - |= tin=strand-input:strand - =* loop $ - =/ c-res (computation tin) - ?: ?=(%cont -.next.c-res) - c-res(self.next ..loop(computation self.next.c-res)) - ?. ?=(%fail -.next.c-res) - c-res - c-res(err.next (f err.next.c-res)) -:: -++ set-timeout - |* computation-result=mold - =/ m (strand ,computation-result) - |= [time=@dr computation=form:m] - ^- form:m - ;< now=@da bind:m get-time - =/ when (add now time) - =/ =card:agent:gall - [%pass /timeout/(scot %da when) %arvo %b %wait when] - ;< ~ bind:m (send-raw-card card) - |= tin=strand-input:strand - =* loop $ - ?: ?& ?=([~ %sign [%timeout @ ~] %behn %wake *] in.tin) - =((scot %da when) i.t.wire.u.in.tin) - == - `[%fail %timeout ~] - =/ c-res (computation tin) - ?: ?=(%cont -.next.c-res) - c-res(self.next ..loop(computation self.next.c-res)) - ?: ?=(%done -.next.c-res) - =/ =card:agent:gall - [%pass /timeout/(scot %da when) %arvo %b %rest when] - c-res(cards [card cards.c-res]) - c-res -:: -++ send-request - |= =request:http - =/ m (strand ,~) - ^- form:m - (send-raw-card %pass /request %arvo %i %request request *outbound-config:iris) -:: -++ send-cancel-request - =/ m (strand ,~) - ^- form:m - (send-raw-card %pass /request %arvo %i %cancel-request ~) -:: -++ take-client-response - =/ m (strand ,client-response:iris) - ^- form:m - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ `[%wait ~] - [~ %sign [%request ~] %iris %http-response %finished *] - `[%done client-response.sign-arvo.u.in.tin] - == -:: -:: Wait until we get an HTTP response or cancelation and unset contract -:: -++ take-maybe-sigh - =/ m (strand ,(unit httr:eyre)) - ^- form:m - ;< rep=(unit client-response:iris) bind:m - take-maybe-response - ?~ rep - (pure:m ~) - :: XX s/b impossible - :: - ?. ?=(%finished -.u.rep) - (pure:m ~) - (pure:m (some (to-httr:iris +.u.rep))) -:: -++ take-maybe-response - =/ m (strand ,(unit client-response:iris)) - ^- form:m - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ `[%wait ~] - [~ %sign [%request ~] %iris %http-response %cancel *] - `[%done ~] - [~ %sign [%request ~] %iris %http-response %finished *] - `[%done `client-response.sign-arvo.u.in.tin] - == -:: -++ extract-body - |= =client-response:iris - =/ m (strand ,cord) - ^- form:m - ?> ?=(%finished -.client-response) - ?> ?=(^ full-file.client-response) - (pure:m q.data.u.full-file.client-response) -:: -++ fetch-cord - |= url=tape - =/ m (strand ,cord) - ^- form:m - =/ =request:http [%'GET' (crip url) ~ ~] - ;< ~ bind:m (send-request request) - ;< =client-response:iris bind:m take-client-response - (extract-body client-response) -:: -++ fetch-json - |= url=tape - =/ m (strand ,json) - ^- form:m - ;< =cord bind:m (fetch-cord url) - =/ json=(unit json) (de-json:html cord) - ?~ json - (strand-fail %json-parse-error ~) - (pure:m u.json) -:: -++ hiss-request - |= =hiss:eyre - =/ m (strand ,(unit httr:eyre)) - ^- form:m - ;< ~ bind:m (send-request (hiss-to-request:html hiss)) - take-maybe-sigh -:: -:: +build-file: build the source file at the specified $beam -:: -++ build-file - |= [[=ship =desk =case] =spur] - =* arg +< - =/ m (strand ,(unit vase)) - ^- form:m - ;< =riot:clay bind:m - (warp ship desk ~ %sing %a case spur) - ?~ riot - (pure:m ~) - ?> =(%vase p.r.u.riot) - (pure:m (some !<(vase q.r.u.riot))) -:: +build-mark: build a mark definition to a $dais -:: -++ build-mark - |= [[=ship =desk =case] mak=mark] - =* arg +< - =/ m (strand ,dais:clay) - ^- form:m - ;< =riot:clay bind:m - (warp ship desk ~ %sing %b case /[mak]) - ?~ riot - (strand-fail %build-mark >arg< ~) - ?> =(%dais p.r.u.riot) - (pure:m !<(dais:clay q.r.u.riot)) -:: +build-tube: build a mark conversion gate ($tube) -:: -++ build-tube - |= [[=ship =desk =case] =mars:clay] - =* arg +< - =/ m (strand ,tube:clay) - ^- form:m - ;< =riot:clay bind:m - (warp ship desk ~ %sing %c case /[a.mars]/[b.mars]) - ?~ riot - (strand-fail %build-tube >arg< ~) - ?> =(%tube p.r.u.riot) - (pure:m !<(tube:clay q.r.u.riot)) -:: -:: +build-nave: build a mark definition to a $nave -:: -++ build-nave - |= [[=ship =desk =case] mak=mark] - =* arg +< - =/ m (strand ,vase) - ^- form:m - ;< =riot:clay bind:m - (warp ship desk ~ %sing %e case /[mak]) - ?~ riot - (strand-fail %build-nave >arg< ~) - ?> =(%nave p.r.u.riot) - (pure:m q.r.u.riot) -:: +build-cast: build a mark conversion gate (static) -:: -++ build-cast - |= [[=ship =desk =case] =mars:clay] - =* arg +< - =/ m (strand ,vase) - ^- form:m - ;< =riot:clay bind:m - (warp ship desk ~ %sing %f case /[a.mars]/[b.mars]) - ?~ riot - (strand-fail %build-cast >arg< ~) - ?> =(%cast p.r.u.riot) - (pure:m q.r.u.riot) -:: -:: Read from Clay -:: -++ warp - |= [=ship =riff:clay] - =/ m (strand ,riot:clay) - ;< ~ bind:m (send-raw-card %pass /warp %arvo %c %warp ship riff) - (take-writ /warp) -:: -++ read-file - |= [[=ship =desk =case:clay] =spur] - =* arg +< - =/ m (strand ,cage) - ;< =riot:clay bind:m (warp ship desk ~ %sing %x case spur) - ?~ riot - (strand-fail %read-file >arg< ~) - (pure:m r.u.riot) -:: -++ check-for-file - |= [[=ship =desk =case:clay] =spur] - =/ m (strand ,?) - ;< =riot:clay bind:m (warp ship desk ~ %sing %x case spur) - (pure:m ?=(^ riot)) -:: -++ list-tree - |= [[=ship =desk =case:clay] =spur] - =* arg +< - =/ m (strand ,(list path)) - ;< =riot:clay bind:m (warp ship desk ~ %sing %t case spur) - ?~ riot - (strand-fail %list-tree >arg< ~) - (pure:m !<((list path) q.r.u.riot)) -:: -:: Take Clay read result -:: -++ take-writ - |= =wire - =/ m (strand ,riot:clay) - ^- form:m - |= tin=strand-input:strand - ?+ in.tin `[%skip ~] - ~ `[%wait ~] - [~ %sign * ?(%behn %clay) %writ *] - ?. =(wire wire.u.in.tin) - `[%skip ~] - `[%done +>.sign-arvo.u.in.tin] - == -:: +check-online: require that peer respond before timeout -:: -++ check-online - |= [who=ship lag=@dr] - =/ m (strand ,~) - ^- form:m - %+ (map-err ,~) |=(* [%offline *tang]) - %+ (set-timeout ,~) lag - ;< ~ bind:m - (poke [who %hood] %helm-hi !>(~)) - (pure:m ~) -:: -:: Queue on skip, try next on fail %ignore -:: -++ main-loop - |* a=mold - =/ m (strand ,~) - =/ m-a (strand ,a) - =| queue=(qeu (unit input:strand)) - =| active=(unit [in=(unit input:strand) =form:m-a forms=(list $-(a form:m-a))]) - =| state=a - |= forms=(lest $-(a form:m-a)) - ^- form:m - |= tin=strand-input:strand - =* top `form:m`..$ - =. queue (~(put to queue) in.tin) - |^ (continue bowl.tin) - :: - ++ continue - |= =bowl:strand - ^- output:m - ?> =(~ active) - ?: =(~ queue) - `[%cont top] - =^ in=(unit input:strand) queue ~(get to queue) - ^- output:m - =. active `[in (i.forms state) t.forms] - ^- output:m - (run bowl in) - :: - ++ run - ^- form:m - |= tin=strand-input:strand - ^- output:m - ?> ?=(^ active) - =/ res (form.u.active tin) - =/ =output:m - ?- -.next.res - %wait `[%wait ~] - %skip `[%cont ..$(queue (~(put to queue) in.tin))] - %cont `[%cont ..$(active `[in.u.active self.next.res forms.u.active])] - %done (continue(active ~, state value.next.res) bowl.tin) - %fail - ?: &(?=(^ forms.u.active) ?=(%ignore p.err.next.res)) - %= $ - active `[in.u.active (i.forms.u.active state) t.forms.u.active] - in.tin in.u.active - == - `[%fail err.next.res] - == - [(weld cards.res cards.output) next.output] - -- -:: -++ retry - |* result=mold - |= [crash-after=(unit @ud) computation=_*form:(strand (unit result))] - =/ m (strand ,result) - =| try=@ud - |- ^- form:m - =* loop $ - ?: =(crash-after `try) - (strand-fail %retry-too-many ~) - ;< ~ bind:m (backoff try ~m1) - ;< res=(unit result) bind:m computation - ?^ res - (pure:m u.res) - loop(try +(try)) -:: -++ backoff - |= [try=@ud limit=@dr] - =/ m (strand ,~) - ^- form:m - ;< eny=@uvJ bind:m get-entropy - %- sleep - %+ min limit - ?: =(0 try) ~s0 - %+ add - (mul ~s1 (bex (dec try))) - (mul ~s0..0001 (~(rad og eny) 1.000)) -:: -:: ---- -:: -:: Output -:: -++ flog - |= =flog:dill - =/ m (strand ,~) - ^- form:m - (send-raw-card %pass / %arvo %d %flog flog) -:: -++ flog-text - |= =tape - =/ m (strand ,~) - ^- form:m - (flog %text tape) -:: -++ flog-tang - |= =tang - =/ m (strand ,~) - ^- form:m - =/ =wall - (zing (turn (flop tang) (cury wash [0 80]))) - |- ^- form:m - =* loop $ - ?~ wall - (pure:m ~) - ;< ~ bind:m (flog-text i.wall) - loop(wall t.wall) -:: -++ trace - |= =tang - =/ m (strand ,~) - ^- form:m - (pure:m ((slog tang) ~)) -:: -++ app-message - |= [app=term =cord =tang] - =/ m (strand ,~) - ^- form:m - =/ msg=tape :(weld (trip app) ": " (trip cord)) - ;< ~ bind:m (flog-text msg) - (flog-tang tang) -:: -:: ---- -:: -:: Handle domains -:: -++ install-domain - |= =turf - =/ m (strand ,~) - ^- form:m - (send-raw-card %pass / %arvo %e %rule %turf %put turf) -:: -:: ---- -:: -:: Threads -:: -++ start-thread - |= file=term - =/ m (strand ,tid:spider) - ;< =bowl:spider bind:m get-bowl - (start-thread-with-args byk.bowl file *vase) -:: -++ start-thread-with-args - |= [=beak file=term args=vase] - =/ m (strand ,tid:spider) - ^- form:m - ;< =bowl:spider bind:m get-bowl - =/ tid - (scot %ta (cat 3 (cat 3 'strand_' file) (scot %uv (sham file eny.bowl)))) - =/ poke-vase !>([`tid.bowl `tid beak file args]) - ;< ~ bind:m (poke-our %spider %spider-start poke-vase) - ;< ~ bind:m (sleep ~s0) :: wait for thread to start - (pure:m tid) -:: -+$ thread-result - (each vase [term tang]) -:: -++ await-thread - |= [file=term args=vase] - =/ m (strand ,thread-result) - ^- form:m - ;< =bowl:spider bind:m get-bowl - =/ tid (scot %ta (cat 3 'strand_' (scot %uv (sham file eny.bowl)))) - =/ poke-vase !>([`tid.bowl `tid file args]) - ;< ~ bind:m (watch-our /awaiting/[tid] %spider /thread-result/[tid]) - ;< ~ bind:m (poke-our %spider %spider-start poke-vase) - ;< ~ bind:m (sleep ~s0) :: wait for thread to start - ;< =cage bind:m (take-fact /awaiting/[tid]) - ;< ~ bind:m (take-kick /awaiting/[tid]) - ?+ p.cage ~|([%strange-thread-result p.cage file tid] !!) - %thread-done (pure:m %& q.cage) - %thread-fail (pure:m %| !<([term tang] q.cage)) - == --- diff --git a/pkg/arvo/lib/strandio.hoon b/pkg/arvo/lib/strandio.hoon new file mode 120000 index 000000000..0caebfac1 --- /dev/null +++ b/pkg/arvo/lib/strandio.hoon @@ -0,0 +1 @@ +../../base-dev/lib/strandio.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/treaty.hoon b/pkg/arvo/lib/treaty.hoon new file mode 120000 index 000000000..014f5a1cf --- /dev/null +++ b/pkg/arvo/lib/treaty.hoon @@ -0,0 +1 @@ +../../base-dev/lib/treaty.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/verb.hoon b/pkg/arvo/lib/verb.hoon deleted file mode 100644 index 2737addfc..000000000 --- a/pkg/arvo/lib/verb.hoon +++ /dev/null @@ -1,105 +0,0 @@ -:: Print what your agent is doing. -:: -/- verb -:: -|= [loud=? =agent:gall] -=| bowl-print=_| -^- agent:gall -|^ !. -|_ =bowl:gall -+* this . - ag ~(. agent bowl) -:: -++ on-init - ^- (quip card:agent:gall agent:gall) - %- (print bowl |.("{}: on-init")) - =^ cards agent on-init:ag - [[(emit-event %on-init ~) cards] this] -:: -++ on-save - ^- vase - %- (print bowl |.("{}: on-save")) - on-save:ag -:: -++ on-load - |= old-state=vase - ^- (quip card:agent:gall agent:gall) - %- (print bowl |.("{}: on-load")) - =^ cards agent (on-load:ag old-state) - [[(emit-event %on-load ~) cards] this] -:: -++ on-poke - |= [=mark =vase] - ^- (quip card:agent:gall agent:gall) - %- (print bowl |.("{}: on-poke with mark {}")) - ?: ?=(%verb mark) - ?- !<(?(%loud %bowl) vase) - %loud `this(loud !loud) - %bowl `this(bowl-print !bowl-print) - == - =^ cards agent (on-poke:ag mark vase) - [[(emit-event %on-poke mark) cards] this] -:: -++ on-watch - |= =path - ^- (quip card:agent:gall agent:gall) - %- (print bowl |.("{}: on-watch on path {}")) - =^ cards agent - ?: ?=([%verb %events ~] path) - [~ agent] - (on-watch:ag path) - [[(emit-event %on-watch path) cards] this] -:: -++ on-leave - |= =path - ^- (quip card:agent:gall agent:gall) - %- (print bowl |.("{}: on-leave on path {}")) - ?: ?=([%verb %event ~] path) - [~ this] - =^ cards agent (on-leave:ag path) - [[(emit-event %on-leave path) cards] this] -:: -++ on-peek - |= =path - ^- (unit (unit cage)) - %- (print bowl |.("{}: on-peek on path {}")) - (on-peek:ag path) -:: -++ on-agent - |= [=wire =sign:agent:gall] - ^- (quip card:agent:gall agent:gall) - %- (print bowl |.("{}: on-agent on wire {}, {<-.sign>}")) - =^ cards agent (on-agent:ag wire sign) - [[(emit-event %on-agent wire -.sign) cards] this] -:: -++ on-arvo - |= [=wire =sign-arvo] - ^- (quip card:agent:gall agent:gall) - %- %+ print bowl |. - "{}: on-arvo on wire {}, {<[- +<]:sign-arvo>}" - =^ cards agent (on-arvo:ag wire sign-arvo) - [[(emit-event %on-arvo wire [- +<]:sign-arvo) cards] this] -:: -++ on-fail - |= [=term =tang] - ^- (quip card:agent:gall agent:gall) - %- (print bowl |.("{}: on-fail with term {}")) - =^ cards agent (on-fail:ag term tang) - [[(emit-event %on-fail term) cards] this] --- -:: -++ print - |= [=bowl:gall render=(trap tape)] - ^+ same - =? . bowl-print - %- (slog >bowl< ~) - . - ?. loud same - %- (slog [%leaf $:render] ~) - same -:: -++ emit-event - |= =event:verb - ^- card:agent:gall - [%give %fact ~[/verb/events] %verb-event !>(event)] --- diff --git a/pkg/arvo/lib/verb.hoon b/pkg/arvo/lib/verb.hoon new file mode 120000 index 000000000..939072347 --- /dev/null +++ b/pkg/arvo/lib/verb.hoon @@ -0,0 +1 @@ +../../base-dev/lib/verb.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/belt.hoon b/pkg/arvo/mar/belt.hoon deleted file mode 100644 index 1c5a6e1ea..000000000 --- a/pkg/arvo/mar/belt.hoon +++ /dev/null @@ -1,29 +0,0 @@ -:: belt: runtime belt structure -:: -|_ =belt:dill -++ grad %noun -:: +grab: convert from -:: -++ grab - |% - ++ noun belt:dill - ++ json - ^- $-(^json belt:dill) - =, dejs:format - %- of - :~ aro+(su (perk %d %l %r %u ~)) - bac+ul - ctl+(cu taft so) - del+ul - met+(cu taft so) - ret+ul - txt+(ar (cu taft so)) - == - -- -:: +grow: convert to -:: -++ grow - |% - ++ noun belt - -- --- diff --git a/pkg/arvo/mar/belt.hoon b/pkg/arvo/mar/belt.hoon new file mode 120000 index 000000000..0c8999932 --- /dev/null +++ b/pkg/arvo/mar/belt.hoon @@ -0,0 +1 @@ +../../base-dev/mar/belt.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/bill.hoon b/pkg/arvo/mar/bill.hoon deleted file mode 100644 index 6b7e82447..000000000 --- a/pkg/arvo/mar/bill.hoon +++ /dev/null @@ -1,43 +0,0 @@ -/- *bill -|_ bil=bill -++ grow - |% - ++ mime `^mime`[/text/x-bill (as-octs:mimes:html hoon)] - ++ noun bil - ++ hoon - ^- @t - |^ (crip (of-wall:format (wrap-lines (zing (turn bil spit-chit))))) - :: - ++ wrap-lines - |= taz=wall - ^- wall - ?~ taz ["~"]~ - :- (weld ":~ " i.taz) - %- snoc :_ "==" - (turn t.taz |=(t=tape (weld " " t))) - :: - ++ spit-chit - |= =chit - ^- wall - ?- -.chit - %apes [":- %apes" (wrap-lines (spit-duz duz.chit))] - %fish [":- %fish" (wrap-lines (spit-duz duz.chit))] - == - :: - ++ spit-duz - |= duz=(list dude:gall) - ^- wall - (turn duz |=(=dude:gall "%{}")) - -- - ++ txt (to-wain:format hoon) - -- -++ grab - |% - ++ noun bill - ++ mime - |= [=mite len=@ud tex=@] - ~_ tex - !<(bill (slap !>(~) (ream tex))) - -- -++ grad %noun --- diff --git a/pkg/arvo/mar/bill.hoon b/pkg/arvo/mar/bill.hoon new file mode 120000 index 000000000..801d99730 --- /dev/null +++ b/pkg/arvo/mar/bill.hoon @@ -0,0 +1 @@ +../../base-dev/mar/bill.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/blit.hoon b/pkg/arvo/mar/blit.hoon deleted file mode 100644 index 4c23c5705..000000000 --- a/pkg/arvo/mar/blit.hoon +++ /dev/null @@ -1,61 +0,0 @@ -:: blit: runtime blit structure -:: -|_ =blit:dill -++ grad %noun -:: +grab: convert from -:: -++ grab - |% - ++ noun blit:dill - -- -:: +grow: convert to -:: -++ grow - |% - ++ noun blit - ++ json - ^- ^json - =, enjs:format - %+ frond -.blit - ?- -.blit - %bel b+& - %clr b+& - %hop (numb p.blit) - %lin a+(turn p.blit |=(c=@c s+(tuft c))) - %mor b+& - %url s+p.blit - :: - %sag - %- pairs - :~ 'path'^(path p.blit) - 'file'^s+(en:base64:mimes:html (as-octs:mimes:html (jam q.blit))) - == - :: - %sav - %- pairs - :~ 'path'^(path p.blit) - 'file'^s+(en:base64:mimes:html (as-octs:mimes:html q.blit)) - == - :: - %klr - :- %a - %+ turn p.blit - |= [=stye text=(list @c)] - %- pairs - :~ 'text'^a+(turn text |=(c=@c s+(tuft c))) - :: - :- 'stye' - %- pairs - |^ :~ 'back'^(color p.q.stye) - 'fore'^(color q.q.stye) - 'deco'^a+(turn ~(tap in p.stye) |=(d=deco ?~(d ~ s+d))) - == - ++ color - |= =tint - ?@ tint ?~(tint ~ s+tint) - s+(crip ((x-co:co 6) (rep 3 ~[b g r]:tint))) - -- - == - == - -- --- diff --git a/pkg/arvo/mar/blit.hoon b/pkg/arvo/mar/blit.hoon new file mode 120000 index 000000000..3ea8dc943 --- /dev/null +++ b/pkg/arvo/mar/blit.hoon @@ -0,0 +1 @@ +../../base-dev/mar/blit.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/docket.hoon b/pkg/arvo/mar/docket.hoon new file mode 120000 index 000000000..3425d2206 --- /dev/null +++ b/pkg/arvo/mar/docket.hoon @@ -0,0 +1 @@ +../../base-dev/mar/docket.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/hoon.hoon b/pkg/arvo/mar/hoon.hoon deleted file mode 100644 index b6f590649..000000000 --- a/pkg/arvo/mar/hoon.hoon +++ /dev/null @@ -1,49 +0,0 @@ -:::: /hoon/hoon/mar - :: -/? 310 -:: -=, eyre -|_ own=@t -:: -++ grow :: convert to - |% - ++ mime `^mime`[/text/x-hoon (as-octs:mimes:html own)] :: convert to %mime - ++ elem :: convert to %html - ;div:pre(urb_codemirror "", mode "hoon"):"{(trip own)}" - :: =+ gen-id="src-{<`@ui`(mug own)>}" - :: ;div - :: ;textarea(id "{gen-id}"):"{(trip own)}" - :: ;script:""" - :: CodeMirror.fromTextArea( - :: window[{}], - :: \{lineNumbers:true, readOnly:true} - :: ) - :: """ - :: == - ++ hymn - :: ;html:(head:title:"Source" "+{elem}") - ;html - ;head - ;title:"Source" - ;script@"//cdnjs.cloudflare.com/ajax/libs/codemirror/4.3.0/codemirror.js"; - ;script@"/lib/syntax/hoon.js"; - ;link(rel "stylesheet", href "//cdnjs.cloudflare.com/ajax/libs/". - "codemirror/4.3.0/codemirror.min.css"); - ;link/"/lib/syntax/codemirror.css"(rel "stylesheet"); - == - ;body - ;textarea#src:"{(trip own)}" - ;script:'CodeMirror.fromTextArea(src, {lineNumbers:true, readOnly:true})' - == - == - ++ txt - (to-wain:format own) - -- -++ grab - |% :: convert from - ++ mime |=([p=mite q=octs] q.q) - ++ noun @t :: clam from %noun - ++ txt of-wain:format - -- -++ grad %txt --- diff --git a/pkg/arvo/mar/hoon.hoon b/pkg/arvo/mar/hoon.hoon new file mode 120000 index 000000000..95f8f67f9 --- /dev/null +++ b/pkg/arvo/mar/hoon.hoon @@ -0,0 +1 @@ +../../base-dev/mar/hoon.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/htm.hoon b/pkg/arvo/mar/htm.hoon deleted file mode 100644 index a40a432dd..000000000 --- a/pkg/arvo/mar/htm.hoon +++ /dev/null @@ -1,15 +0,0 @@ -:: -:::: /hoon/htm/mar - :: -/? 310 -|_ own=manx -:: -++ grad %noun -++ grow :: convert to - |% - ++ noun own - ++ hymn own - -- -++ grab |% :: convert from - ++ noun manx :: clam from %noun --- -- diff --git a/pkg/arvo/mar/htm.hoon b/pkg/arvo/mar/htm.hoon new file mode 120000 index 000000000..d29e24bac --- /dev/null +++ b/pkg/arvo/mar/htm.hoon @@ -0,0 +1 @@ +../../base-dev/mar/htm.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/html.hoon b/pkg/arvo/mar/html.hoon deleted file mode 100644 index 203d75f61..000000000 --- a/pkg/arvo/mar/html.hoon +++ /dev/null @@ -1,22 +0,0 @@ -:: -:::: /hoon/html/mar - :: -/? 310 - :: -:::: compute - :: -=, html -|_ htm=@t -++ grow :: convert to - ^? - |% :: - ++ mime [/text/html (met 3 htm) htm] :: to %mime - ++ hymn (need (de-xml htm)) :: to %hymn - -- :: -++ grab ^? - |% :: convert from - ++ noun @t :: clam from %noun - ++ mime |=([p=mite q=octs] q.q) :: retrieve form %mime - -- -++ grad %mime --- diff --git a/pkg/arvo/mar/html.hoon b/pkg/arvo/mar/html.hoon new file mode 120000 index 000000000..14a5f8f7b --- /dev/null +++ b/pkg/arvo/mar/html.hoon @@ -0,0 +1 @@ +../../base-dev/mar/html.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/httr.hoon b/pkg/arvo/mar/httr.hoon deleted file mode 100644 index bbac8f990..000000000 --- a/pkg/arvo/mar/httr.hoon +++ /dev/null @@ -1,25 +0,0 @@ -:: -:::: /hoon/httr/mar - :: -/? 310 -:: -=, eyre -=, format -=, html -|_ hit=httr -++ grad %noun -++ grow |% ++ wall (turn wain trip) - ++ wain (to-wain cord) - ++ json (need (de-json cord)) - ++ cord q:octs - ++ noun hit - ++ octs - ~| hit - ?> =(2 (div p.hit 100)) - (need r.hit) - -- -++ grab :: convert from - |% - ++ noun httr :: clam from %noun - -- --- diff --git a/pkg/arvo/mar/httr.hoon b/pkg/arvo/mar/httr.hoon new file mode 120000 index 000000000..572665778 --- /dev/null +++ b/pkg/arvo/mar/httr.hoon @@ -0,0 +1 @@ +../../base-dev/mar/httr.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/hymn.hoon b/pkg/arvo/mar/hymn.hoon deleted file mode 100644 index cf01508ea..000000000 --- a/pkg/arvo/mar/hymn.hoon +++ /dev/null @@ -1,17 +0,0 @@ -:: -:::: /hoon/hymn/mar - :: -/? 310 -=, mimes:html -=, html -|_ own=manx -:: -++ grad %noun -++ grow :: convert to - |% - ++ html (crip (en-xml own)) :: convert to %html - ++ mime [/text/html (as-octs html)] :: convert to %mime - -- -++ grab |% :: convert from - ++ noun manx :: clam from %noun --- -- diff --git a/pkg/arvo/mar/hymn.hoon b/pkg/arvo/mar/hymn.hoon new file mode 120000 index 000000000..905156749 --- /dev/null +++ b/pkg/arvo/mar/hymn.hoon @@ -0,0 +1 @@ +../../base-dev/mar/hymn.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/js.hoon b/pkg/arvo/mar/js.hoon deleted file mode 100644 index e8fbe7701..000000000 --- a/pkg/arvo/mar/js.hoon +++ /dev/null @@ -1,22 +0,0 @@ -:: -:::: /hoon/js/mar - :: -/? 310 -:: -=, eyre -|_ mud=@ -++ grow - |% - ++ mime [/application/javascript (as-octs:mimes:html (@t mud))] - ++ elem ;script - ;- (trip (@t mud)) - == - ++ hymn ;html:(head:"+{elem}" body) - -- -++ grab - |% :: convert from - ++ mime |=([p=mite q=octs] (@t q.q)) - ++ noun cord :: clam from %noun - -- -++ grad %mime --- diff --git a/pkg/arvo/mar/js.hoon b/pkg/arvo/mar/js.hoon new file mode 120000 index 000000000..00189f4c6 --- /dev/null +++ b/pkg/arvo/mar/js.hoon @@ -0,0 +1 @@ +../../base-dev/mar/js.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/json.hoon b/pkg/arvo/mar/json.hoon deleted file mode 100644 index 506b70835..000000000 --- a/pkg/arvo/mar/json.hoon +++ /dev/null @@ -1,26 +0,0 @@ -:: -:::: /hoon/json/mar - :: -/? 310 - :: -:::: compute - :: -=, eyre -=, format -=, html -|_ jon=json -:: -++ grow :: convert to - |% - ++ mime [/application/json (as-octs:mimes -:txt)] :: convert to %mime - ++ txt [(crip (en-json jon))]~ - -- -++ grab - |% :: convert from - ++ mime |=([p=mite q=octs] (fall (rush (@t q.q) apex:de-json) *json)) - ++ noun json :: clam from %noun - ++ numb numb:enjs - ++ time time:enjs - -- -++ grad %mime --- diff --git a/pkg/arvo/mar/json.hoon b/pkg/arvo/mar/json.hoon new file mode 120000 index 000000000..e77f85d05 --- /dev/null +++ b/pkg/arvo/mar/json.hoon @@ -0,0 +1 @@ +../../base-dev/mar/json.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/json/rpc/response.hoon b/pkg/arvo/mar/json/rpc/response.hoon deleted file mode 100644 index 91ea2f670..000000000 --- a/pkg/arvo/mar/json/rpc/response.hoon +++ /dev/null @@ -1,43 +0,0 @@ -:: -/- *json-rpc -:: -|_ res=response -:: -++ grad %noun -++ grow - |% - ++ noun res - -- -++ grab :: convert from - |% - ++ noun response :: from noun - ++ httr :: from httr - |= hit=httr:eyre - ^- response - ~| hit - ?: ?=(%2 (div p.hit 100)) - =, html - %- json - ?~ r.hit - a+~ - (need (de-json q:u.r.hit)) - fail+hit - ++ json :: from json - =, dejs-soft:format - |= a=json - ^- response - =; dere - =+ res=((ar dere) a) - ?~ res (need (dere a)) - [%batch u.res] - |= a=json - ^- (unit response) - =/ res=(unit [@t json]) - ::TODO breaks when no id present - ((ot id+so result+some ~) a) - ?^ res `[%result u.res] - ~| a - :+ ~ %error %- need - ((ot id+so error+(ot code+no message+so ~) ~) a) - -- --- diff --git a/pkg/arvo/mar/json/rpc/response.hoon b/pkg/arvo/mar/json/rpc/response.hoon new file mode 120000 index 000000000..52c97c864 --- /dev/null +++ b/pkg/arvo/mar/json/rpc/response.hoon @@ -0,0 +1 @@ +../../../../base-dev/mar/json/rpc/response.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/kelvin.hoon b/pkg/arvo/mar/kelvin.hoon deleted file mode 100644 index f64063d18..000000000 --- a/pkg/arvo/mar/kelvin.hoon +++ /dev/null @@ -1,18 +0,0 @@ -=/ weft ,[lal=@tas num=@ud] :: TODO remove after merge -|_ kel=weft -++ grow - |% - ++ mime `^mime`[/text/x-kelvin (as-octs:mimes:html hoon)] - ++ noun kel - ++ hoon (crip "{<[lal num]:kel>}\0a") - ++ txt (to-wain:format hoon) - -- -++ grab - |% - ++ noun weft - ++ mime - |= [=mite len=@ud tex=@] - !<(weft (slap !>(~) (ream tex))) - -- -++ grad %noun --- diff --git a/pkg/arvo/mar/kelvin.hoon b/pkg/arvo/mar/kelvin.hoon new file mode 120000 index 000000000..195ebe0dc --- /dev/null +++ b/pkg/arvo/mar/kelvin.hoon @@ -0,0 +1 @@ +../../base-dev/mar/kelvin.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/kiln/install.hoon b/pkg/arvo/mar/kiln/install.hoon new file mode 100644 index 000000000..ca0600bff --- /dev/null +++ b/pkg/arvo/mar/kiln/install.hoon @@ -0,0 +1,29 @@ +|% ++$ install + [local=term =ship =desk] +-- +|_ inst=install +++ grad %noun +++ grow + |% + ++ noun inst + ++ json + %- pairs:enjs:format + :~ local+s+local.inst + desk+s+desk.inst + ship+s+(scot %p ship.inst) + == + -- +++ grab + |% + ++ noun install + ++ json + ^- $-(^json install) + =, dejs:format + %- ot + :~ local+so + ship+(su ;~(pfix sig fed:ag)) + desk+so + == + -- +-- diff --git a/pkg/arvo/mar/kiln/revive.hoon b/pkg/arvo/mar/kiln/revive.hoon new file mode 100644 index 000000000..335cd9580 --- /dev/null +++ b/pkg/arvo/mar/kiln/revive.hoon @@ -0,0 +1,13 @@ +|_ =desk +++ grad %noun +++ grow + |% + ++ noun desk + ++ json s+desk + -- +++ grab + |% + ++ noun ^desk + ++ json so:dejs:format + -- +-- diff --git a/pkg/arvo/mar/kiln/suspend.hoon b/pkg/arvo/mar/kiln/suspend.hoon new file mode 100644 index 000000000..335cd9580 --- /dev/null +++ b/pkg/arvo/mar/kiln/suspend.hoon @@ -0,0 +1,13 @@ +|_ =desk +++ grad %noun +++ grow + |% + ++ noun desk + ++ json s+desk + -- +++ grab + |% + ++ noun ^desk + ++ json so:dejs:format + -- +-- diff --git a/pkg/arvo/mar/kiln/uninstall.hoon b/pkg/arvo/mar/kiln/uninstall.hoon new file mode 100644 index 000000000..335cd9580 --- /dev/null +++ b/pkg/arvo/mar/kiln/uninstall.hoon @@ -0,0 +1,13 @@ +|_ =desk +++ grad %noun +++ grow + |% + ++ noun desk + ++ json s+desk + -- +++ grab + |% + ++ noun ^desk + ++ json so:dejs:format + -- +-- diff --git a/pkg/arvo/mar/kiln/vats-diff.hoon b/pkg/arvo/mar/kiln/vats-diff.hoon new file mode 100644 index 000000000..78b665718 --- /dev/null +++ b/pkg/arvo/mar/kiln/vats-diff.hoon @@ -0,0 +1,54 @@ +/- hood +|_ =diff:hood +++ grad %noun +++ grow + |% + ++ noun diff + ++ json + =, enjs:format + |^ + %+ frond -.diff + ?- -.diff + %block (block +.diff) + ?(%merge-sunk %merge-fail) (desk-arak-err +.diff) + ?(%reset %merge %suspend %revive) (desk-arak +.diff) + == + :: + ++ block + |= [=desk =arak:hood =weft:hood blockers=(set desk)] + %+ merge (desk-arak desk arak) + %- pairs + :~ weft+(weft:enjs:hood weft) + blockers+a+(turn ~(tap in blockers) (lead %s)) + == + :: + ++ desk-arak + |= [=desk =arak:hood] + %- pairs + :~ desk+s+desk + arak+(arak:enjs:hood arak) + == + :: + ++ desk-arak-err + |= [=desk =arak:hood =tang] + %+ merge (desk-arak desk arak) + %+ frond %tang + a+(turn tang tank) + :: + ++ merge + |= [a=^json b=^json] + ^- ^json + ?> &(?=(%o -.a) ?=(%o -.b)) + o+(~(uni by p.a) p.b) + -- + -- +++ grab + |% + ++ noun diff:hood + -- +-- + + + + + diff --git a/pkg/arvo/mar/kiln/vats.hoon b/pkg/arvo/mar/kiln/vats.hoon new file mode 100644 index 000000000..e62a01bdc --- /dev/null +++ b/pkg/arvo/mar/kiln/vats.hoon @@ -0,0 +1,20 @@ +/- *hood +|_ vats=(list vat) +++ grow + |% + ++ noun vats + ++ json (vats:enjs vats) + -- +++ grab + |% + ++ noun (list vat) + -- +-- + + + + + + + + diff --git a/pkg/arvo/mar/language-server/rpc/notification.hoon b/pkg/arvo/mar/language-server/rpc/notification.hoon deleted file mode 100644 index d464da489..000000000 --- a/pkg/arvo/mar/language-server/rpc/notification.hoon +++ /dev/null @@ -1,18 +0,0 @@ -/- *language-server -/+ lsp-json=language-server-json -|_ not=all:notification -++ grad %noun -++ grab - |% - ++ noun all:notification - ++ json - |= jon=^json - (notification:dejs:lsp-json jon) - -- -++ grow - |% - ++ noun not - ++ json - (notification:enjs:lsp-json not) - -- --- diff --git a/pkg/arvo/mar/language-server/rpc/notification.hoon b/pkg/arvo/mar/language-server/rpc/notification.hoon new file mode 120000 index 000000000..b95e54c35 --- /dev/null +++ b/pkg/arvo/mar/language-server/rpc/notification.hoon @@ -0,0 +1 @@ +../../../../base-dev/mar/language-server/rpc/notification.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/language-server/rpc/request.hoon b/pkg/arvo/mar/language-server/rpc/request.hoon deleted file mode 100644 index 989a6f41c..000000000 --- a/pkg/arvo/mar/language-server/rpc/request.hoon +++ /dev/null @@ -1,16 +0,0 @@ -/- *language-server -/+ lsp-json=language-server-json -|_ req=all:request -++ grad %noun -++ grow - |% - ++ noun req - -- -++ grab - |% - ++ noun all:request - ++ json - |= jon=^json - (request:dejs:lsp-json jon) - -- --- diff --git a/pkg/arvo/mar/language-server/rpc/request.hoon b/pkg/arvo/mar/language-server/rpc/request.hoon new file mode 120000 index 000000000..26203cf5b --- /dev/null +++ b/pkg/arvo/mar/language-server/rpc/request.hoon @@ -0,0 +1 @@ +../../../../base-dev/mar/language-server/rpc/request.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/language-server/rpc/response.hoon b/pkg/arvo/mar/language-server/rpc/response.hoon deleted file mode 100644 index f82408b87..000000000 --- a/pkg/arvo/mar/language-server/rpc/response.hoon +++ /dev/null @@ -1,17 +0,0 @@ -/- *language-server -/+ lsp=language-server-json -|_ res=all:response -:: -++ grad %noun -++ grow - |% - ++ noun res - ++ json (response:enjs:lsp res) - -- -:: -++ grab - |% - ++ noun all:response - -- -:: --- diff --git a/pkg/arvo/mar/language-server/rpc/response.hoon b/pkg/arvo/mar/language-server/rpc/response.hoon new file mode 120000 index 000000000..9dddb2cef --- /dev/null +++ b/pkg/arvo/mar/language-server/rpc/response.hoon @@ -0,0 +1 @@ +../../../../base-dev/mar/language-server/rpc/response.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/loob.hoon b/pkg/arvo/mar/loob.hoon new file mode 100644 index 000000000..7b124f99c --- /dev/null +++ b/pkg/arvo/mar/loob.hoon @@ -0,0 +1,12 @@ +|_ loob=? +++ grad %noun +++ grow + |% + ++ noun loob + ++ json b+loob + -- +++ grab + |% + ++ noun ? + -- +-- diff --git a/pkg/arvo/mar/mime.hoon b/pkg/arvo/mar/mime.hoon deleted file mode 100644 index 83b4daeb5..000000000 --- a/pkg/arvo/mar/mime.hoon +++ /dev/null @@ -1,32 +0,0 @@ -:: -:::: /hoon/mime/mar - :: -/? 310 -:: -|_ own=mime -++ grow - ^? - |% - ++ jam `@`q.q.own - -- -:: -++ grab :: convert from - ^? - |% - ++ noun mime :: clam from %noun - ++ tape - |=(a=_"" [/application/x-urb-unknown (as-octt:mimes:html a)]) - -- -++ grad - ^? - |% - ++ form %mime - ++ diff |=(mime +<) - ++ pact |=(mime +<) - ++ join |=([mime mime] `(unit mime)`~) - ++ mash - |= [[ship desk mime] [ship desk mime]] - ^- mime - ~|(%mime-mash !!) - -- --- diff --git a/pkg/arvo/mar/mime.hoon b/pkg/arvo/mar/mime.hoon new file mode 120000 index 000000000..0d85898f3 --- /dev/null +++ b/pkg/arvo/mar/mime.hoon @@ -0,0 +1 @@ +../../base-dev/mar/mime.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/noun.hoon b/pkg/arvo/mar/noun.hoon deleted file mode 100644 index 5c798d3c2..000000000 --- a/pkg/arvo/mar/noun.hoon +++ /dev/null @@ -1,19 +0,0 @@ -:: -:::: /hoon/noun/mar - :: -/? 310 -!: -:::: A minimal noun mark -|_ non=* -++ grab |% - ++ noun * - -- -++ grad - |% - ++ form %noun - ++ diff |=(* +<) - ++ pact |=(* +<) - ++ join |=([* *] *(unit *)) - ++ mash |=([[ship desk *] [ship desk *]] `*`~|(%noun-mash !!)) - -- --- diff --git a/pkg/arvo/mar/noun.hoon b/pkg/arvo/mar/noun.hoon new file mode 120000 index 000000000..97cc30876 --- /dev/null +++ b/pkg/arvo/mar/noun.hoon @@ -0,0 +1 @@ +../../base-dev/mar/noun.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/path.hoon b/pkg/arvo/mar/path.hoon deleted file mode 100644 index 2196ba95a..000000000 --- a/pkg/arvo/mar/path.hoon +++ /dev/null @@ -1,11 +0,0 @@ -|_ pax=path -++ grad %noun -++ grow - |% - ++ noun pax - -- -++ grab - |% - ++ noun path - -- --- diff --git a/pkg/arvo/mar/path.hoon b/pkg/arvo/mar/path.hoon new file mode 120000 index 000000000..c07b00064 --- /dev/null +++ b/pkg/arvo/mar/path.hoon @@ -0,0 +1 @@ +../../base-dev/mar/path.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/png.hoon b/pkg/arvo/mar/png.hoon deleted file mode 100644 index 6a60a6a27..000000000 --- a/pkg/arvo/mar/png.hoon +++ /dev/null @@ -1,12 +0,0 @@ -|_ dat=@ -++ grow - |% - ++ mime [/image/png (as-octs:mimes:html dat)] - -- -++ grab - |% - ++ mime |=([p=mite q=octs] q.q) - ++ noun @ - -- -++ grad %mime --- diff --git a/pkg/arvo/mar/png.hoon b/pkg/arvo/mar/png.hoon new file mode 120000 index 000000000..c2d8cf9fa --- /dev/null +++ b/pkg/arvo/mar/png.hoon @@ -0,0 +1 @@ +../../base-dev/mar/png.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/purl.hoon b/pkg/arvo/mar/purl.hoon deleted file mode 100644 index 3fb39fa69..000000000 --- a/pkg/arvo/mar/purl.hoon +++ /dev/null @@ -1,18 +0,0 @@ -:: -:::: /hoon/purl/mar - :: -/? 310 -=, eyre -|_ url=purl -++ grad %noun -:: -++ grow - |% - ++ noun url - ++ hiss [url %get ~ ~] - -- -++ grab :: convert from - |% - ++ noun purl :: clam from %noun - -- --- diff --git a/pkg/arvo/mar/purl.hoon b/pkg/arvo/mar/purl.hoon new file mode 120000 index 000000000..d0d2cc0de --- /dev/null +++ b/pkg/arvo/mar/purl.hoon @@ -0,0 +1 @@ +../../base-dev/mar/purl.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/sole/action.hoon b/pkg/arvo/mar/sole/action.hoon deleted file mode 100644 index 149ef5ef1..000000000 --- a/pkg/arvo/mar/sole/action.hoon +++ /dev/null @@ -1,50 +0,0 @@ -:: -:::: /hoon/action/sole/mar - :: -/? 310 -/- sole -:: -:::: - :: -=, sole -|_ sole-action -:: -++ grad %noun -++ grow - |% - ++ noun +<.grad - -- -++ grab :: convert from - |% - ++ json - |= jon=^json ^- sole-action - %- need %. jon - => [dejs-soft:format ..sole-action] - |^ (ot id+so dat+(fo %ret (of det+change tab+ni ~)) ~) - ++ fo - |* [a=term b=fist] - |=(c=json ?.(=([%s a] c) (b c) (some [a ~]))) - :: - ++ ra - |* [a=[term fist] b=fist] - |= c=json %. c - ?.(=(%a -.c) b (pe -.a (ar +.a))) - :: - ++ ke :: callbacks - |* [gar=* sef=(trap fist)] - |= jon=json ^- (unit _gar) - =- ~! gar ~! (need -) - - ((sef) jon) - :: - ++ change (ot ler+(at ni ni ~) ted+(pe 0v0 edit) ~) - ++ char (cu taft so) - ++ edit - %+ ke *sole-edit |. ~+ - %+ fo %nop - %+ ra mor+edit - (of del+ni set+(cu tuba sa) ins+(ot at+ni cha+char ~) ~) - -- - :: - ++ noun sole-action :: clam from %noun - -- --- diff --git a/pkg/arvo/mar/sole/action.hoon b/pkg/arvo/mar/sole/action.hoon new file mode 120000 index 000000000..b349bd771 --- /dev/null +++ b/pkg/arvo/mar/sole/action.hoon @@ -0,0 +1 @@ +../../../base-dev/mar/sole/action.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/sole/effect.hoon b/pkg/arvo/mar/sole/effect.hoon deleted file mode 100644 index 7b1f7477b..000000000 --- a/pkg/arvo/mar/sole/effect.hoon +++ /dev/null @@ -1,82 +0,0 @@ -:: -:::: /hoon/effect/sole/mar - :: -/? 310 -/- sole -!: -:: -:::: - :: -=, sole -=, format -|% -++ mar-sole-change :: XX dependency - |_ cha=sole-change - ++ grow - |% ++ json - ^- ^json - =, enjs - =; edi - =,(cha (pairs ted+(edi ted) ler+a+~[(numb own.ler) (numb his.ler)] ~)) - |= det=sole-edit - ?- -.det - %nop [%s 'nop'] - %mor [%a (turn p.det ..$)] - %del (frond %del (numb p.det)) - %set (frond %set (tape (tufa p.det))) - %ins (frond %ins (pairs at+(numb p.det) cha+s+(tuft q.det) ~)) - == - -- - -- -++ wush - |= [wid=@u tan=tang] - ^- tape - (of-wall (turn (flop tan) |=(a=tank (of-wall (wash 0^wid a))))) -:: -++ purge :: discard ++styx style - |= a=styx ^- tape - %- zing %+ turn a - |= a=_?>(?=(^ a) i.a) - ?@(a (trip a) ^$(a q.a)) --- -:: -|_ sef=sole-effect -:: -++ grad %noun -++ grab :: convert from - |% - ++ noun sole-effect :: clam from %noun - -- -++ grow - =, enjs - |% - ++ noun sef - ++ json - ^- ^json - ?+ -.sef - ~|(unsupported-effect+-.sef !!) - %mor [%a (turn p.sef |=(a=sole-effect json(sef a)))] - %err (frond %hop (numb p.sef)) - %txt (frond %txt (tape p.sef)) - %tan (frond %tan (tape (wush 160 p.sef))) - %det (frond %det json:~(grow mar-sole-change +.sef)) - :: - %pro - %+ frond %pro - (pairs vis+b+vis.sef tag+s+tag.sef cad+(tape (purge cad.sef)) ~) - :: - %tab - :- %a - %+ turn p.sef - |= [=cord =^tank] - %+ frond %tab - %- pairs - :~ match+s+cord - info+(tape ~(ram re tank)) - == - :: - ?(%bel %clr %nex %bye) - (frond %act %s -.sef) - == - -- --- diff --git a/pkg/arvo/mar/sole/effect.hoon b/pkg/arvo/mar/sole/effect.hoon new file mode 120000 index 000000000..bc11205c0 --- /dev/null +++ b/pkg/arvo/mar/sole/effect.hoon @@ -0,0 +1 @@ +../../../base-dev/mar/sole/effect.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/svg.hoon b/pkg/arvo/mar/svg.hoon deleted file mode 100644 index 2911e4900..000000000 --- a/pkg/arvo/mar/svg.hoon +++ /dev/null @@ -1,12 +0,0 @@ -|_ dat=@ -++ grow - |% - ++ mime [/image/'svg+xml' (as-octs:mimes:html dat)] - -- -++ grab - |% - ++ mime |=([p=mite q=octs] q.q) - ++ noun @ - -- -++ grad %mime --- diff --git a/pkg/arvo/mar/svg.hoon b/pkg/arvo/mar/svg.hoon new file mode 120000 index 000000000..2b406c2ac --- /dev/null +++ b/pkg/arvo/mar/svg.hoon @@ -0,0 +1 @@ +../../base-dev/mar/svg.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/tang.hoon b/pkg/arvo/mar/tang.hoon deleted file mode 100644 index 681e939fb..000000000 --- a/pkg/arvo/mar/tang.hoon +++ /dev/null @@ -1,30 +0,0 @@ -:: -:::: /hoon/tang/mar - :: -/? 310 -:: -=, format -|_ tan=(list tank) -++ grad %noun -++ grow - |% - ++ noun tan - ++ json - =/ result=(each (list ^json) tang) - (mule |.((turn tan tank:enjs:format))) - ?- -.result - %& a+p.result - %| a+[a+[%s '[[output rendering error]]']~]~ - == - :: - ++ elem - =- ;pre:code:"{(of-wall -)}" - ^- wall %- zing ^- (list wall) - (turn (flop tan) |=(a=tank (wash 0^160 a))) - -- -++ grab :: convert from - |% - ++ noun (list ^tank) :: clam from %noun - ++ tank |=(a=^tank [a]~) - -- --- diff --git a/pkg/arvo/mar/tang.hoon b/pkg/arvo/mar/tang.hoon new file mode 120000 index 000000000..9206e52b2 --- /dev/null +++ b/pkg/arvo/mar/tang.hoon @@ -0,0 +1 @@ +../../base-dev/mar/tang.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/tape.hoon b/pkg/arvo/mar/tape.hoon deleted file mode 100644 index a30176421..000000000 --- a/pkg/arvo/mar/tape.hoon +++ /dev/null @@ -1,12 +0,0 @@ -|_ tap=tape -++ grad %noun -++ grow - |% - ++ noun tap - ++ json s+(crip tap) - -- -++ grab - |% - ++ noun tape - -- --- diff --git a/pkg/arvo/mar/tape.hoon b/pkg/arvo/mar/tape.hoon new file mode 120000 index 000000000..be51fcb2d --- /dev/null +++ b/pkg/arvo/mar/tape.hoon @@ -0,0 +1 @@ +../../base-dev/mar/tape.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/txt-diff.hoon b/pkg/arvo/mar/txt-diff.hoon deleted file mode 100644 index 2c9a500dc..000000000 --- a/pkg/arvo/mar/txt-diff.hoon +++ /dev/null @@ -1,16 +0,0 @@ -:: -:::: /hoon/txt-diff/mar - :: -/? 310 -|_ txt-diff=(urge:clay cord) -:: -++ grad %noun -++ grow - |% - ++ noun txt-diff - -- -++ grab :: convert from - |% - ++ noun (urge:clay cord) :: make from %noun - -- --- diff --git a/pkg/arvo/mar/txt-diff.hoon b/pkg/arvo/mar/txt-diff.hoon new file mode 120000 index 000000000..1f7c04285 --- /dev/null +++ b/pkg/arvo/mar/txt-diff.hoon @@ -0,0 +1 @@ +../../base-dev/mar/txt-diff.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/txt.hoon b/pkg/arvo/mar/txt.hoon deleted file mode 100644 index 1c349b182..000000000 --- a/pkg/arvo/mar/txt.hoon +++ /dev/null @@ -1,275 +0,0 @@ -:: -:::: /hoon/txt/mar - :: -/? 310 -:: -=, clay -=, differ -=, format -=, mimes:html -|_ txt=wain -:: -++ grab :: convert from - |% - ++ mime |=((pair mite octs) (to-wain q.q)) - ++ noun wain :: clam from %noun - -- -++ grow - => v=. - |% - ++ mime => v [/text/plain (as-octs (of-wain txt))] - ++ elem => v ;pre: {(trip (of-wain txt))} - -- -++ grad - |% - ++ form %txt-diff - ++ diff - |= tyt=wain - ^- (urge cord) - (lusk txt tyt (loss txt tyt)) - :: - ++ pact - |= dif=(urge cord) - ~| [%pacting dif] - ^- wain - (lurk txt dif) - :: - ++ join - |= [ali=(urge cord) bob=(urge cord)] - ^- (unit (urge cord)) - |^ - =. ali (clean ali) - =. bob (clean bob) - |- ^- (unit (urge cord)) - ?~ ali `bob - ?~ bob `ali - ?- -.i.ali - %& - ?- -.i.bob - %& - ?: =(p.i.ali p.i.bob) - %+ bind $(ali t.ali, bob t.bob) - |=(cud=(urge cord) [i.ali cud]) - ?: (gth p.i.ali p.i.bob) - %+ bind $(p.i.ali (sub p.i.ali p.i.bob), bob t.bob) - |=(cud=(urge cord) [i.bob cud]) - %+ bind $(ali t.ali, p.i.bob (sub p.i.bob p.i.ali)) - |=(cud=(urge cord) [i.ali cud]) - :: - %| - ?: =(p.i.ali (lent p.i.bob)) - %+ bind $(ali t.ali, bob t.bob) - |=(cud=(urge cord) [i.bob cud]) - ?: (gth p.i.ali (lent p.i.bob)) - %+ bind $(p.i.ali (sub p.i.ali (lent p.i.bob)), bob t.bob) - |=(cud=(urge cord) [i.bob cud]) - ~ - == - :: - %| - ?- -.i.bob - %| - ?. =(i.ali i.bob) - ~ - %+ bind $(ali t.ali, bob t.bob) - |=(cud=(urge cord) [i.ali cud]) - :: - %& - ?: =(p.i.bob (lent p.i.ali)) - %+ bind $(ali t.ali, bob t.bob) - |=(cud=(urge cord) [i.ali cud]) - ?: (gth p.i.bob (lent p.i.ali)) - %+ bind $(ali t.ali, p.i.bob (sub p.i.bob (lent p.i.ali))) - |=(cud=(urge cord) [i.ali cud]) - ~ - == - == - ++ clean :: clean - |= wig=(urge cord) - ^- (urge cord) - ?~ wig ~ - ?~ t.wig wig - ?: ?=(%& -.i.wig) - ?: ?=(%& -.i.t.wig) - $(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig]) - [i.wig $(wig t.wig)] - ?: ?=(%| -.i.t.wig) - $(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig]) - [i.wig $(wig t.wig)] - -- - :: - ++ mash - |= $: [als=ship ald=desk ali=(urge cord)] - [bos=ship bod=desk bob=(urge cord)] - == - ^- (urge cord) - |^ - =. ali (clean ali) - =. bob (clean bob) - |- ^- (urge cord) - ?~ ali bob - ?~ bob ali - ?- -.i.ali - %& - ?- -.i.bob - %& - ?: =(p.i.ali p.i.bob) - [i.ali $(ali t.ali, bob t.bob)] - ?: (gth p.i.ali p.i.bob) - [i.bob $(p.i.ali (sub p.i.ali p.i.bob), bob t.bob)] - [i.ali $(ali t.ali, p.i.bob (sub p.i.bob p.i.ali))] - :: - %| - ?: =(p.i.ali (lent p.i.bob)) - [i.bob $(ali t.ali, bob t.bob)] - ?: (gth p.i.ali (lent p.i.bob)) - [i.bob $(p.i.ali (sub p.i.ali (lent p.i.bob)), bob t.bob)] - =/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)] - (resolve ali bob) - [fic $(ali ali, bob bob)] - :: ~ :: here, alice is good for a while, but not for the whole - == :: length of bob's changes - :: - %| - ?- -.i.bob - %| - =/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)] - (resolve ali bob) - [fic $(ali ali, bob bob)] - :: - %& - ?: =(p.i.bob (lent p.i.ali)) - [i.ali $(ali t.ali, bob t.bob)] - ?: (gth p.i.bob (lent p.i.ali)) - [i.ali $(ali t.ali, p.i.bob (sub p.i.bob (lent p.i.ali)))] - =/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)] - (resolve ali bob) - [fic $(ali ali, bob bob)] - == - == - :: - ++ annotate :: annotate conflict - |= $: ali=(list @t) - bob=(list @t) - bas=(list @t) - == - ^- (list @t) - %- zing - ^- (list (list @t)) - %- flop - ^- (list (list @t)) - :- :_ ~ - %^ cat 3 '<<<<<<<<<<<<' - %^ cat 3 ' ' - %^ cat 3 `@t`(scot %p bos) - %^ cat 3 '/' - bod - - :- bob - :- ~['------------'] - :- bas - :- ~['++++++++++++'] - :- ali - :- :_ ~ - %^ cat 3 '>>>>>>>>>>>>' - %^ cat 3 ' ' - %^ cat 3 `@t`(scot %p als) - %^ cat 3 '/' - ald - ~ - :: - ++ clean :: clean - |= wig=(urge cord) - ^- (urge cord) - ?~ wig ~ - ?~ t.wig wig - ?: ?=(%& -.i.wig) - ?: ?=(%& -.i.t.wig) - $(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig]) - [i.wig $(wig t.wig)] - ?: ?=(%| -.i.t.wig) - $(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig]) - [i.wig $(wig t.wig)] - :: - ++ resolve - |= [ali=(urge cord) bob=(urge cord)] - ^- [fic=[%| p=(list cord) q=(list cord)] ali=(urge cord) bob=(urge cord)] - =- [[%| bac (annotate alc boc bac)] ali bob] - |- ^- $: $: bac=(list cord) - alc=(list cord) - boc=(list cord) - == - ali=(urge cord) - bob=(urge cord) - == - ?~ ali [[~ ~ ~] ali bob] - ?~ bob [[~ ~ ~] ali bob] - ?- -.i.ali - %& - ?- -.i.bob - %& [[~ ~ ~] ali bob] :: no conflict - %| - =+ lob=(lent p.i.bob) - ?: =(lob p.i.ali) - [[p.i.bob p.i.bob q.i.bob] t.ali t.bob] - ?: (lth lob p.i.ali) - [[p.i.bob p.i.bob q.i.bob] [[%& (sub p.i.ali lob)] t.ali] t.bob] - =+ wat=(scag (sub lob p.i.ali) p.i.bob) - =+ ^= res - %= $ - ali t.ali - bob [[%| (scag (sub lob p.i.ali) p.i.bob) ~] t.bob] - == - :* :* (welp bac.res wat) - (welp alc.res wat) - (welp boc.res q.i.bob) - == - ali.res - bob.res - == - == - :: - %| - ?- -.i.bob - %& - =+ loa=(lent p.i.ali) - ?: =(loa p.i.bob) - [[p.i.ali q.i.ali p.i.ali] t.ali t.bob] - ?: (lth loa p.i.bob) - [[p.i.ali q.i.ali p.i.ali] t.ali [[%& (sub p.i.bob loa)] t.bob]] - =+ wat=(slag (sub loa p.i.bob) p.i.ali) - =+ ^= res - %= $ - ali [[%| (scag (sub loa p.i.bob) p.i.ali) ~] t.ali] - bob t.bob - == - :* :* (welp bac.res wat) - (welp alc.res q.i.ali) - (welp boc.res wat) - == - ali.res - bob.res - == - :: - %| - =+ loa=(lent p.i.ali) - =+ lob=(lent p.i.bob) - ?: =(loa lob) - [[p.i.ali q.i.ali q.i.bob] t.ali t.bob] - =+ ^= res - ?: (gth loa lob) - $(ali [[%| (scag (sub loa lob) p.i.ali) ~] t.ali], bob t.bob) - ~& [%scagging loa=loa pibob=p.i.bob slag=(scag loa p.i.bob)] - $(ali t.ali, bob [[%| (scag (sub lob loa) p.i.bob) ~] t.bob]) - :* :* (welp bac.res ?:((gth loa lob) p.i.bob p.i.ali)) - (welp alc.res q.i.ali) - (welp boc.res q.i.bob) - == - ali.res - bob.res - == - == - == - -- - -- --- diff --git a/pkg/arvo/mar/txt.hoon b/pkg/arvo/mar/txt.hoon new file mode 120000 index 000000000..432541575 --- /dev/null +++ b/pkg/arvo/mar/txt.hoon @@ -0,0 +1 @@ +../../base-dev/mar/txt.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/udon.hoon b/pkg/arvo/mar/udon.hoon deleted file mode 100644 index 72c9e6f5c..000000000 --- a/pkg/arvo/mar/udon.hoon +++ /dev/null @@ -1,32 +0,0 @@ -:: -:::: /hoon/udon/mar - :: -/+ cram -:: -|_ mud=@t -++ grow - |% - ++ mime [/text/x-unmark (as-octs:mimes:html mud)] - ++ txt - (to-wain:format mud) - ++ elem - ^- manx - =, cram - elm:(static (ream mud)) - ++ front :: XX performance, types - ^- (map term knot) - %- ~(run by inf:(static:cram (ream mud))) - |= a=dime ^- cord - ?+ (end 3 p.a) (scot a) - %t q.a - == - -- -++ grab - |% - ++ mime |=((pair mite octs) q.q) - ++ noun @t - ++ txt of-wain:format - -- -++ grad %txt -++ garb /down --- diff --git a/pkg/arvo/mar/udon.hoon b/pkg/arvo/mar/udon.hoon new file mode 120000 index 000000000..215e0ada9 --- /dev/null +++ b/pkg/arvo/mar/udon.hoon @@ -0,0 +1 @@ +../../base-dev/mar/udon.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/umd.hoon b/pkg/arvo/mar/umd.hoon deleted file mode 100644 index d249bcff8..000000000 --- a/pkg/arvo/mar/umd.hoon +++ /dev/null @@ -1,32 +0,0 @@ -:: -:::: /hoon/umd/mar - :: -/+ cram -:: -|_ mud=@t -++ grow - |% - ++ mime [/text/x-unmark (as-octs:mimes:html mud)] - ++ txt - (to-wain:format mud) - ++ elem - ^- manx - =, cram - elm:(static (ream mud)) - ++ front :: XX performance, types - ^- (map term knot) - %- ~(run by inf:(static:cram (ream mud))) - |= a=dime ^- cord - ?+ (end 3 p.a) (scot a) - %t q.a - == - -- -++ grab - |% - ++ mime |=((pair mite octs) q.q) - ++ noun @t - ++ txt of-wain:format - -- -++ grad %txt -++ garb /down --- diff --git a/pkg/arvo/mar/umd.hoon b/pkg/arvo/mar/umd.hoon new file mode 120000 index 000000000..9b827a24d --- /dev/null +++ b/pkg/arvo/mar/umd.hoon @@ -0,0 +1 @@ +../../base-dev/mar/umd.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/urb.hoon b/pkg/arvo/mar/urb.hoon deleted file mode 100644 index 49545e73f..000000000 --- a/pkg/arvo/mar/urb.hoon +++ /dev/null @@ -1,18 +0,0 @@ -:: -:::: /hoon/elem/urb/mar - :: -/? 310 -=, mimes:html -=, html -|_ own=manx -:: -++ grad %noun -++ grow :: convert to - |% - ++ hymn ;html:(head body:"+{own}") :: convert to %hymn - ++ html (crip (en-xml hymn)) :: convert to %html - ++ mime [/text/html (as-octs html)] :: convert to %mime - -- -++ grab |% :: convert from - ++ noun manx :: clam from %noun --- -- diff --git a/pkg/arvo/mar/urb.hoon b/pkg/arvo/mar/urb.hoon new file mode 120000 index 000000000..2d8112d1d --- /dev/null +++ b/pkg/arvo/mar/urb.hoon @@ -0,0 +1 @@ +../../base-dev/mar/urb.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/urbit.hoon b/pkg/arvo/mar/urbit.hoon deleted file mode 100644 index 8d2c3c658..000000000 --- a/pkg/arvo/mar/urbit.hoon +++ /dev/null @@ -1,17 +0,0 @@ -:: -:::: /hoon/urbit/mar - :: -/? 310 -:::: A minimal urbit mark -:: -|_ her=@p -++ grab - |% - ++ noun @p - -- -++ grow - |% - ++ noun her - -- -++ grad %noun --- diff --git a/pkg/arvo/mar/urbit.hoon b/pkg/arvo/mar/urbit.hoon new file mode 120000 index 000000000..70a62a723 --- /dev/null +++ b/pkg/arvo/mar/urbit.hoon @@ -0,0 +1 @@ +../../base-dev/mar/urbit.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/woff2.hoon b/pkg/arvo/mar/woff2.hoon deleted file mode 100644 index 7e7242908..000000000 --- a/pkg/arvo/mar/woff2.hoon +++ /dev/null @@ -1,12 +0,0 @@ -|_ dat=octs -++ grow - |% - ++ mime [/font/woff2 dat] - -- -++ grab - |% - ++ mime |=([=mite =octs] octs) - ++ noun octs - -- -++ grad %mime --- diff --git a/pkg/arvo/mar/woff2.hoon b/pkg/arvo/mar/woff2.hoon new file mode 120000 index 000000000..beaf4875c --- /dev/null +++ b/pkg/arvo/mar/woff2.hoon @@ -0,0 +1 @@ +../../base-dev/mar/woff2.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/xml.hoon b/pkg/arvo/mar/xml.hoon deleted file mode 100644 index 6d52d8024..000000000 --- a/pkg/arvo/mar/xml.hoon +++ /dev/null @@ -1,21 +0,0 @@ -:: -:::: /hoon/xml/mar - :: -/? 310 - :: -:::: compute - :: -=, mimes:html -=, html -|_ xml=@t -:: -++ grad %mime -++ grow :: convert to - |% :: - ++ mime [/application/xml (as-octs xml)] :: to %mime - ++ hymn (need (de-xml xml)) :: to %hymn - -- :: -++ grab |% :: convert from - ++ noun @t :: clam from %noun - ++ mime |=([p=mite q=octs] q.q) :: retrieve form %mime --- -- diff --git a/pkg/arvo/mar/xml.hoon b/pkg/arvo/mar/xml.hoon new file mode 120000 index 000000000..e6323e215 --- /dev/null +++ b/pkg/arvo/mar/xml.hoon @@ -0,0 +1 @@ +../../base-dev/mar/xml.hoon \ No newline at end of file diff --git a/pkg/arvo/sur/bill.hoon b/pkg/arvo/sur/bill.hoon deleted file mode 100644 index 53c2b31e9..000000000 --- a/pkg/arvo/sur/bill.hoon +++ /dev/null @@ -1,23 +0,0 @@ -|% -+$ bill (list chit) -+$ chit - $% [%apes duz=(list dude:gall)] - [%fish duz=(list dude:gall)] - == -:: -++ read-apes - |= =bill - ^- (list dude:gall) - ?~ bill ~ - ?: ?=(%apes -.i.bill) - duz.i.bill - $(bill t.bill) -:: -++ read-fish - |= =bill - ^- (list dude:gall) - ?~ bill ~ - ?: ?=(%fish -.i.bill) - duz.i.bill - $(bill t.bill) --- diff --git a/pkg/arvo/sur/bill.hoon b/pkg/arvo/sur/bill.hoon new file mode 120000 index 000000000..c048171cb --- /dev/null +++ b/pkg/arvo/sur/bill.hoon @@ -0,0 +1 @@ +../../base-dev/sur/bill.hoon \ No newline at end of file diff --git a/pkg/arvo/sur/docket.hoon b/pkg/arvo/sur/docket.hoon new file mode 120000 index 000000000..a34ff1108 --- /dev/null +++ b/pkg/arvo/sur/docket.hoon @@ -0,0 +1 @@ +../../base-dev/sur/docket.hoon \ No newline at end of file diff --git a/pkg/arvo/sur/hood.hoon b/pkg/arvo/sur/hood.hoon index 3f98044b0..956703807 100644 --- a/pkg/arvo/sur/hood.hoon +++ b/pkg/arvo/sur/hood.hoon @@ -10,6 +10,8 @@ [%merge =desk =arak] [%merge-sunk =desk =arak =tang] [%merge-fail =desk =arak =tang] + [%suspend =desk =arak] + [%revive =desk =arak] == :: $arak: foreign vat tracker :: @@ -24,11 +26,13 @@ == :: $rein: diff from desk manifest :: +:: .liv: suspended? :: .add: agents not in manifest that should be running :: .sub: agents in manifest that should not be running :: +$ rein - $: add=(set dude) + $: liv=_& + add=(set dude) sub=(set dude) == :: @@ -51,26 +55,21 @@ :+ %rose ["" "{}" "::"] ^- tang =- ?: =(~ next.arak) - - (snoc - leaf/"pending: {}") + %+ snoc - + leaf/"pending: {<(turn next.arak |=([@ lal=@tas num=@] [lal num]))>}" ^- tang =/ meb (mergebase-hashes our desk now arak) + =/ sat ?:(liv.rein.arak "running" "suspended") :~ leaf/"/sys/kelvin: {<[lal num]:weft>}" leaf/"base hash: {?.(=(1 (lent meb)) <(head meb)>)}" leaf/"%cz hash: {}" - leaf/"remote aeon: {}" + leaf/"source ship: {}" + leaf/"source desk: {}" + leaf/"source aeon: {}" + leaf/"status: {sat}" leaf/"force on: {?:(=(~ add.rein.arak) "~" )}" leaf/"force off: {?:(=(~ sub.rein.arak) "~" )}" == -:: +ankh-to-kelvin: read /sys.kelvin from an $ankh -:: -++ ankh-to-kelvin - |= =ankh - !< weft - q:(need (~(get an:cloy ankh) /sys/kelvin)) -:: -++ read-kelvin-local - |= [our=ship =desk =aeon] - .^(weft cx+/(scot %p our)/[desk]/(scot %ud aeon)/sys/kelvin) :: ++ read-kelvin-foreign |= [=ship =desk =aeon] @@ -94,7 +93,10 @@ :: ++ read-bill |= [our=ship =desk now=@da] - .^(bill cx+/(scot %p our)/[desk]/(scot %da now)/desk/bill) + =/ pax (en-beam [our desk da+now] /desk/bill) + ?~ =<(fil .^(arch cy/pax)) + *bill + .^(bill cx/pax) :: +is-fish: should dill link .dude? :: ++ is-fish |=([=dude =bill] .?((find ~[dude] (read-fish bill)))) @@ -129,7 +131,7 @@ ^- (list dude) =/ duz (read-apes bill) =. duz (skip duz ~(has in sub.rein)) - =. duz (weld duz ~(tap in add.rein)) + =. duz (weld duz (skip ~(tap in add.rein) ~(has in (sy duz)))) duz :: ++ mergebase-hashes @@ -139,5 +141,68 @@ =/ wen (scot %da now) %+ turn .^((list tako) %cs ~[ego desk wen %base her desk.arak]) |=(=tako .^(@uv %cs ~[ego desk wen %hash (scot %uv tako)])) +:: +++ enjs + =, enjs:format + |% + ++ vats + |= v=(list ^vat) + ^- json + %- pairs + %+ turn v + |= va=^vat + [desk.va (vat va)] + :: + ++ tim + |= t=@ + ^- json + (numb (fall (mole |.((unm:chrono:userlib t))) 0)) + :: + ++ cass + |= c=^cass + %- pairs + :~ ud+(numb ud.c) + da+(tim da.c) + == + :: + ++ vat + |= v=^vat + %- pairs + :~ desk+s+desk.v + hash+s+(scot %uv hash.v) + cass+(cass cass.v) + arak+(arak arak.v) + == + :: + ++ weft + |= w=^weft + %- pairs + :~ name+s+lal.w + kelvin+(numb num.w) + == + :: + ++ woof + |= w=[=aeon =^weft] + %- pairs + :~ aeon+(numb aeon.w) + weft+(weft weft.w) + == + :: + ++ rein + |= r=^rein + %- pairs + :~ add+a+(turn ~(tap in add.r) (lead %s)) + sub+a+(turn ~(tap in sub.r) (lead %s)) + == + :: + ++ arak + |= a=^arak + %- pairs + :~ ship+s+(scot %p ship.a) + desk+s+desk.a + aeon+(numb aeon.a) + next+a+(turn next.a woof) + rein+(rein rein.a) + == + -- -- - diff --git a/pkg/arvo/sur/sole.hoon b/pkg/arvo/sur/sole.hoon deleted file mode 100644 index e942bccb8..000000000 --- a/pkg/arvo/sur/sole.hoon +++ /dev/null @@ -1,87 +0,0 @@ -:: -:::: /hoon/sole/sur - :: -^? -|% -+$ sole-action :: sole to app - $: id=@ta :: duct id - $= dat - $% :: [%abo ~] :: reset interaction - [%det sole-change] :: command line edit - [%ret ~] :: submit and clear - [%clr ~] :: exit context - [%tab pos=@ud] :: tab complete - == :: - == -+$ sole-buffer (list @c) :: command state -+$ sole-change :: network change - $: ler=sole-clock :: destination clock - haw=@uvH :: source hash - ted=sole-edit :: state change - == :: -+$ sole-clock [own=@ud his=@ud] :: vector clock -+$ sole-edit :: shared state change - $% [%del p=@ud] :: delete one at - [%ins p=@ud q=@c] :: insert at - [%mor p=(list sole-edit)] :: combination - [%nop ~] :: no-op - [%set p=sole-buffer] :: discontinuity - == :: -+$ sole-effect :: app to sole - $% [%bel ~] :: beep - [%blk p=@ud q=@c] :: blink+match char at - [%bye ~] :: close session - [%clr ~] :: clear screen - [%det sole-change] :: edit command - [%err p=@ud] :: error point - [%klr p=styx] :: styled text line - [%mor p=(list sole-effect)] :: multiple effects - [%nex ~] :: save clear command - [%pro sole-prompt] :: set prompt - [%sag p=path q=*] :: save to jamfile - [%sav p=path q=@] :: save to file - [%tab p=(list [=cord =tank])] :: tab-complete list - [%tan p=(list tank)] :: classic tank - :: [%taq p=tanq] :: modern tank - [%txt p=tape] :: text line - [%url p=@t] :: activate url - == :: -+$ sole-command :: command state - $: pos=@ud :: cursor position - say=sole-share :: cursor - == :: -+$ sole-prompt :: prompt definition - $: vis=? :: command visible - tag=term :: history mode - cad=styx :: caption - == :: -+$ sole-share :: symmetric state - $: ven=sole-clock :: our vector clock - leg=(list sole-edit) :: unmerged edits - buf=sole-buffer :: sole state - == :: -:: :: -:: :: -++ sole-dialog :: standard dialog - |* out=$-(* *) :: output structure - $-(sole-input (sole-result out)) :: output function -:: :: -+$ sole-input tape :: prompt input -++ sole-result :: conditional result - |* out=$-(* *) :: output structure - $@(@ud (sole-product out)) :: error position -:: :: -++ sole-product :: success result - |* out=$-(* *) :: - %+ pair (list tank) :: - %+ each (unit out) :: ~ is abort - (pair sole-prompt (sole-dialog out)) :: ask and continue -:: :: -+$ sole-gen :: XX virtual type - $% [%say $-((sole-args) (cask))] :: direct noun - [%ask $-((sole-args) (sole-product (cask)))] :: dialog - == :: -++ sole-args :: generator arguments - |* _[* *] :: - ,[[now=@da eny=@uvJ bek=beak] [,+<- ,+<+]] :: --- diff --git a/pkg/arvo/sur/sole.hoon b/pkg/arvo/sur/sole.hoon new file mode 120000 index 000000000..8cac11891 --- /dev/null +++ b/pkg/arvo/sur/sole.hoon @@ -0,0 +1 @@ +../../base-dev/sur/sole.hoon \ No newline at end of file diff --git a/pkg/arvo/sur/spider.hoon b/pkg/arvo/sur/spider.hoon deleted file mode 100644 index 5fe7a7626..000000000 --- a/pkg/arvo/sur/spider.hoon +++ /dev/null @@ -1,14 +0,0 @@ -/+ libstrand=strand -=, strand=strand:libstrand -|% -+$ thread $-(vase _*form:(strand ,vase)) -+$ input [=tid =cage] -+$ tid tid:strand -+$ bowl bowl:strand -+$ http-error - $? %bad-request :: 400 - %forbidden :: 403 - %nonexistent :: 404 - %offline :: 504 - == --- diff --git a/pkg/arvo/sur/spider.hoon b/pkg/arvo/sur/spider.hoon new file mode 120000 index 000000000..12ae2c187 --- /dev/null +++ b/pkg/arvo/sur/spider.hoon @@ -0,0 +1 @@ +../../base-dev/sur/spider.hoon \ No newline at end of file diff --git a/pkg/arvo/sur/verb.hoon b/pkg/arvo/sur/verb.hoon deleted file mode 100644 index f7d19f658..000000000 --- a/pkg/arvo/sur/verb.hoon +++ /dev/null @@ -1,12 +0,0 @@ -|% -+$ event - $% [%on-init ~] - [%on-load ~] - [%on-poke =mark] - [%on-watch =path] - [%on-leave =path] - [%on-agent =wire sign=term] - [%on-arvo =wire vane=term sign=term] - [%on-fail =term] - == --- \ No newline at end of file diff --git a/pkg/arvo/sur/verb.hoon b/pkg/arvo/sur/verb.hoon new file mode 120000 index 000000000..1a6100d9c --- /dev/null +++ b/pkg/arvo/sur/verb.hoon @@ -0,0 +1 @@ +../../base-dev/sur/verb.hoon \ No newline at end of file diff --git a/pkg/arvo/sys/lull.hoon b/pkg/arvo/sys/lull.hoon index a5c5168ba..14d4b5b57 100644 --- a/pkg/arvo/sys/lull.hoon +++ b/pkg/arvo/sys/lull.hoon @@ -1678,6 +1678,7 @@ +$ neat $% [%arvo =note-arvo] [%agent [=ship name=term] =deal] + [%pyre =tang] == +$ deal $% [%raw-poke =mark =noun] @@ -1696,8 +1697,9 @@ +$ step (quip card form) +$ card (wind note gift) +$ note - $% [%arvo =note-arvo] - [%agent [=ship name=term] =task] + $% [%agent [=ship name=term] =task] + [%arvo note-arvo] + [%pyre =tang] == +$ task $% [%watch =path] diff --git a/pkg/arvo/sys/vane/dill.hoon b/pkg/arvo/sys/vane/dill.hoon index 00990510e..c5e35569f 100644 --- a/pkg/arvo/sys/vane/dill.hoon +++ b/pkg/arvo/sys/vane/dill.hoon @@ -222,12 +222,8 @@ =/ myt (flop (fall tem ~)) =. tem ~ =. ..mere (pass / %g %jolt %base ram) - =. ..mere - ?- (clan:title our) - %pawn ..mere - %czar (kiln-sync %kids our %base) - * (kiln-install %base sponsor %kids) - == + =? ..mere ?=(?(%earl %duke %king) (clan:title our)) + (kiln-install %base sponsor %kids) =. ..mere (show-desk %kids) =. ..mere drum-watch |- ^+ ..mere diff --git a/pkg/arvo/sys/vane/gall.hoon b/pkg/arvo/sys/vane/gall.hoon index e95699516..75f9b80dc 100644 --- a/pkg/arvo/sys/vane/gall.hoon +++ b/pkg/arvo/sys/vane/gall.hoon @@ -1110,6 +1110,12 @@ =/ =duct system-duct.state =/ =wire p.card =/ =neet q.card + ?: ?=(%pyre -.neet) + %: mean + leaf/"gall: %pyre from {}, killing event" + leaf/"wire: {}" + tang.neet + == =. wire ?- -.neet %agent [%out (scot %p ship.neet) name.neet wire] diff --git a/pkg/base-dev/lib/agentio.hoon b/pkg/base-dev/lib/agentio.hoon index bd09905f7..fc03dd7b3 100644 --- a/pkg/base-dev/lib/agentio.hoon +++ b/pkg/base-dev/lib/agentio.hoon @@ -84,6 +84,10 @@ =/ =rave:clay ?:(?=(%sing genre) [genre mood] [genre mood]) (warp-our q.byk.bowl `rave) + :: + ++ connect + |= [=binding:eyre app=term] + (arvo %e %connect binding app) -- :: ++ fact-curry diff --git a/pkg/base-dev/lib/docket.hoon b/pkg/base-dev/lib/docket.hoon new file mode 100644 index 000000000..de9f21e80 --- /dev/null +++ b/pkg/base-dev/lib/docket.hoon @@ -0,0 +1,190 @@ +/- *docket +|% +:: +++ mime + |% + +$ draft + $: title=(unit @t) + info=(unit @t) + color=(unit @ux) + glob=(unit url) + base=(unit term) + site=(unit path) + image=(unit url) + version=(unit version) + website=(unit url) + license=(unit cord) + == + :: + ++ finalize + |= =draft + ^- (unit docket) + ?~ title.draft ~ + ?~ info.draft ~ + ?~ color.draft ~ + ?~ version.draft ~ + ?~ website.draft ~ + ?~ license.draft ~ + =/ href=(unit href) + ?^ site.draft `[%site u.site.draft] + ?~ base.draft ~ + ?~ glob.draft ~ + `[%glob [u.base.draft [%http u.glob]:draft]] + ?~ href ~ + =, draft + :- ~ + :* %1 + u.title + u.info + u.color + u.href + image + u.version + u.website + u.license + == + :: + ++ from-clauses + =| =draft + |= cls=(list clause) + ^- (unit docket) + =* loop $ + ?~ cls (finalize draft) + =* clause i.cls + =. draft + ?- -.clause + %title draft(title `title.clause) + %info draft(info `info.clause) + %color draft(color `color.clause) + %glob draft(glob `url.clause) + %base draft(base `base.clause) + %site draft(site `path.clause) + %image draft(image `url.clause) + %version draft(version `version.clause) + %website draft(website `website.clause) + %license draft(license `license.clause) + == + loop(cls t.cls) + :: + ++ to-clauses + |= d=docket + ^- (list clause) + %- zing + :~ :~ title+title.d + info+info.d + color+color.d + version+version.d + website+website.d + license+license.d + == + ?~ image.d ~ ~[image+u.image.d] + ?: ?=(%site -.href.d) ~[site+path.href.d] + :~ base+base.href.d + glob+url.glob-location.href.d + == + == + :: + ++ spit-clause + |= =clause + ^- tape + %+ weld " {(trip -.clause)}+" + ?+ -.clause "'{(trip +.clause)}'" + %color (scow %ux color.clause) + %site (spud path.clause) + :: + %version + =, version.clause + "[{(scow %ud major)} {(scow %ud minor)} {(scow %ud patch)}]" + == + :: + ++ spit-docket + |= dock=docket + ^- tape + ;: welp + ":~\0a" + `tape`(zing (join "\0a" (turn (to-clauses dock) spit-clause))) + "\0a==" + == + -- +:: +++ enjs + =, enjs:format + |% + :: + ++ charge-update + |= u=^charge-update + ^- json + %+ frond -.u + ^- json + ?- -.u + %del-charge s+desk.u + :: + %initial + %- pairs + %+ turn ~(tap by initial.u) + |=([=desk c=^charge] [desk (charge c)]) + :: + %add-charge + %- pairs + :~ desk+s+desk.u + charge+(charge charge.u) + == + == + :: + ++ num + |= a=@u + ^- ^tape + =/ p=json (numb a) + ?> ?=(%n -.p) + (trip p.p) + :: + ++ version + |= v=^version + ^- json + :- %s + %- crip + "{(num major.v)}.{(num minor.v)}.{(num patch.v)}" + :: + ++ merge + |= [a=json b=json] + ^- json + ?> &(?=(%o -.a) ?=(%o -.b)) + [%o (~(uni by p.a) p.b)] + :: + ++ href + |= h=^href + %+ frond -.h + ?- -.h + %glob (pairs base+s+base.h ~) + %site s+(spat path.h) + == + :: + ++ charge + |= c=^charge + %+ merge (docket docket.c) + %- pairs + :~ chad+(chad chad.c) + == + :: + ++ docket + |= d=^docket + ^- json + %- pairs + :~ title+s+title.d + info+s+info.d + color+s+(scot %ux color.d) + href+(href href.d) + image+?~(image.d ~ s+u.image.d) + version+(version version.d) + license+s+license.d + website+s+website.d + == + :: + ++ chad + |= c=^chad + %+ frond -.c + ?+ -.c ~ + %hung s+err.c + == + -- +-- diff --git a/pkg/base-dev/lib/skeleton.hoon b/pkg/base-dev/lib/skeleton.hoon new file mode 100644 index 000000000..982c371b8 --- /dev/null +++ b/pkg/base-dev/lib/skeleton.hoon @@ -0,0 +1,51 @@ +:: Similar to default-agent except crashes everywhere +^- agent:gall +|_ bowl:gall +++ on-init + ^- (quip card:agent:gall agent:gall) + !! +:: +++ on-save + ^- vase + !! +:: +++ on-load + |~ old-state=vase + ^- (quip card:agent:gall agent:gall) + !! +:: +++ on-poke + |~ in-poke-data=cage + ^- (quip card:agent:gall agent:gall) + !! +:: +++ on-watch + |~ path + ^- (quip card:agent:gall agent:gall) + !! +:: +++ on-leave + |~ path + ^- (quip card:agent:gall agent:gall) + !! +:: +++ on-peek + |~ path + ^- (unit (unit cage)) + !! +:: +++ on-agent + |~ [wire sign:agent:gall] + ^- (quip card:agent:gall agent:gall) + !! +:: +++ on-arvo + |~ [wire =sign-arvo] + ^- (quip card:agent:gall agent:gall) + !! +:: +++ on-fail + |~ [term tang] + ^- (quip card:agent:gall agent:gall) + !! +-- diff --git a/pkg/base-dev/lib/treaty.hoon b/pkg/base-dev/lib/treaty.hoon new file mode 100644 index 000000000..d9703021a --- /dev/null +++ b/pkg/base-dev/lib/treaty.hoon @@ -0,0 +1,81 @@ +/- *treaty +/+ dock=docket +|% +++ enjs + =, enjs:format + |% + ++ merge + |= [a=json b=json] + ^- json + ?> &(?=(%o -.a) ?=(%o -.b)) + [%o (~(uni by p.a) p.b)] + :: + ++ treaty + |= t=^treaty + %+ merge (docket:enjs:dock docket.t) + %- pairs + :~ ship+s+(scot %p ship.t) + desk+s+desk.t + cass+(case case.t) + hash+s+(scot %uv hash.t) + == + :: + ++ case + |= c=^case + %+ frond -.c + ?- -.c + %da s+(scot %da p.c) + %tas s+(scot %tas p.c) + %ud (numb p.c) + == + ++ foreign-desk + |= [s=^ship =desk] + ^- cord + (crip "{(scow %p s)}/{(trip desk)}") + :: + ++ alliance + |= a=^alliance + ^- json + :- %a + %+ turn ~(tap in a) + |= [=^ship =desk] + ^- json + s+(foreign-desk ship desk) + :: + ++ treaty-update + |= u=update:^treaty + ^- json + %+ frond -.u + ?- -.u + %add (treaty treaty.u) + %del s+(foreign-desk +.u) + :: + %ini + %- pairs + %+ turn ~(tap by init.u) + |= [[s=^ship =desk] t=^treaty] + [(foreign-desk s desk) (treaty t)] + == + :: + ++ ally-update + |= u=update:ally + ^- json + %+ frond -.u + ?- -.u + ?(%add %del) s+(scot %p ship.u) + :: + %ini + %- pairs + %+ turn ~(tap by init.u) + |= [s=^ship a=^alliance] + [(scot %p s) (alliance a)] + :: + %new + %- pairs + :~ ship+s+(scot %p ship.u) + alliance+(alliance alliance.u) + == + == + -- +-- + diff --git a/pkg/base-dev/mar/docket.hoon b/pkg/base-dev/mar/docket.hoon new file mode 100644 index 000000000..911d34c0d --- /dev/null +++ b/pkg/base-dev/mar/docket.hoon @@ -0,0 +1,25 @@ +/+ dock=docket +|_ =docket:dock +++ grow + |% + ++ mime + ^- ^mime + [/text/x-docket (as-octt:mimes:html (spit-docket:mime:dock docket))] + ++ noun docket + ++ json (docket:enjs:dock docket) + -- +++ grab + |% + :: + ++ mime + |= [=mite len=@ud tex=@] + ^- docket:dock + %- need + %- from-clauses:mime:dock + !<((list clause:dock) (slap !>(~) (ream tex))) + + :: + ++ noun docket:dock + -- +++ grad %noun +-- diff --git a/pkg/base-dev/sur/docket.hoon b/pkg/base-dev/sur/docket.hoon new file mode 100644 index 000000000..5907433c2 --- /dev/null +++ b/pkg/base-dev/sur/docket.hoon @@ -0,0 +1,76 @@ +|% +:: ++$ version + [major=@ud minor=@ud patch=@ud] +:: ++$ glob (map path mime) +:: ++$ url cord +:: $glob-location: How to retrieve a glob +:: ++$ glob-location + $% [%http =url] + == +:: $href: Where a tile links to +:: ++$ href + $% [%glob base=term =glob-location] + [%site =path] + == +:: $chad: State of a docket +:: ++$ chad + $% :: Done + [%glob =glob] + [%site ~] + :: Waiting + [%install ~] + [%suspend ~] + :: Error + [%hung err=cord] + == +:: +:: $charge: A realized $docket +:: ++$ charge + $: =docket + =chad + == +:: +:: $clause: A key and value, as part of a docket +:: +:: Only used to parse $docket +:: ++$ clause + $% [%title title=@t] + [%info info=@t] + [%color color=@ux] + [%glob url=cord] + [%image =url] + [%site =path] + [%base base=term] + [%version =version] + [%website website=url] + [%license license=cord] + == +:: +:: $docket: A description of JS bundles for a desk +:: ++$ docket + $: %1 + title=@t + info=@t + color=@ux + =href + image=(unit url) + =version + website=url + license=cord + == +:: ++$ charge-update + $% [%initial initial=(map desk charge)] + [%add-charge =desk =charge] + [%del-charge =desk] + == +-- diff --git a/pkg/landscape/app/btc-provider.hoon b/pkg/bitcoin/app/btc-provider.hoon similarity index 100% rename from pkg/landscape/app/btc-provider.hoon rename to pkg/bitcoin/app/btc-provider.hoon diff --git a/pkg/landscape/app/btc-wallet.hoon b/pkg/bitcoin/app/btc-wallet.hoon similarity index 98% rename from pkg/landscape/app/btc-wallet.hoon rename to pkg/bitcoin/app/btc-wallet.hoon index 97018824b..a1970f198 100644 --- a/pkg/landscape/app/btc-wallet.hoon +++ b/pkg/bitcoin/app/btc-wallet.hoon @@ -3,7 +3,7 @@ :: Scrys :: x/scanned: (list xpub) of all scanned wallets :: x/balance/xpub: balance (in sats) of wallet -/- *btc-wallet, bp=btc-provider, file-server, launch-store, settings +/- *btc-wallet, bp=btc-provider, settings /+ dbug, default-agent, bl=btc, bc=bitcoin, bcu=bitcoin-utils, bip32 ~% %btc-wallet-top ..part ~ |% @@ -80,19 +80,6 @@ (poke-our:hc %settings-store %settings-event !>(currency)) == :: - =/ has-file=? (gall-scry:hc ? %file-server /url/'~btc'/noun) - =/ has-tile=? - (~(has in (gall-scry:hc (set @tas) %launch /keys/noun)) %btc-wallet) - =? cards !has-file - =/ file=action:file-server [%serve-dir /'~btc' /app/btc-wallet %.n %.y] - :_ cards - (poke-our:hc %file-server %file-server-action !>(file)) - =? cards !has-tile - =/ tile=action:launch-store - [%add %btc-wallet [%custom `'/~btc' `'/~btc/img/tile.svg'] %.y] - :_ cards - (poke-our:hc %launch %launch-action !>(tile)) - :: :- cards %_ this state diff --git a/pkg/bitcoin/desk.bill b/pkg/bitcoin/desk.bill new file mode 100644 index 000000000..7875acb9a --- /dev/null +++ b/pkg/bitcoin/desk.bill @@ -0,0 +1,6 @@ +:~ :- %apes + :~ %btc-provider + %btc-wallet + == + :- %fish ~ +== diff --git a/pkg/bitcoin/desk.docket b/pkg/bitcoin/desk.docket new file mode 100644 index 000000000..ca6340b52 --- /dev/null +++ b/pkg/bitcoin/desk.docket @@ -0,0 +1,11 @@ +:~ + title+'Bitcoin' + info+'BTC wallet for Urbit. Testing' + color+0xf9.8e40 + glob+'https://bootstrap.urbit.org/glob-0v2.3kv9h.9i6cv.vfu2o.roq7e.g983m.glob' + image+'https://urbit.ewr1.vultrobjects.com/hastuc-dibtux/2021.8.24..02.57.38-bitcoin.svg' + base+'bitcoin' + version+[0 0 1] + license+'MIT' + website+'https://tlon.io' +== diff --git a/pkg/landscape/lib/bip/b158.hoon b/pkg/bitcoin/lib/bip/b158.hoon similarity index 100% rename from pkg/landscape/lib/bip/b158.hoon rename to pkg/bitcoin/lib/bip/b158.hoon diff --git a/pkg/landscape/lib/bip/b173.hoon b/pkg/bitcoin/lib/bip/b173.hoon similarity index 100% rename from pkg/landscape/lib/bip/b173.hoon rename to pkg/bitcoin/lib/bip/b173.hoon diff --git a/pkg/landscape/lib/bip/b174.hoon b/pkg/bitcoin/lib/bip/b174.hoon similarity index 100% rename from pkg/landscape/lib/bip/b174.hoon rename to pkg/bitcoin/lib/bip/b174.hoon diff --git a/pkg/landscape/lib/bip32.hoon b/pkg/bitcoin/lib/bip32.hoon similarity index 100% rename from pkg/landscape/lib/bip32.hoon rename to pkg/bitcoin/lib/bip32.hoon diff --git a/pkg/landscape/lib/bip39.hoon b/pkg/bitcoin/lib/bip39.hoon similarity index 100% rename from pkg/landscape/lib/bip39.hoon rename to pkg/bitcoin/lib/bip39.hoon diff --git a/pkg/landscape/lib/bip39/english.hoon b/pkg/bitcoin/lib/bip39/english.hoon similarity index 100% rename from pkg/landscape/lib/bip39/english.hoon rename to pkg/bitcoin/lib/bip39/english.hoon diff --git a/pkg/landscape/lib/bitcoin-json.hoon b/pkg/bitcoin/lib/bitcoin-json.hoon similarity index 100% rename from pkg/landscape/lib/bitcoin-json.hoon rename to pkg/bitcoin/lib/bitcoin-json.hoon diff --git a/pkg/landscape/lib/bitcoin-utils.hoon b/pkg/bitcoin/lib/bitcoin-utils.hoon similarity index 100% rename from pkg/landscape/lib/bitcoin-utils.hoon rename to pkg/bitcoin/lib/bitcoin-utils.hoon diff --git a/pkg/landscape/lib/bitcoin.hoon b/pkg/bitcoin/lib/bitcoin.hoon similarity index 100% rename from pkg/landscape/lib/bitcoin.hoon rename to pkg/bitcoin/lib/bitcoin.hoon diff --git a/pkg/landscape/lib/btc-provider.hoon b/pkg/bitcoin/lib/btc-provider.hoon similarity index 100% rename from pkg/landscape/lib/btc-provider.hoon rename to pkg/bitcoin/lib/btc-provider.hoon diff --git a/pkg/landscape/lib/btc.hoon b/pkg/bitcoin/lib/btc.hoon similarity index 100% rename from pkg/landscape/lib/btc.hoon rename to pkg/bitcoin/lib/btc.hoon diff --git a/pkg/bitcoin/lib/group-store.hoon b/pkg/bitcoin/lib/group-store.hoon new file mode 100644 index 000000000..dedc9dd4d --- /dev/null +++ b/pkg/bitcoin/lib/group-store.hoon @@ -0,0 +1,451 @@ +/- *group, sur=group-store +/+ resource +^? +=< [. sur] +=, sur +|% +:: +++ dekebab + |= str=cord + ^- cord + =- (fall - str) + %+ rush str + =/ name + %+ cook + |= part=tape + ^- tape + ?~ part part + :- (sub i.part 32) + t.part + (star low) + %+ cook + (cork (bake zing (list tape)) crip) + ;~(plug (star low) (more hep name)) +:: +++ enkebab + |= str=cord + ^- cord + ~| str + =- (fall - str) + %+ rush str + =/ name + %+ cook + |= part=tape + ^- tape + ?~ part part + :- (add i.part 32) + t.part + ;~(plug hig (star low)) + %+ cook + |=(a=(list tape) (crip (zing (join "-" a)))) + ;~(plug (star low) (star name)) + +++ migrate-path-map + |* map=(map path *) + =/ keys=(list path) + (skim ~(tap in ~(key by map)) |=(=path =('~' (snag 0 path)))) + |- + ?~ keys + map + =* key i.keys + ?> ?=(^ key) + =/ value + (~(got by map) key) + =. map + (~(put by map) t.key value) + =. map + (~(del by map) key) + $(keys t.keys, map (~(put by map) t.key value)) +:: +++ enjs + =, enjs:format + |% + ++ frond + |= [p=@t q=json] + ^- json + (frond:enjs:format (dekebab p) q) + ++ pairs + |= a=(list [p=@t q=json]) + ^- json + %- pairs:enjs:format + %+ turn a + |= [p=@t q=json] + ^- [@t json] + [(dekebab p) q] + :: + ++ update + |= =^update + ^- json + %+ frond -.update + ?- -.update + %add-group (add-group update) + %add-members (add-members update) + %add-tag (add-tag update) + %remove-members (remove-members update) + %remove-tag (remove-tag update) + %initial (initial update) + %initial-group (initial-group update) + %remove-group (remove-group update) + %change-policy (change-policy update) + %expose (expose update) + == + :: + ++ initial-group + |= =^update + ?> ?=(%initial-group -.update) + %- pairs + :~ resource+(enjs:resource resource.update) + group+(group group.update) + == + :: + ++ initial + |= =^initial + ?> ?=(%initial -.initial) + %- pairs + ^- (list [@t json]) + %+ turn + ~(tap by groups.initial) + |= [rid=resource grp=^group] + ^- [@t json] + :_ (group grp) + (enjs-path:resource rid) + :: + ++ group + |= =^group + ^- json + %- pairs + :~ members+(set ship members.group) + policy+(policy policy.group) + tags+(tags tags.group) + hidden+b+hidden.group + == + :: + ++ rank + |= =rank:title + ^- json + [%s rank] + ++ tags + |= =^tags + ^- json + %- pairs + %+ turn ~(tap by tags) + |= [=^tag ships=(^set ^ship)] + ^- [@t json] + :_ (set ship ships) + ?@ tag tag + ;: (cury cat 3) + app.tag '\\' + tag.tag '\\' + (enjs-path:resource resource.tag) + == + :: + ++ set + |* [item=$-(* json) sit=(^set)] + ^- json + :- %a + %+ turn + ~(tap in sit) + item + :: + ++ tag + |= =^tag + ^- json + ?@ tag + (frond %tag s+tag) + %- pairs + :~ app+s+app.tag + tag+s+tag.tag + resource+s+(enjs-path:resource resource.tag) + == + :: + ++ policy + |= =^policy + %+ frond -.policy + %- pairs + ?- -.policy + %invite + :~ pending+(set ship pending.policy) + == + %open + :~ banned+(set ship banned.policy) + ban-ranks+(set rank ban-ranks.policy) + == + == + ++ policy-diff + |= =diff:^policy + %+ frond -.diff + |^ + ?- -.diff + %invite (invite +.diff) + %open (open +.diff) + %replace (policy +.diff) + == + ++ open + |= =diff:open:^policy + %+ frond -.diff + ?- -.diff + %allow-ranks (set rank ranks.diff) + %ban-ranks (set rank ranks.diff) + %allow-ships (set ship ships.diff) + %ban-ships (set ship ships.diff) + == + ++ invite + |= =diff:invite:^policy + %+ frond -.diff + ?- -.diff + %add-invites (set ship invitees.diff) + %remove-invites (set ship invitees.diff) + == + -- + :: + ++ expose + |= =^update + ^- json + ?> ?=(%expose -.update) + (frond %resource (enjs:resource resource.update)) + :: + ++ remove-group + |= =^update + ^- json + ?> ?=(%remove-group -.update) + (frond %resource (enjs:resource resource.update)) + :: + ++ add-group + |= =action + ^- json + ?> ?=(%add-group -.action) + %- pairs + :~ resource+(enjs:resource resource.action) + policy+(policy policy.action) + hidden+b+hidden.action + == + :: + ++ add-members + |= =action + ^- json + ?> ?=(%add-members -.action) + %- pairs + :~ resource+(enjs:resource resource.action) + ships+(set ship ships.action) + == + :: + ++ remove-members + |= =action + ^- json + ?> ?=(%remove-members -.action) + %- pairs + :~ resource+(enjs:resource resource.action) + ships+(set ship ships.action) + == + :: + ++ add-tag + |= =action + ^- json + ?> ?=(%add-tag -.action) + %- pairs + ^- (list [p=@t q=json]) + :~ resource+(enjs:resource resource.action) + tag+(tag tag.action) + ships+(set ship ships.action) + == + :: + ++ remove-tag + |= =action + ^- json + ?> ?=(%remove-tag -.action) + %- pairs + :~ resource+(enjs:resource resource.action) + tag+(tag tag.action) + ships+(set ship ships.action) + == + :: + ++ change-policy + |= =action + ^- json + ?> ?=(%change-policy -.action) + %- pairs + :~ resource+(enjs:resource resource.action) + diff+(policy-diff diff.action) + == + -- +++ dejs + =, dejs:format + |% + :: + ++ ruk-jon + |= [a=(map @t json) b=$-(@t @t)] + ^+ a + =- (malt -) + |- + ^- (list [@t json]) + ?~ a ~ + :- [(b p.n.a) q.n.a] + %+ weld + $(a l.a) + $(a r.a) + :: + ++ of + |* wer=(pole [cord fist]) + |= jon=json + ?> ?=([%o [@ *] ~ ~] jon) + |- + ?- wer + :: [[key=@t wit=*] t=*] + [[key=@t *] t=*] + => .(wer [[* wit] *]=wer) + ?: =(key.wer (enkebab p.n.p.jon)) + [key.wer ~|(val+q.n.p.jon (wit.wer q.n.p.jon))] + ?~ t.wer ~|(bad-key+p.n.p.jon !!) + ((of t.wer) jon) + == + ++ ot + |* wer=(pole [cord fist]) + |= jon=json + ~| jon + %- (ot-raw:dejs:format wer) + ?> ?=(%o -.jon) + (ruk-jon p.jon enkebab) + :: + ++ update + ^- $-(json ^update) + |= jon=json + ^- ^update + %. jon + %- of + :~ + add-group+add-group + add-members+add-members + remove-members+remove-members + add-tag+add-tag + remove-tag+remove-tag + change-policy+change-policy + remove-group+remove-group + expose+expose + == + ++ rank + |= =json + ^- rank:title + ?> ?=(%s -.json) + ?: =('czar' p.json) %czar + ?: =('king' p.json) %king + ?: =('duke' p.json) %duke + ?: =('earl' p.json) %earl + ?: =('pawn' p.json) %pawn + !! + ++ tag + |= =json + ^- ^tag + ?> ?=(%o -.json) + ?. (~(has by p.json) 'app') + =/ tag-json + (~(got by p.json) 'tag') + ?> ?=(%s -.tag-json) + ?: =('admin' p.tag-json) %admin + ?: =('moderator' p.tag-json) %moderator + ?: =('janitor' p.tag-json) %janitor + !! + %. json + %- ot + :~ app+so + resource+dejs-path:resource + tag+so + == + + :: move to zuse also + ++ oj + |* =fist + ^- $-(json (jug cord _(fist *json))) + (om (as fist)) + ++ tags + ^- $-(json ^tags) + *$-(json ^tags) + :: TODO: move to zuse + ++ ship + (su ;~(pfix sig fed:ag)) + ++ policy + ^- $-(json ^policy) + %- of + :~ invite+invite-policy + open+open-policy + == + ++ invite-policy + %- ot + :~ pending+(as ship) + == + ++ open-policy + %- ot + :~ ban-ranks+(as rank) + banned+(as ship) + == + ++ open-policy-diff + %- of + :~ allow-ranks+(as rank) + allow-ships+(as ship) + ban-ranks+(as rank) + ban-ships+(as ship) + == + ++ invite-policy-diff + %- of + :~ add-invites+(as ship) + remove-invites+(as ship) + == + ++ policy-diff + ^- $-(json diff:^policy) + %- of + :~ invite+invite-policy-diff + open+open-policy-diff + replace+policy + == + :: + ++ remove-group + |= =json + ^- [resource ~] + ?> ?=(%o -.json) + =/ rid=resource + (dejs:resource (~(got by p.json) 'resource')) + [rid ~] + :: + ++ expose + |= =json + ^- [resource ~] + ?> ?=(%o -.json) + =/ rid=resource + (dejs:resource (~(got by p.json) 'resource')) + [rid ~] + :: + ++ add-group + %- ot + :~ resource+dejs:resource + policy+policy + hidden+bo + == + ++ add-members + %- ot + :~ resource+dejs:resource + ships+(as ship) + == + ++ remove-members + ^- $-(json [resource (set ^ship)]) + %- ot + :~ resource+dejs:resource + ships+(as ship) + == + ++ add-tag + %- ot + :~ resource+dejs:resource + tag+tag + ships+(as ship) + == + ++ remove-tag + %- ot + :~ resource+dejs:resource + tag+tag + ships+(as ship) + == + ++ change-policy + %- ot + :~ resource+dejs:resource + diff+policy-diff + == + -- +-- diff --git a/pkg/bitcoin/lib/group.hoon b/pkg/bitcoin/lib/group.hoon new file mode 100644 index 000000000..1da653b7e --- /dev/null +++ b/pkg/bitcoin/lib/group.hoon @@ -0,0 +1,134 @@ +/- *group +/+ store=group-store, resource +:: +|_ =bowl:gall ++$ card card:agent:gall +:: +++ resource-for-update + |= =vase + ^- (list resource) + =/ =update:store !<(update:store vase) + ?: ?=(%initial -.update) + ~ + ~[resource.update] +:: +++ scry-for + |* [=mold =path] + =. path + (snoc path %noun) + .^ mold + %gx + (scot %p our.bowl) + %group-store + (scot %da now.bowl) + path + == +++ scry-tag + |= [rid=resource =tag] + ^- (unit (set ship)) + =/ group + (scry-group rid) + ?~ group + ~ + `(~(gut by tags.u.group) tag ~) +:: +++ scry-group + |= rid=resource + ^- (unit group) + %+ scry-for ,(unit group) + `path`groups+(en-path:resource rid) +:: +++ scry-groups + ^- (set resource) + .^ ,(set resource) + %gy + (scot %p our.bowl) + %group-store + (scot %da now.bowl) + /groups + == +:: +++ members + |= rid=resource + ^- (set ship) + =; =group + members.group + (fall (scry-group rid) *group) +:: +++ is-member + |= [=ship group=resource] + ^- ? + =- (~(has in -) ship) + (members group) +:: +++ is-admin + |= [=ship group=resource] + ^- ? + =/ tags tags:(fall (scry-group group) *^group) + =/ admins=(set ^ship) (~(gut by tags) %admin ~) + (~(has in admins) ship) +:: +role-for-ship: get role for user +:: +:: Returns ~ if no such group exists or user is not +:: a member of the group. Returns [~ ~] if the user +:: is a member with no additional role. +++ role-for-ship + |= [rid=resource =ship] + ^- (unit (unit role-tag)) + =/ grp=(unit group) + (scry-group rid) + ?~ grp ~ + (role-for-ship-with-group u.grp rid ship) +:: +++ role-for-ship-with-group + |= [grp=group rid=resource =ship] + ^- (unit (unit role-tag)) + =* group grp + =* policy policy.group + =* tags tags.group + =/ admins=(set ^ship) + (~(gut by tags) %admin ~) + ?: (~(has in admins) ship) + ``%admin + =/ mods + (~(gut by tags) %moderator ~) + ?: (~(has in mods) ship) + ``%moderator + =/ janitors + (~(gut by tags) %janitor ~) + ?: (~(has in janitors) ship) + ``%janitor + ?: (~(has in members.group) ship) + [~ ~] + ~ +:: +++ can-join + |= [rid=resource =ship] + ^- ? + %+ scry-for ,? + ^- path + :- %groups + (weld (en-path:resource rid) /join/(scot %p ship)) +:: +++ get-tagged-ships + |= [rid=resource =tag] + ^- (set ship) + =/ grp=(unit group) + (scry-group rid) + ?~ grp ~ + (get-tagged-ships-with-group u.grp rid tag) +:: +++ get-tagged-ships-with-group + |= [grp=group rid=resource =tag] + ^- (set ship) + (~(get ju tags.grp) tag) +:: +++ is-managed + |= rid=resource + ^- ? + =/ group=(unit group) + (scry-group rid) + ?~ group %.n + !hidden.u.group +:: +-- diff --git a/pkg/bitcoin/lib/resource.hoon b/pkg/bitcoin/lib/resource.hoon new file mode 100644 index 000000000..f84acb0b8 --- /dev/null +++ b/pkg/bitcoin/lib/resource.hoon @@ -0,0 +1,57 @@ +/- sur=resource +=< resource +|% ++$ resource resource:sur +++ en-path + |= =resource + ^- path + ~[%ship (scot %p entity.resource) name.resource] +:: +++ de-path + |= =path + ^- resource + (need (de-path-soft path)) +:: +++ de-path-soft + |= =path + ^- (unit resource) + ?. ?=([%ship @ @ *] path) + ~ + =/ ship + (slaw %p i.t.path) + ?~ ship + ~ + `[u.ship i.t.t.path] +:: +++ enjs + |= =resource + ^- json + =, enjs:format + %- pairs + :~ ship+(ship entity.resource) + name+s+name.resource + == +:: +++ enjs-path + |= =resource + %- spat + (en-path resource) +:: +++ dejs-path + %- su:dejs:format + ;~ pfix + (jest '/ship/') + ;~((glue fas) ;~(pfix sig fed:ag) urs:ab) + == +:: +++ dejs + =, dejs:format + ^- $-(json resource) + |= jon=json + ~| dejs+%resource + %. jon + %- ot + :~ ship+(su ;~(pfix sig fed:ag)) + name+so + == +-- diff --git a/pkg/landscape/mar/btc-provider/action.hoon b/pkg/bitcoin/mar/btc-provider/action.hoon similarity index 100% rename from pkg/landscape/mar/btc-provider/action.hoon rename to pkg/bitcoin/mar/btc-provider/action.hoon diff --git a/pkg/landscape/mar/btc-provider/status.hoon b/pkg/bitcoin/mar/btc-provider/status.hoon similarity index 100% rename from pkg/landscape/mar/btc-provider/status.hoon rename to pkg/bitcoin/mar/btc-provider/status.hoon diff --git a/pkg/landscape/mar/btc-provider/update.hoon b/pkg/bitcoin/mar/btc-provider/update.hoon similarity index 100% rename from pkg/landscape/mar/btc-provider/update.hoon rename to pkg/bitcoin/mar/btc-provider/update.hoon diff --git a/pkg/landscape/mar/btc-wallet/action.hoon b/pkg/bitcoin/mar/btc-wallet/action.hoon similarity index 100% rename from pkg/landscape/mar/btc-wallet/action.hoon rename to pkg/bitcoin/mar/btc-wallet/action.hoon diff --git a/pkg/landscape/mar/btc-wallet/command.hoon b/pkg/bitcoin/mar/btc-wallet/command.hoon similarity index 100% rename from pkg/landscape/mar/btc-wallet/command.hoon rename to pkg/bitcoin/mar/btc-wallet/command.hoon diff --git a/pkg/landscape/mar/btc-wallet/internal.hoon b/pkg/bitcoin/mar/btc-wallet/internal.hoon similarity index 100% rename from pkg/landscape/mar/btc-wallet/internal.hoon rename to pkg/bitcoin/mar/btc-wallet/internal.hoon diff --git a/pkg/landscape/mar/btc-wallet/update.hoon b/pkg/bitcoin/mar/btc-wallet/update.hoon similarity index 100% rename from pkg/landscape/mar/btc-wallet/update.hoon rename to pkg/bitcoin/mar/btc-wallet/update.hoon diff --git a/pkg/landscape/sur/bitcoin.hoon b/pkg/bitcoin/sur/bitcoin.hoon similarity index 100% rename from pkg/landscape/sur/bitcoin.hoon rename to pkg/bitcoin/sur/bitcoin.hoon diff --git a/pkg/landscape/sur/btc-provider.hoon b/pkg/bitcoin/sur/btc-provider.hoon similarity index 100% rename from pkg/landscape/sur/btc-provider.hoon rename to pkg/bitcoin/sur/btc-provider.hoon diff --git a/pkg/landscape/sur/btc-wallet.hoon b/pkg/bitcoin/sur/btc-wallet.hoon similarity index 100% rename from pkg/landscape/sur/btc-wallet.hoon rename to pkg/bitcoin/sur/btc-wallet.hoon diff --git a/pkg/bitcoin/sur/group-store.hoon b/pkg/bitcoin/sur/group-store.hoon new file mode 100644 index 000000000..5a3931f95 --- /dev/null +++ b/pkg/bitcoin/sur/group-store.hoon @@ -0,0 +1,39 @@ +/- *group, *resource +^? +|% +:: +:: $action: request to change group-store state +:: +:: %add-group: add a group +:: %add-members: add members to a group +:: %remove-members: remove members from a group +:: %add-tag: add a tag to a set of ships +:: %remove-tag: remove a tag from a set of ships +:: %change-policy: change a group's policy +:: %remove-group: remove a group from the store +:: %expose: unset .hidden flag +:: ++$ action + $% [%add-group =resource =policy hidden=?] + [%add-members =resource ships=(set ship)] + [%remove-members =resource ships=(set ship)] + [%add-tag =resource =tag ships=(set ship)] + [%remove-tag =resource =tag ships=(set ship)] + [%change-policy =resource =diff:policy] + [%remove-group =resource ~] + [%expose =resource ~] + == +:: $update: a description of a processed state change +:: +:: %initial: describe groups upon new subscription +:: ++$ update + $% initial + action + == ++$ initial + $% [%initial-group =resource =group] + [%initial =groups] + == +-- + diff --git a/pkg/bitcoin/sur/group.hoon b/pkg/bitcoin/sur/group.hoon new file mode 100644 index 000000000..c5806493d --- /dev/null +++ b/pkg/bitcoin/sur/group.hoon @@ -0,0 +1,109 @@ +/- *resource +:: +^? +|% +:: +++ groups-state-one + |% + +$ groups (map resource group) + :: + +$ tag $@(group-tag [app=term tag=term]) + :: + +$ tags (jug tag ship) + :: + +$ group + $: members=(set ship) + =tags + =policy + hidden=? + == + -- +:: $groups: a mapping from group-ids to groups +:: ++$ groups (map resource group) +:: $group-tag: an identifier used by groups +:: +:: These tags should have precise semantics, as they are shared across all +:: apps. +:: ++$ group-tag ?(role-tag) +:: $tag: an identifier used to identify a subset of members +:: +:: Tags may be used and recognised differently across apps. +:: for example, you could use tags like `%author`, `%bot`, `%flagged`... +:: ++$ tag $@(group-tag [app=term =resource tag=term]) +:: $role-tag: a kind of $group-tag that identifies a privileged user +:: +:: These roles are +:: %admin: Administrator, can do everything except delete the group +:: %moderator: Moderator, can add/remove/ban users +:: %janitor: Has no special meaning inside group-store, +:: but may be given additional privileges in other apps. +:: ++$ role-tag + ?(%admin %moderator %janitor) +:: $tags: a mapping from a $tag to the members it identifies +:: ++$ tags (jug tag ship) +:: $group: description of a group of users +:: +:: .members: members of the group +:: .tag-queries: a map of tags to subsets of members +:: .policy: permissions for the group +:: .hidden: is group unmanaged ++$ group + $: members=(set ship) + =tags + =policy + hidden=? + == +:: $policy: access control for a group +:: +++ policy + =< policy + |% + :: + +$ policy + $% invite + open + == + :: $diff: change group policy + +$ diff + $% [%invite diff:invite] + [%open diff:open] + [%replace =policy] + == + :: $invite: allow only invited ships + ++ invite + =< invite-policy + |% + :: + +$ invite-policy + [%invite pending=(set ship)] + :: $diff: add or remove invites + :: + +$ diff + $% [%add-invites invitees=(set ship)] + [%remove-invites invitees=(set ship)] + == + -- + :: $open: allow all unbanned ships of approriate rank + :: + ++ open + =< open-policy + |% + :: + +$ open-policy + [%open ban-ranks=(set rank:title) banned=(set ship)] + :: $diff: ban or allow ranks and ships + :: + +$ diff + $% [%allow-ranks ranks=(set rank:title)] + [%ban-ranks ranks=(set rank:title)] + [%ban-ships ships=(set ship)] + [%allow-ships ships=(set ship)] + == + -- + -- +-- diff --git a/pkg/bitcoin/sur/json/rpc.hoon b/pkg/bitcoin/sur/json/rpc.hoon new file mode 100644 index 000000000..350f2cae1 --- /dev/null +++ b/pkg/bitcoin/sur/json/rpc.hoon @@ -0,0 +1,21 @@ +:: json-rpc: protocol types +:: +|% ++$ request + $: id=@t + method=@t + params=request-params + == +:: ++$ request-params + $% [%list (list json)] + [%object (list (pair @t json))] + == ++$ response + $~ [%fail *httr:eyre] + $% [%result id=@t res=json] + [%error id=@t code=@t message=@t] ::TODO data? + [%fail hit=httr:eyre] + [%batch bas=(list response)] + == +-- diff --git a/pkg/bitcoin/sur/resource.hoon b/pkg/bitcoin/sur/resource.hoon new file mode 100644 index 000000000..fef7a7b35 --- /dev/null +++ b/pkg/bitcoin/sur/resource.hoon @@ -0,0 +1,10 @@ +^? +|% ++$ resource [=entity name=term] ++$ resources (set resource) +:: ++$ entity + $@ ship + $% !! + == +-- diff --git a/pkg/bitcoin/sur/settings.hoon b/pkg/bitcoin/sur/settings.hoon new file mode 100644 index 000000000..67a071f7d --- /dev/null +++ b/pkg/bitcoin/sur/settings.hoon @@ -0,0 +1,31 @@ +|% ++$ settings-0 (map key bucket-0) ++$ bucket-0 (map key val-0) ++$ val-0 + $% [%s p=@t] + [%b p=?] + [%n p=@] + == +:: ++$ settings (map key bucket) ++$ bucket (map key val) ++$ key term ++$ val + $~ [%n 0] + $% [%s p=@t] + [%b p=?] + [%n p=@] + [%a p=(list val)] + == ++$ event + $% [%put-bucket =key =bucket] + [%del-bucket =key] + [%put-entry buc=key =key =val] + [%del-entry buc=key =key] + == ++$ data + $% [%all =settings] + [%bucket =bucket] + [%entry =val] + == +-- diff --git a/pkg/bitcoin/sys.kelvin b/pkg/bitcoin/sys.kelvin new file mode 100644 index 000000000..b7464903a --- /dev/null +++ b/pkg/bitcoin/sys.kelvin @@ -0,0 +1 @@ +[%zuse 420] diff --git a/pkg/bitcoin/ted/btc-rpc.hoon b/pkg/bitcoin/ted/btc-rpc.hoon new file mode 100644 index 000000000..b11f0c4a0 --- /dev/null +++ b/pkg/bitcoin/ted/btc-rpc.hoon @@ -0,0 +1,95 @@ +:: Note: these are for BTC testnet +:: +/- spider, rpc=json-rpc +/+ strandio, bc=bitcoin, bcu=bitcoin-utils +=, strand=strand:spider +=> +|% +++ url1 "http://localhost:50002" +++ addr ^-(address:bc [%bech32 'bc1q39wus23jwe7m2j7xmrfr2svhrtejmsn262x3j2']) +++ btc-req + ^- request:http + =, enjs:format + :* method=%'POST' + url=`@ta`(crip (weld url1 "/btc-rpc")) + header-list=['Content-Type'^'application/json' ~] + ^= body + %- some + %- as-octt:mimes:html + %- en-json:html + %- pairs + :~ jsonrpc+s+'2.0' + id+s+'block-info' + method+s+'getblockchaininfo' + == + == +++ electrs-req + ^- request:http + =, enjs:format + :* method=%'POST' + url=`@ta`(crip (weld url1 "/electrs-rpc")) + header-list=['Content-Type'^'application/json' ~] + ^= body + %- some + %- as-octt:mimes:html + %- en-json:html + %- pairs + :~ jsonrpc+s+'2.0' + id+s+'list-unspent' + method+s+'blockchain.scripthash.listunspent' + params+a+~[[%s '34aae877286aa09828803af27ce2315e72c4888efdf74d7d067c975b7c558789']] + == + == +:: +:: convert address to Electrs ScriptHash that it uses to index +:: big-endian sha256 of the output script +:: +++ electrs-script-hash + |= a=address:bc + ^- hexb:bc + %- flip:byt:bcu + %- sha256:bcu + (to-script-pubkey:adr:bc a) +:: +++ parse-json-rpc + |= =json + ^- (unit response:rpc) + =/ res=(unit [@t ^json]) + %. json + =, dejs-soft:format + (ot id+so result+some ~) + ?^ res `[%result u.res] + ~| parse-one-response=json + :+ ~ %error %- need + %. json + =, dejs-soft:format + (ot id+so error+(ot code+no message+so ~) ~) +:: +++ parse-response + |= =client-response:iris + =/ m (strand:strandio ,(unit response:rpc)) + ^- form:m + ?> ?=(%finished -.client-response) + ?~ full-file.client-response + (pure:m ~) + =/ body=@t q.data.u.full-file.client-response + =/ jon=(unit json) (de-json:html body) + ?~ jon (pure:m ~) + (pure:m (parse-json-rpc u.jon)) +:: +++ attempt-request + |= =request:http + =/ m (strand:strandio ,~) + ^- form:m + (send-request:strandio request) +-- +^- thread:spider +|= arg=vase +:: =+ !<([~ a=@ud] arg) +=/ m (strand ,vase) +^- form:m +;< ~ bind:m (attempt-request electrs-req) +;< rep=client-response:iris bind:m + take-client-response:strandio +;< rpc-resp=(unit response:rpc) bind:m (parse-response rep) +(pure:m !>(rpc-resp)) diff --git a/pkg/landscape/tests/lib/bip/b158.hoon b/pkg/bitcoin/tests/lib/bip/b158.hoon similarity index 100% rename from pkg/landscape/tests/lib/bip/b158.hoon rename to pkg/bitcoin/tests/lib/bip/b158.hoon diff --git a/pkg/landscape/tests/lib/bip/b174.hoon b/pkg/bitcoin/tests/lib/bip/b174.hoon similarity index 100% rename from pkg/landscape/tests/lib/bip/b174.hoon rename to pkg/bitcoin/tests/lib/bip/b174.hoon diff --git a/pkg/landscape/tests/lib/bip32.hoon b/pkg/bitcoin/tests/lib/bip32.hoon similarity index 100% rename from pkg/landscape/tests/lib/bip32.hoon rename to pkg/bitcoin/tests/lib/bip32.hoon diff --git a/pkg/landscape/tests/lib/bip39.hoon b/pkg/bitcoin/tests/lib/bip39.hoon similarity index 100% rename from pkg/landscape/tests/lib/bip39.hoon rename to pkg/bitcoin/tests/lib/bip39.hoon diff --git a/pkg/landscape/tests/lib/bitcoin.hoon b/pkg/bitcoin/tests/lib/bitcoin.hoon similarity index 100% rename from pkg/landscape/tests/lib/bitcoin.hoon rename to pkg/bitcoin/tests/lib/bitcoin.hoon diff --git a/pkg/landscape/tests/lib/btc.hoon b/pkg/bitcoin/tests/lib/btc.hoon similarity index 100% rename from pkg/landscape/tests/lib/btc.hoon rename to pkg/bitcoin/tests/lib/btc.hoon diff --git a/pkg/garden/app/docket.hoon b/pkg/garden/app/docket.hoon new file mode 100644 index 000000000..df289d846 --- /dev/null +++ b/pkg/garden/app/docket.hoon @@ -0,0 +1,363 @@ +/- *docket, hood, treaty +/+ *server, agentio, default-agent, dbug, verb +|% ++$ card card:agent:gall ++$ state-0 + $: :: local + charges=(map desk charge) + == +:: $cache: impermanent state ++$ cache + by-base=(map term desk) +:: ++$ inflated-state + [state-0 cache] +:: +lac: toggle verbosity +++ lac & +:: +++ ver + |% + ++ poke 1 + ++ scry 1 + ++ peer 1 + -- +:: +-- +^- agent:gall +%- agent:dbug +%+ verb & +=| inflated-state +=* state - +=< +|_ =bowl:gall ++* this . + io ~(. agentio bowl) + pass pass:io + def ~(. (default-agent this %|) bowl) + cc ~(. +> bowl) + ch ch:cc +:: +++ on-init + ^- (quip card _this) + :_ this + :~ (~(watch-our pass /kiln) %hood /kiln/vats) + (~(connect pass /eyre) [~ /] %docket) + (~(wait pass /init) (add 1 now.bowl)) + (~(connect pass /eyre) [~ /apps] %docket) + == +:: +++ on-load + |= =vase + ^- (quip card _this) + =+ !<(old=state-0 vase) + =* cha ~(. ch q.byk.bowl) + |^ + =. -.state old + =. +.state inflate-cache + `this + :: + ++ inflate-cache + ^- cache + %- ~(gas by *(map term desk)) + %+ murn ~(tap by charges) + |= [=desk =charge] + ?. ?=(%glob -.href.docket.charge) ~ + `:_(desk base.href.docket.charge) + -- +:: +++ on-save !>(-.state) +++ on-poke + |= [=mark =vase] + ^- (quip card _this) + |^ + =^ cards state + ?+ mark (on-poke:def:cc mark vase) + %docket-install (install !<([ship desk] vase)) + %docket-uninstall (uninstall !<(desk vase)) + :: + %noun + =+ ;;([%kick =desk] q.vase) + :_(state ~(fetch-glob ch desk)) + :: + %handle-http-request + =+ !<([id=@ta req=inbound-request:eyre] vase) + :_ state + %+ give-simple-payload:app id + (handle-http-request:cc req) + == + [cards this] + :: + ++ install + |= [=ship =desk] + ^- (quip card _state) + =+ .^(=treaty:treaty %gx (scry:io %treaty /treaty/(scot %p ship)/[desk]/noun)) + ?< ~|(%bad-install-desk (~(has by charges) desk)) + =. charges + (~(put by charges) desk docket.treaty %install ~) + =* cha ~(. ch desk) + :_ state + ~[add-fact:cha (install:cha ship desk)] + :: + ++ uninstall + |= =desk + ^- (quip card _state) + ~| %no-charge-install + =/ =charge (~(got by charges) desk) + =. charges (~(del by charges) desk) + =? by-base ?=(%glob -.href.docket.charge) + (~(del by by-base) base.href.docket) + =* cha ~(. ch desk) + :_ state + ~[del-fact:cha uninstall:cha] + -- +:: +++ on-watch + |= =path + ^- (quip card _this) + =^ cards state + ?+ path (on-watch:def path) + [%http-response *] + ?> (team:title [our src]:bowl) + `state + :: + [%charges ~] + ?> (team:title [our src]:bowl) + `state + == + [cards this] +:: +++ on-peek + |= =path + ^- (unit (unit cage)) + ?+ path [~ ~] + [%x %ver %poke ~] ``noun+!>(poke:ver) + [%x %ver %peer ~] ``noun+!>(peer:ver) + [%x %ver %scry ~] ``noun+!>(scry:ver) + [%x %our ~] ``json+!>(s+(scot %p our.bowl)) + :: + [%x %dbug %state ~] + =- ``noun+!>(-) + %_ state + charges + %- ~(run by charges) + |= =charge + =? chad.charge ?=(%glob -.chad.charge) + [%glob *glob] + charge + == + :: + [%x %charges ~] + :- ~ :- ~ + :- %charge-update + !> ^- charge-update + :- %initial + %- ~(gas by *(map desk charge)) + %+ turn ~(tap by charges) + |= [=desk =charge] + [desk (get-light-charge charge)] + == +:: +++ on-agent + |= [=wire =sign:agent:gall] + ^- (quip card _this) + |^ + =^ cards state + ?+ wire ~&(bad-docket-take+wire `state) + ~ `state + [%kiln ~] take-kiln + [%charge @ *] (take-charge i.t.wire t.t.wire) + == + [cards this] + :: + ++ take-kiln + ^- (quip card _state) + ?+ -.sign (on-agent:def:cc wire sign) + %kick [(~(watch-our pass /kiln) %hood /kiln/vats)^~ state] + :: + %fact + ?. ?=(%kiln-vats-diff p.cage.sign) `state + =+ !<(=diff:hood q.cage.sign) + =* cha ~(. ch desk.diff) + ?+ -.diff `state + :: + %merge + =* cha ~(. ch desk.diff) + ?. docket-exists:cha `state + =/ =docket docket:cha + ?: ?=(%site -.href.docket) + :_ state(charges (~(put by charges) desk.diff [docket [%site ~]])) + ~[add-fact:cha] + =. charges (~(put by charges) desk.diff [docket %install ~]) + =. by-base (~(put by by-base) base.href.docket desk.diff) + :_ state + [add-fact:cha fetch-glob:cha] + :: + %suspend + ?. (~(has by charges) desk.diff) `state + =. charges (new-chad:cha %suspend ~) + :_(state ~[add-fact:cha]) + :: + %revive + ?. (~(has by charges) desk.diff) `state + =/ =charge (~(got by charges) desk.diff) + ?. ?=(%glob -.href.docket.charge) + =. charges (new-chad:cha %site ~) + :_(state ~[add-fact:cha]) + =. charges (new-chad:cha %install ~) + :_(state [add-fact fetch-glob]:cha) + == + == + ++ take-charge + |= [=desk =^wire] + ^- (quip card _state) + ~| %took-for-nonexistent-charge + ?> (~(has by charges) desk) + =* cha ~(. ch desk) + ?+ wire ~|(%bad-charge-wire !!) + :: + [%install ~] + ?> ?=(%poke-ack -.sign) + ?~ p.sign + `state + =. charges (new-chad:cha hung+'Failed install') + ((slog leaf+"Failed installing %{(trip desk)}" u.p.sign) `state) + :: + [%uninstall ~] + ?> ?=(%poke-ack -.sign) + ?~ p.sign `state + ((slog leaf+"Failed to uninstall %{(trip desk)}" u.p.sign) `state) + :: + [%glob ~] + ?- -.sign + %kick `state + :: + ?(%poke-ack %watch-ack) + ?~ p.sign `state + =/ act=tape ?:(?=(%poke-ack -.sign) "start" "listen") + =. charges (new-chad:cha hung+'glob-failed') + :- ~[add-fact:cha] + ((slog leaf+"docket: couldn't {act} thread; will retry" u.p.sign) state) + :: + %fact + ?+ p.cage.sign `state + %thread-fail + =+ !<([=term =tang] q.cage.sign) + =. charges (new-chad:cha hung+'glob-failed') + :- ~[add-fact:cha] + ((slog leaf+"docket: thread failed; will retry" leaf+ tang) state) + :: + %thread-done + =+ !<(=glob q.cage.sign) + =/ =charge (~(got by charges) desk) + ?> ?=(%glob -.href.docket.charge) + =. charges (new-chad:cha glob+glob) + =. by-base (~(put by by-base) base.href.docket.charge desk) + :_(state ~[add-fact:cha]) + == + == + == + -- +:: +++ on-arvo + |= [=wire sign=sign-arvo] + =^ cards state + ?+ wire (on-arvo:def wire sign) + [%init ~] + =* cha ~(. ch q.byk.bowl) + =. charges (~(put by charges) q.byk.bowl [docket:cha %install ~]) + [fetch-glob:cha state] + :: + [%eyre ~] + ?> ?=([%eyre %bound *] sign) + ?: accepted.sign `state + ~& [dap.bowl %failed-to-bind path.binding.sign] + `state + == + [cards this] +:: +++ on-fail on-fail:def +++ on-leave on-leave:def +-- +|_ =bowl:gall +++ io ~(. agentio bowl) +++ pass pass:io +++ def ~(. (default-agent state %|) bowl) +:: +++ inline-js-response + |= js=cord + ^- simple-payload:http + %. (as-octs:mimes:html js) + %* . js-response:gen + cache %.n + == +:: +++ handle-http-request + |= =inbound-request:eyre + ^- simple-payload:http + %+ require-authorization-simple:app inbound-request + =* req request.inbound-request + =* headers header-list.req + =/ req-line (parse-request-line url.req) + ?. =(method.req %'GET') not-found:gen + ?: &(=(ext.req-line `%js) ?=([%session ~] site.req-line)) + %- inline-js-response + (rap 3 'window.ship = "' (rsh 3 (scot %p our.bowl)) '";' ~) + ?. ?=([%apps @ *] site.req-line) + (redirect:gen '/apps/grid/') + =/ des=(unit desk) + (~(get by by-base) i.t.site.req-line) + ?~ des not-found:gen + =/ cha=(unit charge) + (~(get by charges) u.des) + ?~ cha not-found:gen + ?. ?=(%glob -.chad.u.cha) not-found:gen + =* glob glob.chad.u.cha + =/ suffix=^path + (weld (slag 2 `^path`site.req-line) (drop ext.req-line)) + ?: =(suffix /desk/js) + %- inline-js-response + (rap 3 'window.desk = "' u.des '";' ~) + + =/ data=mime + (~(gut by glob) suffix (~(got by glob) /index/html)) + =/ mime-type=@t (rsh 3 (crip )) + =/ headers + :~ content-type+mime-type + max-1-wk:gen + 'service-worker-allowed'^'/' + == + [[200 headers] `q.data] +:: +++ get-light-charge + |= =charge + ?. ?=(%glob -.chad.charge) charge + charge(glob.chad *glob) +:: +ch: Charge engine +++ ch + |_ =desk + ++ pass |=(slug=term ~(. ^pass /charge/[desk]/[slug])) + ++ add-fact + =/ =charge (~(got by charges) desk) + (fact:io charge-update+!>([%add-charge desk (get-light-charge charge)]) /charges ~) + ++ del-fact (fact:io charge-update+!>([%del-charge desk]) /charges ~) + ++ install + |= [=ship remote=^desk] + (poke-our:(pass %install) %hood kiln-install+!>([desk ship remote])) + ++ uninstall + (poke-our:(pass %uninstall) %hood kiln-uninstall+!>(desk)) + ++ new-chad |=(c=chad (~(jab by charges) desk |=(charge +<(chad c)))) + ++ fetch-glob + =/ =charge (~(got by charges) desk) + =/ tid=@t (cat 3 'docket-' (scot %uv (sham (mix eny.bowl desk)))) + ?> ?=(%glob -.href.docket.charge) + ?> ?=(%http -.glob-location.href.docket.charge) + =* url url.glob-location.href.docket.charge + =/ =cage spider-start+!>([~ `tid byk.bowl(r da+now.bowl) %glob !>(`url)]) + :~ (watch-our:(pass %glob) %spider /thread-result/[tid]) + (poke-our:(pass %glob) %spider cage) + == + ++ docket-exists .^(? %cu (scry:io desk /desk/docket)) + ++ docket .^(^docket %cx (scry:io desk /desk/docket)) + -- +-- + diff --git a/pkg/garden/app/treaty.hoon b/pkg/garden/app/treaty.hoon new file mode 100644 index 000000000..a8086b811 --- /dev/null +++ b/pkg/garden/app/treaty.hoon @@ -0,0 +1,319 @@ +/- docket, *treaty +/+ default-agent, agentio, verb, dbug +|% ++$ card card:agent:gall ++$ state-0 + $: treaties=(map [=ship =desk] treaty) + sovereign=(map desk treaty) + entente=alliance + =allies:ally + == +-- +^- agent:gall +%+ verb & +%- agent:dbug +=| state-0 +=* state - +=< +|_ =bowl:gall ++* this . + def ~(. (default-agent this %|) bowl) + io ~(. agentio bowl) + pass pass:io + cc ~(. +> bowl) +++ on-init + =/ sponsor=ship (sein:title [our now our]:bowl) + ?: =(our.bowl sponsor) `this + (on-poke %ally-update-0 !>([%add sponsor])) +++ on-save !>(state) +++ on-load + |= =vase + =+ !<(old=state-0 vase) + `this(state old) +:: +++ on-poke + |= [=mark =vase] + ^- (quip card _this) + ?> (team:title [our src]:bowl) + |^ + ?+ mark (on-poke:def mark vase) + %ally-update-0 (ally-update !<(update:ally vase)) + %alliance-update-0 (alliance-update !<(update:alliance vase)) + :: + %noun + =+ ;;([%add =desk] q.vase) + =/ =docket:docket ~(get-docket so:cc desk) + =/ =treaty (treaty-from-docket:cc desk docket) + =. sovereign (~(put by sovereign) desk treaty) + `this + == + :: + ++ ally-update + |= =update:ally + ^- (quip card _this) + =- [[(ally-update:ca:cc update) -.-] +.-] + ?< ?=(?(%ini %new) -.update) + =* ship ship.update + ?< =(ship our.bowl) + =* al ~(. al:cc ship.update) + ?- -.update + %add [~[watch:al] this(allies (~(put by allies) ship *alliance))] + %del [~[leave:al] this(allies (~(del by allies) ship))] + == + :: + ++ alliance-update + |= =update:alliance + ^- (quip card _this) + =- [[(alliance-update:ca:cc update) -.-] +.-] + ?+ -.update !! + :: + %add + =, update + =. entente (~(put in entente) [ship desk]) + ?. =(our.bowl ship) `this + =* so ~(. so:cc desk) + =/ =docket:docket get-docket:so + =/ =treaty (treaty-from-docket:cc desk docket) + =. sovereign (~(put by sovereign) desk treaty) + :_ this + ~[publish warp give]:so + :: + %del + =, update + =. entente (~(del in entente) [ship desk]) + ?. =(our.bowl ship) `this + =. sovereign (~(del by sovereign) desk) + :_(this ~(kick so:cc desk)^~) + == + -- +:: +++ on-watch + |= =path + ^- (quip card _this) + ?+ path (on-watch:def path) + :: syncing + [%treaty @ @ ~] + =/ =ship (slav %p i.t.path) + =* desk i.t.t.path + =/ =treaty + ?: =(our.bowl ship) (~(got by sovereign) desk) + (~(got by treaties) [ship desk]) + :_ this + (fact-init:io treaty+!>(treaty))^~ + :: + [%alliance ~] + :_ this + (fact-init:io (alliance-update:cg:cc %ini entente))^~ + + :: local + :: + [%allies ~] + :_ this + (fact-init:io (ally-update:cg:cc %ini allies))^~ + == +:: +:: +++ on-peek + |= =path + ^- (unit (unit cage)) + ?+ path (on-peek:def path) + [%x %alliance ~] ``(alliance-update:cg:ca %ini entente) + [%x %allies ~] ``(ally-update:cg:ca %ini allies) + :: + [%x %treaties @ ~] + =/ =ship (slav %p i.t.t.path) + =/ alliance (~(get ju allies) ship) + =/ allied + %- ~(gas by *(map [^ship desk] treaty)) + %+ skim ~(tap by treaties) + |= [ref=[^ship desk] =treaty] + (~(has in alliance) ref) + ``(treaty-update:cg:ca %ini allied) + :: + [%x %treaty @ @ ~] + =/ =ship (slav %p i.t.t.path) + =* desk i.t.t.t.path + =/ =treaty (~(got by treaties) [ship desk]) + ``treaty+!>(treaty) + == +:: +++ on-agent + |= [=wire =sign:agent:gall] + ^- (quip card _this) + =* ship src.bowl + |^ + ?+ wire (on-agent:def wire sign) + [%ally @ ~] ?>(=(src.bowl (slav %p i.t.wire)) take-ally) + :: + [%treaty @ @ ~] + =* desk i.t.t.wire + ?> =(ship (slav %p i.t.wire)) + (take-treaty desk) + == + :: + ++ take-ally + ?+ -.sign (on-agent:def wire sign) + :: + %kick + ?. (~(has by allies) ship) `this + :_(this ~[~(watch al:cc ship)]) + :: + %watch-ack + ?~ p.sign (on-agent:def wire sign) + =. allies (~(del by allies) ship) + %- (slog leaf+"Broke alliance with {}" u.p.sign) + `this + :: + %fact + ?. =(%alliance-update-0 p.cage.sign) `this + =+ !<(=update:alliance q.cage.sign) + =^ cards allies + ?- -.update + :: + %ini + :_ (~(put by allies) src.bowl init.update) + %+ murn ~(tap in init.update) + |= [s=^ship =desk] + ~(safe-watch tr:cc s desk) + :: + %add + :_ (~(put ju allies) src.bowl [ship desk]:update) + (drop ~(safe-watch tr:cc [ship desk]:update)) + + %del + :_ (~(del ju allies) src.bowl [ship desk]:update) + ~[~(leave tr:cc [ship desk]:update)] + == + :_ this + :_ cards + (fact:io (ally-update:cg:cc %new ship (~(get ju allies) src.bowl)) /allies ~) + == + :: + ++ take-treaty + |= =desk + ?+ -.sign (on-agent:def wire sign) + %kick :_(this ~[~(watch tr:cc ship desk)]) + :: + %watch-ack + ?~ p.sign `this + =. treaties (~(del by treaties) ship desk) + %- (slog leaf+"Withdrew from treaty {}/{}" u.p.sign) + `this + :: + %fact + ?. =(%treaty p.cage.sign) `this + =+ !<(=treaty q.cage.sign) + ?> =([ship desk] [ship desk]:treaty) + =. treaties (~(put by treaties) [ship desk]:treaty treaty) + [~(give tr ship desk)^~ this] + == + -- +:: +++ on-arvo + |= [=wire sign=sign-arvo] + |^ + ?+ wire (on-arvo:def wire sign) + [%init ~] !! :: setup sponsor ally + :: + [%sovereign @ ~] + =* desk i.t.wire + (take-sovereign desk) + + == + :: + ++ take-sovereign + |= =desk + =/ so ~(. so:cc desk) + ?> ?=([?(%clay %behn) %writ *] sign) + ?. (~(has by sovereign) desk) `this + =* riot p.sign + ?~ riot :: docket file is gone + =. sovereign (~(del by sovereign) desk) + [~[kick:so] this] + =* cage r.u.riot + ?. =(%docket p.cage) `this + =+ !<(=docket:docket q.cage) + =/ =treaty (treaty-from-docket:cc desk docket) + =. sovereign (~(put by sovereign) desk treaty) + =* so ~(. so:cc desk) + :_(this [give warp ~]:so) + -- + +:: +++ on-fail on-fail:def +++ on-leave on-leave:def +-- +|_ =bowl:gall +++ io ~(. agentio bowl) +++ pass pass:io +:: +++ treaty-from-docket + |= [=desk =docket:docket] + =+ .^(=cass:clay %cw (scry:io desk /desk/docket)) + =+ .^(hash=@uv %cz (scry:io desk ~)) + [our.bowl desk da+da.cass hash docket] +:: +al: Side effects for allies +++ al + |_ =ship + ++ pass ~(. ^pass /ally/(scot %p ship)) + ++ watch (watch:pass [ship dap.bowl] /alliance) + ++ leave (leave:pass ship dap.bowl) + -- +:: +cg: Cage construction +++ cg + |% + ++ ally-update |=(=update:ally ally-update-0+!>(update)) + ++ alliance-update |=(=update:alliance alliance-update-0+!>(update)) + ++ treaty |=(t=^treaty treaty+!>(t)) + ++ treaty-update |=(u=update:^treaty treaty-update-0+!>(u)) + -- +:: +ca: Card construction +++ ca + |% + ++ watch-docket (~(watch-our pass /docket) %docket /dockets) + ++ ally-update |=(=update:ally (fact:io (ally-update:cg update) /allies ~)) + ++ alliance-update + |=(=update:alliance (fact:io (alliance-update:cg update) /alliance ~)) + -- +:: +tr: engine for treaties +++ tr + |_ [=ship =desk] + ++ pass ~(. ^pass path) + ++ path /treaty/(scot %p ship)/[desk] + ++ dock [ship dap.bowl] + ++ watch (watch:pass dock path) + ++ watching (~(has by wex.bowl) [path dock]) + ++ safe-watch `(unit card)`?:(watching ~ `watch) + ++ leave (leave:pass dock) + ++ give + =/ t=treaty (~(got by treaties) ship desk) + (fact:io (treaty:cg t) /treaties path ~) + -- +:: +so: engine for sovereign treaties +++ so + |_ =desk + ++ wire /sovereign/[desk] + ++ pass ~(. ^pass wire) + ++ path /treaty/(scot %p our.bowl)/[desk] + ++ get-docket .^(docket:docket %cx (scry:io desk /desk/docket)) + ++ warp + (warp-our:pass desk `[%next %x da+now.bowl /desk/docket]) + ++ kick + (kick:io path ~) + ++ give + =/ t=treaty (~(got by sovereign) desk) + (fact:io (treaty:cg t) /sovereign path ~) + ++ publish + (poke-our:pass %hood kiln-permission+!>([desk / &])) + -- +-- + + + + + + + + + + diff --git a/pkg/garden/desk.bill b/pkg/garden/desk.bill new file mode 100644 index 000000000..be6a09397 --- /dev/null +++ b/pkg/garden/desk.bill @@ -0,0 +1,6 @@ +:~ :- %apes + :~ %docket + %treaty + == + :- %fish ~ +== diff --git a/pkg/garden/desk.docket b/pkg/garden/desk.docket new file mode 100644 index 000000000..e94a35271 --- /dev/null +++ b/pkg/garden/desk.docket @@ -0,0 +1,9 @@ +:~ title+'Grid' + info+'An app launcher for urbit.' + color+0xee.5432 + glob+'https://bootstrap.urbit.org/glob-0v2.j0idj.t8248.c4bfl.hvf09.ud4ns.glob' + base+'grid' + version+[0 0 1] + website+'https://tlon.io' + license+'MIT' +== diff --git a/pkg/garden/gen/docket/install.hoon b/pkg/garden/gen/docket/install.hoon new file mode 100644 index 000000000..b44bc768e --- /dev/null +++ b/pkg/garden/gen/docket/install.hoon @@ -0,0 +1,7 @@ +:: :docket|install: Install a desk through docket +:: +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + [[=ship =desk ~] ~] + == +[%docket-install ship desk] diff --git a/pkg/garden/gen/docket/uninstall.hoon b/pkg/garden/gen/docket/uninstall.hoon new file mode 100644 index 000000000..74144e8ec --- /dev/null +++ b/pkg/garden/gen/docket/uninstall.hoon @@ -0,0 +1,7 @@ +:: :docket|uninstall: Uninstall a desk through docket +:: +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + [[=desk ~] ~] + == +[%docket-uninstall desk] diff --git a/pkg/garden/gen/treaty/add-desk.hoon b/pkg/garden/gen/treaty/add-desk.hoon new file mode 100644 index 000000000..b2ece97fa --- /dev/null +++ b/pkg/garden/gen/treaty/add-desk.hoon @@ -0,0 +1,7 @@ +:: :treaty|add-desk: Republish remote desk +:: +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + [[=ship =desk ~] ~] + == +[%alliance-update-0 %add ship desk] diff --git a/pkg/garden/gen/treaty/ally.hoon b/pkg/garden/gen/treaty/ally.hoon new file mode 100644 index 000000000..896b8ec9d --- /dev/null +++ b/pkg/garden/gen/treaty/ally.hoon @@ -0,0 +1,7 @@ +:: :treaty|ally: Sync treaty data from ship +:: +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + [[=ship ~] ~] + == +[%ally-update-0 %add desk] diff --git a/pkg/garden/gen/treaty/publish.hoon b/pkg/garden/gen/treaty/publish.hoon new file mode 100644 index 000000000..a77df652c --- /dev/null +++ b/pkg/garden/gen/treaty/publish.hoon @@ -0,0 +1,7 @@ +:: :treaty|publish: Publish local desk +:: +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + [[=desk ~] ~] + == +[%alliance-update-0 %add p.bec desk] diff --git a/pkg/garden/gen/treaty/remove-desk.hoon b/pkg/garden/gen/treaty/remove-desk.hoon new file mode 100644 index 000000000..07303fbf9 --- /dev/null +++ b/pkg/garden/gen/treaty/remove-desk.hoon @@ -0,0 +1,7 @@ +:: :treaty|remove-desk: Stop republishing remote desk +:: +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + [[=ship =desk ~] ~] + == +[%alliance-update-0 %del ship desk] diff --git a/pkg/garden/gen/treaty/unpublish.hoon b/pkg/garden/gen/treaty/unpublish.hoon new file mode 100644 index 000000000..a5f136ff0 --- /dev/null +++ b/pkg/garden/gen/treaty/unpublish.hoon @@ -0,0 +1,7 @@ +:: :treaty|unpublish: Stop publishing local desk +:: +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + [[=desk ~] ~] + == +[%alliance-update-0 %del p.bec desk] diff --git a/pkg/garden/lib/kiln.hoon b/pkg/garden/lib/kiln.hoon new file mode 100644 index 000000000..feb77d33f --- /dev/null +++ b/pkg/garden/lib/kiln.hoon @@ -0,0 +1,18 @@ +/- *hood +/* base-bill %bill /desk/bill +=, clay +=, space:userlib +=, format +=* dude dude:gall +|% +:: $diff: subscription update +:: ++$ diff + $% [%block =desk =arak =weft blockers=(set desk)] + [%reset =desk =arak] + [%merge =desk =arak] + [%merge-sunk =desk =arak =tang] + [%merge-fail =desk =arak =tang] + == +-- + diff --git a/pkg/garden/mar/alliance-update-0.hoon b/pkg/garden/mar/alliance-update-0.hoon new file mode 100644 index 000000000..82f5e75a2 --- /dev/null +++ b/pkg/garden/mar/alliance-update-0.hoon @@ -0,0 +1,12 @@ +/- *treaty +|_ =update:alliance +++ grad %noun +++ grow + |% + ++ noun update + -- +++ grab + |% + ++ noun update:alliance + -- +-- diff --git a/pkg/garden/mar/ally-update-0.hoon b/pkg/garden/mar/ally-update-0.hoon new file mode 100644 index 000000000..8d3720c85 --- /dev/null +++ b/pkg/garden/mar/ally-update-0.hoon @@ -0,0 +1,14 @@ +/- *treaty +/+ treat=treaty +|_ =update:ally +++ grad %noun +++ grow + |% + ++ noun update + ++ json (ally-update:enjs:treat update) + -- +++ grab + |% + ++ noun update:ally + -- +-- diff --git a/pkg/garden/mar/charge-update.hoon b/pkg/garden/mar/charge-update.hoon new file mode 100644 index 000000000..a7ecaf4bd --- /dev/null +++ b/pkg/garden/mar/charge-update.hoon @@ -0,0 +1,13 @@ +/+ dock=docket +|_ update=charge-update:dock +++ grad %noun +++ grow + |% + ++ noun update + ++ json (charge-update:enjs:dock update) + -- +++ grab + |% + ++ noun charge-update:dock + -- +-- diff --git a/pkg/garden/mar/docket.hoon b/pkg/garden/mar/docket.hoon new file mode 100644 index 000000000..911d34c0d --- /dev/null +++ b/pkg/garden/mar/docket.hoon @@ -0,0 +1,25 @@ +/+ dock=docket +|_ =docket:dock +++ grow + |% + ++ mime + ^- ^mime + [/text/x-docket (as-octt:mimes:html (spit-docket:mime:dock docket))] + ++ noun docket + ++ json (docket:enjs:dock docket) + -- +++ grab + |% + :: + ++ mime + |= [=mite len=@ud tex=@] + ^- docket:dock + %- need + %- from-clauses:mime:dock + !<((list clause:dock) (slap !>(~) (ream tex))) + + :: + ++ noun docket:dock + -- +++ grad %noun +-- diff --git a/pkg/garden/mar/docket/install.hoon b/pkg/garden/mar/docket/install.hoon new file mode 100644 index 000000000..baacc4692 --- /dev/null +++ b/pkg/garden/mar/docket/install.hoon @@ -0,0 +1,14 @@ +|_ [=ship =desk] +++ grad %noun +++ grow + |% + ++ noun [ship desk] + ++ json `^json`s+(crip "{(scow %p ship)}/{(trip desk)}") + -- +++ grab + |% + ++ noun _[ship desk] + ++ json + (su:dejs:format ;~((glue fas) ;~(pfix sig fed:ag) sym)) + -- +-- diff --git a/pkg/garden/mar/docket/uninstall.hoon b/pkg/garden/mar/docket/uninstall.hoon new file mode 100644 index 000000000..335cd9580 --- /dev/null +++ b/pkg/garden/mar/docket/uninstall.hoon @@ -0,0 +1,13 @@ +|_ =desk +++ grad %noun +++ grow + |% + ++ noun desk + ++ json s+desk + -- +++ grab + |% + ++ noun ^desk + ++ json so:dejs:format + -- +-- diff --git a/pkg/garden/mar/treaties.hoon b/pkg/garden/mar/treaties.hoon new file mode 100644 index 000000000..9bb7484b7 --- /dev/null +++ b/pkg/garden/mar/treaties.hoon @@ -0,0 +1,20 @@ +/+ dock=docket +|_ treaties=(list treaty:dock) +++ grow + |% + ++ noun treaties + ++ json + ^- ^json + %- pairs:enjs:format + %+ turn treaties + |= =treaty:dock + :- (crip "{(scow %p ship.treaty)}/{(trip desk.treaty)}") + (treaty:enjs:dock treaty) + + -- +++ grab + |% + ++ noun (list treaty:dock) + -- +++ grad %noun +-- diff --git a/pkg/garden/mar/treaty-update-0.hoon b/pkg/garden/mar/treaty-update-0.hoon new file mode 100644 index 000000000..9da97ac4c --- /dev/null +++ b/pkg/garden/mar/treaty-update-0.hoon @@ -0,0 +1,14 @@ +/- *treaty +/+ treat=treaty +|_ =update:treaty +++ grad %noun +++ grow + |% + ++ noun update + ++ json (treaty-update:enjs:treat update) + -- +++ grab + |% + ++ noun update:treaty + -- +-- diff --git a/pkg/garden/mar/treaty.hoon b/pkg/garden/mar/treaty.hoon new file mode 100644 index 000000000..4a6eef3b8 --- /dev/null +++ b/pkg/garden/mar/treaty.hoon @@ -0,0 +1,14 @@ +/- *treaty +/+ treat=treaty +|_ tret=treaty +++ grow + |% + ++ noun tret + ++ json (treaty:enjs:treat tret) + -- +++ grab + |% + ++ noun treaty + -- +++ grad %noun +-- diff --git a/pkg/garden/sur/hood.hoon b/pkg/garden/sur/hood.hoon new file mode 100644 index 000000000..df11949e1 --- /dev/null +++ b/pkg/garden/sur/hood.hoon @@ -0,0 +1,206 @@ +/- *bill +=, clay +=* dude dude:gall +|% +:: $diff: subscription update +:: ++$ diff + $% [%block =desk =arak =weft blockers=(set desk)] + [%reset =desk =arak] + [%merge =desk =arak] + [%merge-sunk =desk =arak =tang] + [%merge-fail =desk =arak =tang] + [%suspend =desk =arak] + [%revive =desk =arak] + == +:: $arak: foreign vat tracker +:: +:: .next is a list of pending commits with future kelvins +:: ++$ arak + $: =ship + =desk + =aeon + next=(list [=aeon =weft]) + =rein + == +:: $rein: diff from desk manifest +:: +:: .liv: suspended? +:: .add: agents not in manifest that should be running +:: .sub: agents in manifest that should not be running +:: ++$ rein + $: liv=_& + add=(set dude) + sub=(set dude) + == +:: ++$ vat [=desk hash=@uv =cass =arak] +:: +report-vats: report on all desk installations +:: +++ report-vats + |= [our=@p now=@da] + ^- tang + =+ .^ raz=(list vat) + %gx /(scot %p our)/hood/(scot %da now)/kiln/vats/noun + == + (turn raz |=(v=vat (report-vat our now v))) +:: +report-vat: report on a single desk installation +:: +++ report-vat + |= [our=ship now=@da vat] + ^- tank + =+ .^(=weft %cx /(scot %p our)/[desk]/(scot %da now)/sys/kelvin) + :+ %rose ["" "{}" "::"] + ^- tang + =- ?: =(~ next.arak) - + %+ snoc - + leaf/"pending: {<(turn next.arak |=([@ lal=@tas num=@] [lal num]))>}" + ^- tang + =/ meb (mergebase-hashes our desk now arak) + =/ sat ?:(liv.rein.arak "running" "suspended") + :~ leaf/"/sys/kelvin: {<[lal num]:weft>}" + leaf/"base hash: {?.(=(1 (lent meb)) <(head meb)>)}" + leaf/"%cz hash: {}" + leaf/"remote aeon: {}" + leaf/"status: {sat}" + leaf/"force on: {?:(=(~ add.rein.arak) "~" )}" + leaf/"force off: {?:(=(~ sub.rein.arak) "~" )}" + == +:: +++ read-kelvin-foreign + |= [=ship =desk =aeon] + ^- weft + =/ her (scot %p ship) + =/ syd (scot %tas desk) + =/ yon (scot %ud aeon) + :: + =/ dom .^(dome cv/~[her syd yon]) + =/ tak (scot %uv (~(got by hit.dom) let.dom)) + =/ yak .^(yaki cs/~[her syd yon %yaki tak]) + =/ lob (scot %uv (~(got by q.yak) /sys/kelvin)) + =/ bob .^(blob cs/~[her syd yon %blob lob]) + :: + ;; weft + ?- -.bob + %direct q.q.bob + %delta q.r.bob + == +:: +read-bill: read contents of /desk/bill manifest +:: +++ read-bill + |= [our=ship =desk now=@da] + =/ pax (en-beam [our desk da+now] /desk/bill) + ?~ =<(fil .^(arch cy/pax)) + *bill + .^(bill cx/pax) +:: +is-fish: should dill link .dude? +:: +++ is-fish |=([=dude =bill] .?((find ~[dude] (read-fish bill)))) +:: +get-apps-diff: which agents should be started and stopped +:: +++ get-apps-diff + |= [our=ship =desk now=@da =rein] + ^- [liv=(list dude) ded=(list dude)] + =/ =bill (read-bill our desk now) + =/ wan (sy (get-apps-want bill rein)) + =/ hav (sy (get-apps-live our desk now)) + =/ liv ~(tap in (~(dif in wan) hav)) + =/ ded ~(tap in (~(dif in hav) wan)) + [liv ded] +:: +++ get-apps-live + |= [our=ship =desk now=@da] + ^- (list dude) + %+ murn (get-apps-have our desk now) + |=([=dude live=?] ?.(live ~ `dude)) +:: +get-apps-have: find which apps Gall is running on a desk +:: +++ get-apps-have + |= [our=ship =desk now=@da] + ^- (list [=dude live=?]) + %~ tap in + .^((set [=dude live=?]) ge+/(scot %p our)/[desk]/(scot %da now)) +:: +get-apps-want: find which apps should be running on a desk +:: +++ get-apps-want + |= [=bill =rein] + ^- (list dude) + =/ duz (read-apes bill) + =. duz (skip duz ~(has in sub.rein)) + =. duz (weld duz (skip ~(tap in add.rein) ~(has in (sy duz)))) + duz +:: +++ mergebase-hashes + |= [our=@p =desk now=@da =arak] + =/ her (scot %p ship.arak) + =/ ego (scot %p our) + =/ wen (scot %da now) + %+ turn .^((list tako) %cs ~[ego desk wen %base her desk.arak]) + |=(=tako .^(@uv %cs ~[ego desk wen %hash (scot %uv tako)])) +:: +++ enjs + =, enjs:format + |% + ++ vats + |= v=(list ^vat) + ^- json + %- pairs + %+ turn v + |= va=^vat + [desk.va (vat va)] + :: + ++ tim + |= t=@ + ^- json + (numb (fall (mole |.((unm:chrono:userlib t))) 0)) + :: + ++ cass + |= c=^cass + %- pairs + :~ ud+(numb ud.c) + da+(tim da.c) + == + :: + ++ vat + |= v=^vat + %- pairs + :~ desk+s+desk.v + hash+s+(scot %uv hash.v) + cass+(cass cass.v) + arak+(arak arak.v) + == + :: + ++ weft + |= w=^weft + %- pairs + :~ name+s+lal.w + kelvin+(numb num.w) + == + :: + ++ woof + |= w=[=aeon =^weft] + %- pairs + :~ aeon+(numb aeon.w) + weft+(weft weft.w) + == + :: + ++ rein + |= r=^rein + %- pairs + :~ add+a+(turn ~(tap in add.r) (lead %s)) + sub+a+(turn ~(tap in sub.r) (lead %s)) + == + :: + ++ arak + |= a=^arak + %- pairs + :~ ship+s+(scot %p ship.a) + desk+s+desk.a + aeon+(numb aeon.a) + next+a+(turn next.a woof) + rein+(rein rein.a) + == + -- +-- diff --git a/pkg/garden/sur/treaty.hoon b/pkg/garden/sur/treaty.hoon new file mode 100644 index 000000000..7284f9d9e --- /dev/null +++ b/pkg/garden/sur/treaty.hoon @@ -0,0 +1,59 @@ +/- docket +|% +++ treaty + =< treaty + |% + :: $treaty: An extrajudicial docket + :: + :: Includes the docket itself, plus provenance generated by clay + :: + +$ treaty + [=ship =desk =case hash=@uv =docket:docket] + :: + :: $update:treaty: Diff of treaty state + :: + +$ update + $% [%ini init=(map [=ship =desk] =treaty)] + [%add =treaty] + [%del =ship =desk] + == + -- +++ alliance + =< alliance + |% + :: $alliance: Dockets to be advertised for install + :: + +$ alliance (set [=ship =desk]) + +$ diff + $% [%add =ship =desk] + [%del =ship =desk] + == + :: + +$ update + $% [%ini init=(set [=ship =desk])] + diff + == + -- + +:: +ally: Discovery structures +:: +++ ally + |% + :: + :: $allies: Provider ships and their alliances + :: + +$ allies (map ship alliance) + :: $diff: Request to change ally state + +$ diff + $% [%add =ship] + [%del =ship] + == + :: $update: Changed ally state + :: + +$ update + $% diff + [%ini init=(map ship alliance)] + [%new =ship =alliance] + == + -- +-- diff --git a/pkg/garden/sys.kelvin b/pkg/garden/sys.kelvin new file mode 100644 index 000000000..b7464903a --- /dev/null +++ b/pkg/garden/sys.kelvin @@ -0,0 +1 @@ +[%zuse 420] diff --git a/pkg/garden/ted/glob.hoon b/pkg/garden/ted/glob.hoon new file mode 100644 index 000000000..aa03a6868 --- /dev/null +++ b/pkg/garden/ted/glob.hoon @@ -0,0 +1,17 @@ +/- spider, docket +/+ strandio +=, strand=strand:spider +^- thread:spider +|= arg=vase +=/ m (strand ,vase) +^- form:m +=+ !<([~ url=cord] arg) +;< =glob:docket bind:m + %+ (retry:strandio ,glob:docket) `5 + =/ n (strand ,(unit glob:docket)) + ;< =cord bind:n (fetch-cord:strandio (trip url)) + %- pure:n + %- mole + |. + ;;(=glob:docket (cue cord)) +(pure:m !>(glob)) diff --git a/pkg/garden/ted/make-glob.hoon b/pkg/garden/ted/make-glob.hoon new file mode 100644 index 000000000..b884bd2bf --- /dev/null +++ b/pkg/garden/ted/make-glob.hoon @@ -0,0 +1,26 @@ +/- spider, docket +/+ strandio +=, strand=strand:spider +^- thread:spider +|= arg=vase +=/ m (strand ,vase) +^- form:m +=+ !<([~ [=desk dir=path]] arg) +;< =bowl:spider bind:m get-bowl:strandio +=/ home=path /(scot %p our.bowl)/[desk]/(scot %da now.bowl) +=+ .^(paths=(list path) %ct (weld home dir)) +=/ =glob:docket + %- ~(gas by *glob:docket) + %+ turn paths + |= pax=path + ^- [path mime] + :- (slag (lent dir) pax) + =/ mar=mark (rear pax) + =+ .^(vas=vase %cr (weld home pax)) + =+ .^(=tube:clay %cc (weld home /[mar]/mime)) + !<(mime (tube vas)) +=/ =path /(cat 3 'glob-' (scot %uv (sham glob)))/glob + ~& globbed+`(set ^path)`~(key by glob) +;< ~ bind:m (poke-our:strandio %hood drum-put+!>([path (jam glob)])) +(pure:m *vase) + diff --git a/pkg/grid/index.html b/pkg/grid/index.html index 3d2721deb..ee7d7eeed 100644 --- a/pkg/grid/index.html +++ b/pkg/grid/index.html @@ -5,11 +5,14 @@ Landscape • Home - - - + + + - +
diff --git a/pkg/grid/package-lock.json b/pkg/grid/package-lock.json index a084e916e..38e18d5b4 100644 --- a/pkg/grid/package-lock.json +++ b/pkg/grid/package-lock.json @@ -13,6 +13,7 @@ "@radix-ui/react-polymorphic": "^0.0.13", "@radix-ui/react-portal": "^0.0.15", "@radix-ui/react-toggle": "^0.0.10", + "@urbit/api": "^1.4.0", "@urbit/http-api": "^1.3.1", "classnames": "^2.3.1", "clipboard-copy": "^4.0.1", @@ -20,6 +21,7 @@ "fuzzy": "^0.1.3", "immer": "^9.0.5", "lodash-es": "^4.17.21", + "moment": "^2.29.1", "mousetrap": "^1.6.5", "postcss-import": "^14.0.2", "query-string": "^7.0.1", @@ -59,7 +61,8 @@ "tailwindcss": "^2.2.7", "tailwindcss-touch": "^1.0.1", "typescript": "^4.3.2", - "vite": "^2.4.4" + "vite": "^2.4.4", + "vite-plugin-html-config": "^1.0.5" } }, "node_modules/@babel/code-frame": { @@ -107,10 +110,6 @@ }, "engines": { "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" } }, "node_modules/@babel/generator": { @@ -140,9 +139,6 @@ }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-function-name": { @@ -354,9 +350,6 @@ }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-react-jsx-source": { @@ -369,9 +362,6 @@ }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/runtime": { @@ -475,9 +465,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { @@ -487,9 +474,6 @@ "dev": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@humanwhocodes/config-array": { @@ -577,9 +561,6 @@ "@babel/runtime": "^7.13.10", "@radix-ui/react-polymorphic": "0.0.13", "@radix-ui/react-primitive": "0.0.15" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-collection": { @@ -590,9 +571,6 @@ "@babel/runtime": "^7.13.10", "@radix-ui/react-compose-refs": "0.0.5", "@radix-ui/react-slot": "0.0.12" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-compose-refs": { @@ -601,9 +579,6 @@ "integrity": "sha512-O9mH9X/2EwuAEEoZXrU4alcrRbAhhZHGpIJ5bOH6rmRcokhaoWRBY1tOEe2lgHdb/bkKrY+viLi4Zq8Ju6/09Q==", "dependencies": { "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-context": { @@ -612,9 +587,6 @@ "integrity": "sha512-bwrzAc0qc2EPepSTLBT4+93uCiI9wP78VSmPg2K+k71O/vpx7dPs0VqrewwCBNCHT54NIwaRr2hEsm2uqYi02A==", "dependencies": { "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-dialog": { @@ -638,10 +610,6 @@ "@radix-ui/react-use-controllable-state": "0.0.6", "aria-hidden": "^1.1.1", "react-remove-scroll": "^2.4.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0", - "react-dom": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-dismissable-layer": { @@ -656,9 +624,6 @@ "@radix-ui/react-use-body-pointer-events": "0.0.7", "@radix-ui/react-use-callback-ref": "0.0.5", "@radix-ui/react-use-escape-keydown": "0.0.6" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-dropdown-menu": { @@ -675,10 +640,6 @@ "@radix-ui/react-polymorphic": "0.0.13", "@radix-ui/react-primitive": "0.0.15", "@radix-ui/react-use-controllable-state": "0.0.6" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0", - "react-dom": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-focus-guards": { @@ -687,9 +648,6 @@ "integrity": "sha512-enAsmrUunptHVzPLTuZqwTP/X3WFBnyJ/jP9W+0g+bRvI3o7V1kxNc+T2Rp1eRTFBW+lUNnt08qkugPytyTRog==", "dependencies": { "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-focus-scope": { @@ -702,9 +660,6 @@ "@radix-ui/react-polymorphic": "0.0.13", "@radix-ui/react-primitive": "0.0.15", "@radix-ui/react-use-callback-ref": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-id": { @@ -713,9 +668,6 @@ "integrity": "sha512-PzmraF34fYggsYvTIZVJ5S68WMp3aKUN3HkSmGnz4zn9zpRjkAbbg7Xn3ueQI3FQsLWKgyUfnpsmWFDndpcqYg==", "dependencies": { "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-menu": { @@ -743,19 +695,12 @@ "@radix-ui/react-use-direction": "0.0.1", "aria-hidden": "^1.1.1", "react-remove-scroll": "^2.4.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0", - "react-dom": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-polymorphic": { "version": "0.0.13", "resolved": "https://registry.npmjs.org/@radix-ui/react-polymorphic/-/react-polymorphic-0.0.13.tgz", - "integrity": "sha512-0sGqBp+v9/yrsMhPfAejxcem2MwAFgaSAxF3Sieaklm6ZVYM/hTZxxWI5NVOLGV+482GwW0wIqwpVUzREjmh+w==", - "peerDependencies": { - "react": "^16.8 || ^17.0" - } + "integrity": "sha512-0sGqBp+v9/yrsMhPfAejxcem2MwAFgaSAxF3Sieaklm6ZVYM/hTZxxWI5NVOLGV+482GwW0wIqwpVUzREjmh+w==" }, "node_modules/@radix-ui/react-popper": { "version": "0.0.18", @@ -772,9 +717,6 @@ "@radix-ui/react-use-rect": "0.0.7", "@radix-ui/react-use-size": "0.0.6", "@radix-ui/rect": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-portal": { @@ -786,10 +728,6 @@ "@radix-ui/react-polymorphic": "0.0.13", "@radix-ui/react-primitive": "0.0.15", "@radix-ui/react-use-layout-effect": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0", - "react-dom": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-presence": { @@ -800,9 +738,6 @@ "@babel/runtime": "^7.13.10", "@radix-ui/react-compose-refs": "0.0.5", "@radix-ui/react-use-layout-effect": "0.0.5" - }, - "peerDependencies": { - "react": ">=16.8" } }, "node_modules/@radix-ui/react-primitive": { @@ -812,9 +747,6 @@ "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-polymorphic": "0.0.13" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-roving-focus": { @@ -832,9 +764,6 @@ "@radix-ui/react-primitive": "0.0.15", "@radix-ui/react-use-callback-ref": "0.0.5", "@radix-ui/react-use-controllable-state": "0.0.6" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-slot": { @@ -844,9 +773,6 @@ "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-compose-refs": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-toggle": { @@ -871,9 +797,6 @@ "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-use-layout-effect": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-use-callback-ref": { @@ -882,9 +805,6 @@ "integrity": "sha512-z1AI221vmq9f3vsDyrCsGLCatKagbM1YeCGdRMhMsUBzFFCaJ+Axyoe/ndVqW8wwsraGWr1zYVAhIEdlC0GvPg==", "dependencies": { "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-use-controllable-state": { @@ -894,9 +814,6 @@ "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-use-callback-ref": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-use-direction": { @@ -905,9 +822,6 @@ "integrity": "sha512-sU+tkP09uEI1m+YJAR1ZAZLVFY1h/JD+jLSSQt5Wo3b9SYrJA889i2hH1P3DNRyWbbbisweiEQdK3MWILhFCig==", "dependencies": { "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-use-escape-keydown": { @@ -917,9 +831,6 @@ "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-use-callback-ref": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-use-layout-effect": { @@ -928,9 +839,6 @@ "integrity": "sha512-bNPW2JNOr/p2hXr0hfKKqrEy5deNSRF17sw3l9Z7qlEnvIbBtQ7iwY/wrxIz5P7XFyYGoXodIUDH5G8PEucE3A==", "dependencies": { "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-use-rect": { @@ -940,9 +848,6 @@ "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/rect": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/react-use-size": { @@ -951,9 +856,6 @@ "integrity": "sha512-kP4RIb2I5oHQzwzXJ21Hu8htNqf+sdaRzywxQpbj+hmqeUhpvIkhoq+ShNWV9wE/3c1T7gPnka8/nKYsKaKdCg==", "dependencies": { "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" } }, "node_modules/@radix-ui/rect": { @@ -981,10 +883,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.2.1.tgz", "integrity": "sha512-aDFi80aHQ3JM3symJ5iKU70lm151ugIGFCI0yRZGpyjgQSDS+Fbe93QwypC1tCEllQE8p0S7TUu20ih1b9IKLA==", - "dev": true, - "peerDependencies": { - "tailwindcss": ">=2.0.0" - } + "dev": true }, "node_modules/@types/history": { "version": "4.7.9", @@ -1001,8 +900,7 @@ "node_modules/@types/lodash": { "version": "4.14.172", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", - "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==", - "dev": true + "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==" }, "node_modules/@types/lodash-es": { "version": "4.17.4", @@ -1029,13 +927,13 @@ "version": "15.7.4", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", - "devOptional": true + "dev": true }, "node_modules/@types/react": { "version": "17.0.15", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.15.tgz", "integrity": "sha512-uTKHDK9STXFHLaKv6IMnwp52fm0hwU+N89w/p9grdUqcFA6WuqDyPhaWopbNyE1k/VhgzmHl8pu1L4wITtmlLw==", - "devOptional": true, + "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -1076,7 +974,7 @@ "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "devOptional": true + "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "4.29.1", @@ -1094,19 +992,6 @@ }, "engines": { "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { @@ -1139,13 +1024,6 @@ }, "engines": { "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" } }, "node_modules/@typescript-eslint/parser": { @@ -1161,18 +1039,6 @@ }, "engines": { "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, "node_modules/@typescript-eslint/scope-manager": { @@ -1186,10 +1052,6 @@ }, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/types": { @@ -1199,10 +1061,6 @@ "dev": true, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/typescript-estree": { @@ -1221,15 +1079,6 @@ }, "engines": { "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { @@ -1258,12 +1107,27 @@ }, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@urbit/api": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@urbit/api/-/api-1.4.0.tgz", + "integrity": "sha512-mjNwu+kbYhbDcDPAk3+kEMKHoHa5VtjCcIxBMQSpvy27N9jgS7D1Pn7MDEyDwdsVk9PWWG3ODg6q+yGwLMBuwg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/lodash": "^4.14.168", + "@urbit/eslint-config": "^1.0.3", + "big-integer": "^1.6.48", + "immer": "^9.0.1", + "lodash": "^4.17.20", + "urbit-ob": "^5.0.1" + } + }, + "node_modules/@urbit/eslint-config": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@urbit/eslint-config/-/eslint-config-1.0.3.tgz", + "integrity": "sha512-4mGd4GzzF+JMG/eAhjDQBjyVYo0xNbpcC7I16GouINLIuz5LJmNZ98SRQaOpfnsGIfTiZxwyZnfIX20orvWMxQ==" + }, "node_modules/@urbit/http-api": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-1.3.1.tgz", @@ -1310,10 +1174,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } + "dev": true }, "node_modules/acorn-node": { "version": "1.8.2", @@ -1358,10 +1219,6 @@ "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ansi-colors": { @@ -1383,9 +1240,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-regex": { @@ -1475,9 +1329,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-union": { @@ -1501,9 +1352,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.flatmap": { @@ -1519,9 +1367,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ast-types-flow": { @@ -1557,13 +1402,6 @@ }, "engines": { "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.0" } }, "node_modules/axe-core": { @@ -1590,21 +1428,15 @@ "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "node_modules/big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "engines": { + "node": ">=0.6" + } }, "node_modules/binary-extensions": { "version": "2.2.0", @@ -1615,6 +1447,11 @@ "node": ">=8" } }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1667,30 +1504,12 @@ }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -1718,9 +1537,6 @@ "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/callsites": { @@ -1745,11 +1561,7 @@ "version": "1.0.30001247", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001247.tgz", "integrity": "sha512-4rS7co+7+AoOSPRPOPUt5/GdaqZc0EsUpWk66ofE3HJTAajUK2Ss2VwoNzVN69ghg8lYYlh0an0Iy4LIHHo9UQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "dev": true }, "node_modules/chalk": { "version": "2.4.2", @@ -1841,9 +1653,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-width": { @@ -1855,21 +1664,7 @@ "node_modules/clipboard-copy": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clipboard-copy/-/clipboard-copy-4.0.1.tgz", - "integrity": "sha512-wOlqdqziE/NNTUJsfSgXmBMIrYmfd5V0HCGsR8uAKHcg+h9NENWINcfRjtWGU77wDHC8B8ijV4hMTGYbrKovng==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "integrity": "sha512-wOlqdqziE/NNTUJsfSgXmBMIrYmfd5V0HCGsR8uAKHcg+h9NENWINcfRjtWGU77wDHC8B8ijV4hMTGYbrKovng==" }, "node_modules/cliui": { "version": "7.0.4", @@ -1925,7 +1720,8 @@ "node_modules/colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true }, "node_modules/commander": { "version": "6.2.1", @@ -1961,12 +1757,7 @@ "version": "3.16.1", "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.1.tgz", "integrity": "sha512-TyofCdMzx0KMhi84mVRS8rL1XsRk2SPUNz2azmth53iRN0/08Uim9fdhQTaZTG1LqaXHYVci4RDHka6WrXfnvg==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } + "dev": true }, "node_modules/cosmiconfig": { "version": "7.0.0", @@ -2037,11 +1828,6 @@ }, "engines": { "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } } }, "node_modules/decode-uri-component": { @@ -2148,22 +1934,13 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] + "dev": true }, "node_modules/dom-serializer/node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } + "dev": true }, "node_modules/domelementtype": { "version": "1.3.1", @@ -2255,9 +2032,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-to-primitive": { @@ -2272,9 +2046,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/esbuild": { @@ -2282,7 +2053,6 @@ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.16.tgz", "integrity": "sha512-XqI9cXP2bmQ6MREIqrYBb13KfYFSERsV1+e5jSVWps8dNlLZK+hln7d0mznzDIpfISsg/AgQW0DW3kSInXWhrg==", "dev": true, - "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" } @@ -2357,9 +2127,6 @@ }, "engines": { "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-airbnb": { @@ -2374,13 +2141,6 @@ }, "engines": { "node": ">= 6" - }, - "peerDependencies": { - "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0" } }, "node_modules/eslint-config-airbnb-base": { @@ -2395,10 +2155,6 @@ }, "engines": { "node": ">= 6" - }, - "peerDependencies": { - "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", - "eslint-plugin-import": "^2.22.1" } }, "node_modules/eslint-config-prettier": { @@ -2408,9 +2164,6 @@ "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" } }, "node_modules/eslint-html-parser": { @@ -2870,10 +2623,6 @@ }, "engines": { "node": ">=4" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" } }, "node_modules/eslint-module-utils": { @@ -2922,9 +2671,6 @@ }, "engines": { "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -2974,9 +2720,6 @@ }, "engines": { "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" } }, "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { @@ -2995,15 +2738,6 @@ }, "engines": { "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } } }, "node_modules/eslint-plugin-react": { @@ -3027,9 +2761,6 @@ }, "engines": { "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" } }, "node_modules/eslint-plugin-react-hooks": { @@ -3039,9 +2770,6 @@ "dev": true, "engines": { "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { @@ -3064,9 +2792,6 @@ "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/eslint-plugin-tailwind": { @@ -3079,9 +2804,6 @@ }, "engines": { "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/eslint-scope": { @@ -3107,12 +2829,6 @@ }, "engines": { "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" } }, "node_modules/eslint-visitor-keys": { @@ -3143,9 +2859,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/eslint/node_modules/chalk": { @@ -3159,9 +2872,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/eslint/node_modules/color-convert": { @@ -3189,9 +2899,6 @@ "dev": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/eslint-utils": { @@ -3204,9 +2911,6 @@ }, "engines": { "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { @@ -3240,9 +2944,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/has-flag": { @@ -3288,9 +2989,6 @@ "dev": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { @@ -3413,9 +3111,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, "node_modules/external-editor": { @@ -3587,10 +3282,6 @@ "dev": true, "engines": { "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" } }, "node_modules/fs-extra": { @@ -3618,7 +3309,6 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -3673,9 +3363,6 @@ "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-nonce": { @@ -3699,9 +3386,6 @@ "dev": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/glob": { @@ -3719,9 +3403,6 @@ }, "engines": { "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { @@ -3760,9 +3441,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globby/node_modules/ignore": { @@ -3795,10 +3473,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, "node_modules/has-flag": { "version": "3.0.0", @@ -3816,9 +3491,6 @@ "dev": true, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-tostringtag": { @@ -3831,9 +3503,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/history": { @@ -3905,9 +3574,6 @@ }, "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" } }, "node_modules/iconv-lite": { @@ -3925,21 +3591,7 @@ "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "node_modules/ignore": { "version": "4.0.6", @@ -3953,11 +3605,7 @@ "node_modules/immer": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.5.tgz", - "integrity": "sha512-2WuIehr2y4lmYz9gaQzetPR2ECniCifk4ORaQbU3g5EalLt+0IVTosEPJ5BoYl/75ky2mivzdRzV8wWgQGOSYQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } + "integrity": "sha512-2WuIehr2y4lmYz9gaQzetPR2ECniCifk4ORaQbU3g5EalLt+0IVTosEPJ5BoYl/75ky2mivzdRzV8wWgQGOSYQ==" }, "node_modules/import-cwd": { "version": "3.0.0", @@ -3982,9 +3630,6 @@ }, "engines": { "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-from": { @@ -4219,9 +3864,6 @@ "dev": true, "dependencies": { "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-binary-path": { @@ -4247,9 +3889,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-callable": { @@ -4259,9 +3898,6 @@ "dev": true, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-core-module": { @@ -4270,9 +3906,6 @@ "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", "dependencies": { "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { @@ -4285,9 +3918,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-docker": { @@ -4300,9 +3930,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-extglob": { @@ -4342,9 +3969,6 @@ "dev": true, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-number": { @@ -4366,9 +3990,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-obj": { @@ -4391,9 +4012,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-regexp": { @@ -4412,9 +4030,6 @@ "dev": true, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-string": { @@ -4427,9 +4042,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-symbol": { @@ -4442,9 +4054,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-unicode-supported": { @@ -4454,9 +4063,6 @@ "dev": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-wsl": { @@ -4557,10 +4163,8 @@ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { + "graceful-fs": "^4.1.6", "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" } }, "node_modules/jsx-ast-utils": { @@ -4642,9 +4246,6 @@ }, "bin": { "lint-staged": "bin/lint-staged.js" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" } }, "node_modules/lint-staged/node_modules/ansi-styles": { @@ -4657,9 +4258,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/lint-staged/node_modules/chalk": { @@ -4673,9 +4271,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/lint-staged/node_modules/color-convert": { @@ -4742,9 +4337,6 @@ }, "engines": { "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" } }, "node_modules/load-json-file": { @@ -4800,20 +4392,29 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "node_modules/lodash.chunk": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", + "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" + }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4849,9 +4450,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-symbols/node_modules/ansi-styles": { @@ -4864,9 +4462,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/log-symbols/node_modules/chalk": { @@ -4880,9 +4475,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/log-symbols/node_modules/color-convert": { @@ -4937,9 +4529,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/ansi-styles": { @@ -4952,9 +4541,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/log-update/node_modules/color-convert": { @@ -4987,9 +4573,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/log-update/node_modules/wrap-ansi": { @@ -5073,10 +4656,6 @@ "dependencies": { "@babel/runtime": "^7.12.1", "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/minimatch": { @@ -5116,9 +4695,14 @@ "dev": true, "engines": { "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" } }, "node_modules/mousetrap": { @@ -5142,6 +4726,7 @@ "version": "3.1.23", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5248,10 +4833,7 @@ "version": "1.11.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, "node_modules/object-keys": { "version": "1.1.1", @@ -5275,9 +4857,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.entries": { @@ -5307,9 +4886,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { @@ -5324,9 +4900,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/once": { @@ -5348,9 +4921,6 @@ }, "engines": { "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/open": { @@ -5364,9 +4934,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/optionator": { @@ -5429,9 +4996,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -5473,9 +5037,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/path-exists": { @@ -5540,9 +5101,6 @@ "dev": true, "engines": { "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pify": { @@ -5590,6 +5148,7 @@ "version": "8.3.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "dev": true, "dependencies": { "colorette": "^1.2.2", "nanoid": "^3.1.23", @@ -5597,10 +5156,6 @@ }, "engines": { "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-import": { @@ -5614,9 +5169,6 @@ }, "engines": { "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" } }, "node_modules/postcss-js": { @@ -5630,10 +5182,6 @@ }, "engines": { "node": ">=10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-load-config": { @@ -5648,18 +5196,6 @@ }, "engines": { "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } } }, "node_modules/postcss-nested": { @@ -5672,13 +5208,6 @@ }, "engines": { "node": ">=10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.13" } }, "node_modules/postcss-selector-parser": { @@ -5796,30 +5325,13 @@ }, "engines": { "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, "node_modules/quick-lru": { "version": "5.1.1", @@ -5828,9 +5340,6 @@ "dev": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/react": { @@ -5853,9 +5362,6 @@ "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" } }, "node_modules/react-is": { @@ -5885,15 +5391,6 @@ }, "engines": { "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } } }, "node_modules/react-remove-scroll-bar": { @@ -5906,15 +5403,6 @@ }, "engines": { "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } } }, "node_modules/react-router": { @@ -5932,9 +5420,6 @@ "react-is": "^16.6.0", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" } }, "node_modules/react-router-dom": { @@ -5949,9 +5434,6 @@ "react-router": "5.2.0", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" } }, "node_modules/react-style-singleton": { @@ -5965,15 +5447,6 @@ }, "engines": { "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } } }, "node_modules/read-cache": { @@ -6089,9 +5562,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regexpp": { @@ -6101,9 +5571,6 @@ "dev": true, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/require-directory": { @@ -6131,9 +5598,6 @@ "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { @@ -6183,9 +5647,6 @@ }, "bin": { "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rollup": { @@ -6228,9 +5689,6 @@ }, "engines": { "node": ">=10.16" - }, - "peerDependencies": { - "rollup": "^2.0.0" } }, "node_modules/rollup-plugin-visualizer/node_modules/source-map": { @@ -6256,20 +5714,6 @@ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { "queue-microtask": "^1.2.2" } @@ -6352,9 +5796,6 @@ "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/signal-exit": { @@ -6411,9 +5852,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/slice-ansi/node_modules/color-convert": { @@ -6455,6 +5893,7 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -6544,21 +5983,7 @@ "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "node_modules/string-argv": { "version": "0.3.1", @@ -6597,9 +6022,6 @@ "internal-slot": "^1.0.3", "regexp.prototype.flags": "^1.3.1", "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimend": { @@ -6610,9 +6032,6 @@ "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { @@ -6623,9 +6042,6 @@ "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/stringify-object": { @@ -6679,9 +6095,6 @@ "dev": true, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/supports-color": { @@ -6723,10 +6136,6 @@ "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/table/node_modules/ansi-styles": { @@ -6739,9 +6148,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/table/node_modules/color-convert": { @@ -6780,9 +6186,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/tailwindcss": { @@ -6829,10 +6232,6 @@ }, "engines": { "node": ">=12.13.0" - }, - "peerDependencies": { - "autoprefixer": "^10.0.2", - "postcss": "^8.0.9" } }, "node_modules/tailwindcss-touch": { @@ -6851,9 +6250,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/tailwindcss/node_modules/chalk": { @@ -6867,9 +6263,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/tailwindcss/node_modules/color-convert": { @@ -6992,9 +6385,6 @@ }, "engines": { "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, "node_modules/type-check": { @@ -7016,9 +6406,6 @@ "dev": true, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/typescript": { @@ -7044,9 +6431,6 @@ "has-bigints": "^1.0.1", "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/universalify": { @@ -7058,6 +6442,16 @@ "node": ">= 10.0.0" } }, + "node_modules/urbit-ob": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/urbit-ob/-/urbit-ob-5.0.1.tgz", + "integrity": "sha512-qGNAwu87XNkW3g8ah4fUwmh2EKXtsdhEbyEiE5qX4Op17rhLH3HSkvu8g9z+MhqX51Uz9sf8ktvqJj/IRwETIQ==", + "dependencies": { + "bn.js": "^4.11.8", + "lodash.chunk": "^4.2.0", + "lodash.isequal": "^4.5.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -7073,15 +6467,6 @@ "integrity": "sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg==", "engines": { "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } } }, "node_modules/use-sidecar": { @@ -7094,9 +6479,6 @@ }, "engines": { "node": ">=8.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" } }, "node_modules/util-deprecate": { @@ -7146,6 +6528,18 @@ "fsevents": "~2.3.2" } }, + "node_modules/vite-plugin-html-config": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/vite-plugin-html-config/-/vite-plugin-html-config-1.0.5.tgz", + "integrity": "sha512-2v/nLbpFUofCsa19tw/ZcsqautjV2bBpYZH44ysxN2M1QXrnpYLgJhDUE918rKGsN0gTQ0Ej48luTaj5akTM7Q==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "vite": "^2.0.5" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -7172,9 +6566,6 @@ "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/word-wrap": { @@ -7198,9 +6589,6 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { @@ -7213,9 +6601,6 @@ }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/wrap-ansi/node_modules/color-convert": { @@ -7316,15 +6701,7 @@ "node_modules/zustand": { "version": "3.5.7", "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.5.7.tgz", - "integrity": "sha512-DlVFXJavIHyXTOGz6dB+8QHZsPyJcGJSEBtlp2Ivmd5SwtlCnhPo3L8LB6YRfAOJC2PbqzgoD8NMjk+y+vIF0g==", - "peerDependencies": { - "react": ">=16.8" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - } - } + "integrity": "sha512-DlVFXJavIHyXTOGz6dB+8QHZsPyJcGJSEBtlp2Ivmd5SwtlCnhPo3L8LB6YRfAOJC2PbqzgoD8NMjk+y+vIF0g==" } }, "dependencies": { @@ -7857,8 +7234,7 @@ "@radix-ui/react-polymorphic": { "version": "0.0.13", "resolved": "https://registry.npmjs.org/@radix-ui/react-polymorphic/-/react-polymorphic-0.0.13.tgz", - "integrity": "sha512-0sGqBp+v9/yrsMhPfAejxcem2MwAFgaSAxF3Sieaklm6ZVYM/hTZxxWI5NVOLGV+482GwW0wIqwpVUzREjmh+w==", - "requires": {} + "integrity": "sha512-0sGqBp+v9/yrsMhPfAejxcem2MwAFgaSAxF3Sieaklm6ZVYM/hTZxxWI5NVOLGV+482GwW0wIqwpVUzREjmh+w==" }, "@radix-ui/react-popper": { "version": "0.0.18", @@ -8035,8 +7411,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.2.1.tgz", "integrity": "sha512-aDFi80aHQ3JM3symJ5iKU70lm151ugIGFCI0yRZGpyjgQSDS+Fbe93QwypC1tCEllQE8p0S7TUu20ih1b9IKLA==", - "dev": true, - "requires": {} + "dev": true }, "@types/history": { "version": "4.7.9", @@ -8053,8 +7428,7 @@ "@types/lodash": { "version": "4.14.172", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", - "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==", - "dev": true + "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==" }, "@types/lodash-es": { "version": "4.17.4", @@ -8081,13 +7455,13 @@ "version": "15.7.4", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", - "devOptional": true + "dev": true }, "@types/react": { "version": "17.0.15", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.15.tgz", "integrity": "sha512-uTKHDK9STXFHLaKv6IMnwp52fm0hwU+N89w/p9grdUqcFA6WuqDyPhaWopbNyE1k/VhgzmHl8pu1L4wITtmlLw==", - "devOptional": true, + "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -8128,7 +7502,7 @@ "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "devOptional": true + "dev": true }, "@typescript-eslint/eslint-plugin": { "version": "4.29.1", @@ -8234,6 +7608,25 @@ "eslint-visitor-keys": "^2.0.0" } }, + "@urbit/api": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@urbit/api/-/api-1.4.0.tgz", + "integrity": "sha512-mjNwu+kbYhbDcDPAk3+kEMKHoHa5VtjCcIxBMQSpvy27N9jgS7D1Pn7MDEyDwdsVk9PWWG3ODg6q+yGwLMBuwg==", + "requires": { + "@babel/runtime": "^7.12.5", + "@types/lodash": "^4.14.168", + "@urbit/eslint-config": "^1.0.3", + "big-integer": "^1.6.48", + "immer": "^9.0.1", + "lodash": "^4.17.20", + "urbit-ob": "^5.0.1" + } + }, + "@urbit/eslint-config": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@urbit/eslint-config/-/eslint-config-1.0.3.tgz", + "integrity": "sha512-4mGd4GzzF+JMG/eAhjDQBjyVYo0xNbpcC7I16GouINLIuz5LJmNZ98SRQaOpfnsGIfTiZxwyZnfIX20orvWMxQ==" + }, "@urbit/http-api": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-1.3.1.tgz", @@ -8271,8 +7664,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "acorn-node": { "version": "1.8.2", @@ -8477,12 +7869,22 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -8715,7 +8117,8 @@ "colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true }, "commander": { "version": "6.2.1", @@ -9207,8 +8610,7 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "requires": {} + "dev": true }, "eslint-html-parser": { "version": "1.0.1", @@ -9726,8 +9128,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", - "dev": true, - "requires": {} + "dev": true }, "eslint-plugin-tailwind": { "version": "0.2.1", @@ -10873,20 +10274,29 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, + "lodash.chunk": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", + "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" + }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -11116,6 +10526,11 @@ "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", "dev": true }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, "mousetrap": { "version": "1.6.5", "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", @@ -11136,7 +10551,8 @@ "nanoid": { "version": "3.1.23", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true }, "natural-compare": { "version": "1.4.0", @@ -11467,6 +10883,7 @@ "version": "8.3.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "dev": true, "requires": { "colorette": "^1.2.2", "nanoid": "^3.1.23", @@ -12063,7 +11480,8 @@ "source-map-js": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true }, "spdx-correct": { "version": "3.1.1", @@ -12523,6 +11941,16 @@ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, + "urbit-ob": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/urbit-ob/-/urbit-ob-5.0.1.tgz", + "integrity": "sha512-qGNAwu87XNkW3g8ah4fUwmh2EKXtsdhEbyEiE5qX4Op17rhLH3HSkvu8g9z+MhqX51Uz9sf8ktvqJj/IRwETIQ==", + "requires": { + "bn.js": "^4.11.8", + "lodash.chunk": "^4.2.0", + "lodash.isequal": "^4.5.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -12535,8 +11963,7 @@ "use-callback-ref": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.2.5.tgz", - "integrity": "sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg==", - "requires": {} + "integrity": "sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg==" }, "use-sidecar": { "version": "1.0.5", @@ -12586,6 +12013,13 @@ "rollup": "^2.38.5" } }, + "vite-plugin-html-config": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/vite-plugin-html-config/-/vite-plugin-html-config-1.0.5.tgz", + "integrity": "sha512-2v/nLbpFUofCsa19tw/ZcsqautjV2bBpYZH44ysxN2M1QXrnpYLgJhDUE918rKGsN0gTQ0Ej48luTaj5akTM7Q==", + "dev": true, + "requires": {} + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -12713,8 +12147,7 @@ "zustand": { "version": "3.5.7", "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.5.7.tgz", - "integrity": "sha512-DlVFXJavIHyXTOGz6dB+8QHZsPyJcGJSEBtlp2Ivmd5SwtlCnhPo3L8LB6YRfAOJC2PbqzgoD8NMjk+y+vIF0g==", - "requires": {} + "integrity": "sha512-DlVFXJavIHyXTOGz6dB+8QHZsPyJcGJSEBtlp2Ivmd5SwtlCnhPo3L8LB6YRfAOJC2PbqzgoD8NMjk+y+vIF0g==" } } } diff --git a/pkg/grid/package.json b/pkg/grid/package.json index 302bce7ec..a02c0e8b2 100644 --- a/pkg/grid/package.json +++ b/pkg/grid/package.json @@ -10,7 +10,8 @@ "serve": "vite preview", "lint": "eslint --cache \"**/*.{js,jsx,ts,tsx}\"", "lint:fix": "npm run lint -- --fix", - "test": "echo \"No test yet\"" + "test": "echo \"No test yet\"", + "tsc": "tsc --noEmit" }, "dependencies": { "@radix-ui/react-dialog": "^0.0.20", @@ -18,6 +19,7 @@ "@radix-ui/react-polymorphic": "^0.0.13", "@radix-ui/react-portal": "^0.0.15", "@radix-ui/react-toggle": "^0.0.10", + "@urbit/api": "^1.4.0", "@urbit/http-api": "^1.3.1", "classnames": "^2.3.1", "clipboard-copy": "^4.0.1", @@ -25,6 +27,7 @@ "fuzzy": "^0.1.3", "immer": "^9.0.5", "lodash-es": "^4.17.21", + "moment": "^2.29.1", "mousetrap": "^1.6.5", "postcss-import": "^14.0.2", "query-string": "^7.0.1", @@ -64,7 +67,8 @@ "tailwindcss": "^2.2.7", "tailwindcss-touch": "^1.0.1", "typescript": "^4.3.2", - "vite": "^2.4.4" + "vite": "^2.4.4", + "vite-plugin-html-config": "^1.0.5" }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ diff --git a/pkg/grid/src/app.tsx b/pkg/grid/src/app.tsx index d026e62e7..098f9ddfc 100644 --- a/pkg/grid/src/app.tsx +++ b/pkg/grid/src/app.tsx @@ -2,6 +2,7 @@ import React, { useEffect } from 'react'; import Mousetrap from 'mousetrap'; import { BrowserRouter, Switch, Route, useHistory } from 'react-router-dom'; import { Grid } from './pages/Grid'; +import useDocketState from './state/docket'; const AppRoutes = () => { const { push } = useHistory(); @@ -9,6 +10,10 @@ const AppRoutes = () => { useEffect(() => { window.name = 'grid'; + const { fetchAllies, fetchCharges } = useDocketState.getState(); + fetchCharges(); + fetchAllies(); + Mousetrap.bind(['command+/', 'ctrl+/'], () => { push('/leap/search'); }); diff --git a/pkg/grid/src/components/AppInfo.tsx b/pkg/grid/src/components/AppInfo.tsx new file mode 100644 index 000000000..40f3b580c --- /dev/null +++ b/pkg/grid/src/components/AppInfo.tsx @@ -0,0 +1,131 @@ +import { chadIsRunning } from '@urbit/api/docket'; +import clipboardCopy from 'clipboard-copy'; +import React, { FC } from 'react'; +import cn from 'classnames'; +import { Vat } from '@urbit/api/hood'; +import { Button, PillButton } from './Button'; +import { Dialog, DialogClose, DialogContent, DialogTrigger } from './Dialog'; +import { DocketHeader } from './DocketHeader'; +import { Spinner } from './Spinner'; +import { VatMeta } from './VatMeta'; +import useDocketState, { App } from '../state/docket'; +import { getAppHref } from '../state/util'; +import { addRecentApp } from '../nav/search/Home'; +import { TreatyMeta } from './TreatyMeta'; + +type InstallStatus = 'uninstalled' | 'installing' | 'installed'; +interface AppInfoProps { + docket: App; + vat?: Vat; + className?: string; +} + +function getInstallStatus(docket: App): InstallStatus { + if (!('chad' in docket)) { + return 'uninstalled'; + } + if (chadIsRunning(docket.chad)) { + return 'installed'; + } + if ('install' in docket.chad) { + return 'installing'; + } + return 'uninstalled'; +} + +function getRemoteDesk(docket: App, vat?: Vat) { + if ('chad' in docket) { + const { ship, desk } = vat!.arak; + return [ship, desk]; + } + const { ship, desk } = docket; + return [ship, desk]; +} + +export const AppInfo: FC = ({ docket, vat, className }) => { + const installStatus = getInstallStatus(docket); + const [ship, desk] = getRemoteDesk(docket, vat); + + const installApp = async () => { + if (installStatus === 'installed') { + return; + } + await useDocketState.getState().installDocket(ship, desk); + }; + const copyApp = () => { + clipboardCopy(`web+urbitgraph://app/${ship}/${desk}`); + }; + + if (!docket) { + // TODO: maybe replace spinner with skeletons + return ( +
+ Loading... +
+ ); + } + + return ( +
+ +
+ {installStatus === 'installed' && ( + addRecentApp(docket)} + > + Open App + + )} + {installStatus !== 'installed' && ( + + + {installStatus === 'installing' ? ( + <> + + Installing... + + ) : ( + 'Get App' + )} + + +

Install “{docket.title}”

+

+ This application will be able to view and interact with the contents of your + Urbit. Only install if you trust the developer. +

+
+ + Cancel + + + Get “{docket.title}” + +
+
+
+ )} + + Copy App Link + +
+
+ {vat ? ( + <> +
+ + + ) : null} + {'chad' in docket ? null : ( + <> +
+ + + )} +
+ ); +}; diff --git a/pkg/grid/src/components/AppLink.tsx b/pkg/grid/src/components/AppLink.tsx new file mode 100644 index 000000000..01c6616bc --- /dev/null +++ b/pkg/grid/src/components/AppLink.tsx @@ -0,0 +1,72 @@ +import classNames from 'classnames'; +import React, { HTMLProps, ReactNode } from 'react'; +import { Link, LinkProps } from 'react-router-dom'; +import { App } from '../state/docket'; +import { getAppHref } from '../state/util'; + +type Sizes = 'xs' | 'small' | 'default'; +type LinkOrAnchorProps = { + [P in keyof LinkProps & + keyof HTMLProps]?: LinkProps[P] extends HTMLProps[P] + ? LinkProps[P] + : never; +}; + +export type AppLinkProps = Omit & { + app: App; + size?: Sizes; + selected?: boolean; + to?: (app: App) => LinkProps['to'] | undefined; +}; + +const sizeMap: Record = { + xs: 'w-6 h-6 mr-2 rounded', + small: 'w-8 h-8 mr-3 rounded-lg', + default: 'w-12 h-12 mr-3 rounded-lg' +}; + +export const AppLink = ({ + app, + to, + size = 'default', + selected = false, + className, + ...props +}: AppLinkProps) => { + const linkTo = to?.(app); + const linkClassnames = classNames( + 'flex items-center default-ring ring-offset-2 rounded-lg', + selected && 'ring-4', + className + ); + const link = (children: ReactNode) => + linkTo ? ( + + {children} + + ) : ( + + {children} + + ); + return link( + <> +
+ {app.image && ( + + )} +
+
+

{app.title}

+ {app.info && size === 'default' &&

{app.info}

} +
+ + ); +}; diff --git a/pkg/grid/src/components/AppList.tsx b/pkg/grid/src/components/AppList.tsx new file mode 100644 index 000000000..10aa69a2e --- /dev/null +++ b/pkg/grid/src/components/AppList.tsx @@ -0,0 +1,65 @@ +import React, { MouseEvent, useCallback } from 'react'; +import { Docket } from '@urbit/api'; +import classNames from 'classnames'; +import { MatchItem } from '../nav/Nav'; +import { useRecentsStore } from '../nav/search/Home'; +import { AppLink, AppLinkProps } from './AppLink'; + +type AppListProps = { + apps: T[]; + labelledBy: string; + matchAgainst?: MatchItem; + onClick?: (e: MouseEvent, app: Docket) => void; + listClass?: string; +} & Omit, 'app' | 'onClick'>; + +export function appMatches(target: Docket, match?: MatchItem): boolean { + if (!match) { + return false; + } + + const matchValue = match.display || match.value; + return target.title === matchValue; // TODO: need desk name or something || target.href === matchValue; +} + +export const AppList = ({ + apps, + labelledBy, + matchAgainst, + onClick, + listClass = 'space-y-8', + size = 'default', + ...props +}: AppListProps) => { + const addRecentApp = useRecentsStore((state) => state.addRecentApp); + const selected = useCallback((app: Docket) => appMatches(app, matchAgainst), [matchAgainst]); + + return ( +
    + {apps.map((app) => ( +
  • + { + addRecentApp(app); + if (onClick) { + onClick(e, app); + } + }} + /> +
  • + ))} +
+ ); +}; diff --git a/pkg/grid/src/components/Attribute.tsx b/pkg/grid/src/components/Attribute.tsx index 1b31fe74e..2fecabd5a 100644 --- a/pkg/grid/src/components/Attribute.tsx +++ b/pkg/grid/src/components/Attribute.tsx @@ -1,14 +1,16 @@ import React from 'react'; +import cn from 'classnames'; import { capitalize } from 'lodash-es'; interface AttributeProps { attr: string; children: React.ReactNode; title?: string; + className?: string; } -export const Attribute = ({ attr, children, title }: AttributeProps) => ( -
+export const Attribute = ({ attr, children, title, className }: AttributeProps) => ( +

{title || capitalize(attr)}

{children}

diff --git a/pkg/grid/src/components/Button.tsx b/pkg/grid/src/components/Button.tsx index e8f6c88eb..7d09b841a 100644 --- a/pkg/grid/src/components/Button.tsx +++ b/pkg/grid/src/components/Button.tsx @@ -2,7 +2,13 @@ import React from 'react'; import type * as Polymorphic from '@radix-ui/react-polymorphic'; import classNames from 'classnames'; -type ButtonVariant = 'primary' | 'secondary' | 'destructive'; +type ButtonVariant = + | 'primary' + | 'secondary' + | 'caution' + | 'destructive' + | 'alt-primary' + | 'alt-secondary'; type PolymorphicButton = Polymorphic.ForwardRefComponent< 'button', @@ -12,9 +18,12 @@ type PolymorphicButton = Polymorphic.ForwardRefComponent< >; const variants: Record = { - primary: 'text-white bg-blue-400', - secondary: 'text-blue-400 bg-blue-100', - destructive: 'text-white bg-red-400' + primary: 'text-white bg-black', + secondary: 'text-black bg-gray-100', + caution: 'text-white bg-orange-500', + destructive: 'text-white bg-red-400', + 'alt-primary': 'text-white bg-blue-400', + 'alt-secondary': 'text-blue-400 bg-blue-100' }; export const Button = React.forwardRef( diff --git a/pkg/grid/src/components/DocketHeader.tsx b/pkg/grid/src/components/DocketHeader.tsx index 924d58f9c..9401891e2 100644 --- a/pkg/grid/src/components/DocketHeader.tsx +++ b/pkg/grid/src/components/DocketHeader.tsx @@ -1,5 +1,6 @@ import React from 'react'; -import { Docket } from '../state/docket-types'; +import { Docket } from '@urbit/api/docket'; +import { DocketImage } from './DocketImage'; interface DocketHeaderProps { docket: Docket; @@ -8,22 +9,11 @@ interface DocketHeaderProps { export function DocketHeader(props: DocketHeaderProps) { const { docket, children } = props; - const { info, title, img, color } = docket; + const { info, title, image, color } = docket; return (
-
- {img && ( - - )} -
+

{title}

{info &&

{info}

} diff --git a/pkg/grid/src/components/DocketImage.tsx b/pkg/grid/src/components/DocketImage.tsx new file mode 100644 index 000000000..a1552b715 --- /dev/null +++ b/pkg/grid/src/components/DocketImage.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Docket } from '@urbit/api/docket'; +import cn from 'classnames'; + +interface DocketImageProps extends Pick { + className?: string; + sizing: 'small' | 'full'; +} + +export function DocketImage({ color, image, className = '', sizing = 'full' }: DocketImageProps) { + const sizingClass = + sizing === 'full' + ? 'w-full h-full md:w-full md:h-full rounded-md' + : 'w-12 h-12 md:w-20 md:h-20 rounded-xl'; + + return ( +
+ {image && ( + + )} +
+ ); +} diff --git a/pkg/grid/src/components/ProviderLink.tsx b/pkg/grid/src/components/ProviderLink.tsx new file mode 100644 index 000000000..c7c075b6c --- /dev/null +++ b/pkg/grid/src/components/ProviderLink.tsx @@ -0,0 +1,46 @@ +import classNames from 'classnames'; +import React from 'react'; +import { Link, LinkProps } from 'react-router-dom'; +import { Provider } from '@urbit/api'; +import { ShipName } from './ShipName'; + +export type ProviderLinkProps = Omit & { + provider: Provider; + small?: boolean; + selected?: boolean; + to?: (p: Provider) => LinkProps['to']; +}; + +export const ProviderLink = ({ + provider, + to, + selected = false, + small = false, + className, + ...props +}: ProviderLinkProps) => { + return ( + +
+ {/* TODO: Handle sigils */} +
+
+

{provider.nickname || }

+ {provider.status && !small &&

{provider.status}

} +
+ + ); +}; diff --git a/pkg/grid/src/components/ProviderList.tsx b/pkg/grid/src/components/ProviderList.tsx new file mode 100644 index 000000000..30bb2c8eb --- /dev/null +++ b/pkg/grid/src/components/ProviderList.tsx @@ -0,0 +1,63 @@ +import React, { MouseEvent, useCallback } from 'react'; +import { Provider } from '@urbit/api'; +import classNames from 'classnames'; +import { MatchItem } from '../nav/Nav'; +import { useRecentsStore } from '../nav/search/Home'; +import { ProviderLink, ProviderLinkProps } from './ProviderLink'; + +export type ProviderListProps = { + providers: Provider[]; + labelledBy: string; + matchAgainst?: MatchItem; + onClick?: (e: MouseEvent, p: Provider) => void; + listClass?: string; +} & Omit; + +export function providerMatches(target: Provider, match?: MatchItem): boolean { + if (!match) { + return false; + } + + const matchValue = match.display || match.value; + return target.nickname === matchValue || target.shipName === matchValue; +} + +export const ProviderList = ({ + providers, + labelledBy, + matchAgainst, + onClick, + listClass, + small = false, + ...props +}: ProviderListProps) => { + const addRecentDev = useRecentsStore((state) => state.addRecentDev); + const selected = useCallback( + (provider: Provider) => providerMatches(provider, matchAgainst), + [matchAgainst] + ); + + return ( +
    + {providers.map((p) => ( +
  • + { + addRecentDev(p); + if (onClick) { + onClick(e, p); + } + }} + /> +
  • + ))} +
+ ); +}; diff --git a/pkg/grid/src/components/ShipName.tsx b/pkg/grid/src/components/ShipName.tsx index 99c2a3feb..34f743023 100644 --- a/pkg/grid/src/components/ShipName.tsx +++ b/pkg/grid/src/components/ShipName.tsx @@ -5,16 +5,20 @@ type ShipNameProps = { } & HTMLAttributes; export const ShipName = ({ name, ...props }: ShipNameProps) => { - const parts = name.replace('~', '').split(/[_^-]/); + const parts = name.replace('~', '').split(/([_^-])/); return ( ~ {/* sig */} {parts[0]} - - - {/* hep */} - {parts[1]} + {parts.length > 1 && ( + <> + {parts[1]} + {/* hep */} + {parts[2]} + + )} ); }; diff --git a/pkg/grid/src/components/TreatyMeta.tsx b/pkg/grid/src/components/TreatyMeta.tsx index a9c0d5bbd..baa9d861a 100644 --- a/pkg/grid/src/components/TreatyMeta.tsx +++ b/pkg/grid/src/components/TreatyMeta.tsx @@ -1,6 +1,7 @@ import React from 'react'; -import { Treaty } from '../state/docket-types'; +import { Treaty } from '@urbit/api'; +import moment from 'moment'; import { Attribute } from './Attribute'; const meta = ['license', 'website', 'version'] as const; @@ -14,7 +15,7 @@ export function TreatyMeta(props: { treaty: Treaty }) { {ship}/{desk} - {JSON.stringify(cass)} + {moment(cass.da).format('YYYY.MM.DD')} {meta.map((d) => ( diff --git a/pkg/grid/src/components/VatMeta.tsx b/pkg/grid/src/components/VatMeta.tsx new file mode 100644 index 000000000..7ffc68d11 --- /dev/null +++ b/pkg/grid/src/components/VatMeta.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import moment from 'moment'; +import { Vat } from '@urbit/api/hood'; + +import { Attribute } from './Attribute'; + +export function VatMeta(props: { vat: Vat }) { + const { vat } = props; + const { desk, arak, cass, hash } = vat; + const { desk: foreignDesk, ship, next } = arak; + const pluralUpdates = next.length !== 1; + return ( +
+ + {ship}/{foreignDesk} + + + {moment(cass.da).format('YYYY.MM.DD')} + + + {hash} + + + %{desk} + + {next.length > 0 ? ( + + {next.length} update{pluralUpdates ? 's are' : ' is'} pending a System Update + + ) : null} +
+ ); +} diff --git a/pkg/grid/src/components/icons/Bullet.tsx b/pkg/grid/src/components/icons/Bullet.tsx index 700128256..a5a2075d7 100644 --- a/pkg/grid/src/components/icons/Bullet.tsx +++ b/pkg/grid/src/components/icons/Bullet.tsx @@ -2,6 +2,6 @@ import React from 'react'; export const Bullet = (props: React.SVGProps) => ( - + ); diff --git a/pkg/grid/src/components/icons/Elbow.tsx b/pkg/grid/src/components/icons/Elbow.tsx new file mode 100644 index 000000000..6b50598f2 --- /dev/null +++ b/pkg/grid/src/components/icons/Elbow.tsx @@ -0,0 +1,14 @@ +import React, { HTMLAttributes } from 'react'; + +type ElbowProps = HTMLAttributes; + +export const Elbow = (props: ElbowProps) => ( + + + +); diff --git a/pkg/grid/src/logic/useTreaty.ts b/pkg/grid/src/logic/useTreaty.ts deleted file mode 100644 index 1d6dfe319..000000000 --- a/pkg/grid/src/logic/useTreaty.ts +++ /dev/null @@ -1,39 +0,0 @@ -import clipboardCopy from 'clipboard-copy'; -import { pick } from 'lodash-es'; -import { useCallback, useEffect, useState } from 'react'; -import { useParams } from 'react-router-dom'; -import useDocketState from '../state/docket'; -import { Treaty } from '../state/docket-types'; -import { useAsyncCall } from './useAsyncCall'; - -export function useTreaty() { - const { ship, desk } = useParams<{ ship: string; desk: string }>(); - const { requestTreaty, installDocket } = useDocketState((s) => - pick(s, ['requestTreaty', 'installDocket']) - ); - const [treaty, setTreaty] = useState(); - - useEffect(() => { - async function getTreaty() { - setTreaty(await requestTreaty(ship, desk)); - } - - getTreaty(); - }, [ship, desk]); - - const copyApp = useCallback(async () => { - clipboardCopy(`${ship}/${desk}`); - }, [ship, desk]); - - const install = useCallback(() => installDocket(ship, desk), [ship, desk]); - const { status: installStatus, call: installApp } = useAsyncCall(install); - - return { - ship, - desk, - treaty, - installStatus, - installApp, - copyApp - }; -} diff --git a/pkg/grid/src/nav/Leap.tsx b/pkg/grid/src/nav/Leap.tsx index 489e376ac..396292ee5 100644 --- a/pkg/grid/src/nav/Leap.tsx +++ b/pkg/grid/src/nav/Leap.tsx @@ -10,7 +10,6 @@ import React, { useRef } from 'react'; import { Link, useHistory, useRouteMatch } from 'react-router-dom'; -import slugify from 'slugify'; import { Cross } from '../components/icons/Cross'; import { useDebounce } from '../logic/useDebounce'; import { MenuState, useLeapStore } from './Nav'; @@ -70,7 +69,12 @@ export const Leap = React.forwardRef(({ menu, dropdown, showClose, className }: const getMatch = useCallback( (value: string) => { - return matches.find((m) => m.display?.startsWith(value) || m.value.startsWith(value)); + const normValue = value.toLocaleLowerCase(); + return matches.find( + (m) => + m.display?.toLocaleLowerCase().startsWith(normValue) || + m.value.toLocaleLowerCase().startsWith(normValue) + ); }, [matches] ); @@ -129,13 +133,25 @@ export const Leap = React.forwardRef(({ menu, dropdown, showClose, className }: (e: FormEvent) => { e.preventDefault(); - const value = inputRef.current?.value.trim(); - - if (!value) { + if (selectedMatch?.href) { + window.open(selectedMatch.href, selectedMatch.value); return; } - const input = [slugify(getMatch(value)?.value || value)]; + if (!selectedMatch?.value) { + return; + } + + // TODO: evaluate if we still need this for manual entry + // const value = inputRef.current?.value.trim(); + + // if (!value) { + // return; + // } + + // const input = [getMatch(value)?.value || slugify(value)]; + + const input = [selectedMatch.value]; if (appsMatch) { input.unshift(match?.params.query || ''); } else { @@ -145,7 +161,7 @@ export const Leap = React.forwardRef(({ menu, dropdown, showClose, className }: navigateByInput(input.join('/')); useLeapStore.setState({ rawInput: '' }); }, - [match] + [match, selectedMatch] ); const onKeyDown = useCallback( @@ -155,7 +171,7 @@ export const Leap = React.forwardRef(({ menu, dropdown, showClose, className }: if (deletion && !rawInput && selection) { e.preventDefault(); - select(null, appsMatch ? undefined : match?.params.query); + select(null, appsMatch && !appsMatch.isExact ? undefined : match?.params.query); const pathBack = createPreviousPath(match?.url || ''); push(pathBack); } diff --git a/pkg/grid/src/nav/Nav.tsx b/pkg/grid/src/nav/Nav.tsx index b9df721cb..a566cefba 100644 --- a/pkg/grid/src/nav/Nav.tsx +++ b/pkg/grid/src/nav/Nav.tsx @@ -2,12 +2,13 @@ import { DialogContent } from '@radix-ui/react-dialog'; import * as Portal from '@radix-ui/react-portal'; import classNames from 'classnames'; import React, { FunctionComponent, useCallback, useEffect, useRef, useState } from 'react'; -import { Link, Route, Switch, useHistory } from 'react-router-dom'; +import { Route, Switch, useHistory } from 'react-router-dom'; import create from 'zustand'; import { Dialog } from '../components/Dialog'; import { Help } from './Help'; import { Leap } from './Leap'; import { Notifications } from './Notifications'; +import { NotificationsLink } from './NotificationsLink'; import { Search } from './Search'; import { SystemMenu } from './SystemMenu'; import { SystemPreferences } from './SystemPreferences'; @@ -15,6 +16,7 @@ import { SystemPreferences } from './SystemPreferences'; export interface MatchItem { value: string; display?: string; + href?: string; } interface LeapStore { @@ -40,6 +42,8 @@ export const useLeapStore = create((set) => ({ }) })); +window.leap = useLeapStore.getState; + export type MenuState = | 'closed' | 'search' @@ -47,6 +51,33 @@ export type MenuState = | 'help-and-support' | 'system-preferences'; +export function createNextPath(current: string, nextPart?: string): string { + let end = nextPart; + const parts = current.split('/').reverse(); + if (parts[1] === 'search') { + end = 'apps'; + } + + if (parts[0] === 'leap') { + end = `search/${nextPart}`; + } + + return `${current}/${end}`; +} + +export function createPreviousPath(current: string): string { + const parts = current.split('/'); + parts.pop(); + + if (parts[parts.length - 1] === 'leap') { + parts.push('search'); + } + if (parts[parts.length - 2] === 'apps') { + parts.pop(); + } + return parts.join('/'); +} + interface NavProps { menu?: MenuState; } @@ -58,11 +89,7 @@ export const Nav: FunctionComponent = ({ menu }) => { const dialogNavRef = useRef(null); const [systemMenuOpen, setSystemMenuOpen] = useState(false); const [dialogContentOpen, setDialogContentOpen] = useState(false); - const { selection, select } = useLeapStore((state) => ({ - selectedMatch: state.selectedMatch, - selection: state.selection, - select: state.select - })); + const select = useLeapStore((state) => state.select); const menuState = menu || 'closed'; const isOpen = menuState !== 'closed'; @@ -72,10 +99,8 @@ export const Nav: FunctionComponent = ({ menu }) => { if (!isOpen) { select(null); setDialogContentOpen(false); - } else { - inputRef.current?.focus(); } - }, [selection, isOpen]); + }, [isOpen]); const onOpen = useCallback( (event: Event) => { @@ -97,6 +122,15 @@ export const Nav: FunctionComponent = ({ menu }) => { } }, []); + const disableCloseWhenDropdownOpen = useCallback( + (e: Event) => { + if (systemMenuOpen) { + e.preventDefault(); + } + }, + [systemMenuOpen] + ); + return ( <> {/* Using portal so that we can retain the same nav items both in the dialog and in the base header */} @@ -107,14 +141,10 @@ export const Nav: FunctionComponent = ({ menu }) => { - - 3 - + = ({ menu }) => { -
+
diff --git a/pkg/grid/src/nav/Notifications.tsx b/pkg/grid/src/nav/Notifications.tsx index faee3838c..6fb2a4114 100644 --- a/pkg/grid/src/nav/Notifications.tsx +++ b/pkg/grid/src/nav/Notifications.tsx @@ -1,20 +1,64 @@ import React, { useEffect } from 'react'; +import { Link } from 'react-router-dom'; import { useLeapStore } from './Nav'; +import { Button } from '../components/Button'; +import { Notification } from '../state/hark-types'; +import { BasicNotification } from './notifications/BasicNotification'; +import { + BaseBlockedNotification, + RuntimeLagNotification +} from './notifications/SystemNotification'; +import { useNotifications } from '../state/notifications'; + +function renderNotification(notification: Notification, key: string) { + if (notification.type === 'system-updates-blocked') { + return ; + } + if (notification.type === 'runtime-lag') { + return ; + } + return ; +} + +const Empty = () => ( +
+ All clear! +
+); export const Notifications = () => { - const select = useLeapStore((state) => state.select); + const select = useLeapStore((s) => s.select); + const { notifications, systemNotifications, hasAnyNotifications } = useNotifications(); useEffect(() => { select('Notifications'); }, []); return ( -
-

Recent Apps

-
-
-

Recent Developers

-
+
+
+ + +
+ + {!hasAnyNotifications && } + {hasAnyNotifications && ( +
+ {notifications.map((n, index) => renderNotification(n, index.toString()))} + {systemNotifications.map((n, index) => + renderNotification(n, (notifications.length + index).toString()) + )} +
+ )}
); }; diff --git a/pkg/grid/src/nav/NotificationsLink.tsx b/pkg/grid/src/nav/NotificationsLink.tsx new file mode 100644 index 000000000..cecb7a636 --- /dev/null +++ b/pkg/grid/src/nav/NotificationsLink.tsx @@ -0,0 +1,55 @@ +import classNames from 'classnames'; +import React from 'react'; +import { Link, LinkProps } from 'react-router-dom'; +import { Bullet } from '../components/icons/Bullet'; +import { Notification } from '../state/hark-types'; +import { useNotifications } from '../state/notifications'; + +type NotificationsState = 'empty' | 'unread' | 'attention-needed'; + +function getNotificationsState( + notifications: Notification[], + systemNotifications: Notification[] +): NotificationsState { + if (systemNotifications.length > 0) { + return 'attention-needed'; + } + + // TODO: when real structure, this should be actually be unread not just existence + if (notifications.length > 0) { + return 'unread'; + } + + return 'empty'; +} + +type NotificationsLinkProps = Omit, 'to'> & { + isOpen: boolean; +}; + +export const NotificationsLink = ({ isOpen }: NotificationsLinkProps) => { + const { notifications, systemNotifications } = useNotifications(); + const state = getNotificationsState(notifications, systemNotifications); + + return ( + + {state === 'empty' && } + {state === 'unread' && notifications.length} + {state === 'attention-needed' && ( + + ! Attention needed + + )} + + ); +}; diff --git a/pkg/grid/src/nav/Search.tsx b/pkg/grid/src/nav/Search.tsx index b8890605d..455333b28 100644 --- a/pkg/grid/src/nav/Search.tsx +++ b/pkg/grid/src/nav/Search.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Route, RouteComponentProps, Switch } from 'react-router-dom'; -import { AppInfo } from './search/AppInfo'; +import { TreatyInfo } from './search/TreatyInfo'; import { Apps } from './search/Apps'; import { Home } from './search/Home'; import { Providers } from './search/Providers'; @@ -12,7 +12,7 @@ type SearchProps = RouteComponentProps<{ export const Search = ({ match }: SearchProps) => { return ( - + diff --git a/pkg/grid/src/nav/SystemMenu.tsx b/pkg/grid/src/nav/SystemMenu.tsx index 1bee8dc8e..b901dd368 100644 --- a/pkg/grid/src/nav/SystemMenu.tsx +++ b/pkg/grid/src/nav/SystemMenu.tsx @@ -4,6 +4,7 @@ import clipboardCopy from 'clipboard-copy'; import React, { HTMLAttributes, useCallback, useState } from 'react'; import { Link } from 'react-router-dom'; import { Adjust } from '../components/icons/Adjust'; +import { disableDefault } from '../state/util'; type SystemMenuProps = HTMLAttributes & { open: boolean; @@ -36,7 +37,7 @@ export const SystemMenu = ({ open, setOpen, className, showOverlay = false }: Sy e.preventDefault()} + onCloseAutoFocus={disableDefault} sideOffset={12} className="dropdown min-w-64 p-6 font-semibold text-gray-500 bg-white" > diff --git a/pkg/grid/src/nav/notifications/BasicNotification.tsx b/pkg/grid/src/nav/notifications/BasicNotification.tsx new file mode 100644 index 000000000..64e9741c7 --- /dev/null +++ b/pkg/grid/src/nav/notifications/BasicNotification.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { BasicNotification as BasicNotificationType } from '../../state/hark-types'; + +interface BasicNotificationProps { + notification: BasicNotificationType; +} + +export const BasicNotification = ({ notification }: BasicNotificationProps) => ( +
{notification.message}
+); diff --git a/pkg/grid/src/nav/notifications/NotificationButton.tsx b/pkg/grid/src/nav/notifications/NotificationButton.tsx new file mode 100644 index 000000000..dbd4706d5 --- /dev/null +++ b/pkg/grid/src/nav/notifications/NotificationButton.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import type * as Polymorphic from '@radix-ui/react-polymorphic'; +import classNames from 'classnames'; + +type NotificationButtonVariant = 'primary' | 'secondary' | 'destructive'; + +type PolymorphicButton = Polymorphic.ForwardRefComponent< + 'button', + { + variant?: NotificationButtonVariant; + } +>; + +const variants: Record = { + primary: 'text-blue bg-white', + secondary: 'text-black bg-white', + destructive: 'text-red-400 bg-white' +}; + +export const NotificationButton = React.forwardRef( + ({ as: Comp = 'button', variant = 'primary', children, className, ...props }, ref) => { + return ( + + {children} + + ); + } +) as PolymorphicButton; diff --git a/pkg/grid/src/nav/notifications/SystemNotification.tsx b/pkg/grid/src/nav/notifications/SystemNotification.tsx new file mode 100644 index 000000000..ee541a5ef --- /dev/null +++ b/pkg/grid/src/nav/notifications/SystemNotification.tsx @@ -0,0 +1,143 @@ +import { pick } from 'lodash-es'; +import React, { useCallback } from 'react'; +import { kilnSuspend } from '@urbit/api/hood'; +import { AppList } from '../../components/AppList'; +import { Button } from '../../components/Button'; +import { Dialog, DialogClose, DialogContent, DialogTrigger } from '../../components/Dialog'; +import { Elbow } from '../../components/icons/Elbow'; +import api from '../../state/api'; +import { useCharges } from '../../state/docket'; +import { BaseBlockedNotification as BaseBlockedNotificationType } from '../../state/hark-types'; + +import { NotificationButton } from './NotificationButton'; +import { disableDefault } from '../../state/util'; + +interface BaseBlockedNotificationProps { + notification: BaseBlockedNotificationType; +} + +export const RuntimeLagNotification = () => ( +
+
+
+ + Landscape +
+
+ +

The runtime blocked a System Update

+
+
+
+

+ In order to proceed with the System Update, you’ll need to upgrade the runtime. If you are + using a hosted ship, you should contact your hosting provider. +

+
+
+); + +export const BaseBlockedNotification = ({ notification }: BaseBlockedNotificationProps) => { + const { desks } = notification; + const charges = useCharges(); + const blockedCharges = Object.values(pick(charges, desks)); + const count = blockedCharges.length; + + const handlePauseOTAs = useCallback(() => {}, []); + + const handleArchiveApps = useCallback(async () => { + await Promise.all(desks.map((d) => api.poke(kilnSuspend(d)))); + // TODO: retrigger OTA? + }, [desks]); + + return ( +
+
+
+ + Landscape +
+
+ +

The following ({count}) apps blocked a System Update:

+
+
+ +
+

+ In order to proceed with the System Update, you’ll need to temporarily archive these apps, + which will render them unusable, but with data intact. +

+

+ Archived apps will automatically un-archive and resume operation when their developer + provides an app update. +

+
+
+ + Dismiss + +

Skip System Update

+

+ Skipping the application fo an incoming System Update will grant you the ability to + continue using incompatible apps at the cost of an urbit that's not up to date. +

+

+ You can choose to apply System Updates from System Preferences any time.{' '} + + Learn More + +

+
+ + Cancel + + + Pause OTAs + +
+
+
+ + + Archive ({count}) apps and Apply System Update + + +

Archive ({count}) Apps and Apply System Update

+

+ The following apps will be archived until their developer provides a compatible update + to your system. +

+ +
+ + Cancel + + + Archive Apps + +
+
+
+
+
+ ); +}; diff --git a/pkg/grid/src/nav/preferences/usePreferencesStore.ts b/pkg/grid/src/nav/preferences/usePreferencesStore.ts index 3c342f941..c2fbf2133 100644 --- a/pkg/grid/src/nav/preferences/usePreferencesStore.ts +++ b/pkg/grid/src/nav/preferences/usePreferencesStore.ts @@ -1,5 +1,5 @@ import create from 'zustand'; -import { fakeRequest } from '../../state/mock-data'; +import { fakeRequest } from '../../state/util'; const useMockData = import.meta.env.MODE === 'mock'; diff --git a/pkg/grid/src/nav/search/AppInfo.tsx b/pkg/grid/src/nav/search/AppInfo.tsx deleted file mode 100644 index 4797bf6e1..000000000 --- a/pkg/grid/src/nav/search/AppInfo.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React, { useEffect } from 'react'; -import { PillButton } from '../../components/Button'; -import { DocketHeader } from '../../components/DocketHeader'; -import { ShipName } from '../../components/ShipName'; -import { Spinner } from '../../components/Spinner'; -import { TreatyMeta } from '../../components/TreatyMeta'; -import { useTreaty } from '../../logic/useTreaty'; -import { useLeapStore } from '../Nav'; -import { useCharges } from '../../state/docket'; - -export const AppInfo = () => { - const select = useLeapStore((state) => state.select); - const { ship, desk, treaty, installStatus, copyApp, installApp } = useTreaty(); - const charges = useCharges(); - const installed = (charges || {})[desk] || installStatus === 'success'; - - useEffect(() => { - select( - <> - Apps by : {treaty?.title} - - ); - }, [treaty?.title]); - - if (!treaty) { - // TODO: maybe replace spinner with skeletons - return ( -
- Loading... -
- ); - } - - return ( -
- -
- {installed && ( - - Open App - - )} - {!installed && ( - - {installStatus === 'initial' && 'Get App'} - {installStatus === 'loading' && ( - <> - - Installing... - - )} - - )} - - Copy App Link - -
-
-
- -
- ); -}; diff --git a/pkg/grid/src/nav/search/Apps.tsx b/pkg/grid/src/nav/search/Apps.tsx index 2beb67378..da5e58bb2 100644 --- a/pkg/grid/src/nav/search/Apps.tsx +++ b/pkg/grid/src/nav/search/Apps.tsx @@ -1,15 +1,25 @@ -import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import { Link, RouteComponentProps } from 'react-router-dom'; +import React, { useEffect, useMemo } from 'react'; +import { RouteComponentProps } from 'react-router-dom'; import fuzzy from 'fuzzy'; import slugify from 'slugify'; -import classNames from 'classnames'; import { ShipName } from '../../components/ShipName'; -import useDocketState from '../../state/docket'; -import { Treaty } from '../../state/docket-types'; -import { useLeapStore } from '../Nav'; +import useDocketState, { App, useAllyTreaties } from '../../state/docket'; +import { MatchItem, useLeapStore } from '../Nav'; +import { AppList } from '../../components/AppList'; +import { getAppHref } from '../../state/util'; type AppsProps = RouteComponentProps<{ ship: string }>; +export function appMatch(app: App, includeHref = false): MatchItem { + const match: MatchItem = { value: app.desk, display: app.title }; + + if (includeHref) { + match.href = getAppHref(app.href); + } + + return match; +} + export const Apps = ({ match }: AppsProps) => { const { searchInput, selectedMatch, select } = useLeapStore((state) => ({ searchInput: state.searchInput, @@ -17,66 +27,51 @@ export const Apps = ({ match }: AppsProps) => { selectedMatch: state.selectedMatch })); const provider = match?.params.ship; - const fetchProviderTreaties = useDocketState((s) => s.fetchProviderTreaties); - const [treaties, setTreaties] = useState(); - const results = useMemo( - () => - treaties - ? fuzzy - .filter( - searchInput, - treaties.map((t) => t.title) - ) - .sort((a, b) => { - const left = a.string.startsWith(searchInput) ? a.score + 1 : a.score; - const right = b.string.startsWith(searchInput) ? b.score + 1 : b.score; + const treaties = useAllyTreaties(provider); + const results = useMemo(() => { + if (!treaties) { + return undefined; + } + const values = Object.values(treaties); + return fuzzy + .filter( + searchInput, + values.map((v) => v.title) + ) + .sort((a, b) => { + const left = a.string.startsWith(searchInput) ? a.score + 1 : a.score; + const right = b.string.startsWith(searchInput) ? b.score + 1 : b.score; - return right - left; - }) - .map((result) => treaties[result.index]) - : undefined, - [treaties, searchInput] - ); + return right - left; + }) + .map((result) => values[result.index]); + }, [treaties, searchInput]); const count = results?.length; useEffect(() => { + const { fetchAllyTreaties } = useDocketState.getState(); + fetchAllyTreaties(provider); select( <> Apps by ); - }, []); + }, [provider]); useEffect(() => { if (results) { useLeapStore.setState({ - matches: results.map((treaty) => ({ value: treaty.desk, display: treaty.title })) + matches: results.map((r) => appMatch(r)) }); } }, [results]); useEffect(() => { - async function getTreaties() { - setTreaties(await fetchProviderTreaties(provider)); - } - if (provider) { - getTreaties(); + useDocketState.getState().fetchAllyTreaties(provider); } }, [provider]); - const isSelected = useCallback( - (target: Treaty) => { - if (!selectedMatch) { - return false; - } - - const matchValue = selectedMatch.display || selectedMatch.value; - return target.title === matchValue || target.desk === matchValue; - }, - [selectedMatch] - ); - return (
@@ -88,41 +83,12 @@ export const Apps = ({ match }: AppsProps) => {

{results && ( -
    - {results.map((app) => ( -
  • - -
    - {app.img && ( - - )} -
    -
    -

    {app.title}

    - {app.info &&

    {app.info}

    } -
    - -
  • - ))} -
+ `${match?.path.replace(':ship', provider)}/${app.ship}/${slugify(app.desk)}`} + /> )}

That's it!

diff --git a/pkg/grid/src/nav/search/Home.tsx b/pkg/grid/src/nav/search/Home.tsx index c2880532c..35aa4177d 100644 --- a/pkg/grid/src/nav/search/Home.tsx +++ b/pkg/grid/src/nav/search/Home.tsx @@ -1,13 +1,136 @@ -import React from 'react'; +import produce from 'immer'; +import create from 'zustand'; +import React, { useEffect } from 'react'; +import { persist } from 'zustand/middleware'; +import { take } from 'lodash-es'; +import { Provider } from '@urbit/api'; +import { MatchItem, useLeapStore } from '../Nav'; +import { appMatch } from './Apps'; +import { providerMatch } from './Providers'; +import { AppList } from '../../components/AppList'; +import { ProviderList } from '../../components/ProviderList'; +import { AppLink } from '../../components/AppLink'; +import { ShipName } from '../../components/ShipName'; +import { ProviderLink } from '../../components/ProviderLink'; +import { App, useCharges } from '../../state/docket'; + +interface RecentsStore { + recentApps: App[]; + recentDevs: Provider[]; + addRecentApp: (app: App) => void; + addRecentDev: (dev: Provider) => void; +} + +export const useRecentsStore = create( + persist( + (set) => ({ + recentApps: [], + recentDevs: [], + addRecentApp: (app) => { + set( + produce((draft: RecentsStore) => { + const hasApp = draft.recentApps.find((a) => a.desk === app.desk); + if (!hasApp) { + draft.recentApps.unshift(app); + } + + draft.recentApps = take(draft.recentApps, 3); + }) + ); + }, + addRecentDev: (dev) => { + set( + produce((draft: RecentsStore) => { + const hasDev = draft.recentDevs.find((p) => p.shipName === dev.shipName); + if (!hasDev) { + draft.recentDevs.unshift(dev); + } + + draft.recentDevs = take(draft.recentDevs, 3); + }) + ); + } + }), + { + whitelist: ['recentApps', 'recentDevs'], + name: 'recents-store' + } + ) +); + +window.recents = useRecentsStore.getState; + +export function addRecentDev(dev: Provider) { + return useRecentsStore.getState().addRecentDev(dev); +} + +export function addRecentApp(app: App) { + return useRecentsStore.getState().addRecentApp(app); +} export const Home = () => { + const selectedMatch = useLeapStore((state) => state.selectedMatch); + const { recentApps, recentDevs } = useRecentsStore(); + const charges = useCharges(); + const groups = charges?.groups; + const zod = { shipName: '~zod' }; + + useEffect(() => { + const apps = recentApps.map((app) => appMatch(app, true)); + const devs = recentDevs.map(providerMatch); + + useLeapStore.setState({ + matches: ([] as MatchItem[]).concat(apps, devs) + }); + }, [recentApps, recentDevs]); + return ( -
-

Recent Apps

-
-
-

Recent Developers

-
+
+

+ Recent Apps +

+ {recentApps.length === 0 && ( +
+

Apps you use will be listed here, in the order you used them.

+

You can click/tap/keyboard on a listed app to open it.

+ {groups && ( + addRecentApp({ ...groups, desk: 'groups' })} + /> + )} +
+ )} + {recentApps.length > 0 && ( + + )} +
+

+ Recent Developers +

+ {recentDevs.length === 0 && ( +
+

Urbit app developers you search for will be listed here.

+

+ Try out app discovery by visiting below. +

+ addRecentDev(zod)} /> +
+ )} + {recentDevs.length > 0 && ( + + )}
); }; diff --git a/pkg/grid/src/nav/search/Providers.tsx b/pkg/grid/src/nav/search/Providers.tsx index 18e1585d1..f605e8383 100644 --- a/pkg/grid/src/nav/search/Providers.tsx +++ b/pkg/grid/src/nav/search/Providers.tsx @@ -1,30 +1,33 @@ +import React, { useEffect, useMemo } from 'react'; +import { RouteComponentProps } from 'react-router-dom'; import fuzzy from 'fuzzy'; -import classNames from 'classnames'; -import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import { Link, RouteComponentProps } from 'react-router-dom'; -import { ShipName } from '../../components/ShipName'; -import { Provider } from '../../state/docket-types'; -import useDocketState from '../../state/docket'; -import { useLeapStore } from '../Nav'; +import { Provider } from '@urbit/api'; +import { MatchItem, useLeapStore } from '../Nav'; +import { useAllies } from '../../state/docket'; +import { ProviderList } from '../../components/ProviderList'; type ProvidersProps = RouteComponentProps<{ ship: string }>; +export function providerMatch(provider: Provider | string): MatchItem { + if (typeof provider === 'string') { + return { value: provider, display: provider }; + } + + return { value: provider.shipName, display: provider.nickname }; +} + export const Providers = ({ match }: ProvidersProps) => { - const { selectedMatch, select } = useLeapStore((state) => ({ - select: state.select, - selectedMatch: state.selectedMatch - })); + const selectedMatch = useLeapStore((state) => state.selectedMatch); const provider = match?.params.ship; - const fetchProviders = useDocketState((s) => s.fetchProviders); - const [providers, setProviders] = useState(); + const allies = useAllies(); const search = provider || ''; const results = useMemo( () => - providers + allies ? fuzzy .filter( search, - providers.map((p) => p.shipName + (p.nickname || '')) + Object.entries(allies).map(([ship]) => ship) ) .sort((a, b) => { const left = a.string.startsWith(search) ? a.score + 1 : a.score; @@ -32,40 +35,19 @@ export const Providers = ({ match }: ProvidersProps) => { return right - left; }) - .map((el) => providers[el.index]) + .map((el) => ({ shipName: el.original })) : [], - [providers, search] + [allies, search] ); const count = results?.length; - useEffect(() => { - async function getProviders() { - setProviders(await fetchProviders(provider)); - } - - select(null, provider); - getProviders(); - }, [provider]); - useEffect(() => { if (results) { useLeapStore.setState({ - matches: results.map((p) => ({ value: p.shipName, display: p.nickname })) + matches: results.map(providerMatch) }); } - }, [JSON.stringify(results)]); - - const isSelected = useCallback( - (target: Provider) => { - if (!selectedMatch) { - return false; - } - - const matchValue = selectedMatch.display || selectedMatch.value; - return target.nickname === matchValue || target.shipName === matchValue; - }, - [selectedMatch] - ); + }, [results]); return (
@@ -76,32 +58,7 @@ export const Providers = ({ match }: ProvidersProps) => {

{results && ( -
    - {results.map((p) => ( -
  • - -
    - {/* TODO: Handle sigils */} -
    -
    -

    {p.nickname || }

    - {p.status &&

    {p.status}

    } -
    - -
  • - ))} -
+ )}

That's it!

diff --git a/pkg/grid/src/nav/search/TreatyInfo.tsx b/pkg/grid/src/nav/search/TreatyInfo.tsx new file mode 100644 index 000000000..c9710d569 --- /dev/null +++ b/pkg/grid/src/nav/search/TreatyInfo.tsx @@ -0,0 +1,33 @@ +import React, { useEffect } from 'react'; +import { useParams } from 'react-router-dom'; +import { AppInfo } from '../../components/AppInfo'; +import { ShipName } from '../../components/ShipName'; +import { useCharge, useTreaty } from '../../state/docket'; +import { useVat } from '../../state/kiln'; +import { useLeapStore } from '../Nav'; + +export const TreatyInfo = () => { + const select = useLeapStore((state) => state.select); + const { ship, host, desk } = useParams<{ ship: string; host: string; desk: string }>(); + const treaty = useTreaty(host, desk); + const vat = useVat(desk); + const charge = useCharge(desk); + + useEffect(() => { + select( + <> + Apps by : {treaty?.title} + + ); + }, [treaty?.title]); + + if (!treaty) { + // TODO: maybe replace spinner with skeletons + return ( +
+ Loading... +
+ ); + } + return ; +}; diff --git a/pkg/grid/src/pages/Grid.tsx b/pkg/grid/src/pages/Grid.tsx index d16879ba5..cf7a0a410 100644 --- a/pkg/grid/src/pages/Grid.tsx +++ b/pkg/grid/src/pages/Grid.tsx @@ -1,38 +1,50 @@ -import { map, pick } from 'lodash-es'; +import { map, omit } from 'lodash-es'; import React, { FunctionComponent, useEffect } from 'react'; import { Route, RouteComponentProps } from 'react-router-dom'; import { MenuState, Nav } from '../nav/Nav'; -import useDocketState from '../state/docket'; +import useDocketState, { useCharges } from '../state/docket'; +import { useKilnState } from '../state/kiln'; import { RemoveApp } from '../tiles/RemoveApp'; import { SuspendApp } from '../tiles/SuspendApp'; import { Tile } from '../tiles/Tile'; +import { TileInfo } from '../tiles/TileInfo'; type GridProps = RouteComponentProps<{ menu?: MenuState; }>; export const Grid: FunctionComponent = ({ match }) => { - const { charges, fetchCharges } = useDocketState((s) => pick(s, ['charges', 'fetchCharges'])); + const charges = useCharges(); const chargesLoaded = Object.keys(charges).length > 0; useEffect(() => { + const { fetchCharges, fetchAllies } = useDocketState.getState(); + const { fetchVats, fetchLag } = useKilnState.getState(); fetchCharges(); + fetchAllies(); + fetchVats(); + fetchLag(); }, []); return (
-
+
-
+
{!chargesLoaded && Loading...} {chargesLoaded && ( -
+
{charges && - map(charges, (charge, desk) => )} + map(omit(charges, window.desk), (charge, desk) => ( + + ))}
)} + + + diff --git a/pkg/grid/src/state/api.ts b/pkg/grid/src/state/api.ts index 1051d8aff..18e4d5001 100644 --- a/pkg/grid/src/state/api.ts +++ b/pkg/grid/src/state/api.ts @@ -8,13 +8,15 @@ declare global { const api = import.meta.env.MODE === 'mock' - ? { - poke: () => {}, - subscribe: () => {}, - subscribeOnce: () => {}, - ship: '' - } + ? ({ + poke: async () => {}, + subscribe: async () => {}, + subscribeOnce: async () => {}, + ship: '', + scry: async () => {} + } as unknown as Urbit) : new Urbit('', ''); -api.ship = window.ship; +api.ship = import.meta.env.MODE === 'mock' ? 'dopzod' : window.ship; + export default api; diff --git a/pkg/grid/src/state/docket-types.ts b/pkg/grid/src/state/docket-types.ts deleted file mode 100644 index 020b496cf..000000000 --- a/pkg/grid/src/state/docket-types.ts +++ /dev/null @@ -1,35 +0,0 @@ -export type DeskStatus = 'active' | 'suspended'; - -export interface Docket { - title: string; - info?: string; - color: string; - base: string; - website: string; - license: string; - version: string; - - // yet to be implemented - img?: string; - status: DeskStatus; -} - -export interface Treaty extends Docket { - ship: string; - desk: string; - cass: string; - hash: string; -} - -export interface Provider { - shipName: string; - nickname?: string; - status?: string; - treaties?: string[]; -} - -export type Dockets = Record; - -export type Treaties = Record; - -export type Providers = Record; diff --git a/pkg/grid/src/state/docket.ts b/pkg/grid/src/state/docket.ts index 2f15fc893..966d7780c 100644 --- a/pkg/grid/src/state/docket.ts +++ b/pkg/grid/src/state/docket.ts @@ -1,82 +1,77 @@ -import fuzzy from 'fuzzy'; import create from 'zustand'; import produce from 'immer'; -import { useCallback } from 'react'; -import { omit } from 'lodash-es'; +import { useCallback, useEffect } from 'react'; +import { omit, pick } from 'lodash-es'; +import { + Allies, + Charge, + ChargeUpdateInitial, + scryAllies, + scryAllyTreaties, + scryCharges, + Treaty, + Docket, + Treaties, + chadIsRunning, + AllyUpdateIni, + TreatyUpdateIni, + docketInstall, + ChargeUpdate +} from '@urbit/api/docket'; +import { kilnRevive, kilnSuspend } from '@urbit/api/hood'; import api from './api'; -import { Treaty, Dockets, Docket, Provider, Treaties, Providers } from './docket-types'; -import { fakeRequest, mockProviders, mockTreaties } from './mock-data'; +import { mockAllies, mockCharges, mockTreaties } from './mock-data'; +import { fakeRequest, useMockData } from './util'; -const useMockData = import.meta.env.MODE === 'mock'; - -interface ChargesResponse { - initial: Dockets; +export interface ChargeWithDesk extends Charge { + desk: string; } +export interface ChargesWithDesks { + [ref: string]: ChargeWithDesk; +} + +export type App = Treaty | ChargeWithDesk; + interface DocketState { - charges: Dockets; + charges: ChargesWithDesks; treaties: Treaties; - providers: Providers; + allies: Allies; fetchCharges: () => Promise; requestTreaty: (ship: string, desk: string) => Promise; - fetchProviders: (query?: string) => Promise; - fetchProviderTreaties: (provider: string) => Promise; + fetchAllies: () => Promise; + fetchAllyTreaties: (ally: string) => Promise; toggleDocket: (desk: string) => Promise; installDocket: (ship: string, desk: string) => Promise; uninstallDocket: (desk: string) => Promise; } -const stableTreatyMap = new Map(); - const useDocketState = create((set, get) => ({ fetchCharges: async () => { - const dockets = useMockData - ? await fakeRequest(mockTreaties) - : ((await (await fetch('/~/scry/docket/charges.json')).json()) as ChargesResponse).initial; + const charg = useMockData + ? await fakeRequest(mockCharges) + : (await api.scry(scryCharges)).initial; - const charges = normalizeDockets(dockets); + const charges = Object.entries(charg).reduce((obj: ChargesWithDesks, [key, value]) => { + // eslint-disable-next-line no-param-reassign + obj[key] = normalizeDocket(value as ChargeWithDesk, key); + return obj; + }, {}); set({ charges }); }, - fetchProviders: async (query?: string) => { - const providers = Object.values(mockProviders); - const searchTexts = providers.map((p) => p.shipName + (p.nickname || '')); - return fakeRequest(fuzzy.filter(query || '', searchTexts).map((el) => providers[el.index])); + fetchAllies: async () => { + const allies = useMockData ? mockAllies : (await api.scry(scryAllies)).ini; + set({ allies }); + return allies; }, - fetchProviderTreaties: async (provider: string) => { - const { treaties, providers } = get(); - const dev = providers[provider]; - const treatyList = Object.values(treaties); - - if (dev.treaties) { - return dev.treaties.map((key) => treaties[key]); - } - - if (!stableTreatyMap.has(provider)) { - stableTreatyMap.set( - provider, - treatyList.filter(() => !!Math.round(Math.random())) - ); - } - - const providerTreaties = stableTreatyMap.get(provider) || []; - - set( - produce((draft: DocketState) => { - if (!draft.providers[provider].treaties) { - draft.providers[provider].treaties = []; - } - - providerTreaties.forEach((treaty) => { - // may need to do this when not mock data - // const key = `${provider}/${treaty.desk}`; - // draft.treaties[key] = treaty; - draft.providers[provider].treaties?.push(treaty.desk); - }); - }) - ); - - return fakeRequest(providerTreaties); + fetchAllyTreaties: async (ally: string) => { + let treaties = useMockData + ? mockTreaties + : (await api.scry(scryAllyTreaties(ally))).ini; + treaties = normalizeDockets(treaties); + set((s) => ({ treaties: { ...s.treaties, ...treaties } })); + return treaties; }, requestTreaty: async (ship: string, desk: string) => { const { treaties } = get(); @@ -91,104 +86,104 @@ const useDocketState = create((set, get) => ({ } const result = await api.subscribeOnce('docket', `/treaty/${key}`, 20000); - const treaty = { ...normalizeDocket(result), ship, desk }; + const treaty = { ...normalizeDocket(result, desk), ship }; set((state) => ({ treaties: { ...state.treaties, [key]: treaty } })); return treaty; }, installDocket: async (ship: string, desk: string) => { + const treaty = get().treaties[`${ship}/${desk}`]; + if (!treaty) { + throw new Error('Bad install'); + } if (useMockData) { - const treaties = await fakeRequest(mockTreaties); - const docket = treaties[desk]; - set((state) => addCharge(state, { desk, docket })); + set((state) => addCharge(state, desk, { ...treaty, chad: { install: null } })); + await new Promise((res) => setTimeout(() => res(), 5000)); + set((state) => addCharge(state, desk, { ...treaty, chad: { glob: null } })); } - return api.poke({ - app: 'hood', - mark: 'kiln-install', - json: { - ship, - desk, - local: desk - } - }); + return api.poke(docketInstall(ship, desk)); }, uninstallDocket: async (desk: string) => { + set((state) => delCharge(state, desk)); if (useMockData) { - set((state) => delCharge(state, desk)); + return; } - - return api.poke({ + await api.poke({ app: 'docket', mark: 'docket-uninstall', json: desk }); }, toggleDocket: async (desk: string) => { - set( - produce((draft) => { - const docket = draft.charges[desk]; - docket.status = docket.status === 'active' ? 'suspended' : 'active'; - }) - ); + if (useMockData) { + set( + produce((draft) => { + const charge = draft.charges[desk]; + charge.chad = chadIsRunning(charge.chad) ? { suspend: null } : { glob: null }; + }) + ); + } + const { charges } = get(); + const charge = charges[desk]; + if (!charge) { + return; + } + const suspended = 'suspend' in charge.chad; + if (suspended) { + await api.poke(kilnRevive(desk)); + } else { + await api.poke(kilnSuspend(desk)); + } }, treaties: useMockData ? normalizeDockets(mockTreaties) : {}, charges: {}, - providers: useMockData ? mockProviders : {}, + allies: useMockData ? mockAllies : {}, set })); -function normalizeDocket(docket: T): T { +function normalizeDocket(docket: T, desk: string): T { + const color = docket?.color?.startsWith('#') + ? docket.color + : `#${docket.color.slice(2).replace('.', '')}`.toUpperCase(); + return { ...docket, - status: docket.status || 'active', - color: `#${docket.color.slice(2).replace('.', '')}`.toUpperCase() + desk, + color }; } function normalizeDockets(dockets: Record): Record { return Object.entries(dockets).reduce((obj: Record, [key, value]) => { // eslint-disable-next-line no-param-reassign - obj[key] = normalizeDocket(value); + obj[key] = normalizeDocket(value, key); return obj; }, {}); } -interface AddDockEvent { - 'add-dock': { - desk: string; - docket: Docket; - }; +function addCharge(state: DocketState, desk: string, charge: Charge) { + return { charges: { ...state.charges, [desk]: normalizeDocket(charge as ChargeWithDesk, desk) } }; } -interface DelDockEvent { - 'del-dock': string; -} - -type DocketEvent = AddDockEvent | DelDockEvent; - -function addCharge(state: DocketState, { desk, docket }: AddDockEvent['add-dock']) { - return { charges: { ...state.charges, [desk]: normalizeDocket(docket) } }; -} - -function delCharge(state: DocketState, desk: DelDockEvent['del-dock']) { +function delCharge(state: DocketState, desk: string) { return { charges: omit(state.charges, desk) }; } api.subscribe({ app: 'docket', path: '/charges', - event: (data: DocketEvent) => { + event: (data: ChargeUpdate) => { useDocketState.setState((state) => { - console.log(data); - - if ('add-dock' in data) { - return addCharge(state, data['add-dock']); + if ('add-charge' in data) { + const { desk, charge } = data['add-charge']; + return addCharge(state, desk, charge); } - if ('del-dock' in data) { - return delCharge(state, data['del-dock']); + if ('del-charge' in data) { + const desk = data['del-charge']; + return delCharge(state, desk); } return { charges: state.charges }; @@ -197,7 +192,7 @@ api.subscribe({ }); const selCharges = (s: DocketState) => { - return omit(s.charges, 'grid'); + return s.charges; }; export function useCharges() { @@ -213,4 +208,47 @@ export function useRequestDocket() { return useDocketState(selRequest); } +const selAllies = (s: DocketState) => s.allies; +export function useAllies() { + return useDocketState(selAllies); +} + +export function useAllyTreaties(ship: string) { + useEffect(() => { + useDocketState.getState().fetchAllyTreaties(ship); + }, [ship]); + + return useDocketState( + useCallback( + (s) => { + const charter = s.allies[ship]; + return pick(s.treaties, ...(charter || [])); + }, + [ship] + ) + ); +} + +export function useTreaty(host: string, desk: string) { + return useDocketState( + useCallback( + (s) => { + const ref = `${host}/${desk}`; + return s.treaties[ref]; + }, + [host, desk] + ) + ); +} + +export function allyForTreaty(ship: string, desk: string) { + const ref = `${ship}/${desk}`; + const { allies } = useDocketState.getState(); + const ally = Object.entries(allies).find(([, allied]) => allied.includes(ref))?.[0]; + return ally; +} + +// xx useful for debugging +window.docket = useDocketState.getState; + export default useDocketState; diff --git a/pkg/grid/src/state/hark-types.ts b/pkg/grid/src/state/hark-types.ts new file mode 100644 index 000000000..e9d54636f --- /dev/null +++ b/pkg/grid/src/state/hark-types.ts @@ -0,0 +1,22 @@ +/** + * I know this doesn't match our current hark type scheme, but since we're talking + * about changing that I decided to just throw something together to at least test + * this flow for updates. + */ + +export interface RuntimeLagNotification { + type: 'runtime-lag'; +} + +export interface BaseBlockedNotification { + type: 'system-updates-blocked'; + desks: string[]; +} + +export interface BasicNotification { + type: 'basic'; + time: string; + message: string; +} + +export type Notification = BasicNotification | BaseBlockedNotification | RuntimeLagNotification; diff --git a/pkg/grid/src/state/hark.ts b/pkg/grid/src/state/hark.ts new file mode 100644 index 000000000..519c661bd --- /dev/null +++ b/pkg/grid/src/state/hark.ts @@ -0,0 +1,12 @@ +import create from 'zustand'; +import { Notification } from './hark-types'; +import { mockNotification } from './mock-data'; +import { useMockData } from './util'; + +interface HarkStore { + notifications: Notification[]; +} + +export const useHarkStore = create(() => ({ + notifications: useMockData ? [mockNotification] : [] +})); diff --git a/pkg/grid/src/state/kiln.ts b/pkg/grid/src/state/kiln.ts new file mode 100644 index 000000000..db591939a --- /dev/null +++ b/pkg/grid/src/state/kiln.ts @@ -0,0 +1,48 @@ +import { getVats, Vats, scryLag, getBlockers } from '@urbit/api'; +import create from 'zustand'; +import produce from 'immer'; +import { useCallback } from 'react'; +import api from './api'; +import { fakeRequest, useMockData } from './util'; +import { mockVats } from './mock-data'; + +interface KilnState { + vats: Vats; + fetchVats: () => Promise; + lag: boolean; + fetchLag: () => Promise; + set: (s: KilnState) => void; +} +export const useKilnState = create((set) => ({ + vats: useMockData ? mockVats : {}, + lag: !!useMockData, + fetchVats: async () => { + if (useMockData) { + await fakeRequest({}, 500); + return; + } + const vats = await api.scry(getVats); + set({ vats }); + }, + fetchLag: async () => { + const lag = await api.scry(scryLag); + set({ lag }); + }, + set: produce(set) +})); + +const selBlockers = (s: KilnState) => getBlockers(s.vats); +export function useBlockers() { + return useKilnState(selBlockers); +} + +export function useVat(desk: string) { + return useKilnState(useCallback((s) => s.vats[desk], [desk])); +} + +const selLag = (s: KilnState) => s.lag; +export function useLag() { + return useKilnState(selLag); +} + +export default useKilnState; diff --git a/pkg/grid/src/state/mock-data.ts b/pkg/grid/src/state/mock-data.ts index e066a8291..b17b95b4e 100644 --- a/pkg/grid/src/state/mock-data.ts +++ b/pkg/grid/src/state/mock-data.ts @@ -1,176 +1,190 @@ +import _ from 'lodash-es'; +import { Allies, Charges, DocketHrefGlob, Treaties, Treaty } from '@urbit/api/docket'; +import { Vat, Vats } from '@urbit/api/hood'; import systemUrl from '../assets/system.png'; -import goUrl from '../assets/go.png'; -import { Providers, Treaties, Treaty } from './docket-types'; - -export async function fakeRequest(data?: any, time = 300): Promise { - return new Promise((resolve) => { - setTimeout(() => { - resolve(data); - }, time); - }); -} - -export const mockProviders: Providers = { - '~zod': { - shipName: '~zod', - nickname: 'Tlon Corporation' - }, - '~nocsyx-lassul': { - shipName: '~nocsyx-lassul', - status: 'technomancing an electron wrapper for urbit' - }, - '~nachus-hollyn': { - shipName: '~nachus-hollyn' - }, - '~nalbel_litzod': { - shipName: '~nalbel_litzod', - status: 'congratulations' - }, - '~litmus^ritten': { - shipName: '~litmus^ritten' - }, - '~nalput_litzod': { - shipName: '~nalput_litzod', - status: 'Queen' - }, - '~nalrex_bannus': { - shipName: '~nalrex_bannus', - status: 'Script, command and inspect your Urbit. Use TUI applications' - }, - '~nalrys': { - shipName: '~nalrys', - status: 'hosting coming soon' - } -}; +import { BasicNotification } from './hark-types'; export const appMetaData: Pick = { - cass: '~2021.8.11..05.11.10..b721', + cass: { + da: 1629849472746, + ud: 1 + }, hash: '0v6.nj6ls.l7unh.l9bhk.d839n.n8nlq.m2dmc.fj80i.pvqun.uhg6g.1kk0h', website: 'https://tlon.io', license: 'MIT', version: '2.0.1' }; +const makeHref = (base: string): DocketHrefGlob => ({ glob: { base } }); + export const mockTreaties: Treaties = { - groups: { + '~zod/groups': { ship: '~zod', desk: 'groups', title: 'Groups', info: 'Simple Software for Community Assembly', - status: 'active', - base: 'groups', - color: '##CDE7EF', + href: makeHref('groups'), + color: '#CDE7EF', ...appMetaData }, - messages: { + '~zod/messages': { title: 'Messages', ship: '~zod', desk: 'messages', - status: 'active', - base: 'messages', + href: makeHref('messages'), info: 'A lengthier description of the app down here', - color: '##8BE789', + color: '#8BE789', ...appMetaData }, - calls: { + '~zod/calls': { title: 'Calls', ship: '~zod', desk: 'calls', - status: 'active', - base: 'calls', + href: makeHref('calls'), info: 'A lengthier description of the app down here', - color: '##C2D6BE', + color: '#C2D6BE', ...appMetaData }, - 'bitcoin-wallet': { + '~zod/bitcoin-wallet': { title: 'Bitcoin Wallet', ship: '~zod', desk: 'bitcoin-wallet', - status: 'active', - base: 'bitcoin-wallet', + href: makeHref('bitcoin-wallet'), info: 'A lengthier description of the app down here', - color: '##F0AE70', + color: '#F0AE70', ...appMetaData }, - system: { + '~zod/system': { title: 'System', ship: '~zod', desk: 'system', - status: 'active', - base: 'system', + href: makeHref('system'), info: 'A lengthier description of the app down here', - color: '##2D0118', - img: systemUrl, + color: '#2D0118', + image: systemUrl, ...appMetaData }, - 'my-apps': { + '~zod/my-apps': { title: 'My Apps', ship: '~zod', desk: 'my-apps', - status: 'active', - base: 'my-apps', + href: makeHref('my-apps'), info: 'A lengthier description of the app down here', - color: '##D8B14E', + color: '#D8B14E', ...appMetaData }, - go: { + '~zod/go': { title: 'Go', ship: '~zod', desk: 'go', - status: 'active', - base: 'go', + href: makeHref('go'), info: 'A lengthier description of the app down here', - color: '##A58E52', - img: goUrl, + color: '#A58E52', ...appMetaData }, - terminal: { + '~zod/terminal': { title: 'Terminal', ship: '~zod', desk: 'terminal', - status: 'active', - base: 'terminal', + href: makeHref('terminal'), info: 'A lengthier description of the app down here', - color: '##2D382B', + color: '#2D382B', ...appMetaData }, - pomodoro: { + '~zod/pomodoro': { title: 'Pomodoro', ship: '~zod', desk: 'pomodoro', - status: 'active', - base: 'pomodoro', + href: makeHref('pomodoro'), info: 'A lengthier description of the app down here', - color: '##EE5432', + color: '#EE5432', ...appMetaData }, - clocks: { + '~zod/clocks': { title: 'Clocks', ship: '~zod', desk: 'clocks', - status: 'active', - base: 'clocks', + href: makeHref('clocks'), info: 'A lengthier description of the app down here', - color: '##DCDCDC', + color: '#DCDCDC', ...appMetaData }, - uniswap: { + '~zod/uniswap': { title: 'Uniswap', ship: '~zod', desk: 'uniswap', - status: 'active', - base: 'uniswap', + href: makeHref('uniswap'), info: 'A lengthier description of the app down here', - color: '##FDA1FF', + color: '#FDA1FF', ...appMetaData }, - inbox: { + '~zod/inbox': { title: 'Inbox', ship: '~zod', desk: 'inbox', - status: 'active', - base: 'inbox', - color: '##FEFFBA', + href: makeHref('inbox'), + color: '#FEFFBA', ...appMetaData } }; + +export const mockCharges: Charges = _.reduce( + mockTreaties, + (acc, val, key) => { + const [, desk] = key.split('/'); + const chad = { glob: null }; + if (desk === 'inbox') { + return acc; + } + + return { ...acc, [desk]: { ...val, chad } }; + }, + {} as Charges +); + +const charter = Object.keys(mockTreaties); + +export const mockAllies: Allies = [ + '~zod', + '~nocsyx-lassul', + '~nachus-hollyn', + '~nalbel_litzod', + '~litmus^ritten', + '~nalput_litzod', + '~nalrex_bannus', + '~nalrys' +].reduce((acc, val) => ({ ...acc, [val]: charter }), {}); + +export const mockNotification: BasicNotification = { + type: 'basic', + time: '', + message: 'test' +}; + +export const mockVat = (desk: string, blockers?: boolean): Vat => ({ + cass: { + da: 1629849472746, + ud: 1 + }, + desk, + arak: { + rein: { + sub: [], + add: [] + }, + aeon: 3, + desk, + next: blockers ? [{ aeon: 3, weft: { name: 'zuse', kelvin: 419 } }] : [], + ship: '~dopzod' + }, + hash: '0vh.lhfn6.julg1.fs52d.g2lqj.q5kp0.2o7j3.2bljl.jdm34.hd46v.9uv5v' +}); + +const badVats = ['inbox', 'system', 'terminal', 'base']; +export const mockVats = _.reduce( + mockCharges, + (vats, charge, desk) => { + return { ...vats, [desk]: mockVat(desk, !badVats.includes(desk)) }; + }, + { base: mockVat('base', true) } as Vats +); diff --git a/pkg/grid/src/state/notifications.ts b/pkg/grid/src/state/notifications.ts new file mode 100644 index 000000000..1347e922e --- /dev/null +++ b/pkg/grid/src/state/notifications.ts @@ -0,0 +1,28 @@ +import { useHarkStore } from './hark'; +import { Notification } from './hark-types'; +import { useBlockers, useLag } from './kiln'; + +function getSystemNotifications(lag: boolean, blockers: string[]) { + const nots = [] as Notification[]; + if (lag) { + nots.push({ type: 'runtime-lag' }); + } + if (blockers.length > 0) { + nots.push({ type: 'system-updates-blocked', desks: blockers }); + } + return nots; +} + +export const useNotifications = () => { + const notifications = useHarkStore((s) => s.notifications); + const blockers = useBlockers(); + const lag = useLag(); + const systemNotifications = getSystemNotifications(lag, blockers); + const hasAnyNotifications = notifications.length > 0 || systemNotifications.length > 0; + + return { + notifications, + systemNotifications, + hasAnyNotifications + }; +}; diff --git a/pkg/grid/src/state/util.ts b/pkg/grid/src/state/util.ts new file mode 100644 index 000000000..72d1350c3 --- /dev/null +++ b/pkg/grid/src/state/util.ts @@ -0,0 +1,25 @@ +import { DocketHref } from '@urbit/api/docket'; + +export function makeKeyFn(key: string) { + return (childKeys: string[] = []) => { + return [key].concat(childKeys); + }; +} + +export const useMockData = import.meta.env.MODE === 'mock'; + +export async function fakeRequest(data?: any, time = 300): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(data); + }, time); + }); +} + +export function getAppHref(href: DocketHref) { + return 'site' in href ? href.site : `/apps/${href.glob.base}`; +} + +export function disableDefault(e: T): void { + e.preventDefault(); +} diff --git a/pkg/grid/src/styles/components.css b/pkg/grid/src/styles/components.css index e44691951..fe646bd5e 100644 --- a/pkg/grid/src/styles/components.css +++ b/pkg/grid/src/styles/components.css @@ -30,6 +30,10 @@ @apply px-4 py-2 w-full bg-white rounded-xl; } +.notification { + @apply p-4 bg-gray-100 rounded-xl; +} + .spinner { @apply inline-flex items-center w-6 h-6 animate-spin; } diff --git a/pkg/grid/src/styles/utilities.css b/pkg/grid/src/styles/utilities.css index e69de29bb..ddbe64ce6 100644 --- a/pkg/grid/src/styles/utilities.css +++ b/pkg/grid/src/styles/utilities.css @@ -0,0 +1,7 @@ +.scroll-full-width { + width: calc(100% - var(--removed-body-scroll-bar-size)); +} + +.scroll-left-50 { + left: calc(50% - (var(--removed-body-scroll-bar-size) / 2)); +} diff --git a/pkg/grid/src/tiles/RemoveApp.tsx b/pkg/grid/src/tiles/RemoveApp.tsx index 4239c4644..3325ce7cb 100644 --- a/pkg/grid/src/tiles/RemoveApp.tsx +++ b/pkg/grid/src/tiles/RemoveApp.tsx @@ -1,7 +1,7 @@ import React, { useCallback } from 'react'; import { useHistory, useParams } from 'react-router-dom'; import { Button } from '../components/Button'; -import { Dialog, DialogContent } from '../components/Dialog'; +import { Dialog, DialogClose, DialogContent } from '../components/Dialog'; import useDocketState, { useCharges } from '../state/docket'; export const RemoveApp = () => { @@ -14,19 +14,23 @@ export const RemoveApp = () => { // TODO: add optimistic updates const handleRemoveApp = useCallback(() => { uninstallDocket(desk); - history.push('/'); - }, []); + }, [desk]); return ( !open && history.push('/')}> - -

Remove “{docket?.title || ''}”

-

- Explanatory writing about what data will be kept. + +

Remove “{docket?.title || ''}”?

+

+ This will remove the software's tile from your home screen.

- +
+ + Cancel + + + Remove “{docket?.title}” + +
); diff --git a/pkg/grid/src/tiles/SuspendApp.tsx b/pkg/grid/src/tiles/SuspendApp.tsx index 99fffafd1..c7cfcdf57 100644 --- a/pkg/grid/src/tiles/SuspendApp.tsx +++ b/pkg/grid/src/tiles/SuspendApp.tsx @@ -1,36 +1,39 @@ import React, { useCallback } from 'react'; import { Redirect, useHistory, useParams } from 'react-router-dom'; import { Button } from '../components/Button'; -import { Dialog, DialogContent } from '../components/Dialog'; +import { Dialog, DialogClose, DialogContent } from '../components/Dialog'; import useDocketState, { useCharges } from '../state/docket'; export const SuspendApp = () => { const history = useHistory(); const { desk } = useParams<{ desk: string }>(); const charges = useCharges(); - const docket = charges[desk]; - const toggleDocket = useDocketState((s) => s.toggleDocket); + const charge = charges[desk]; // TODO: add optimistic updates const handleSuspendApp = useCallback(() => { - toggleDocket(desk); - history.push('/'); - }, []); + useDocketState.getState().toggleDocket(desk); + }, [desk]); - if (docket?.status === 'suspended') { - ; + if ('suspend' in charge.chad) { + return ; } return ( !open && history.push('/')}> - -

Suspend “{docket?.title || ''}”

-

+ +

Suspend “{charge?.title || ''}”

+

Suspending an app will freeze its current state, and render it unable

- +
+ + Cancel + + + Suspend “{charge?.title}” + +
); diff --git a/pkg/grid/src/tiles/Tile.tsx b/pkg/grid/src/tiles/Tile.tsx index ad0601336..785c28049 100644 --- a/pkg/grid/src/tiles/Tile.tsx +++ b/pkg/grid/src/tiles/Tile.tsx @@ -1,11 +1,15 @@ import classNames from 'classnames'; import React, { FunctionComponent } from 'react'; import { darken, hsla, lighten, parseToHsla, readableColorIsBlack } from 'color2k'; +import { chadIsRunning } from '@urbit/api/docket'; import { TileMenu } from './TileMenu'; -import { Docket } from '../state/docket-types'; +import { Spinner } from '../components/Spinner'; +import { getAppHref } from '../state/util'; +import { useRecentsStore } from '../nav/search/Home'; +import { ChargeWithDesk } from '../state/docket'; type TileProps = { - docket: Docket; + charge: ChargeWithDesk; desk: string; }; @@ -21,45 +25,59 @@ function getMenuColor(color: string, lightText: boolean, active: boolean): strin return lightText ? lighten(satAdjustedColor, 0.1) : darken(satAdjustedColor, 0.1); } -export const Tile: FunctionComponent = ({ docket, desk }) => { - const { title, base, color, img, status } = docket; - const active = status === 'active'; +export const Tile: FunctionComponent = ({ charge, desk }) => { + const addRecentApp = useRecentsStore((state) => state.addRecentApp); + const { title, color, image, chad, href } = charge; + const loading = 'install' in chad; + const active = chadIsRunning(chad); const lightText = !readableColorIsBlack(color); const menuColor = getMenuColor(color, lightText, active); const suspendColor = 'rgb(220,220,220)'; + const suspended = 'suspend' in chad; + const link = getAppHref(href); return ( addRecentApp(charge)} + onAuxClick={() => addRecentApp(charge)} >
- -
+ {loading ? ( +
+ +
+ ) : ( + + )} +

{title}

- {!active && Suspended} + {!active && ( + {suspended ? 'Suspended' : 'Installing'} + )}
- {img && ( + {image && !loading && ( )} diff --git a/pkg/grid/src/tiles/TileInfo.tsx b/pkg/grid/src/tiles/TileInfo.tsx new file mode 100644 index 000000000..1d2f91551 --- /dev/null +++ b/pkg/grid/src/tiles/TileInfo.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { useHistory, useParams } from 'react-router-dom'; +import { Dialog, DialogContent } from '../components/Dialog'; +import { AppInfo } from '../components/AppInfo'; +import { useCharge } from '../state/docket'; +import { useVat } from '../state/kiln'; + +export const TileInfo = () => { + const { desk } = useParams<{ desk: string }>(); + const { push } = useHistory(); + const charge = useCharge(desk); + const vat = useVat(desk); + + return ( + !open && push('/')}> + + + + + ); +}; diff --git a/pkg/grid/src/tiles/TileMenu.tsx b/pkg/grid/src/tiles/TileMenu.tsx index 8c8e69760..cdc262449 100644 --- a/pkg/grid/src/tiles/TileMenu.tsx +++ b/pkg/grid/src/tiles/TileMenu.tsx @@ -4,6 +4,7 @@ import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; import classNames from 'classnames'; import { Link } from 'react-router-dom'; import useDocketState from '../state/docket'; +import { disableDefault } from '../state/util'; export interface TileMenuProps { desk: string; @@ -66,7 +67,7 @@ export const TileMenu = ({ desk, active, menuColor, lightText, className }: Tile align="start" alignOffset={-32} sideOffset={4} - onCloseAutoFocus={(e) => e.preventDefault()} + onCloseAutoFocus={disableDefault} className={classNames( 'dropdown py-2 font-semibold', lightText ? 'text-gray-100' : 'text-gray-800' diff --git a/pkg/grid/src/window.ts b/pkg/grid/src/window.ts new file mode 100644 index 000000000..46b86eaef --- /dev/null +++ b/pkg/grid/src/window.ts @@ -0,0 +1,8 @@ +declare global { + interface Window { + ship: string; + desk: string; + } +} + +export {}; diff --git a/pkg/grid/tailwind.config.js b/pkg/grid/tailwind.config.js index 65122483b..555e92bcb 100644 --- a/pkg/grid/tailwind.config.js +++ b/pkg/grid/tailwind.config.js @@ -7,68 +7,61 @@ module.exports = { theme: { extend: { colors: { - transparent: "transparent", - white: "#FFFFFF", - black: "#000000", + transparent: 'transparent', + white: '#FFFFFF', + black: '#000000', gray: { ...colors.trueGray, - 100: "#F2F2F2", - 200: "#CCCCCC", - 300: "#B3B3B3", - 400: "#808080", - 500: "#666666", + 100: '#F2F2F2', + 200: '#CCCCCC', + 300: '#B3B3B3', + 400: '#808080', + 500: '#666666' }, blue: { - 100: "#E9F5FF", - 200: "#D3EBFF", - 300: "#BCE2FF", - 400: "#219DFF", + 100: '#E9F5FF', + 200: '#D3EBFF', + 300: '#BCE2FF', + 400: '#219DFF' }, red: { - 100: "#FFF6F5", - 200: "#FFC6C3", - 400: "#FF4136", + 100: '#FFF6F5', + 200: '#FFC6C3', + 400: '#FF4136' }, green: { - 100: "#E6F5F0", - 200: "#B3E2D1", - 400: "#009F65", + 100: '#E6F5F0', + 200: '#B3E2D1', + 400: '#009F65' }, yellow: { - 100: "#FFF9E6", - 200: "#FFEEB3", - 300: "#FFDD66", - 400: "#FFC700", + 100: '#FFF9E6', + 200: '#FFEEB3', + 300: '#FFDD66', + 400: '#FFC700' }, + orange: colors.orange }, fontFamily: { sans: [ '"Inter"', '"Inter UI"', - "-apple-system", - "BlinkMacSystemFont", + '-apple-system', + 'BlinkMacSystemFont', '"San Francisco"', '"Helvetica Neue"', - "Arial", - "sans-serif", - ], - mono: [ - '"Source Code Pro"', - '"Roboto mono"', - '"Courier New"', - "monospace", + 'Arial', + 'sans-serif' ], + mono: ['"Source Code Pro"', '"Roboto mono"', '"Courier New"', 'monospace'] }, - minWidth: theme => theme('spacing'), - }, + minWidth: (theme) => theme('spacing') + } }, variants: { extend: { opacity: ['hover-none'] - }, + } }, - plugins: [ - require('@tailwindcss/aspect-ratio'), - require('tailwindcss-touch')() - ], -} + plugins: [require('@tailwindcss/aspect-ratio'), require('tailwindcss-touch')()] +}; diff --git a/pkg/grid/vite.config.ts b/pkg/grid/vite.config.ts index c151b2398..fadf31862 100644 --- a/pkg/grid/vite.config.ts +++ b/pkg/grid/vite.config.ts @@ -2,6 +2,12 @@ import { defineConfig } from 'vite'; import analyze from 'rollup-plugin-analyzer'; import { visualizer } from 'rollup-plugin-visualizer'; import reactRefresh from '@vitejs/plugin-react-refresh'; +import htmlPlugin from 'vite-plugin-html-config'; + +const htmlPluginOpt = { + headScripts: [{ src: '/apps/grid/desk.js' }, { src: '/session.js' }] +}; +const SHIP_URL = process.env.SHIP_URL || 'http://localhost:8080'; // https://vitejs.dev/config/ export default defineConfig(({ mode }) => ({ @@ -11,8 +17,11 @@ export default defineConfig(({ mode }) => ({ ? undefined : { proxy: { + '^/apps/grid/desk.js': { + target: SHIP_URL + }, '^((?!/apps/grid).)*$': { - target: 'http://localhost:8080' + target: SHIP_URL } } }, @@ -29,5 +38,5 @@ export default defineConfig(({ mode }) => ({ ] } }, - plugins: [reactRefresh()] + plugins: [htmlPlugin(htmlPluginOpt), reactRefresh()] })); diff --git a/pkg/landscape/app/observe-hook.hoon b/pkg/landscape/app/observe-hook.hoon index 92d333946..37fc8fce9 100644 --- a/pkg/landscape/app/observe-hook.hoon +++ b/pkg/landscape/app/observe-hook.hoon @@ -276,7 +276,7 @@ :_ this(static-conversions (~(put in static-conversions) [from to])) =/ =wire /static-convert/[from]/[to] =/ =rave:clay [%sing %f [%da now.bowl] /[from]/[to]] - [%pass wire %arvo %c %warp our.bowl %home `rave]~ + [%pass wire %arvo %c %warp our.bowl desk `rave]~ :: ++ cool-static-conversion |= [from=term to=term] diff --git a/pkg/landscape/desk.bill b/pkg/landscape/desk.bill index 546d4eb94..e5c48e063 100644 --- a/pkg/landscape/desk.bill +++ b/pkg/landscape/desk.bill @@ -1,7 +1,5 @@ :~ :- %apes - :~ %btc-provider - %btc-wallet - %chat-cli + :~ %chat-cli %chat-hook %chat-store %chat-view @@ -15,8 +13,6 @@ %demo-push-hook %demo-store %dm-hook - %file-server - %glob %graph-pull-hook %graph-push-hook %graph-store diff --git a/pkg/landscape/desk.docket b/pkg/landscape/desk.docket new file mode 100644 index 000000000..498fc4fc9 --- /dev/null +++ b/pkg/landscape/desk.docket @@ -0,0 +1,9 @@ +:~ title+'Landscape' + info+'A suite of applications to communicate on Urbit' + color+0xee.5432 + glob+'https://bootstrap.urbit.org/glob-0v4.0k6hb.4s38v.su79d.10vd5.7c8lu.glob' + base+'landscape' + version+[0 0 1] + website+'https://tlon.io' + license+'MIT' +== diff --git a/pkg/arvo/mar/metadata/update-2.hoon b/pkg/landscape/mar/metadata/update-2.hoon similarity index 100% rename from pkg/arvo/mar/metadata/update-2.hoon rename to pkg/landscape/mar/metadata/update-2.hoon diff --git a/pkg/npm/api/docket/index.ts b/pkg/npm/api/docket/index.ts new file mode 100644 index 000000000..e06143cf1 --- /dev/null +++ b/pkg/npm/api/docket/index.ts @@ -0,0 +1,2 @@ +export * from './lib'; +export * from './types'; diff --git a/pkg/npm/api/docket/lib.ts b/pkg/npm/api/docket/lib.ts new file mode 100644 index 000000000..b599eff1a --- /dev/null +++ b/pkg/npm/api/docket/lib.ts @@ -0,0 +1,50 @@ +import { Poke, Scry } from '../lib'; +import { Chad } from './types'; + +export function chadIsRunning(chad: Chad) { + return 'glob' in chad || 'site' in chad; +} + +export const scryCharges: Scry = { + app: 'docket', + path: '/charges' +}; + +export const scryDockets: Scry = { + app: 'docket', + path: '/dockets' +}; + +export const scryTreaties: Scry = { + app: 'treaty', + path: '/treaties' +}; + +export const scryAllies: Scry = { + app: 'treaty', + path: '/allies' +}; + +export const scryAllyTreaties = (ship: string): Scry => ({ + app: 'treaty', + path: `/treaties/${ship}` +}); + +/** + * Uninstall a desk, and remove docket + */ +export function docketUninstall(desk: string): Poke { + return { + app: 'docket', + mark: 'docket-uninstall', + json: desk + }; +} + +export function docketInstall(ship: string, desk: string): Poke { + return { + app: 'docket', + mark: 'docket-install', + json: `${ship}/${desk}` + }; +} diff --git a/pkg/npm/api/docket/types.ts b/pkg/npm/api/docket/types.ts new file mode 100644 index 000000000..c35399b5b --- /dev/null +++ b/pkg/npm/api/docket/types.ts @@ -0,0 +1,135 @@ +import { Cass } from '../hood'; +export type DeskStatus = 'active' | 'suspended'; + +export type DocketHref = DocketHrefSite | DocketHrefGlob; + +export interface DocketHrefGlob { + glob: { + base: string; + + } +} + +export interface DocketHrefSite { + site: string; +} + +export interface Docket { + title: string; + info?: string; + color: string; + href: DocketHref; + website: string; + license: string; + version: string; + image?: string; +} + +export interface Charge extends Docket { + chad: Chad; +} + +export type Chad = HungChad | GlobChad | SiteChad | InstallChad | SuspendChad; + +export interface HungChad { + hung: string; +} + +export interface GlobChad { + glob: null; +} +export interface SiteChad { + site: null; +} +export interface InstallChad { + install: null; + +} +export interface SuspendChad { + suspend: null; +} + +export interface Treaty extends Docket { + ship: string; + desk: string; + cass: Cass; + hash: string; +} + +export interface Charges { + [desk: string]: Charge; +} + +export interface Treaties { + [ref: string]: Treaty; +} + +export type Charter = string[]; + +export interface Allies { + [ship: string]: Charter; +} + +export interface Provider { + shipName: string; + nickname?: string; + status?: string; +} + +export type ChargeUpdate = ChargeUpdateInitial | ChargeUpdateAdd | ChargeUpdateDel; + +export interface ChargeUpdateInitial { + initial: { + [desk: string]: Charge; + } +} + +export interface ChargeUpdateAdd { + 'add-charge': { + desk: string; + charge: Charge; + } +} + +export interface ChargeUpdateDel { + 'del-charge': string; +} + +export type AllyUpdate = AllyUpdateIni | AllyUpdateAdd | AllyUpdateDel | AllyUpdateNew; + +export interface AllyUpdateIni { + ini: { + [ship: string]: string[]; + } +} + +export interface AllyUpdateAdd { + add: string; +} + +export interface AllyUpdateDel { + del: string; +} + +export interface AllyUpdateNew { + new: { + ship: string; + alliance: string[]; + } +} + +export type TreatyUpdate = TreatyUpdateIni | TreatyUpdateAdd | TreatyUpdateDel; + +export interface TreatyUpdateIni { + ini: { + [foreignDesk: string]: Treaty; + } +} + +export interface TreatyUpdateAdd { + add: Treaty; +} + +export interface TreatyUpdateDel { + del: string; +} diff --git a/pkg/npm/api/hood/index.ts b/pkg/npm/api/hood/index.ts new file mode 100644 index 000000000..e06143cf1 --- /dev/null +++ b/pkg/npm/api/hood/index.ts @@ -0,0 +1,2 @@ +export * from './lib'; +export * from './types'; diff --git a/pkg/npm/api/hood/lib.ts b/pkg/npm/api/hood/lib.ts new file mode 100644 index 000000000..617d744b9 --- /dev/null +++ b/pkg/npm/api/hood/lib.ts @@ -0,0 +1,89 @@ +import { Poke, Scry } from '../lib'; +import { Vats } from './types'; +import _ from 'lodash'; + +export const getVats: Scry = { + app: 'hood', + path: '/kiln/vats' +}; + +/** + * Install a foreign desk + */ +export function kilnInstall( + ship: string, + desk: string, + local?: string +): Poke { + return { + app: 'hood', + mark: 'kiln-install', + json: { + ship, + desk, + local: local || desk + } + }; +} + +/** + * Uninstall a desk + */ +export function kilnUninstall( + desk: string +): Poke { + return { + app: 'hood', + mark: 'kiln-uninstall', + json: desk + }; +} + +export function kilnSuspend( + desk: string +): Poke { + return { + app: 'hood', + mark: 'kiln-suspend', + json: desk + }; +} + +export function kilnRevive( + desk: string +): Poke { + return { + app: 'hood', + mark: 'kiln-revive', + json: desk + }; +} + +export const kilnBump: Poke = { + app: 'hood', + mark: 'kiln-bump', + json: null +}; + +export const scryLag: Scry = ({ app: 'hood', path: '/kiln/lag' }); + +export function getBlockers(vats: Vats): string[] { + const blockers: string[] = []; + const base = vats?.base; + if(!base) { + return blockers; + } + const blockedOn = base.arak.next?.[0]?.weft?.kelvin; + if(!blockedOn) { + return blockers; + } + _.forEach(_.omit(vats, 'base'), (vat, desk) => { + // assuming only %zuse + const kelvins = _.map(vat.arak.next, n => n.weft.kelvin); + if(!(kelvins.includes(blockedOn))) { + blockers.push(desk); + } + }); + + return blockers; +} diff --git a/pkg/npm/api/hood/types.ts b/pkg/npm/api/hood/types.ts new file mode 100644 index 000000000..4b561d15b --- /dev/null +++ b/pkg/npm/api/hood/types.ts @@ -0,0 +1,154 @@ + +/** + * A pending commit, awaiting a future kelvin version + */ +interface Woof { + aeon: number; + weft: Weft; +} + +interface Rein { + /** + * Agents not in manifest that should be running + */ + add: string[]; + /** + * Agents in manifest that should not be running + */ + sub: string[]; +} + +/** + * A tracker of a foreign {@link Vat} + * + */ +export interface Arak { + /** + * Ship of foreign vat + */ + ship: string; + /** + * Desk of foreign vat + */ + desk: string; + /** + * Aeon (version number) that we currently have synced + */ + aeon: number; + next: Woof[]; + rein: Rein; +} + +/** + * A component's kelvin version + */ +export interface Weft { + /** + * Name of the component + * + * @remarks + * Usually %zuse, %hoon, or %lull + */ + name: string; + /** + * Kelvin version + * + */ + kelvin: number; +} + +export interface KilnDiffBlock { + block: { + desk: string; + arak: Arak; + weft: Weft; + blockers: string[]; + }; +} + +export interface KilnDiffReset { + reset: { + desk: string; + arak: Arak; + }; +} + +export interface KilnDiffMerge { + merge: { + desk: string; + arak: Arak; + }; +} + +export interface KilnDiffMergeSunk { + 'merge-sunk': { + desk: string; + arak: Arak; + tang: string; + }; +} + +export interface KilnDiffMergeFail { + 'merge-fail': { + desk: string; + arak: Arak; + tang: string; + }; +} + +export type KilnDiff = + | KilnDiffBlock + | KilnDiffReset + | KilnDiffMerge + | KilnDiffMergeSunk + | KilnDiffMergeFail; + +/** + * Cases for revision + * + */ +export interface Cass { + /** + * Revision number + */ + ud: number; + /** + * Timestamp of revision, as unix timestamp + * + * @remarks + * If \@da is outside valid positive unix timestamp, value will be zero + */ + da: number; +} + +/** + * A local desk installation + */ +export interface Vat { + /** + * Desk that this Vat describes + */ + desk: string; + /** + * Hash of the desk, rendered as `@uv` + * + * @remarks + * Equivalent to + * ```hoon + * .^(@uv %cz /=desk=) + * ``` + */ + hash: string; + /** + * Current revision + */ + cass: Cass; + /** + * Foreign sync + */ + arak: Arak; +} + +export interface Vats { + [desk: string]: Vat; +} diff --git a/pkg/npm/api/index.ts b/pkg/npm/api/index.ts index 7d108981e..b43d2a04e 100644 --- a/pkg/npm/api/index.ts +++ b/pkg/npm/api/index.ts @@ -15,4 +15,8 @@ export * as settings from './settings'; export * from './s3'; export * as s3 from './s3'; export * from './lib'; -export * from './lib/BigIntOrderedMap'; \ No newline at end of file +export * from './lib/BigIntOrderedMap'; +export * as hood from './hood'; +export * from './hood'; +export * as docket from './docket'; +export * from './docket'; diff --git a/pkg/npm/http-api/package-lock.json b/pkg/npm/http-api/package-lock.json index 8dfa1995c..db4092041 100644 --- a/pkg/npm/http-api/package-lock.json +++ b/pkg/npm/http-api/package-lock.json @@ -1,8 +1,14342 @@ { "name": "@urbit/http-api", "version": "1.3.1", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@urbit/http-api", + "version": "1.3.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@microsoft/fetch-event-source": "^2.0.0", + "browser-or-node": "^1.3.0", + "browserify-zlib": "^0.2.0", + "buffer": "^6.0.3", + "stream-browserify": "^3.0.0", + "stream-http": "^3.1.1" + }, + "devDependencies": { + "@babel/core": "^7.14.6", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.1", + "@babel/preset-env": "^7.14.7", + "@babel/preset-typescript": "^7.12.1", + "@types/browser-or-node": "^1.2.0", + "@types/eventsource": "^1.1.5", + "@types/jest": "^26.0.24", + "@types/react": "^16.9.56", + "@typescript-eslint/eslint-plugin": "^4.7.0", + "@typescript-eslint/parser": "^4.7.0", + "babel-jest": "^27.0.6", + "babel-loader": "^8.2.1", + "clean-webpack-plugin": "^3.0.0", + "cross-fetch": "^3.1.4", + "event-target-polyfill": "0.0.3", + "fast-text-encoding": "^1.0.3", + "jest": "^27.0.6", + "onchange": "^7.1.0", + "tslib": "^2.0.3", + "typescript": "^3.9.7", + "util": "^0.12.3", + "web-streams-polyfill": "^3.0.3", + "webpack": "^5.4.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0", + "yet-another-abortcontroller-polyfill": "0.0.4" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.14.5" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", + "dev": true + }, + "node_modules/@babel/core": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", + "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", + "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", + "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz", + "integrity": "sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.6", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.14.5" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", + "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.7", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.15.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.14.5.tgz", + "integrity": "sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-typescript": "^7.14.5" + } + }, + "node_modules/@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "node_modules/@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "node_modules/@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@blakeembrey/deque": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@blakeembrey/deque/-/deque-1.0.5.tgz", + "integrity": "sha512-6xnwtvp9DY1EINIKdTfvfeAtCYw4OqBZJhtiqkT3ivjnEfa25VQ3TsKvaFfKm8MyGIEfE95qLe+bNEt3nB0Ylg==", + "dev": true + }, + "node_modules/@blakeembrey/template": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@blakeembrey/template/-/template-1.0.0.tgz", + "integrity": "sha512-J6WGZqCLdRMHUkyRG6fBSIFJ0rL60/nsQNh5rQvsYZ5u0PsKw6XQcJcA3DWvd9cN3j/IQx5yB1fexhCafwwUUw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz", + "integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.0.6", + "jest-util": "^27.0.6", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz", + "integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==", + "dev": true, + "dependencies": { + "@jest/console": "^27.0.6", + "@jest/reporters": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^27.0.6", + "jest-config": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-resolve-dependencies": "^27.0.6", + "jest-runner": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", + "jest-watcher": "^27.0.6", + "micromatch": "^4.0.4", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/core/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@jest/core/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz", + "integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/node": "*", + "jest-mock": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/environment/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/environment/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/environment/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/environment/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz", + "integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "@sinonjs/fake-timers": "^7.0.2", + "@types/node": "*", + "jest-message-util": "^27.0.6", + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/fake-timers/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/fake-timers/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/fake-timers/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/fake-timers/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/fake-timers/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz", + "integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.0.6", + "@jest/types": "^27.0.6", + "expect": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/globals/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/globals/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/globals/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/globals/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz", + "integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/source-map": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz", + "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz", + "integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==", + "dev": true, + "dependencies": { + "@jest/console": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/test-result/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-result/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/test-result/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/test-result/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-result/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz", + "integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.0.6", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.6", + "jest-runtime": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz", + "integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.0.6", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-util": "^27.0.6", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@microsoft/fetch-event-source": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz", + "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.15", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", + "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/browser-or-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.0.tgz", + "integrity": "sha512-MVetr65IR7RdJbUxVHsaPFaXAO8fi89zv1g8L/mHygh1Q7xnnK02XZLwfMh57FOpTO6gtnagoPMQ/UOFfctXRQ==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "7.2.14", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.14.tgz", + "integrity": "sha512-pESyhSbUOskqrGcaN+bCXIQDyT5zTaRWfj5ZjjSlMatgGjIn3QQPfocAu4WSabUR7CGyLZ2CQaZyISOEX7/saw==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.49", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.49.tgz", + "integrity": "sha512-K1AFuMe8a+pXmfHTtnwBvqoEylNKVeaiKYkjmcEAdytMQVJ/i9Fu7sc13GxgXdO49gkE7Hy8SyJonUZUn+eVaw==", + "dev": true + }, + "node_modules/@types/eventsource": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.6.tgz", + "integrity": "sha512-y4xcLJ+lcoZ6mN9ndSdKOWg24Nj5uQc4Z/NRdy3HbiGGt5hfH3RLwAXr6V+RzGzOljAk48a09n6iY4BMNumEng==", + "dev": true + }, + "node_modules/@types/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "26.0.24", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", + "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", + "dev": true, + "dependencies": { + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", + "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.0.tgz", + "integrity": "sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", + "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", + "dev": true + }, + "node_modules/@types/react": { + "version": "16.14.10", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.10.tgz", + "integrity": "sha512-QadBsMyF6ldjEAXEhsmEW/L0uBDJT8yw7Qoe5sRnEKVrzMkiYoJwqoL5TKJOlArsn/wvIJM/XdVzkdL6+AS64Q==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "node_modules/@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "node_modules/@types/uglify-js": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/webpack": { + "version": "4.41.30", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.30.tgz", + "integrity": "sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-sources": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.1.tgz", + "integrity": "sha512-MjM1R6iuw8XaVbtkCBz0N349cyqBjJHCbQiOeppe3VBeFvxqs74RKHAVt9LkxTnUWc7YLZOEsUfPUnmK6SBPKQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.2.tgz", + "integrity": "sha512-PGqpLLzHSxq956rzNGasO3GsAPf2lY9lDUBXhS++SKonglUmJypaUtcKzRtUte8CV7nruwnDxtLUKpVxs0wQBw==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "4.28.2", + "@typescript-eslint/scope-manager": "4.28.2", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.2.tgz", + "integrity": "sha512-MwHPsL6qo98RC55IoWWP8/opTykjTp4JzfPu1VfO2Z0MshNP0UZ1GEV5rYSSnZSUI8VD7iHvtIPVGW5Nfh7klQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.28.2", + "@typescript-eslint/types": "4.28.2", + "@typescript-eslint/typescript-estree": "4.28.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.2.tgz", + "integrity": "sha512-Q0gSCN51eikAgFGY+gnd5p9bhhCUAl0ERMiDKrTzpSoMYRubdB8MJrTTR/BBii8z+iFwz8oihxd0RAdP4l8w8w==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "4.28.2", + "@typescript-eslint/types": "4.28.2", + "@typescript-eslint/typescript-estree": "4.28.2", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz", + "integrity": "sha512-MqbypNjIkJFEFuOwPWNDjq0nqXAKZvDNNs9yNseoGBB1wYfz1G0WHC2AVOy4XD7di3KCcW3+nhZyN6zruqmp2A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.28.2", + "@typescript-eslint/visitor-keys": "4.28.2" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.2.tgz", + "integrity": "sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz", + "integrity": "sha512-86lLstLvK6QjNZjMoYUBMMsULFw0hPHJlk1fzhAVoNjDBuPVxiwvGuPQq3fsBMCxuDJwmX87tM/AXoadhHRljg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.28.2", + "@typescript-eslint/visitor-keys": "4.28.2", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz", + "integrity": "sha512-aT2B4PLyyRDUVUafXzpZFoc0C9t0za4BJAKP5sgWIhG+jHECQZUEjuQSCIwZdiJJ4w4cgu5r3Kh20SOdtEBl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.28.2", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", + "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-jest": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz", + "integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^27.0.6", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-jest/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-jest/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz", + "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", + "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.14.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz", + "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.0.6", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-or-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", + "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001243", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz", + "integrity": "sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA==", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", + "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", + "dev": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", + "dev": true, + "dependencies": { + "@types/webpack": "^4.4.31", + "del": "^4.1.1" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", + "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "semver": "7.0.0" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "dev": true, + "dependencies": { + "node-fetch": "2.6.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", + "dev": true + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.3.769", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.769.tgz", + "integrity": "sha512-B+3hW8D76/uoTPSobWI3D/CFn2S4jPn88dVJ+BkD88Lz6LijQpL+hfdzIFJGTQK4KdE0XwmNbjUQFH1OQVwKdQ==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.7.1.tgz", + "integrity": "sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==", + "dev": true + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-polyfill": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/event-target-polyfill/-/event-target-polyfill-0.0.3.tgz", + "integrity": "sha512-ZMc6UuvmbinrCk4RzGyVmRyIsAyxMRlp4CqSrcQRO8Dy0A9ldbiRy5kdtBj4OtP7EClGdqGfIqo9JmOClMsGLQ==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dev": true, + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expect": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.6.tgz", + "integrity": "sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-regex-util": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/expect/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/expect/node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/expect/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/expect/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/jest-get-type": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", + "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", + "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fast-text-encoding": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz", + "integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/findup-sync/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-modules/node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-modules/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-ci": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", + "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.1.1" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", + "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.6.tgz", + "integrity": "sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==", + "dev": true, + "dependencies": { + "@jest/core": "^27.0.6", + "import-local": "^3.0.2", + "jest-cli": "^27.0.6" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.6.tgz", + "integrity": "sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-changed-files/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-changed-files/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-changed-files/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.6.tgz", + "integrity": "sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.0.6", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-circus/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.6.tgz", + "integrity": "sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^27.0.6", + "@jest/types": "^27.0.6", + "babel-jest": "^27.0.6", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "is-ci": "^3.0.0", + "jest-circus": "^27.0.6", + "jest-environment-jsdom": "^27.0.6", + "jest-environment-node": "^27.0.6", + "jest-get-type": "^27.0.6", + "jest-jasmine2": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-runner": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", + "micromatch": "^4.0.4", + "pretty-format": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-config/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/jest-get-type": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", + "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz", + "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.6.tgz", + "integrity": "sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "chalk": "^4.0.0", + "jest-get-type": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-each/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/jest-get-type": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", + "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz", + "integrity": "sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/node": "*", + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.6.tgz", + "integrity": "sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/node": "*", + "jest-mock": "^27.0.6", + "jest-util": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-node/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-environment-node/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-environment-node/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-haste-map": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.6.tgz", + "integrity": "sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.0.6", + "jest-serializer": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-haste-map/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-haste-map/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-haste-map/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-haste-map/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-haste-map/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-haste-map/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz", + "integrity": "sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^27.0.6", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.0.6", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "pretty-format": "^27.0.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/pretty-format": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz", + "integrity": "sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-leak-detector/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-leak-detector/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-leak-detector/node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-leak-detector/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector/node_modules/jest-get-type": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", + "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz", + "integrity": "sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/diff-sequences": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/jest-diff": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz", + "integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/jest-get-type": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", + "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.6.tgz", + "integrity": "sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.0.6", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "pretty-format": "^27.0.6", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-message-util/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.6.tgz", + "integrity": "sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-mock/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-mock/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-mock/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-mock/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-regex-util": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", + "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.6.tgz", + "integrity": "sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "chalk": "^4.0.0", + "escalade": "^3.1.1", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", + "resolve": "^1.20.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz", + "integrity": "sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-snapshot": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve-dependencies/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.6.tgz", + "integrity": "sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.0.6", + "@jest/environment": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-docblock": "^27.0.6", + "jest-environment-jsdom": "^27.0.6", + "jest-environment-node": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-leak-detector": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-runtime": "^27.0.6", + "jest-util": "^27.0.6", + "jest-worker": "^27.0.6", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.6.tgz", + "integrity": "sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==", + "dev": true, + "dependencies": { + "@jest/console": "^27.0.6", + "@jest/environment": "^27.0.6", + "@jest/fake-timers": "^27.0.6", + "@jest/globals": "^27.0.6", + "@jest/source-map": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-mock": "^27.0.6", + "jest-regex-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-snapshot": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^16.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runtime/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-runtime/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-runtime/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-runtime/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-runtime/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-serializer": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz", + "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.6.tgz", + "integrity": "sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.0.6", + "graceful-fs": "^4.2.4", + "jest-diff": "^27.0.6", + "jest-get-type": "^27.0.6", + "jest-haste-map": "^27.0.6", + "jest-matcher-utils": "^27.0.6", + "jest-message-util": "^27.0.6", + "jest-resolve": "^27.0.6", + "jest-util": "^27.0.6", + "natural-compare": "^1.4.0", + "pretty-format": "^27.0.6", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/diff-sequences": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz", + "integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-get-type": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", + "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.6.tgz", + "integrity": "sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^3.0.0", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.6.tgz", + "integrity": "sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.0.6", + "leven": "^3.1.0", + "pretty-format": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-validate/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/jest-get-type": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz", + "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz", + "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.6", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.6.tgz", + "integrity": "sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.0.6", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", + "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/@jest/types": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz", + "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/jest-cli": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.6.tgz", + "integrity": "sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==", + "dev": true, + "dependencies": { + "@jest/core": "^27.0.6", + "@jest/test-result": "^27.0.6", + "@jest/types": "^27.0.6", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.0.6", + "jest-util": "^27.0.6", + "jest-validate": "^27.0.6", + "prompts": "^2.0.1", + "yargs": "^16.0.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest/node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", + "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.5", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "dev": true, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "dependencies": { + "tmpl": "1.0.x" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/memory-fs/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/memory-fs/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dev": true, + "dependencies": { + "mime-db": "1.48.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onchange": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/onchange/-/onchange-7.1.0.tgz", + "integrity": "sha512-ZJcqsPiWUAUpvmnJri5TPBooqJOPmC0ttN65juhN15Q8xA+Nbg3BaxBHXQ45EistKKlKElb0edmbPWnKSBkvMg==", + "dev": true, + "dependencies": { + "@blakeembrey/deque": "^1.0.5", + "@blakeembrey/template": "^1.0.0", + "arg": "^4.1.3", + "chokidar": "^3.3.1", + "cross-spawn": "^7.0.1", + "ignore": "^5.1.4", + "tree-kill": "^1.2.2" + }, + "bin": { + "onchange": "dist/bin.js" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pretty-format/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/pretty-format/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/prompts": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-dir/node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "dev": true, + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs-client": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-length/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/terser": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "dev": true, + "dependencies": { + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", + "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/watchpack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.0.3.tgz", + "integrity": "sha512-d2H/t0eqRNM4w2WvmTdoeIvzAUSpK7JmATB8Nr2lb7nQ9BTIJVjbQ/TRFVEh2gUH1HwclPdoPtfMoFfetXaZnA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.43.0.tgz", + "integrity": "sha512-ex3nB9uxNI0azzb0r3xGwi+LS5Gw1RCRSKk0kg3kq9MYdIPmLS6UI3oEtG7esBaB51t9I+5H+vHmL3htaxqMSw==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.49", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.7.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-cli": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", + "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", + "import-local": "^2.0.0", + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/webpack-cli/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/webpack-cli/node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/webpack-cli/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-cli/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/webpack-cli/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-cli/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-cli/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/webpack-dev-middleware/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/webpack-dev-middleware/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "dev": true, + "dependencies": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/webpack-dev-server/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-sources": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yet-another-abortcontroller-polyfill": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/yet-another-abortcontroller-polyfill/-/yet-another-abortcontroller-polyfill-0.0.4.tgz", + "integrity": "sha512-6do/P+mjm7FDUD+q8FrZ0ClMIbjGuKyWuWm3Vz2O7QmVf73HVLYIDV6toS7T0qoH1yeI2HPb8VgJp7w+zcVWvA==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + } + } + }, "dependencies": { "@babel/code-frame": { "version": "7.14.5", @@ -10403,6 +24737,14 @@ "xtend": "^4.0.2" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -10461,14 +24803,6 @@ "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", diff --git a/pkg/symbolic-merge.sh b/pkg/symbolic-merge.sh new file mode 100755 index 000000000..aced17a00 --- /dev/null +++ b/pkg/symbolic-merge.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# call from within pkg/ as ./symbolic-merge.sh source-pkg target-pkg + +function link() { # source desk, target desk, filepath + local src=${3:2}; # strip leading ./ + local pax=$src; + local rel=$1; + while [[ "." != $(dirname "$pax") ]]; do + pax=$(dirname "$pax"); + rel="../$rel"; + done; + ln -sf "../$rel/$src" "../$2/$src"; +} + +# mirror directory structure +cd $1; +find . -type d -exec mkdir -p ../$2/{} \; + +# symlink all files, overwriting existing ones +export -f link +find . -type f \ + -not -name '*.bill' \ + -not -name '*.kelvin' \ + -exec bash -c "link $1 $2 {}" \; + diff --git a/pkg/urbit/include/c/motes.h b/pkg/urbit/include/c/motes.h index 240086ec9..5f92b8bf9 100644 --- a/pkg/urbit/include/c/motes.h +++ b/pkg/urbit/include/c/motes.h @@ -825,6 +825,7 @@ # define c3__pang c3_s4('p','a','n','g') # define c3__pank c3_s4('p','a','n','k') # define c3__para c3_s4('p','a','r','a') +# define c3__park c3_s4('p','a','r','k') # define c3__parq c3_s4('p','a','r','q') # define c3__part c3_s4('p','a','r','t') # define c3__pass c3_s4('p','a','s','s') diff --git a/pkg/urbit/vere/pier.c b/pkg/urbit/vere/pier.c index 8735d79d2..2be2e3996 100644 --- a/pkg/urbit/vere/pier.c +++ b/pkg/urbit/vere/pier.c @@ -1708,7 +1708,8 @@ _pier_pill_parse(u3_noun pil) while ( u3_nul != ova ) { ovo = u3h(ova); - if ( c3__into == u3h(u3t(ovo)) ) { + u3_noun tag = u3h(u3t(ovo)); + if ( ( c3__into == tag ) || ( c3__park == tag ) ) { c3_assert( 0 == len_w ); len_w++; ovo = u3t(pil_q);