commit d96c6c7cafd953ce0806367e0bd660f487d1778a Author: Alex <8125011+alex-kinokon@users.noreply.github.com> Date: Thu Aug 3 20:06:58 2023 -0400 Public commit diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..6f576e2 --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +CROWDIN_PERSONAL_TOKEN="TOKEN" +NEXT_PUBLIC_NAME="Extension" +NEXT_PUBLIC_SUPABASE_URL="https://mysupabase.supabase.co" +NEXT_PUBLIC_SUPABASE_KEY="TOKEN" diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..6f28f55 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,11 @@ +const { extendConfig } = require("@aet/eslint-rules") + +module.exports = extendConfig({ + plugins: ["react", "react-hooks"], + rules: { + "@typescript-eslint/no-misused-promises": ["error", { checksVoidReturn: false }], + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + }, +}) diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml new file mode 100644 index 0000000..bfa5d11 --- /dev/null +++ b/.github/workflows/builds.yml @@ -0,0 +1,47 @@ +name: Nightly Build + +on: + workflow_dispatch + # schedule: + # - cron: "0 0 * * *" + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Use Node.js 14.x + uses: actions/setup-node@v2 + with: + node-version: "14.x" + cache: "pnpm" + + - name: Install dependencies + run: pnpm install + + - name: Build + run: pnpm run build + + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ strftime('%Y-%m-%d-%H-%M-%S', localtime()) }} + release_name: Nightly Build ${{ github.sha }} + body: Nightly build + draft: false + prerelease: true + + - name: Upload Release Asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./dist + asset_name: Nightly Build ${{ github.sha }}.zip + asset_content_type: application/zip diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..335bba6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,149 @@ +src/generated +eslint-local-rules/index.js +gecko.zip +repl.ts +.jest +/drafts +/.1*.**.* +src/context/temp +shims +*.generated +*.generated.* +*.module.css.d.ts +dist/*.html +dist/app +dist/vendor +dist/_locales/* +!dist/_locales/en_US +dist/assets/licenses.json +src/bundle-analyzer + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..0191fc3 --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +public-hoist-pattern[] = *eslint* +public-hoist-pattern[] = *prettier* +public-hoist-pattern[] = *immutable* diff --git a/.vscode/commands.json b/.vscode/commands.json new file mode 100644 index 0000000..f2ae3f6 --- /dev/null +++ b/.vscode/commands.json @@ -0,0 +1,3 @@ +{ + "commands": [] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..91c4806 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "editor.formatOnSave": true, + "typescript.inlayHints.parameterNames.enabled": "none", + "json.schemas": [ + { + "fileMatch": ["dist/manifest.json"], + "url": "https://json.schemastore.org/chrome-manifest.json" + } + ], + "typescript.tsdk": "node_modules/typescript/lib", + "cSpell.words": ["hookz", "submatch", "submatches"] +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..bbac0e3 --- /dev/null +++ b/Makefile @@ -0,0 +1,58 @@ +# This file is generated by `make Makefile` +Makefile: scripts/build-makefile.ts + @echo "✨ Building Makefile..." + @scripts/build-makefile.ts + +makefile: Makefile + +src/shared/theme/tokens.generated.ts src/shared/theme/tokens.generated.css: src/shared/theme/tokens.tsx \ + scripts/build-theme.tsx + @echo "✨ Building theme..." + @scripts/build-theme.tsx -o $(@D) + +theme: src/shared/theme/tokens.generated.ts + +src/shared/models/enums.generated.ts src/shared/models/models.generated.ts: src/shared/models/models.yml \ + ./scripts/build-models.ts + @echo "✨ Building models..." + @./scripts/build-models.ts + +models: src/shared/models/enums.generated.ts + +src/vendor/webextension-polyfill/api-metadata.generated.json: src/vendor/webextension-polyfill/LICENSE \ + src/vendor/webextension-polyfill/README.md \ + src/vendor/webextension-polyfill/api-metadata.json \ + src/vendor/webextension-polyfill/package.json \ + src/vendor/webextension-polyfill/scripts/compress.ts \ + src/vendor/webextension-polyfill/src/browser-polyfill.js + @echo "✨ Building WebExtensionPolyfill..." + @./src/vendor/webextension-polyfill/scripts/compress.ts + +web-extension-polyfill: src/vendor/webextension-polyfill/api-metadata.generated.json + +dist/background.html dist/devtools.html dist/options.html dist/playground.html dist/popup.html dist/reference-bundled.html dist/reference.html: scripts/build-htmls.tsx + @echo "✨ Building HTML..." + @scripts/build-htmls.tsx + +html: dist/background.html + +dist/_locales/de_DE/messages.json dist/_locales/en_US/messages.json dist/_locales/es_ES/messages.json dist/_locales/fr_CA/messages.json dist/_locales/fr_FR/messages.json dist/_locales/ja_JP/messages.json dist/_locales/ko_KR/messages.json dist/_locales/zh_CN/messages.json dist/_locales/zh_TW/messages.json src/shared/i18n/data.generated.ts: scripts/build-locales.ts + @echo "✨ Building locales..." + @scripts/build-locales.ts + +locales: dist/_locales/de_DE/messages.json + +dist/vendor/sass/index.js: package.json \ + ./scripts/build-sass.ts + @echo "✨ Building sass..." + @./scripts/build-sass.ts + +sass: dist/vendor/sass/index.js + +all: makefile \ + theme \ + models \ + web-extension-polyfill \ + html \ + locales \ + sass diff --git a/README.md b/README.md new file mode 100644 index 0000000..bf6f0ef --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# stylebot + +A userstyle manager extension. + +## Screenshot + + + +## Development + +```sh +pnpm install +make all +pnpm run dev +``` diff --git a/assets/demo.png b/assets/demo.png new file mode 100644 index 0000000..d4a7d38 Binary files /dev/null and b/assets/demo.png differ diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..f859a4b --- /dev/null +++ b/babel.config.js @@ -0,0 +1,16 @@ +/** @type {import('@babel/core').ConfigFunction} */ +module.exports = api => { + if (!api.env("test")) { + return {}; + } + + return { + presets: [], + plugins: [ + ["@babel/plugin-transform-typescript", { allowDeclareFields: true }], + ["@babel/plugin-proposal-decorators", { version: "legacy" }], + "@babel/plugin-transform-modules-commonjs", + "babel-plugin-macros", + ], + }; +}; diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 0000000..0cc584b --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,11 @@ +project_id: "566071" +api_token_env: CROWDIN_PERSONAL_TOKEN +base_path: . +base_url: https://api.crowdin.com +preserve_hierarchy: true +files: + - source: /src/shared/i18n/resources/en-US/*.json + translation: /src/shared/i18n/resources/%locale%/%original_file_name% + + - source: /dist/_locales/en_US/messages.json + translation: /dist/_locales/%locale_with_underscore%/%original_file_name% diff --git a/dist/_locales/en_US/messages.json b/dist/_locales/en_US/messages.json new file mode 100644 index 0000000..1aefb6d --- /dev/null +++ b/dist/_locales/en_US/messages.json @@ -0,0 +1,11 @@ +{ + "extName": { + "message": "Paletterie" + }, + "description": { + "message": "User style manager" + }, + "untitled": { + "message": "Untitled" + } +} diff --git a/dist/assets/fonts/inter/Inter-Black.woff b/dist/assets/fonts/inter/Inter-Black.woff new file mode 100644 index 0000000..a18593a Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Black.woff differ diff --git a/dist/assets/fonts/inter/Inter-Black.woff2 b/dist/assets/fonts/inter/Inter-Black.woff2 new file mode 100644 index 0000000..68f64c9 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Black.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-BlackItalic.woff b/dist/assets/fonts/inter/Inter-BlackItalic.woff new file mode 100644 index 0000000..b6b0194 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-BlackItalic.woff differ diff --git a/dist/assets/fonts/inter/Inter-BlackItalic.woff2 b/dist/assets/fonts/inter/Inter-BlackItalic.woff2 new file mode 100644 index 0000000..1c9c7ca Binary files /dev/null and b/dist/assets/fonts/inter/Inter-BlackItalic.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-Bold.woff b/dist/assets/fonts/inter/Inter-Bold.woff new file mode 100644 index 0000000..eaf3d4b Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Bold.woff differ diff --git a/dist/assets/fonts/inter/Inter-Bold.woff2 b/dist/assets/fonts/inter/Inter-Bold.woff2 new file mode 100644 index 0000000..2846f29 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Bold.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-BoldItalic.woff b/dist/assets/fonts/inter/Inter-BoldItalic.woff new file mode 100644 index 0000000..3275076 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-BoldItalic.woff differ diff --git a/dist/assets/fonts/inter/Inter-BoldItalic.woff2 b/dist/assets/fonts/inter/Inter-BoldItalic.woff2 new file mode 100644 index 0000000..0b1fe8e Binary files /dev/null and b/dist/assets/fonts/inter/Inter-BoldItalic.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-ExtraBold.woff b/dist/assets/fonts/inter/Inter-ExtraBold.woff new file mode 100644 index 0000000..c2c17ed Binary files /dev/null and b/dist/assets/fonts/inter/Inter-ExtraBold.woff differ diff --git a/dist/assets/fonts/inter/Inter-ExtraBold.woff2 b/dist/assets/fonts/inter/Inter-ExtraBold.woff2 new file mode 100644 index 0000000..c24c2bd Binary files /dev/null and b/dist/assets/fonts/inter/Inter-ExtraBold.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-ExtraBoldItalic.woff b/dist/assets/fonts/inter/Inter-ExtraBoldItalic.woff new file mode 100644 index 0000000..c42f705 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-ExtraBoldItalic.woff differ diff --git a/dist/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 b/dist/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 new file mode 100644 index 0000000..4a81dc7 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-ExtraLight.woff b/dist/assets/fonts/inter/Inter-ExtraLight.woff new file mode 100644 index 0000000..d0de5f3 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-ExtraLight.woff differ diff --git a/dist/assets/fonts/inter/Inter-ExtraLight.woff2 b/dist/assets/fonts/inter/Inter-ExtraLight.woff2 new file mode 100644 index 0000000..f2ea706 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-ExtraLight.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-ExtraLightItalic.woff b/dist/assets/fonts/inter/Inter-ExtraLightItalic.woff new file mode 100644 index 0000000..81f1a28 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-ExtraLightItalic.woff differ diff --git a/dist/assets/fonts/inter/Inter-ExtraLightItalic.woff2 b/dist/assets/fonts/inter/Inter-ExtraLightItalic.woff2 new file mode 100644 index 0000000..9af717b Binary files /dev/null and b/dist/assets/fonts/inter/Inter-ExtraLightItalic.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-Italic.woff b/dist/assets/fonts/inter/Inter-Italic.woff new file mode 100644 index 0000000..a806b38 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Italic.woff differ diff --git a/dist/assets/fonts/inter/Inter-Italic.woff2 b/dist/assets/fonts/inter/Inter-Italic.woff2 new file mode 100644 index 0000000..a619fc5 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Italic.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-Light.woff b/dist/assets/fonts/inter/Inter-Light.woff new file mode 100644 index 0000000..c496464 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Light.woff differ diff --git a/dist/assets/fonts/inter/Inter-Light.woff2 b/dist/assets/fonts/inter/Inter-Light.woff2 new file mode 100644 index 0000000..bc4be66 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Light.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-LightItalic.woff b/dist/assets/fonts/inter/Inter-LightItalic.woff new file mode 100644 index 0000000..f84a9de Binary files /dev/null and b/dist/assets/fonts/inter/Inter-LightItalic.woff differ diff --git a/dist/assets/fonts/inter/Inter-LightItalic.woff2 b/dist/assets/fonts/inter/Inter-LightItalic.woff2 new file mode 100644 index 0000000..842b2df Binary files /dev/null and b/dist/assets/fonts/inter/Inter-LightItalic.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-Medium.woff b/dist/assets/fonts/inter/Inter-Medium.woff new file mode 100644 index 0000000..d546843 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Medium.woff differ diff --git a/dist/assets/fonts/inter/Inter-Medium.woff2 b/dist/assets/fonts/inter/Inter-Medium.woff2 new file mode 100644 index 0000000..f92498a Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Medium.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-MediumItalic.woff b/dist/assets/fonts/inter/Inter-MediumItalic.woff new file mode 100644 index 0000000..459a656 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-MediumItalic.woff differ diff --git a/dist/assets/fonts/inter/Inter-MediumItalic.woff2 b/dist/assets/fonts/inter/Inter-MediumItalic.woff2 new file mode 100644 index 0000000..0e3019f Binary files /dev/null and b/dist/assets/fonts/inter/Inter-MediumItalic.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-Regular.woff b/dist/assets/fonts/inter/Inter-Regular.woff new file mode 100644 index 0000000..62d3a61 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Regular.woff differ diff --git a/dist/assets/fonts/inter/Inter-Regular.woff2 b/dist/assets/fonts/inter/Inter-Regular.woff2 new file mode 100644 index 0000000..6c2b689 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Regular.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-SemiBold.woff b/dist/assets/fonts/inter/Inter-SemiBold.woff new file mode 100644 index 0000000..a815f43 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-SemiBold.woff differ diff --git a/dist/assets/fonts/inter/Inter-SemiBold.woff2 b/dist/assets/fonts/inter/Inter-SemiBold.woff2 new file mode 100644 index 0000000..611e90c Binary files /dev/null and b/dist/assets/fonts/inter/Inter-SemiBold.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-SemiBoldItalic.woff b/dist/assets/fonts/inter/Inter-SemiBoldItalic.woff new file mode 100644 index 0000000..909e43a Binary files /dev/null and b/dist/assets/fonts/inter/Inter-SemiBoldItalic.woff differ diff --git a/dist/assets/fonts/inter/Inter-SemiBoldItalic.woff2 b/dist/assets/fonts/inter/Inter-SemiBoldItalic.woff2 new file mode 100644 index 0000000..545685b Binary files /dev/null and b/dist/assets/fonts/inter/Inter-SemiBoldItalic.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-Thin.woff b/dist/assets/fonts/inter/Inter-Thin.woff new file mode 100644 index 0000000..62bc58c Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Thin.woff differ diff --git a/dist/assets/fonts/inter/Inter-Thin.woff2 b/dist/assets/fonts/inter/Inter-Thin.woff2 new file mode 100644 index 0000000..abbc3a5 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-Thin.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-ThinItalic.woff b/dist/assets/fonts/inter/Inter-ThinItalic.woff new file mode 100644 index 0000000..700a7f0 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-ThinItalic.woff differ diff --git a/dist/assets/fonts/inter/Inter-ThinItalic.woff2 b/dist/assets/fonts/inter/Inter-ThinItalic.woff2 new file mode 100644 index 0000000..ab0b200 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-ThinItalic.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-italic.var.woff2 b/dist/assets/fonts/inter/Inter-italic.var.woff2 new file mode 100644 index 0000000..b826d5a Binary files /dev/null and b/dist/assets/fonts/inter/Inter-italic.var.woff2 differ diff --git a/dist/assets/fonts/inter/Inter-roman.var.woff2 b/dist/assets/fonts/inter/Inter-roman.var.woff2 new file mode 100644 index 0000000..6a256a0 Binary files /dev/null and b/dist/assets/fonts/inter/Inter-roman.var.woff2 differ diff --git a/dist/assets/fonts/inter/Inter.var.woff2 b/dist/assets/fonts/inter/Inter.var.woff2 new file mode 100644 index 0000000..365eedc Binary files /dev/null and b/dist/assets/fonts/inter/Inter.var.woff2 differ diff --git a/dist/assets/fonts/inter/LICENSE.txt b/dist/assets/fonts/inter/LICENSE.txt new file mode 100644 index 0000000..ff80f8c --- /dev/null +++ b/dist/assets/fonts/inter/LICENSE.txt @@ -0,0 +1,94 @@ +Copyright (c) 2016-2020 The Inter Project Authors. +"Inter" is trademark of Rasmus Andersson. +https://github.com/rsms/inter + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION AND CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/dist/assets/fonts/inter/inter.css b/dist/assets/fonts/inter/inter.css new file mode 100644 index 0000000..1cb9bf2 --- /dev/null +++ b/dist/assets/fonts/inter/inter.css @@ -0,0 +1,199 @@ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url("Inter-Thin.woff2?v=3.19") format("woff2"), + url("Inter-Thin.woff?v=3.19") format("woff"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 100; + font-display: swap; + src: url("Inter-ThinItalic.woff2?v=3.19") format("woff2"), + url("Inter-ThinItalic.woff?v=3.19") format("woff"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 200; + font-display: swap; + src: url("Inter-ExtraLight.woff2?v=3.19") format("woff2"), + url("Inter-ExtraLight.woff?v=3.19") format("woff"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 200; + font-display: swap; + src: url("Inter-ExtraLightItalic.woff2?v=3.19") format("woff2"), + url("Inter-ExtraLightItalic.woff?v=3.19") format("woff"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url("Inter-Light.woff2?v=3.19") format("woff2"), + url("Inter-Light.woff?v=3.19") format("woff"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 300; + font-display: swap; + src: url("Inter-LightItalic.woff2?v=3.19") format("woff2"), + url("Inter-LightItalic.woff?v=3.19") format("woff"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("Inter-Regular.woff2?v=3.19") format("woff2"), + url("Inter-Regular.woff?v=3.19") format("woff"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url("Inter-Italic.woff2?v=3.19") format("woff2"), + url("Inter-Italic.woff?v=3.19") format("woff"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url("Inter-Medium.woff2?v=3.19") format("woff2"), + url("Inter-Medium.woff?v=3.19") format("woff"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 500; + font-display: swap; + src: url("Inter-MediumItalic.woff2?v=3.19") format("woff2"), + url("Inter-MediumItalic.woff?v=3.19") format("woff"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url("Inter-SemiBold.woff2?v=3.19") format("woff2"), + url("Inter-SemiBold.woff?v=3.19") format("woff"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 600; + font-display: swap; + src: url("Inter-SemiBoldItalic.woff2?v=3.19") format("woff2"), + url("Inter-SemiBoldItalic.woff?v=3.19") format("woff"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url("Inter-Bold.woff2?v=3.19") format("woff2"), + url("Inter-Bold.woff?v=3.19") format("woff"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 700; + font-display: swap; + src: url("Inter-BoldItalic.woff2?v=3.19") format("woff2"), + url("Inter-BoldItalic.woff?v=3.19") format("woff"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 800; + font-display: swap; + src: url("Inter-ExtraBold.woff2?v=3.19") format("woff2"), + url("Inter-ExtraBold.woff?v=3.19") format("woff"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 800; + font-display: swap; + src: url("Inter-ExtraBoldItalic.woff2?v=3.19") format("woff2"), + url("Inter-ExtraBoldItalic.woff?v=3.19") format("woff"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 900; + font-display: swap; + src: url("Inter-Black.woff2?v=3.19") format("woff2"), + url("Inter-Black.woff?v=3.19") format("woff"); +} +@font-face { + font-family: "Inter"; + font-style: italic; + font-weight: 900; + font-display: swap; + src: url("Inter-BlackItalic.woff2?v=3.19") format("woff2"), + url("Inter-BlackItalic.woff?v=3.19") format("woff"); +} + +/* ------------------------------------------------------- +Variable font. +Usage: + + html { font-family: 'Inter', sans-serif; } + @supports (font-variation-settings: normal) { + html { font-family: 'Inter var', sans-serif; } + } +*/ +@font-face { + font-family: "Inter var"; + font-weight: 100 900; + font-display: swap; + font-style: normal; + font-named-instance: "Regular"; + src: url("Inter-roman.var.woff2?v=3.19") format("woff2"); +} +@font-face { + font-family: "Inter var"; + font-weight: 100 900; + font-display: swap; + font-style: italic; + font-named-instance: "Italic"; + src: url("Inter-italic.var.woff2?v=3.19") format("woff2"); +} + +/* -------------------------------------------------------------------------- +[EXPERIMENTAL] Multi-axis, single variable font. + +Slant axis is not yet widely supported (as of February 2019) and thus this +multi-axis single variable font is opt-in rather than the default. + +When using this, you will probably need to set font-variation-settings +explicitly, e.g. + + * { font-variation-settings: "slnt" 0deg } + .italic { font-variation-settings: "slnt" 10deg } + +*/ +@font-face { + font-family: "Inter var experimental"; + font-weight: 100 900; + font-display: swap; + font-style: oblique 0deg 10deg; + src: url("Inter.var.woff2?v=3.19") format("woff2"); +} diff --git a/dist/assets/images/128.png b/dist/assets/images/128.png new file mode 100755 index 0000000..4cd5d4b Binary files /dev/null and b/dist/assets/images/128.png differ diff --git a/dist/assets/images/128w.png b/dist/assets/images/128w.png new file mode 100755 index 0000000..f4a0aa2 Binary files /dev/null and b/dist/assets/images/128w.png differ diff --git a/dist/assets/images/16.png b/dist/assets/images/16.png new file mode 100755 index 0000000..ecf2509 Binary files /dev/null and b/dist/assets/images/16.png differ diff --git a/dist/assets/images/16w.png b/dist/assets/images/16w.png new file mode 100755 index 0000000..327d24b Binary files /dev/null and b/dist/assets/images/16w.png differ diff --git a/dist/assets/images/19.png b/dist/assets/images/19.png new file mode 100755 index 0000000..2a1dc4a Binary files /dev/null and b/dist/assets/images/19.png differ diff --git a/dist/assets/images/19w.png b/dist/assets/images/19w.png new file mode 100755 index 0000000..4109ebc Binary files /dev/null and b/dist/assets/images/19w.png differ diff --git a/dist/assets/images/256.png b/dist/assets/images/256.png new file mode 100755 index 0000000..aa8a38a Binary files /dev/null and b/dist/assets/images/256.png differ diff --git a/dist/assets/images/256w.png b/dist/assets/images/256w.png new file mode 100755 index 0000000..357e77b Binary files /dev/null and b/dist/assets/images/256w.png differ diff --git a/dist/assets/images/32.png b/dist/assets/images/32.png new file mode 100755 index 0000000..e997480 Binary files /dev/null and b/dist/assets/images/32.png differ diff --git a/dist/assets/images/32w.png b/dist/assets/images/32w.png new file mode 100755 index 0000000..1d41a92 Binary files /dev/null and b/dist/assets/images/32w.png differ diff --git a/dist/assets/images/38.png b/dist/assets/images/38.png new file mode 100755 index 0000000..b912910 Binary files /dev/null and b/dist/assets/images/38.png differ diff --git a/dist/assets/images/38w.png b/dist/assets/images/38w.png new file mode 100755 index 0000000..8c15172 Binary files /dev/null and b/dist/assets/images/38w.png differ diff --git a/dist/assets/images/48.png b/dist/assets/images/48.png new file mode 100755 index 0000000..f932386 Binary files /dev/null and b/dist/assets/images/48.png differ diff --git a/dist/assets/images/48w.png b/dist/assets/images/48w.png new file mode 100755 index 0000000..10bd645 Binary files /dev/null and b/dist/assets/images/48w.png differ diff --git a/dist/assets/images/64.png b/dist/assets/images/64.png new file mode 100755 index 0000000..e984ebe Binary files /dev/null and b/dist/assets/images/64.png differ diff --git a/dist/assets/images/64w.png b/dist/assets/images/64w.png new file mode 100755 index 0000000..d92b72d Binary files /dev/null and b/dist/assets/images/64w.png differ diff --git a/dist/manifest.json b/dist/manifest.json new file mode 100644 index 0000000..dcb5200 --- /dev/null +++ b/dist/manifest.json @@ -0,0 +1,56 @@ +{ + "name": "__MSG_extName__", + "version": "19.11.6", + "description": "__MSG_description__", + "manifest_version": 2, + "default_locale": "en_US", + "icons": { + "64": "assets/images/64.png", + "128": "assets/images/128.png", + "256": "assets/images/256.png" + }, + "permissions": [ + "tabs", + "downloads", + "webNavigation", + "storage", + "http://*/", + "https://*/", + "chrome://favicon/" + ], + "content_security_policy": "script-src 'unsafe-inline' 'self' http://localhost:8097/; object-src 'self'", + "minimum_chrome_version": "90.0", + "background": { + "page": "background.html", + "persistent": true + }, + "devtools_page": "devtools.html", + "content_scripts": [ + { + "matches": [""], + "run_at": "document_start", + "all_frames": true, + "js": ["app/context/index.js"] + }, + { + "matches": ["http://userstyles.org/*", "https://userstyles.org/*"], + "run_at": "document_end", + "all_frames": false, + "js": ["app/install/index.js"] + } + ], + "options_ui": { + "page": "options.html", + "open_in_tab": true + }, + "browser_action": { + "default_icon": { + "16": "assets/images/16w.png", + "19": "assets/images/19w.png", + "32": "assets/images/32w.png", + "38": "assets/images/38w.png" + }, + "default_title": "__MSG_extName__", + "default_popup": "popup.html" + } +} diff --git a/eslint-local-rules/no-deep-relative-import.ts b/eslint-local-rules/no-deep-relative-import.ts new file mode 100644 index 0000000..564f53b --- /dev/null +++ b/eslint-local-rules/no-deep-relative-import.ts @@ -0,0 +1,62 @@ +import type { Rule } from "eslint" + +interface RuleOptions { + /** + * The maximum number of times a relative path import can go to the parent directory. + */ + maxDepth?: number +} + +const rule: Rule.RuleModule = { + meta: { + type: "suggestion", + docs: { + description: + "Bans relative path imports that go to the parent directory too many times", + category: "Best Practices", + recommended: true, + }, + fixable: "code", + schema: [ + { + type: "object", + properties: { + maxDepth: { + type: "integer", + minimum: 1, + }, + }, + additionalProperties: false, + }, + ], + }, + create(context) { + const { maxDepth = 3 } = (context.options[0] || {}) as RuleOptions + const errorMessage = `Relative path imports cannot go to the parent directory more than ${maxDepth} levels` + + return { + ImportDeclaration(node) { + const { source } = node + if ( + source.type === "Literal" && + typeof source.value === "string" && + source.value.startsWith("..") + ) { + const depth = source.value.match(/\.\.\//g)?.length ?? 0 + if (depth > maxDepth) { + context.report({ + node: source, + message: errorMessage, + fix(fixer) { + const newValue = (source.value as string)!.replace(/\.\.\//g, "") + return fixer.replaceText(source, `'${newValue}'`) + }, + }) + } + } + }, + } + }, +} + +export default rule diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000..94341ad --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,212 @@ +import type { Config } from "@jest/types"; +/* + * For a detailed explanation regarding each configuration property and type check, visit: + * https://jestjs.io/docs/configuration + */ + +const config: Partial & { + [key: string]: any; +} = { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "/private/var/folders/cz/tgksgqzx1vsg96sc_zk1sql00000gn/T/jest_dx", + + // Automatically clear mock calls, instances, contexts and results before every test + clearMocks: true, + + // Indicates whether the coverage information should be collected while executing the test + collectCoverage: true, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + // collectCoverageFrom: undefined, + + // The directory where Jest should output its coverage files + coverageDirectory: ".jest/coverage", + + // An array of regexp pattern strings used to skip coverage collection + // coveragePathIgnorePatterns: [ + // "/node_modules/" + // ], + + // Indicates which provider should be used to instrument code for coverage + coverageProvider: "v8", + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // "json", + // "text", + // "lcov", + // "clover" + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: undefined, + + // A path to a custom dependency extractor + // dependencyExtractor: undefined, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // The default configuration for fake timers + // fakeTimers: { + // "enableGlobally": false + // }, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: undefined, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: undefined, + + // A set of global variables that need to be available in all test environments + // globals: {}, + + // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. + // maxWorkers: "50%", + + // An array of directory names to be searched recursively up from the requiring module's location + // moduleDirectories: [ + // "node_modules" + // ], + + // An array of file extensions your modules use + // moduleFileExtensions: [ + // "js", + // "mjs", + // "cjs", + // "jsx", + // "ts", + // "tsx", + // "json", + // "node" + // ], + + // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module + moduleNameMapper: { + "^~/(.*)$": "/src/$1", + }, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + // preset: undefined, + + // Run tests from one or more projects + // projects: undefined, + + // Use this configuration option to add custom reporters to Jest + reporters: [ + "default", + [ + "jest-html-reporters", + { + publicPath: ".jest/reports", + filename: "index.html", + darkTheme: true, + }, + ], + ], + + // Automatically reset mock state before every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: undefined, + + // Automatically restore mock state and implementation before every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: undefined, + + // A list of paths to directories that Jest should use to search for files in + // roots: [ + // "" + // ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + setupFilesAfterEnv: ["./src/setupTest.ts"], + + // The number of seconds after which a test is considered as slow and reported as such in the results. + // slowTestThreshold: 5, + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + testEnvironment: "node", + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + // testMatch: [ + // "**/__tests__/**/*.[jt]s?(x)", + // "**/?(*.)+(spec|test).[tj]s?(x)" + // ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // "/node_modules/" + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: undefined, + + // This option allows use of a custom test runner + // testRunner: "jest-circus/runner", + + // A map from regular expressions to paths to transformers + // transform: undefined, + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "/node_modules/", + // "\\.pnp\\.[^\\/]+$" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: undefined, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +}; + +export default config; diff --git a/package.json b/package.json new file mode 100644 index 0000000..8560ad8 --- /dev/null +++ b/package.json @@ -0,0 +1,164 @@ +{ + "name": "extension", + "version": "0.1.0", + "private": true, + "license": "GPL-3.0", + "scripts": { + "dev": "NODE_ENV=development yarn build apps -w", + "build:app": "NODE_ENV=production yarn build apps", + "build:gecko": "build-gecko ./dist -name test -o ./gecko.zip", + "build": "./scripts/build.sh", + "watch": "npm run dev", + "codegen": "./scripts/build-gql.ts", + "preinstall": "node ./scripts/build-shims.js", + "typecheck": "tsc --noEmit --skipLibCheck" + }, + "resolutions": { + "cross-fetch": "./shims/cross-fetch", + "is-number": "./shims/is-number" + }, + "devDependencies": { + "@aet/eslint-rules": "0.0.1-beta.23", + "@aet/gql-tools": "0.0.1-beta.3", + "@aet/hooks": "npm:@proteria/hooks@^0.0.2", + "@aet/icons": "0.0.1-beta.5", + "@apollo/client": "^3.7.17", + "@babel/core": "^7.22.9", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5", + "@csstools/postcss-sass": "^5.0.1", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/css": "^11.11.2", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/react": "^11.11.1", + "@emotion/serialize": "^1.1.2", + "@emotion/styled": "^11.11.0", + "@graphql-codegen/add": "^5.0.0", + "@graphql-codegen/plugin-helpers": "^5.0.1", + "@graphql-codegen/typescript": "^4.0.1", + "@graphql-codegen/typescript-operations": "^4.0.1", + "@graphql-tools/code-file-loader": "^8.0.2", + "@graphql-tools/graphql-file-loader": "^8.0.0", + "@headlessui/react": "^1.7.16", + "@monaco-editor/react": "^4.5.1", + "@primer/primitives": "^7.11.14", + "@react-hookz/web": "^23.1.0", + "@szhsin/react-menu": "4.0.2", + "@types/babel-plugin-macros": "^3.1.0", + "@types/babel__core": "^7.20.1", + "@types/babel__template": "^7.4.1", + "@types/chrome": "^0.0.242", + "@types/convert-source-map": "^2.0.0", + "@types/debug": "^4.1.8", + "@types/dedent": "^0.7.0", + "@types/element-resize-detector": "^1.1.3", + "@types/glob-to-regexp": "^0.4.1", + "@types/js-yaml": "^4.0.5", + "@types/lodash": "^4.14.196", + "@types/lodash-es": "^4.17.8", + "@types/node": "^20.4.5", + "@types/pouchdb-browser": "^6.1.3", + "@types/prettier": "^2.7.3", + "@types/react": "^18.2.18", + "@types/react-dom": "^18.2.7", + "@types/react-helmet": "^6.1.6", + "@types/react-window": "^1.8.5", + "@types/stylis": "^4.2.0", + "@types/ua-parser-js": "^0.7.36", + "@types/w3c-css-typed-object-model-level-1": "20180410.0.5", + "@types/webextension-polyfill": "^0.10.1", + "@vscode/codicons": "^0.0.33", + "async-mutex": "^0.4.0", + "babel-plugin-macros": "3.1.0", + "babel-plugin-transform-minify-gql-template-literals": "1.1.1", + "browserslist": "^4.21.10", + "comlink": "^4.4.1", + "commander": "^11.0.0", + "debug": "^4.3.4", + "dedent": "1.5.1", + "dotenv": "^16.3.1", + "esbin": "0.0.1-beta.2", + "esbuild": "0.18.17", + "esbuild-plugin-sass": "^1.0.1", + "eslint": "8.46.0", + "eslint-plugin-unicorn": "^48.0.1", + "fast-glob": "^3.3.1", + "fuse.js": "^6.6.2", + "glob-to-regexp": "^0.4.1", + "graphiql": "^3.0.5", + "graphql": "^16.7.1", + "graphql-type-json": "^0.3.2", + "hooks.macro": "^1.1.2", + "i18next": "^23.4.1", + "i18next-http-backend": "2.2.1", + "i18next-icu": "^2.3.0", + "idb-keyval": "^6.2.1", + "immer": "^10.0.2", + "intl-messageformat": "^10.5.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash.noop": "^3.0.1", + "lru-cache": "^10.0.0", + "memoize-one": "6.0.0", + "monaco-editor": "^0.40.0", + "nanoid": "^4.0.2", + "normalize.css": "^8.0.1", + "postcss": "^8.4.27", + "postcss-modules": "^6.0.0", + "pouchdb-browser": "^8.0.1", + "prettier": "^3.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-helmet": "^6.1.0", + "react-hot-toast": "^2.4.1", + "react-i18next": "^13.0.3", + "react-window": "^1.8.9", + "reflect-metadata": "0.1.13", + "sass": "^1.64.2", + "scheduler": "^0.23.0", + "src": "npm:lodash.noop@3.0.1", + "superjson": "^1.13.1", + "tiny-invariant": "^1.3.1", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "tslib": "^2.6.1", + "tua-body-scroll-lock": "^1.4.0", + "typed-emitter": "^2.1.0", + "typescript": "5.2.0-beta", + "typescript-plugin-css-modules": "^5.0.1", + "ua-parser-js": "^1.0.35", + "use-context-selector": "^1.4.1", + "webextension-polyfill": "^0.10.0", + "zod": "^3.21.4" + }, + "prettier": { + "arrowParens": "avoid", + "tabWidth": 2, + "printWidth": 90, + "semi": false, + "singleQuote": false, + "trailingComma": "all" + }, + "imports": { + "#src/*": "./src/*" + }, + "eslintIgnore": [ + "dist" + ], + "pnpm": { + "patchedDependencies": { + "@apollo/client@3.7.17": "patches/@apollo__client@3.7.17.patch", + "@headlessui/react@1.7.16": "patches/@headlessui__react@1.7.16.patch", + "i18next-http-backend@2.2.1": "patches/i18next-http-backend@2.2.1.patch", + "monaco-editor@0.40.0": "patches/monaco-editor@0.40.0.patch", + "@aet/gql-tools@0.0.1-beta.3": "patches/@aet__gql-tools@0.0.1-beta.3.patch" + }, + "overrides": { + "cross-fetch": "./shims/cross-fetch", + "node-gyp": "./node_modules/lodash.noop", + "@graphql-tools/relay-operation-optimizer": "./node_modules/lodash.noop" + } + } +} diff --git a/patches/@aet__gql-tools@0.0.1-beta.3.patch b/patches/@aet__gql-tools@0.0.1-beta.3.patch new file mode 100644 index 0000000..15782dc --- /dev/null +++ b/patches/@aet__gql-tools@0.0.1-beta.3.patch @@ -0,0 +1,21 @@ +diff --git a/type-graphql.mjs b/type-graphql.mjs +index 1723cb707fb365a7e68d073093f75960e405a463..4a36c76eeced8c2009c5480a154c150006361e7d 100644 +--- a/type-graphql.mjs ++++ b/type-graphql.mjs +@@ -3,7 +3,6 @@ import { GraphQLError, GraphQLScalarType, GraphQLFloat, GraphQLBoolean, GraphQLS + export { GraphQLFloat as Float, GraphQLID as ID, GraphQLInt as Int } from 'graphql'; + import { GraphQLBigInt, GraphQLDateTimeISO } from 'graphql-scalars'; + export { GraphQLBigInt, GraphQLDateTimeISO as GraphQLISODateTime, GraphQLTimestamp } from 'graphql-scalars'; +-import { PubSub as PubSub$1, withFilter } from 'graphql-subscriptions'; + + class ArgumentValidationError extends GraphQLError { + constructor(validationErrors) { +@@ -903,7 +902,7 @@ class BuildContext { + disableInferringDefaultValues; + #pubSub; + get pubSub() { +- return this.#pubSub ?? (this.#pubSub = new PubSub$1()); ++ return this.#pubSub; + } + /** + * Set static fields with current building context data \ No newline at end of file diff --git a/patches/@apollo__client@3.7.17.patch b/patches/@apollo__client@3.7.17.patch new file mode 100644 index 0000000..a17184a --- /dev/null +++ b/patches/@apollo__client@3.7.17.patch @@ -0,0 +1,13 @@ +diff --git a/react/context/ApolloProvider.d.ts b/react/context/ApolloProvider.d.ts +index 3d12c9e1e8bf6b33f603cdb2504142edc818eff7..ccc569dc90b7f0fa40b5347dd33c025894539ba1 100644 +--- a/react/context/ApolloProvider.d.ts ++++ b/react/context/ApolloProvider.d.ts +@@ -2,7 +2,7 @@ import * as React from 'react'; + import { ApolloClient } from '../../core'; + export interface ApolloProviderProps { + client: ApolloClient; +- children: React.ReactNode | React.ReactNode[] | null; ++ children?: React.ReactNode | React.ReactNode[] | null; + } + export declare const ApolloProvider: React.FC>; + //# sourceMappingURL=ApolloProvider.d.ts.map \ No newline at end of file diff --git a/patches/@headlessui__react@1.7.16.patch b/patches/@headlessui__react@1.7.16.patch new file mode 100644 index 0000000..9775e04 --- /dev/null +++ b/patches/@headlessui__react@1.7.16.patch @@ -0,0 +1,13 @@ +diff --git a/dist/components/popover/popover.d.ts b/dist/components/popover/popover.d.ts +index 3c7ee4ecbd5ac4411fbcc19f777876331bb0d640..080665fd90eaeb1370c7ec1e1f3281b6e2301bb3 100644 +--- a/dist/components/popover/popover.d.ts ++++ b/dist/components/popover/popover.d.ts +@@ -3,7 +3,7 @@ import { Props } from '../../types.js'; + import { PropsForFeatures, HasDisplayName, RefProp } from '../../utils/render.js'; + type MouseEvent = Parameters>[0]; + declare let DEFAULT_POPOVER_TAG: "div"; +-interface PopoverRenderPropArg { ++export interface PopoverRenderPropArg { + open: boolean; + close(focusableElement?: HTMLElement | MutableRefObject | MouseEvent): void; + } \ No newline at end of file diff --git a/patches/i18next-http-backend@2.2.1.patch b/patches/i18next-http-backend@2.2.1.patch new file mode 100644 index 0000000..b38e3c1 --- /dev/null +++ b/patches/i18next-http-backend@2.2.1.patch @@ -0,0 +1,22 @@ +diff --git a/esm/getFetch.cjs b/esm/getFetch.cjs +deleted file mode 100644 +index 9e99af3cae1cb4e1ebb543c510132741bc7036e5..0000000000000000000000000000000000000000 +diff --git a/esm/getFetch.js b/esm/getFetch.js +new file mode 100644 +index 0000000000000000000000000000000000000000..7b36684e2e54181eb45f5d2b718f3da5a925ea40 +--- /dev/null ++++ b/esm/getFetch.js +@@ -0,0 +1 @@ ++export default globalThis.fetch; +diff --git a/esm/request.js b/esm/request.js +index b6a6e8976beab48feaa9eedcd44fc2945f27952d..02ccb089b571bb8627a297abaa131c6657861481 100644 +--- a/esm/request.js ++++ b/esm/request.js +@@ -1,6 +1,6 @@ + function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } + import { defaults, hasXMLHttpRequest } from './utils.js'; +-import * as fetchNode from './getFetch.cjs'; ++import * as fetchNode from './getFetch.js'; + var fetchApi; + if (typeof fetch === 'function') { + if (typeof global !== 'undefined' && global.fetch) { \ No newline at end of file diff --git a/patches/monaco-editor@0.40.0.patch b/patches/monaco-editor@0.40.0.patch new file mode 100644 index 0000000..be76fb6 --- /dev/null +++ b/patches/monaco-editor@0.40.0.patch @@ -0,0 +1,70 @@ +diff --git a/esm/vs/language/css/css.worker.js b/esm/vs/language/css/css.worker.js +index 4ba8b6ca8fda98d7f6c23a4e7f46549991b0085a..828be81d67eee01891ca1a8a47378d4877e22243 100644 +--- a/esm/vs/language/css/css.worker.js ++++ b/esm/vs/language/css/css.worker.js +@@ -17983,6 +17983,9 @@ var cssData = { + { + "name": "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif" + }, ++ { ++ "name": "system-ui, sans-serif" ++ }, + { + "name": "Arial, Helvetica, sans-serif" + }, +@@ -30198,6 +30201,55 @@ var cssData = { + "identifier" + ] + }, ++ { ++ "name": "-webkit-font-smoothing", ++ "browsers": [ ++ "S4", ++ "C5" ++ ], ++ "values": [ ++ { ++ "name": "auto", ++ "description": "Let the browser decide (Uses subpixel anti-aliasing when available; this is the default)" ++ }, ++ { ++ "name": "none", ++ "description": "Turn font smoothing off; display text with jagged sharp edges." ++ }, ++ { ++ "name": "antialiased", ++ "description": "Smooth the font on the level of the pixel, as opposed to the subpixel. Switching from subpixel rendering to antialiasing for light text on dark backgrounds makes it look lighter." ++ }, ++ { ++ "name": "subpixel-antialiased", ++ "description": "On most non-retina displays, this will give the sharpest text." ++ } ++ ], ++ "description": "Controls the application of anti-aliasing when fonts are rendered.", ++ "restrictions": [ ++ "identifier" ++ ] ++ }, ++ { ++ "name": "-moz-osx-font-smoothing", ++ "browsers": [ ++ "F25" ++ ], ++ "values": [ ++ { ++ "name": "auto", ++ "description": "Allow the browser to select an optimization for font smoothing, typically grayscale." ++ }, ++ { ++ "name": "grayscale", ++ "description": "Render text with grayscale antialiasing, as opposed to the subpixel. Switching from subpixel rendering to antialiasing for light text on dark backgrounds makes it look lighter." ++ } ++ ], ++ "description": "Controls the application of anti-aliasing when fonts are rendered.", ++ "restrictions": [ ++ "identifier" ++ ] ++ }, + { + "name": "-webkit-font-feature-settings", + "browsers": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..172ed81 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,7325 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +overrides: + cross-fetch: ./shims/cross-fetch + node-gyp: ./node_modules/lodash.noop + '@graphql-tools/relay-operation-optimizer': ./node_modules/lodash.noop + +patchedDependencies: + '@aet/gql-tools@0.0.1-beta.3': + hash: 47vkx3rn6phx3mk5fuqtmfzx34 + path: patches/@aet__gql-tools@0.0.1-beta.3.patch + '@apollo/client@3.7.17': + hash: t7vxnytrj25ktypmqrdayqgr3y + path: patches/@apollo__client@3.7.17.patch + '@headlessui/react@1.7.16': + hash: nwe5csvy6f3sk73c47zwlim4za + path: patches/@headlessui__react@1.7.16.patch + i18next-http-backend@2.2.1: + hash: oxpqp5jjldpyo63xee6uzmu3na + path: patches/i18next-http-backend@2.2.1.patch + monaco-editor@0.40.0: + hash: ku3o7hkzj5ntzax27c7xlqnuoa + path: patches/monaco-editor@0.40.0.patch + +devDependencies: + '@aet/eslint-rules': + specifier: 0.0.1-beta.23 + version: 0.0.1-beta.23(eslint-plugin-import@2.28.0)(eslint@8.46.0)(typescript@5.2.0-beta) + '@aet/gql-tools': + specifier: 0.0.1-beta.3 + version: 0.0.1-beta.3(patch_hash=47vkx3rn6phx3mk5fuqtmfzx34)(graphql@16.7.1)(lodash@4.17.21) + '@aet/hooks': + specifier: npm:@proteria/hooks@^0.0.2 + version: /@proteria/hooks@0.0.2(react-dom@18.2.0)(react@18.2.0) + '@aet/icons': + specifier: 0.0.1-beta.5 + version: 0.0.1-beta.5 + '@apollo/client': + specifier: ^3.7.17 + version: 3.7.17(patch_hash=t7vxnytrj25ktypmqrdayqgr3y)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0) + '@babel/core': + specifier: ^7.22.9 + version: 7.22.9 + '@babel/template': + specifier: ^7.22.5 + version: 7.22.5 + '@babel/types': + specifier: ^7.22.5 + version: 7.22.5 + '@csstools/postcss-sass': + specifier: ^5.0.1 + version: 5.0.1(postcss@8.4.27) + '@emotion/babel-plugin': + specifier: ^11.11.0 + version: 11.11.0 + '@emotion/css': + specifier: ^11.11.2 + version: 11.11.2 + '@emotion/hash': + specifier: ^0.9.1 + version: 0.9.1 + '@emotion/memoize': + specifier: ^0.8.1 + version: 0.8.1 + '@emotion/react': + specifier: ^11.11.1 + version: 11.11.1(@types/react@18.2.18)(react@18.2.0) + '@emotion/serialize': + specifier: ^1.1.2 + version: 1.1.2 + '@emotion/styled': + specifier: ^11.11.0 + version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.18)(react@18.2.0) + '@graphql-codegen/add': + specifier: ^5.0.0 + version: 5.0.0(graphql@16.7.1) + '@graphql-codegen/plugin-helpers': + specifier: ^5.0.1 + version: 5.0.1(graphql@16.7.1) + '@graphql-codegen/typescript': + specifier: ^4.0.1 + version: 4.0.1(graphql@16.7.1) + '@graphql-codegen/typescript-operations': + specifier: ^4.0.1 + version: 4.0.1(graphql@16.7.1) + '@graphql-tools/code-file-loader': + specifier: ^8.0.2 + version: 8.0.2(graphql@16.7.1) + '@graphql-tools/graphql-file-loader': + specifier: ^8.0.0 + version: 8.0.0(graphql@16.7.1) + '@headlessui/react': + specifier: ^1.7.16 + version: 1.7.16(patch_hash=nwe5csvy6f3sk73c47zwlim4za)(react-dom@18.2.0)(react@18.2.0) + '@monaco-editor/react': + specifier: ^4.5.1 + version: 4.5.1(monaco-editor@0.40.0)(react-dom@18.2.0)(react@18.2.0) + '@primer/primitives': + specifier: ^7.11.14 + version: 7.11.14 + '@react-hookz/web': + specifier: ^23.1.0 + version: 23.1.0(react-dom@18.2.0)(react@18.2.0) + '@szhsin/react-menu': + specifier: 4.0.2 + version: 4.0.2(react-dom@18.2.0)(react@18.2.0) + '@types/babel-plugin-macros': + specifier: ^3.1.0 + version: 3.1.0 + '@types/babel__core': + specifier: ^7.20.1 + version: 7.20.1 + '@types/babel__template': + specifier: ^7.4.1 + version: 7.4.1 + '@types/chrome': + specifier: ^0.0.242 + version: 0.0.242 + '@types/convert-source-map': + specifier: ^2.0.0 + version: 2.0.0 + '@types/debug': + specifier: ^4.1.8 + version: 4.1.8 + '@types/dedent': + specifier: ^0.7.0 + version: 0.7.0 + '@types/element-resize-detector': + specifier: ^1.1.3 + version: 1.1.3 + '@types/glob-to-regexp': + specifier: ^0.4.1 + version: 0.4.1 + '@types/js-yaml': + specifier: ^4.0.5 + version: 4.0.5 + '@types/lodash': + specifier: ^4.14.196 + version: 4.14.196 + '@types/lodash-es': + specifier: ^4.17.8 + version: 4.17.8 + '@types/node': + specifier: ^20.4.5 + version: 20.4.5 + '@types/pouchdb-browser': + specifier: ^6.1.3 + version: 6.1.3 + '@types/prettier': + specifier: ^2.7.3 + version: 2.7.3 + '@types/react': + specifier: ^18.2.18 + version: 18.2.18 + '@types/react-dom': + specifier: ^18.2.7 + version: 18.2.7 + '@types/react-helmet': + specifier: ^6.1.6 + version: 6.1.6 + '@types/react-window': + specifier: ^1.8.5 + version: 1.8.5 + '@types/stylis': + specifier: ^4.2.0 + version: 4.2.0 + '@types/ua-parser-js': + specifier: ^0.7.36 + version: 0.7.36 + '@types/w3c-css-typed-object-model-level-1': + specifier: 20180410.0.5 + version: 20180410.0.5 + '@types/webextension-polyfill': + specifier: ^0.10.1 + version: 0.10.1 + '@vscode/codicons': + specifier: ^0.0.33 + version: 0.0.33 + async-mutex: + specifier: ^0.4.0 + version: 0.4.0 + babel-plugin-macros: + specifier: 3.1.0 + version: 3.1.0 + babel-plugin-transform-minify-gql-template-literals: + specifier: 1.1.1 + version: 1.1.1 + browserslist: + specifier: ^4.21.10 + version: 4.21.10 + comlink: + specifier: ^4.4.1 + version: 4.4.1 + commander: + specifier: ^11.0.0 + version: 11.0.0 + debug: + specifier: ^4.3.4 + version: 4.3.4 + dedent: + specifier: 1.5.1 + version: 1.5.1(babel-plugin-macros@3.1.0) + dotenv: + specifier: ^16.3.1 + version: 16.3.1 + esbin: + specifier: 0.0.1-beta.2 + version: 0.0.1-beta.2(esbuild@0.18.17) + esbuild: + specifier: 0.18.17 + version: 0.18.17 + esbuild-plugin-sass: + specifier: ^1.0.1 + version: 1.0.1(esbuild@0.18.17) + eslint: + specifier: 8.46.0 + version: 8.46.0 + eslint-plugin-unicorn: + specifier: ^48.0.1 + version: 48.0.1(eslint@8.46.0) + fast-glob: + specifier: ^3.3.1 + version: 3.3.1 + fuse.js: + specifier: ^6.6.2 + version: 6.6.2 + glob-to-regexp: + specifier: ^0.4.1 + version: 0.4.1 + graphiql: + specifier: ^3.0.5 + version: 3.0.5(@codemirror/language@6.0.0)(@types/node@20.4.5)(@types/react-dom@18.2.7)(@types/react@18.2.18)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0) + graphql: + specifier: ^16.7.1 + version: 16.7.1 + graphql-type-json: + specifier: ^0.3.2 + version: 0.3.2(graphql@16.7.1) + hooks.macro: + specifier: ^1.1.2 + version: 1.1.2(react@18.2.0) + i18next: + specifier: ^23.4.1 + version: 23.4.1 + i18next-http-backend: + specifier: 2.2.1 + version: 2.2.1(patch_hash=oxpqp5jjldpyo63xee6uzmu3na) + i18next-icu: + specifier: ^2.3.0 + version: 2.3.0(intl-messageformat@10.5.0) + idb-keyval: + specifier: ^6.2.1 + version: 6.2.1 + immer: + specifier: ^10.0.2 + version: 10.0.2 + intl-messageformat: + specifier: ^10.5.0 + version: 10.5.0 + js-yaml: + specifier: ^4.1.0 + version: 4.1.0 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + lodash.noop: + specifier: ^3.0.1 + version: 3.0.1 + lru-cache: + specifier: ^10.0.0 + version: 10.0.0 + memoize-one: + specifier: 6.0.0 + version: 6.0.0 + monaco-editor: + specifier: ^0.40.0 + version: 0.40.0(patch_hash=ku3o7hkzj5ntzax27c7xlqnuoa) + nanoid: + specifier: ^4.0.2 + version: 4.0.2 + normalize.css: + specifier: ^8.0.1 + version: 8.0.1 + postcss: + specifier: ^8.4.27 + version: 8.4.27 + postcss-modules: + specifier: ^6.0.0 + version: 6.0.0(postcss@8.4.27) + pouchdb-browser: + specifier: ^8.0.1 + version: 8.0.1 + prettier: + specifier: ^3.0.0 + version: 3.0.0 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + react-helmet: + specifier: ^6.1.0 + version: 6.1.0(react@18.2.0) + react-hot-toast: + specifier: ^2.4.1 + version: 2.4.1(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0) + react-i18next: + specifier: ^13.0.3 + version: 13.0.3(i18next@23.4.1)(react-dom@18.2.0)(react@18.2.0) + react-window: + specifier: ^1.8.9 + version: 1.8.9(react-dom@18.2.0)(react@18.2.0) + reflect-metadata: + specifier: 0.1.13 + version: 0.1.13 + sass: + specifier: ^1.64.2 + version: 1.64.2 + scheduler: + specifier: ^0.23.0 + version: 0.23.0 + src: + specifier: npm:lodash.noop@3.0.1 + version: /lodash.noop@3.0.1 + superjson: + specifier: ^1.13.1 + version: 1.13.1 + tiny-invariant: + specifier: ^1.3.1 + version: 1.3.1 + ts-node: + specifier: ^10.9.1 + version: 10.9.1(@types/node@20.4.5)(typescript@5.2.0-beta) + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 + tslib: + specifier: ^2.6.1 + version: 2.6.1 + tua-body-scroll-lock: + specifier: ^1.4.0 + version: 1.4.0 + typed-emitter: + specifier: ^2.1.0 + version: 2.1.0 + typescript: + specifier: 5.2.0-beta + version: 5.2.0-beta + typescript-plugin-css-modules: + specifier: ^5.0.1 + version: 5.0.1(ts-node@10.9.1)(typescript@5.2.0-beta) + ua-parser-js: + specifier: ^1.0.35 + version: 1.0.35 + use-context-selector: + specifier: ^1.4.1 + version: 1.4.1(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0) + webextension-polyfill: + specifier: ^0.10.0 + version: 0.10.0 + zod: + specifier: ^3.21.4 + version: 3.21.4 + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@adobe/css-tools@4.2.0: + resolution: {integrity: sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==} + dev: true + + /@aet/eslint-rules@0.0.1-beta.23(eslint-plugin-import@2.28.0)(eslint@8.46.0)(typescript@5.2.0-beta): + resolution: {integrity: sha512-PY9/+U8z7GylKXrw+dV8TqiaKB8aMLUoZg0on598ZzFdodNHZD3fEr2EslT2i/6Mb7ujpaYxWqiDFpTosKG+UA==} + peerDependencies: + typescript: ^5.1.6 + dependencies: + '@types/eslint': 8.44.1 + '@typescript-eslint/eslint-plugin': 6.2.1(@typescript-eslint/parser@6.2.1)(eslint@8.46.0)(typescript@5.2.0-beta) + '@typescript-eslint/parser': 6.2.1(eslint@8.46.0)(typescript@5.2.0-beta) + aria-query: 5.3.0 + axe-core: 4.7.2 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + debug: 4.3.4 + doctrine: 3.0.0 + emoji-regex: 10.2.1 + eslint-config-prettier: 8.9.0(eslint@8.46.0) + eslint-define-config: 1.22.0 + eslint-import-resolver-node: 0.3.7 + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.0)(eslint@8.46.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.46.0) + estraverse: 5.3.0 + is-core-module: 2.12.1 + is-glob: 4.0.3 + language-tags: 1.0.8 + lodash: 4.17.21 + minimatch: 9.0.3 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 7.5.4 + tsconfig-paths: 4.2.0 + typescript: 5.2.0-beta + transitivePeerDependencies: + - eslint + - eslint-import-resolver-webpack + - eslint-plugin-import + - supports-color + dev: true + + /@aet/gql-tools@0.0.1-beta.3(patch_hash=47vkx3rn6phx3mk5fuqtmfzx34)(graphql@16.7.1)(lodash@4.17.21): + resolution: {integrity: sha512-yPGawDafkm+KZzc09BJNV/Qge3eIK+ZqS8MyFt44YupPbIvLwpUjrI31Glbf/RhC5oyB/iXWwJfj8XBptH1euQ==} + hasBin: true + peerDependencies: + graphql: ^15.0.0 || ^16.5.0 + lodash: ^4.17.21 + dependencies: + '@graphql-codegen/core': 4.0.0(graphql@16.7.1) + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.7.1) + '@graphql-tools/load': 8.0.0(graphql@16.7.1) + '@graphql-tools/utils': 10.0.4(graphql@16.7.1) + '@prisma/generator-helper': 5.0.0 + '@prisma/internals': 5.0.0 + babel-plugin-macros: 3.1.0 + class-validator: 0.14.0 + doctrine: 3.0.0 + graphql: 16.7.1 + graphql-language-service: 5.1.7(graphql@16.7.1) + graphql-query-complexity: 0.12.0(graphql@16.7.1) + graphql-scalars: 1.22.2(graphql@16.7.1) + graphql-subscriptions: 2.0.0(graphql@16.7.1) + lodash: 4.17.21 + pluralize: 8.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + patched: true + + /@aet/icons@0.0.1-beta.5: + resolution: {integrity: sha512-oSccXvjI1p8Y7TotbqsKu+lfZ5jqBtuW3I25D12aaI4wKzP9we3PJIHR53d7q1JkxrSr3JDOIivwzt3K7/nMeA==} + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@antfu/ni@0.21.4: + resolution: {integrity: sha512-O0Uv9LbLDSoEg26fnMDdDRiPwFJnQSoD4WnrflDwKCJm8Cx/0mV4cGxwBLXan5mGIrpK4Dd7vizf4rQm0QCEAA==} + hasBin: true + dev: true + + /@apollo/client@3.7.17(patch_hash=t7vxnytrj25ktypmqrdayqgr3y)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-0EErSHEtKPNl5wgWikHJbKFAzJ/k11O0WO2QyqZSHpdxdAnw7UWHY4YiLbHCFG7lhrD+NTQ3Z/H9Jn4rcikoJA==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-ws: ^5.5.5 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + subscriptions-transport-ws: ^0.9.0 || ^0.11.0 + peerDependenciesMeta: + graphql-ws: + optional: true + react: + optional: true + react-dom: + optional: true + subscriptions-transport-ws: + optional: true + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.7.1) + '@wry/context': 0.7.3 + '@wry/equality': 0.5.6 + '@wry/trie': 0.4.3 + graphql: 16.7.1 + graphql-tag: 2.12.6(graphql@16.7.1) + hoist-non-react-statics: 3.3.2 + optimism: 0.16.2 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + response-iterator: 0.2.6 + symbol-observable: 4.0.0 + ts-invariant: 0.10.3 + tslib: 2.6.1 + zen-observable-ts: 1.2.5 + dev: true + patched: true + + /@babel/code-frame@7.22.5: + resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.5 + dev: true + + /@babel/compat-data@7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.22.9: + resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helpers': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.22.9: + resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + dev: true + + /@babel/helper-compilation-targets@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.10 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-module-imports@7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + dev: true + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option@7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers@7.22.6: + resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.22.5: + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser@7.22.7: + resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/runtime@7.22.6: + resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: true + + /@babel/template@7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + dev: true + + /@babel/traverse@7.22.8: + resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.22.5: + resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + to-fast-properties: 2.0.0 + dev: true + + /@codemirror/language@6.0.0: + resolution: {integrity: sha512-rtjk5ifyMzOna1c7PBu7J1VCt0PvA5wy3o8eMVnxMKb7z8KA7JFecvD04dSn14vj/bBaAbqRsGed5OjtofEnLA==} + dependencies: + '@codemirror/state': 6.2.1 + '@codemirror/view': 6.15.3 + '@lezer/common': 1.0.3 + '@lezer/highlight': 1.1.6 + '@lezer/lr': 1.3.9 + style-mod: 4.0.3 + dev: true + + /@codemirror/state@6.2.1: + resolution: {integrity: sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==} + dev: true + + /@codemirror/view@6.15.3: + resolution: {integrity: sha512-chNgR8H7Ipx7AZUt0+Kknk7BCow/ron3mHd1VZdM7hQXiI79+UlWqcxpCiexTxZQ+iSkqndk3HHAclJOcjSuog==} + dependencies: + '@codemirror/state': 6.2.1 + style-mod: 4.0.3 + w3c-keyname: 2.2.8 + dev: true + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@csstools/postcss-sass@5.0.1(postcss@8.4.27): + resolution: {integrity: sha512-GgQAOe6KfABEIHGh9KFqn/7sX2Dmx554PElvyhRFNADo2QV2N/CzlS+QHrrJmVJzaBn829f4JFcOd67mmYb5Eg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4.6 + dependencies: + '@csstools/sass-import-resolve': 1.0.0 + postcss: 8.4.27 + sass: 1.64.2 + source-map: 0.7.4 + dev: true + + /@csstools/sass-import-resolve@1.0.0: + resolution: {integrity: sha512-pH4KCsbtBLLe7eqUrw8brcuFO8IZlN36JjdKlOublibVdAIPHCzEnpBWOVUXK5sCf+DpBi8ZtuWtjF0srybdeA==} + engines: {node: '>=4.0.0'} + dev: true + + /@emotion/babel-plugin@11.11.0: + resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} + dependencies: + '@babel/helper-module-imports': 7.22.5 + '@babel/runtime': 7.22.6 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/serialize': 1.1.2 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + dev: true + + /@emotion/cache@11.11.0: + resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} + dependencies: + '@emotion/memoize': 0.8.1 + '@emotion/sheet': 1.2.2 + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + stylis: 4.2.0 + dev: true + + /@emotion/css@11.11.2: + resolution: {integrity: sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew==} + dependencies: + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.2 + '@emotion/sheet': 1.2.2 + '@emotion/utils': 1.2.1 + dev: true + + /@emotion/hash@0.9.1: + resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} + dev: true + + /@emotion/is-prop-valid@0.8.8: + resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} + requiresBuild: true + dependencies: + '@emotion/memoize': 0.7.4 + dev: true + optional: true + + /@emotion/is-prop-valid@1.2.1: + resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} + dependencies: + '@emotion/memoize': 0.8.1 + dev: true + + /@emotion/memoize@0.7.4: + resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + requiresBuild: true + dev: true + optional: true + + /@emotion/memoize@0.8.1: + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + dev: true + + /@emotion/react@11.11.1(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + '@types/react': 18.2.18 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + dev: true + + /@emotion/serialize@1.1.2: + resolution: {integrity: sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==} + dependencies: + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/unitless': 0.8.1 + '@emotion/utils': 1.2.1 + csstype: 3.1.2 + dev: true + + /@emotion/sheet@1.2.2: + resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} + dev: true + + /@emotion/styled@11.11.0(@emotion/react@11.11.1)(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@emotion/babel-plugin': 11.11.0 + '@emotion/is-prop-valid': 1.2.1 + '@emotion/react': 11.11.1(@types/react@18.2.18)(react@18.2.0) + '@emotion/serialize': 1.1.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@emotion/unitless@0.8.1: + resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} + dev: true + + /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): + resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.2.0 + dev: true + + /@emotion/utils@1.2.1: + resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} + dev: true + + /@emotion/weak-memoize@0.3.1: + resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} + dev: true + + /@esbuild/android-arm64@0.18.17: + resolution: {integrity: sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.17: + resolution: {integrity: sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.17: + resolution: {integrity: sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.17: + resolution: {integrity: sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.17: + resolution: {integrity: sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.17: + resolution: {integrity: sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.17: + resolution: {integrity: sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.17: + resolution: {integrity: sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.17: + resolution: {integrity: sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.17: + resolution: {integrity: sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.17: + resolution: {integrity: sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.17: + resolution: {integrity: sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.17: + resolution: {integrity: sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.17: + resolution: {integrity: sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.17: + resolution: {integrity: sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.17: + resolution: {integrity: sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.17: + resolution: {integrity: sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.17: + resolution: {integrity: sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.17: + resolution: {integrity: sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.17: + resolution: {integrity: sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.17: + resolution: {integrity: sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.17: + resolution: {integrity: sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.46.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.46.0 + eslint-visitor-keys: 3.4.2 + dev: true + + /@eslint-community/regexpp@4.6.2: + resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.1: + resolution: {integrity: sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.46.0: + resolution: {integrity: sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@floating-ui/core@1.3.1: + resolution: {integrity: sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==} + dev: true + + /@floating-ui/dom@1.4.5: + resolution: {integrity: sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==} + dependencies: + '@floating-ui/core': 1.3.1 + dev: true + + /@floating-ui/react-dom@2.0.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-rZtAmSht4Lry6gdhAJDrCp/6rKN7++JnL1/Anbr/DdeyYXQPxvg/ivrbYvJulbRf4vL8b212suwMM2lxbv+RQA==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@floating-ui/dom': 1.4.5 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@formatjs/ecma402-abstract@1.17.0: + resolution: {integrity: sha512-6ueQTeJZtwKjmh23bdkq/DMqH4l4bmfvtQH98blOSbiXv/OUiyijSW6jU22IT8BNM1ujCaEvJfTtyCYVH38EMQ==} + dependencies: + '@formatjs/intl-localematcher': 0.4.0 + tslib: 2.6.1 + dev: true + + /@formatjs/fast-memoize@2.2.0: + resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==} + dependencies: + tslib: 2.6.1 + dev: true + + /@formatjs/icu-messageformat-parser@2.6.0: + resolution: {integrity: sha512-yT6at0qc0DANw9qM/TU8RZaCtfDXtj4pZM/IC2WnVU80yAcliS3KVDiuUt4jSQAeFL9JS5bc2hARnFmjPdA6qw==} + dependencies: + '@formatjs/ecma402-abstract': 1.17.0 + '@formatjs/icu-skeleton-parser': 1.6.0 + tslib: 2.6.1 + dev: true + + /@formatjs/icu-skeleton-parser@1.6.0: + resolution: {integrity: sha512-eMmxNpoX/J1IPUjPGSZwo0Wh+7CEvdEMddP2Jxg1gQJXfGfht/FdW2D5XDFj3VMbOTUQlDIdZJY7uC6O6gjPoA==} + dependencies: + '@formatjs/ecma402-abstract': 1.17.0 + tslib: 2.6.1 + dev: true + + /@formatjs/intl-localematcher@0.4.0: + resolution: {integrity: sha512-bRTd+rKomvfdS4QDlVJ6TA/Jx1F2h/TBVO5LjvhQ7QPPHp19oPNMIum7W2CMEReq/zPxpmCeB31F9+5gl/qtvw==} + dependencies: + tslib: 2.6.1 + dev: true + + /@graphiql/react@0.19.3(@codemirror/language@6.0.0)(@types/node@20.4.5)(@types/react-dom@18.2.7)(@types/react@18.2.18)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-rpxKcmKPhyGfZo1w9h3+E5FY+LXOn8o5fJxpJd2MbLF8segvvWLtJeXL46Q2IkEFqR4uxf00NUTbCwXjRIVaQQ==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 + react: ^16.8.0 || ^17 || ^18 + react-dom: ^16.8.0 || ^17 || ^18 + dependencies: + '@graphiql/toolkit': 0.9.1(@types/node@20.4.5)(graphql@16.7.1) + '@headlessui/react': 1.7.16(patch_hash=nwe5csvy6f3sk73c47zwlim4za)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dialog': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-dropdown-menu': 2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-tooltip': 1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@types/codemirror': 5.60.8 + clsx: 1.2.1 + codemirror: 5.65.14 + codemirror-graphql: 2.0.9(@codemirror/language@6.0.0)(codemirror@5.65.14)(graphql@16.7.1) + copy-to-clipboard: 3.3.3 + framer-motion: 6.5.1(react-dom@18.2.0)(react@18.2.0) + graphql: 16.7.1 + graphql-language-service: 5.1.7(graphql@16.7.1) + markdown-it: 12.3.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + set-value: 4.1.0 + transitivePeerDependencies: + - '@codemirror/language' + - '@types/node' + - '@types/react' + - '@types/react-dom' + - graphql-ws + dev: true + + /@graphiql/toolkit@0.9.1(@types/node@20.4.5)(graphql@16.7.1): + resolution: {integrity: sha512-LVt9pdk0830so50ZnU2Znb2rclcoWznG8r8asqAENzV0U1FM1kuY0sdPpc/rBc9MmmNgnB6A+WZzDhq6dbhTHA==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 + graphql-ws: '>= 4.5.0' + peerDependenciesMeta: + graphql-ws: + optional: true + dependencies: + '@n1ru4l/push-pull-async-iterable-iterator': 3.2.0 + graphql: 16.7.1 + meros: 1.3.0(@types/node@20.4.5) + transitivePeerDependencies: + - '@types/node' + dev: true + + /@graphql-codegen/add@5.0.0(graphql@16.7.1): + resolution: {integrity: sha512-ynWDOsK2yxtFHwcJTB9shoSkUd7YXd6ZE57f0nk7W5cu/nAgxZZpEsnTPEpZB/Mjf14YRGe2uJHQ7AfElHjqUQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.7.1) + graphql: 16.7.1 + tslib: 2.5.3 + dev: true + + /@graphql-codegen/core@4.0.0(graphql@16.7.1): + resolution: {integrity: sha512-JAGRn49lEtSsZVxeIlFVIRxts2lWObR+OQo7V2LHDJ7ohYYw3ilv7nJ8pf8P4GTg/w6ptcYdSdVVdkI8kUHB/Q==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.7.1) + '@graphql-tools/schema': 10.0.0(graphql@16.7.1) + '@graphql-tools/utils': 10.0.4(graphql@16.7.1) + graphql: 16.7.1 + tslib: 2.5.3 + dev: true + + /@graphql-codegen/plugin-helpers@5.0.1(graphql@16.7.1): + resolution: {integrity: sha512-6L5sb9D8wptZhnhLLBcheSPU7Tg//DGWgc5tQBWX46KYTOTQHGqDpv50FxAJJOyFVJrveN9otWk9UT9/yfY4ww==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-tools/utils': 10.0.4(graphql@16.7.1) + change-case-all: 1.0.15 + common-tags: 1.8.2 + graphql: 16.7.1 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.5.3 + dev: true + + /@graphql-codegen/schema-ast@4.0.0(graphql@16.7.1): + resolution: {integrity: sha512-WIzkJFa9Gz28FITAPILbt+7A8+yzOyd1NxgwFh7ie+EmO9a5zQK6UQ3U/BviirguXCYnn+AR4dXsoDrSrtRA1g==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.7.1) + '@graphql-tools/utils': 10.0.4(graphql@16.7.1) + graphql: 16.7.1 + tslib: 2.5.3 + dev: true + + /@graphql-codegen/typescript-operations@4.0.1(graphql@16.7.1): + resolution: {integrity: sha512-GpUWWdBVUec/Zqo23aFLBMrXYxN2irypHqDcKjN78JclDPdreasAEPcIpMfqf4MClvpmvDLy4ql+djVAwmkjbw==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.7.1) + '@graphql-codegen/typescript': 4.0.1(graphql@16.7.1) + '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.7.1) + auto-bind: 4.0.0 + graphql: 16.7.1 + tslib: 2.5.3 + dev: true + + /@graphql-codegen/typescript@4.0.1(graphql@16.7.1): + resolution: {integrity: sha512-3YziQ21dCVdnHb+Us1uDb3pA6eG5Chjv0uTK+bt9dXeMlwYBU8MbtzvQTo4qvzWVC1AxSOKj0rgfNu1xCXqJyA==} + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.7.1) + '@graphql-codegen/schema-ast': 4.0.0(graphql@16.7.1) + '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.7.1) + auto-bind: 4.0.0 + graphql: 16.7.1 + tslib: 2.5.3 + dev: true + + /@graphql-codegen/visitor-plugin-common@4.0.1(graphql@16.7.1): + resolution: {integrity: sha512-Bi/1z0nHg4QMsAqAJhds+ForyLtk7A3HQOlkrZNm3xEkY7lcBzPtiOTLBtvziwopBsXUxqeSwVjOOFPLS5Yw1Q==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.7.1) + '@graphql-tools/optimize': 2.0.0(graphql@16.7.1) + '@graphql-tools/relay-operation-optimizer': link:node_modules/lodash.noop + '@graphql-tools/utils': 10.0.4(graphql@16.7.1) + auto-bind: 4.0.0 + change-case-all: 1.0.15 + dependency-graph: 0.11.0 + graphql: 16.7.1 + graphql-tag: 2.12.6(graphql@16.7.1) + parse-filepath: 1.0.2 + tslib: 2.5.3 + dev: true + + /@graphql-tools/code-file-loader@8.0.2(graphql@16.7.1): + resolution: {integrity: sha512-AKNpkElUL2cWocYpC4DzNEpo6qJw8Lp+L3bKQ/mIfmbsQxgLz5uve6zHBMhDaFPdlwfIox41N3iUSvi77t9e8A==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/graphql-tag-pluck': 8.0.2(graphql@16.7.1) + '@graphql-tools/utils': 10.0.4(graphql@16.7.1) + globby: 11.1.0 + graphql: 16.7.1 + tslib: 2.6.1 + unixify: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@graphql-tools/graphql-file-loader@8.0.0(graphql@16.7.1): + resolution: {integrity: sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/import': 7.0.0(graphql@16.7.1) + '@graphql-tools/utils': 10.0.4(graphql@16.7.1) + globby: 11.1.0 + graphql: 16.7.1 + tslib: 2.6.1 + unixify: 1.0.0 + dev: true + + /@graphql-tools/graphql-tag-pluck@8.0.2(graphql@16.7.1): + resolution: {integrity: sha512-U6fE4yEHxuk/nqmPixHpw1WhqdS6aYuaV60m1bEmUmGJNbpAhaMBy01JncpvpF15yZR5LZ0UjkHg+A3Lhoc8YQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/parser': 7.22.7 + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.9) + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + '@graphql-tools/utils': 10.0.4(graphql@16.7.1) + graphql: 16.7.1 + tslib: 2.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@graphql-tools/import@7.0.0(graphql@16.7.1): + resolution: {integrity: sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.4(graphql@16.7.1) + graphql: 16.7.1 + resolve-from: 5.0.0 + tslib: 2.6.1 + dev: true + + /@graphql-tools/load@8.0.0(graphql@16.7.1): + resolution: {integrity: sha512-Cy874bQJH0FP2Az7ELPM49iDzOljQmK1PPH6IuxsWzLSTxwTqd8dXA09dcVZrI7/LsN26heTY2R8q2aiiv0GxQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/schema': 10.0.0(graphql@16.7.1) + '@graphql-tools/utils': 10.0.4(graphql@16.7.1) + graphql: 16.7.1 + p-limit: 3.1.0 + tslib: 2.6.1 + dev: true + + /@graphql-tools/merge@9.0.0(graphql@16.7.1): + resolution: {integrity: sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/utils': 10.0.4(graphql@16.7.1) + graphql: 16.7.1 + tslib: 2.6.1 + dev: true + + /@graphql-tools/optimize@2.0.0(graphql@16.7.1): + resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.7.1 + tslib: 2.6.1 + dev: true + + /@graphql-tools/schema@10.0.0(graphql@16.7.1): + resolution: {integrity: sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-tools/merge': 9.0.0(graphql@16.7.1) + '@graphql-tools/utils': 10.0.4(graphql@16.7.1) + graphql: 16.7.1 + tslib: 2.6.1 + value-or-promise: 1.0.12 + dev: true + + /@graphql-tools/utils@10.0.4(graphql@16.7.1): + resolution: {integrity: sha512-MF+nZgGROSnFgyOYWhrl2PuJMlIBvaCH48vtnlnDQKSeDc2fUfOzUVloBAQvnYmK9JBmHHks4Pxv25Ybg3r45Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.7.1) + dset: 3.1.2 + graphql: 16.7.1 + tslib: 2.6.1 + dev: true + + /@graphql-typed-document-node/core@3.2.0(graphql@16.7.1): + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.7.1 + dev: true + + /@headlessui/react@1.7.16(patch_hash=nwe5csvy6f3sk73c47zwlim4za)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2MphIAZdSUacZBT6EXk8AJkj+EuvaaJbtCyHTJrPsz8inhzCl7qeNPI1uk1AUvCgWylVtdN8cVVmnhUDPxPy3g==} + engines: {node: '>=10'} + peerDependencies: + react: ^16 || ^17 || ^18 + react-dom: ^16 || ^17 || ^18 + dependencies: + client-only: 0.0.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + patched: true + + /@humanwhocodes/config-array@0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@jridgewell/resolve-uri@3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@lezer/common@1.0.3: + resolution: {integrity: sha512-JH4wAXCgUOcCGNekQPLhVeUtIqjH0yPBs7vvUdSjyQama9618IOKFJwkv2kcqdhF0my8hQEgCTEJU0GIgnahvA==} + dev: true + + /@lezer/highlight@1.1.6: + resolution: {integrity: sha512-cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg==} + dependencies: + '@lezer/common': 1.0.3 + dev: true + + /@lezer/lr@1.3.9: + resolution: {integrity: sha512-XPz6dzuTHlnsbA5M2DZgjflNQ+9Hi5Swhic0RULdp3oOs3rh6bqGZolosVqN/fQIT8uNiepzINJDnS39oweTHQ==} + dependencies: + '@lezer/common': 1.0.3 + dev: true + + /@monaco-editor/loader@1.3.3(monaco-editor@0.40.0): + resolution: {integrity: sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q==} + peerDependencies: + monaco-editor: '>= 0.21.0 < 1' + dependencies: + monaco-editor: 0.40.0(patch_hash=ku3o7hkzj5ntzax27c7xlqnuoa) + state-local: 1.0.7 + dev: true + + /@monaco-editor/react@4.5.1(monaco-editor@0.40.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-NNDFdP+2HojtNhCkRfE6/D6ro6pBNihaOzMbGK84lNWzRu+CfBjwzGt4jmnqimLuqp5yE5viHS2vi+QOAnD5FQ==} + peerDependencies: + monaco-editor: '>= 0.25.0 < 1' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@monaco-editor/loader': 1.3.3(monaco-editor@0.40.0) + monaco-editor: 0.40.0(patch_hash=ku3o7hkzj5ntzax27c7xlqnuoa) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@motionone/animation@10.15.1: + resolution: {integrity: sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ==} + dependencies: + '@motionone/easing': 10.15.1 + '@motionone/types': 10.15.1 + '@motionone/utils': 10.15.1 + tslib: 2.6.1 + dev: true + + /@motionone/dom@10.12.0: + resolution: {integrity: sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw==} + dependencies: + '@motionone/animation': 10.15.1 + '@motionone/generators': 10.15.1 + '@motionone/types': 10.15.1 + '@motionone/utils': 10.15.1 + hey-listen: 1.0.8 + tslib: 2.6.1 + dev: true + + /@motionone/easing@10.15.1: + resolution: {integrity: sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw==} + dependencies: + '@motionone/utils': 10.15.1 + tslib: 2.6.1 + dev: true + + /@motionone/generators@10.15.1: + resolution: {integrity: sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ==} + dependencies: + '@motionone/types': 10.15.1 + '@motionone/utils': 10.15.1 + tslib: 2.6.1 + dev: true + + /@motionone/types@10.15.1: + resolution: {integrity: sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA==} + dev: true + + /@motionone/utils@10.15.1: + resolution: {integrity: sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw==} + dependencies: + '@motionone/types': 10.15.1 + hey-listen: 1.0.8 + tslib: 2.6.1 + dev: true + + /@n1ru4l/push-pull-async-iterable-iterator@3.2.0: + resolution: {integrity: sha512-3fkKj25kEjsfObL6IlKPAlHYPq/oYwUkkQ03zsTTiDjD7vg/RxjdiLeCydqtxHZP0JgsXL3D/X5oAkMGzuUp/Q==} + engines: {node: '>=12'} + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@opentelemetry/api@1.4.1: + resolution: {integrity: sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==} + engines: {node: '>=8.0.0'} + dev: true + + /@pkgr/utils@2.4.2: + resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + fast-glob: 3.3.1 + is-glob: 4.0.3 + open: 9.1.0 + picocolors: 1.0.0 + tslib: 2.6.1 + dev: true + + /@primer/primitives@7.11.14: + resolution: {integrity: sha512-z/yUTEkbGhvFqoJ8rpLz3pHJfLNRdoyNd/xNdAl/LKqA97Z60tsSVJMfxNMXi3aS9dCIC1dexK5/Gp4y9JrRkg==} + dev: true + + /@prisma/debug@5.0.0: + resolution: {integrity: sha512-3q/M/KqlQ01/HJXifU/zCNOHkoTWu24kGelMF/IBrRxm7njPqTTbwfnT1dh4JK+nuWM5/Dg1Lv00u2c0l7AHxg==} + dependencies: + '@types/debug': 4.1.8 + debug: 4.3.4 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@prisma/engines@5.0.0: + resolution: {integrity: sha512-kyT/8fd0OpWmhAU5YnY7eP31brW1q1YrTGoblWrhQJDiN/1K+Z8S1kylcmtjqx5wsUGcP1HBWutayA/jtyt+sg==} + requiresBuild: true + dev: true + + /@prisma/fetch-engine@5.0.0: + resolution: {integrity: sha512-eSzHTE0KcMvM5+O1++eaMuVf4D1zwWHdqjWr6D70skCg37q7RYsuty4GFnlWBuqC4aXwVf06EvIxiJ0SQIIeRw==} + dependencies: + '@prisma/debug': 5.0.0 + '@prisma/get-platform': 5.0.0 + execa: 5.1.1 + find-cache-dir: 3.3.2 + fs-extra: 11.1.1 + hasha: 5.2.2 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.0 + kleur: 4.1.5 + node-fetch: 2.6.12 + p-filter: 2.1.0 + p-map: 4.0.0 + p-retry: 4.6.2 + progress: 2.0.3 + rimraf: 3.0.2 + temp-dir: 2.0.0 + tempy: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@prisma/generator-helper@5.0.0: + resolution: {integrity: sha512-pufQ1mhoH6WzKNtzL79HZDoW4Ql3Lf8QEKVmBoW8e3Tdb50bxpYBYue5LBqp9vNW1xd1pgZO53cNiRfLX2d4Zg==} + dependencies: + '@prisma/debug': 5.0.0 + '@types/cross-spawn': 6.0.2 + cross-spawn: 7.0.3 + kleur: 4.1.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@prisma/get-platform@5.0.0: + resolution: {integrity: sha512-JT/rz/jaMTggDkd9OIma50si9rPLzSFe7XSrV3mKXwtv9t+rdwx5ZhmKJd+Rz6S1vhn/291k21JLfaxOW6u8KQ==} + dependencies: + '@prisma/debug': 5.0.0 + escape-string-regexp: 4.0.0 + execa: 5.1.1 + fs-jetpack: 5.1.0 + kleur: 4.1.5 + replace-string: 3.1.0 + strip-ansi: 6.0.1 + tempy: 1.0.1 + terminal-link: 2.1.1 + ts-pattern: 4.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@prisma/internals@5.0.0: + resolution: {integrity: sha512-VGWyFk6QlSBXT8z65Alq5F3o9E8IiTtaBoa3rmKkGpZjUk85kJy3jZz4xkRv53TaeghGE5rWfwkfak26KtY5yQ==} + dependencies: + '@antfu/ni': 0.21.4 + '@opentelemetry/api': 1.4.1 + '@prisma/debug': 5.0.0 + '@prisma/engines': 5.0.0 + '@prisma/fetch-engine': 5.0.0 + '@prisma/generator-helper': 5.0.0 + '@prisma/get-platform': 5.0.0 + '@prisma/prisma-schema-wasm': 4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584 + archiver: 5.3.1 + arg: 5.0.2 + checkpoint-client: 1.1.24 + cli-truncate: 2.1.0 + dotenv: 16.0.3 + escape-string-regexp: 4.0.0 + execa: 5.1.1 + find-up: 5.0.0 + fp-ts: 2.16.0 + fs-extra: 11.1.1 + fs-jetpack: 5.1.0 + global-dirs: 3.0.1 + globby: 11.1.0 + indent-string: 4.0.0 + is-windows: 1.0.2 + is-wsl: 2.2.0 + kleur: 4.1.5 + new-github-issue-url: 0.2.1 + node-fetch: 2.6.12 + npm-packlist: 5.1.3 + open: 7.4.2 + p-map: 4.0.0 + prompts: 2.4.2 + read-pkg-up: 7.0.1 + replace-string: 3.1.0 + resolve: 1.22.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + strip-indent: 3.0.0 + temp-dir: 2.0.0 + temp-write: 4.0.0 + tempy: 1.0.1 + terminal-link: 2.1.1 + tmp: 0.2.1 + ts-pattern: 4.3.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@prisma/prisma-schema-wasm@4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584: + resolution: {integrity: sha512-JFdsnSgBPN8reDTLOI9Vh/6ccCb2aD1LbY/LWQnkcIgNo6IdpzvuM+qRVbBuA6IZP2SdqQI8Lu6RL2P8EFBQUA==} + dev: true + + /@proteria/hooks@0.0.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-TPKIyjYu2mJIMP/w1PgdywyUpA083DG2EH10YYMFQcCh6ePttRODTCy5onfBhRYyx7SJ1W1/tz0S8KVXxDfDFA==} + peerDependencies: + js-cookie: ^3.0.5 + react: ^16.8 || ^17 || ^18 + react-dom: ^16.8 || ^17 || ^18 + peerDependenciesMeta: + js-cookie: + optional: true + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/primitive@1.0.1: + resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} + dependencies: + '@babel/runtime': 7.22.6 + dev: true + + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@radix-ui/react-context@1.0.1(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.18)(react@18.2.0) + dev: true + + /@radix-ui/react-direction@1.0.1(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-dropdown-menu@2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-xdOrZzOTocqqkCkYo8yRPCib5OkTkqN7lqNCdxwPOdE466DOaNl4N8PkUIlsXthQvW5Wwkd+aEmWpfWlBoDPEw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-menu': 2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-id@1.0.1(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@radix-ui/react-menu@2.0.5(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-Gw4f9pwdH+w5w+49k0gLjN0PfRDHvxmAgG16AbyJZ7zhwZ6PBHKtWohvnSwfusfnK3L68dpBREHpVkj8wEM7ZA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + aria-hidden: 1.2.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.18)(react@18.2.0) + dev: true + + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@floating-ui/react-dom': 2.0.1(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/rect': 1.0.1 + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-slot@1.0.2(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@radix-ui/react-tooltip@1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-DmNFOiwEc2UDigsYj6clJENma58OelxD24O4IODoZ+3sQc3Zb+L8w1EP+y9laTuKCLAysPw4fD6/v0j4KNV8rg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/rect': 1.0.1 + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@radix-ui/react-use-size@1.0.1(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.18)(react@18.2.0) + '@types/react': 18.2.18 + react: 18.2.0 + dev: true + + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.18 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/rect@1.0.1: + resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} + dependencies: + '@babel/runtime': 7.22.6 + dev: true + + /@react-hookz/deep-equal@1.0.4: + resolution: {integrity: sha512-N56fTrAPUDz/R423pag+n6TXWbvlBZDtTehaGFjK0InmN+V2OFWLE/WmORhmn6Ce7dlwH5+tQN1LJFw3ngTJVg==} + dev: true + + /@react-hookz/web@23.1.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fvbURdsa1ukttbLR1ASE/XmqXP09vZ1PiCYppYeR1sNMzCrdkG0iBnjxniFSVjJ8gIw2fRs6nqMTbeBz2uAkuA==} + peerDependencies: + js-cookie: ^3.0.5 + react: ^16.8 || ^17 || ^18 + react-dom: ^16.8 || ^17 || ^18 + peerDependenciesMeta: + js-cookie: + optional: true + dependencies: + '@react-hookz/deep-equal': 1.0.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@szhsin/react-menu@4.0.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-cYpktkWng7jCTPKog33w5iYldbaHQso5aJFd+7j3SkhInqYWjxiG0TtxUS0c5yFqLm6woGQEJHiBpiYHIaYMxg==} + peerDependencies: + react: '>=16.14.0' + react-dom: '>=16.14.0' + dependencies: + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-transition-state: 2.1.1(react-dom@18.2.0)(react@18.2.0) + dev: true + + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@types/babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-kxYWx+NISzy46KMgnXUthHJNbcGw9w1jn6e1LZAciTv8KKO5z9z1LakHnXCj5aYrwydZ5dGE3MAgEu4X/MdWkA==} + dependencies: + '@types/babel__core': 7.20.1 + dev: true + + /@types/babel__core@7.20.1: + resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} + dependencies: + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.20.1 + dev: true + + /@types/babel__generator@7.6.4: + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@types/babel__template@7.4.1: + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + dependencies: + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + dev: true + + /@types/babel__traverse@7.20.1: + resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@types/chrome@0.0.242: + resolution: {integrity: sha512-SeMXBSfcAGX9ezTz7Pro7n/AiNdIH3cetkdbM+Kfg3zD24jmbnm0IAEIxzx8ccqrnJenLCfD7fR+4WIYAbeQHw==} + dependencies: + '@types/filesystem': 0.0.32 + '@types/har-format': 1.2.11 + dev: true + + /@types/codemirror@5.60.8: + resolution: {integrity: sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==} + dependencies: + '@types/tern': 0.23.4 + dev: true + + /@types/convert-source-map@2.0.0: + resolution: {integrity: sha512-QUm4YOC/ENo0VjPVl2o8HGyTbHHQGDOw8PCg3rXBucYHKyZN/XjXRbPFAV1tB2FvM0/wyFoDct4cTIctzKrQFg==} + dev: true + + /@types/cross-spawn@6.0.2: + resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==} + dependencies: + '@types/node': 20.4.5 + dev: true + + /@types/debug@4.1.8: + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} + dependencies: + '@types/ms': 0.7.31 + dev: true + + /@types/dedent@0.7.0: + resolution: {integrity: sha512-EGlKlgMhnLt/cM4DbUSafFdrkeJoC9Mvnj0PUCU7tFmTjMjNRT957kXCx0wYm3JuEq4o4ZsS5vG+NlkM2DMd2A==} + dev: true + + /@types/element-resize-detector@1.1.3: + resolution: {integrity: sha512-rqmeHxzNMPar/3IbdQRm+mydv8KlEXUtcp5M47rbZUEjslTjg+bT5+OXCknTCIy1AfvNR0Kio44iMY2zUH65CQ==} + dev: true + + /@types/eslint@8.44.1: + resolution: {integrity: sha512-XpNDc4Z5Tb4x+SW1MriMVeIsMoONHCkWFMkR/aPJbzEsxqHy+4Glu/BqTdPrApfDeMaXbtNh6bseNgl5KaWrSg==} + dependencies: + '@types/estree': 1.0.1 + '@types/json-schema': 7.0.12 + dev: true + + /@types/estree@1.0.1: + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + dev: true + + /@types/filesystem@0.0.32: + resolution: {integrity: sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==} + dependencies: + '@types/filewriter': 0.0.29 + dev: true + + /@types/filewriter@0.0.29: + resolution: {integrity: sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ==} + dev: true + + /@types/glob-to-regexp@0.4.1: + resolution: {integrity: sha512-S0mIukll6fbF0tvrKic/jj+jI8SHoSvGU+Cs95b/jzZEnBYCbj+7aJtQ9yeABuK3xP1okwA3jEH9qIRayijnvQ==} + dev: true + + /@types/har-format@1.2.11: + resolution: {integrity: sha512-T232/TneofqK30AD1LRrrf8KnjLvzrjWDp7eWST5KoiSzrBfRsLrWDPk4STQPW4NZG6v2MltnduBVmakbZOBIQ==} + dev: true + + /@types/js-yaml@4.0.5: + resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} + dev: true + + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/lodash-es@4.17.8: + resolution: {integrity: sha512-euY3XQcZmIzSy7YH5+Unb3b2X12Wtk54YWINBvvGQ5SmMvwb11JQskGsfkH/5HXK77Kr8GF0wkVDIxzAisWtog==} + dependencies: + '@types/lodash': 4.14.196 + dev: true + + /@types/lodash@4.14.196: + resolution: {integrity: sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==} + dev: true + + /@types/ms@0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: true + + /@types/node@20.4.5: + resolution: {integrity: sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==} + dev: true + + /@types/normalize-package-data@2.4.1: + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + dev: true + + /@types/parse-json@4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: true + + /@types/postcss-modules-local-by-default@4.0.0: + resolution: {integrity: sha512-0VLab/pcLTLcfbxi6THSIMVYcw9hEUBGvjwwaGpW77mMgRXfGF+a76t7BxTGyLh1y68tBvrffp8UWnqvm76+yg==} + dependencies: + postcss: 8.4.27 + dev: true + + /@types/postcss-modules-scope@3.0.1: + resolution: {integrity: sha512-LNkp3c4ML9EQj2dgslp4i80Jxj72YK3HjYzrTn6ftUVylW1zaKFGqrMlNIyqBmPWmIhZ/Y5r0Y4T49Hk1IuDUg==} + dependencies: + postcss: 8.4.27 + dev: true + + /@types/pouchdb-adapter-http@6.1.3: + resolution: {integrity: sha512-9Z4TLbF/KJWy/D2sWRPBA+RNU0odQimfdvlDX+EY7rGcd3aVoH8qjD/X0Xcd/0dfBH5pKrNIMFFQgW/TylRCmA==} + dependencies: + '@types/pouchdb-core': 7.0.11 + dev: true + + /@types/pouchdb-adapter-idb@6.1.4: + resolution: {integrity: sha512-KIAXbkF4uYUz0ZwfNEFLtEkK44mEWopAsD76UhucH92XnJloBysav+TjI4FFfYQyTjoW3S1s6V+Z14CUJZ0F6w==} + dependencies: + '@types/pouchdb-core': 7.0.11 + dev: true + + /@types/pouchdb-adapter-websql@6.1.4: + resolution: {integrity: sha512-zMJQCtXC40hBsIDRn0GhmpeGMK0f9l/OGWfLguvczROzxxcOD7REI+e6SEmX7gJKw5JuMvlfuHzkQwjmvSJbtg==} + dependencies: + '@types/pouchdb-core': 7.0.11 + dev: true + + /@types/pouchdb-browser@6.1.3: + resolution: {integrity: sha512-EdYowrWxW9SWBMX/rux2eq7dbHi5Zeyzz+FF/IAsgQKnUxgeCO5VO2j4zTzos0SDyJvAQU+EYRc11r7xGn5tvA==} + dependencies: + '@types/pouchdb-adapter-http': 6.1.3 + '@types/pouchdb-adapter-idb': 6.1.4 + '@types/pouchdb-adapter-websql': 6.1.4 + '@types/pouchdb-core': 7.0.11 + '@types/pouchdb-mapreduce': 6.1.7 + '@types/pouchdb-replication': 6.4.4 + dev: true + + /@types/pouchdb-core@7.0.11: + resolution: {integrity: sha512-KTKj0Taf8pLTj8eW3qBtCd1Fh+/yhEyVo6/1czTN46MnseobdmnqgXtzaKgHMbuLouh+SHK1vM++aMPaG1qTTA==} + dependencies: + '@types/debug': 4.1.8 + '@types/pouchdb-find': 7.3.0 + dev: true + + /@types/pouchdb-find@7.3.0: + resolution: {integrity: sha512-sFPli5tBjGX9UfXioik1jUzPdcN84eV82n0lmEFuoPepWqkLjQcyri0eOa++HYOaNPyMDhKFBqEALEZivK2dRg==} + dependencies: + '@types/pouchdb-core': 7.0.11 + dev: true + + /@types/pouchdb-mapreduce@6.1.7: + resolution: {integrity: sha512-WzBwm7tmO9QhfRzVaWT4v6JQSS/fG2OoUDrWrhX87rPe2Pn6laPvdK5li6myNRxCoI/l5e8Jd+oYBAFnaiFucA==} + dependencies: + '@types/pouchdb-core': 7.0.11 + dev: true + + /@types/pouchdb-replication@6.4.4: + resolution: {integrity: sha512-BsE5LKpjJK4iAf6Fx5kyrMw+33V+Ip7uWldUnU2BYrrvtR+MLD22dcImm7DZN1st2wPPb91i0XEnQzvP0w1C/Q==} + dependencies: + '@types/pouchdb-core': 7.0.11 + '@types/pouchdb-find': 7.3.0 + dev: true + + /@types/prettier@2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + dev: true + + /@types/prop-types@15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + dev: true + + /@types/react-dom@18.2.7: + resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} + dependencies: + '@types/react': 18.2.18 + dev: true + + /@types/react-helmet@6.1.6: + resolution: {integrity: sha512-ZKcoOdW/Tg+kiUbkFCBtvDw0k3nD4HJ/h/B9yWxN4uDO8OkRksWTO+EL+z/Qu3aHTeTll3Ro0Cc/8UhwBCMG5A==} + dependencies: + '@types/react': 18.2.18 + dev: true + + /@types/react-window@1.8.5: + resolution: {integrity: sha512-V9q3CvhC9Jk9bWBOysPGaWy/Z0lxYcTXLtLipkt2cnRj1JOSFNF7wqGpkScSXMgBwC+fnVRg/7shwgddBG5ICw==} + dependencies: + '@types/react': 18.2.18 + dev: true + + /@types/react@18.2.18: + resolution: {integrity: sha512-da4NTSeBv/P34xoZPhtcLkmZuJ+oYaCxHmyHzwaDQo9RQPBeXV+06gEk2FpqEcsX9XrnNLvRpVh6bdavDSjtiQ==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.3 + csstype: 3.1.2 + dev: true + + /@types/retry@0.12.0: + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + dev: true + + /@types/scheduler@0.16.3: + resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + dev: true + + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + dev: true + + /@types/stylis@4.2.0: + resolution: {integrity: sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==} + dev: true + + /@types/tern@0.23.4: + resolution: {integrity: sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==} + dependencies: + '@types/estree': 1.0.1 + dev: true + + /@types/ua-parser-js@0.7.36: + resolution: {integrity: sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ==} + dev: true + + /@types/validator@13.7.17: + resolution: {integrity: sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ==} + dev: true + + /@types/w3c-css-typed-object-model-level-1@20180410.0.5: + resolution: {integrity: sha512-khoqDQqA/fUdK6mEJtQEfMAPCKkk8E1D+ahM/0HCy3mc5L33wJinqQNXu9Uf4+mqzMvORljHg76jvrmwS0bEjA==} + dev: true + + /@types/webextension-polyfill@0.10.1: + resolution: {integrity: sha512-Sdg+E2F5JUbhkE1qX15QUxpyhfMFKRGJqND9nb1C0gNN4NR7kCV31/1GvNbg6Xe+m/JElJ9/lG5kepMzjGPuQw==} + dev: true + + /@typescript-eslint/eslint-plugin@6.2.1(@typescript-eslint/parser@6.2.1)(eslint@8.46.0)(typescript@5.2.0-beta): + resolution: {integrity: sha512-iZVM/ALid9kO0+I81pnp1xmYiFyqibAHzrqX4q5YvvVEyJqY+e6rfTXSCsc2jUxGNqJqTfFSSij/NFkZBiBzLw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.6.2 + '@typescript-eslint/parser': 6.2.1(eslint@8.46.0)(typescript@5.2.0-beta) + '@typescript-eslint/scope-manager': 6.2.1 + '@typescript-eslint/type-utils': 6.2.1(eslint@8.46.0)(typescript@5.2.0-beta) + '@typescript-eslint/utils': 6.2.1(eslint@8.46.0)(typescript@5.2.0-beta) + '@typescript-eslint/visitor-keys': 6.2.1 + debug: 4.3.4 + eslint: 8.46.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.2.0-beta) + typescript: 5.2.0-beta + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.2.0-beta): + resolution: {integrity: sha512-Ld+uL1kYFU8e6btqBFpsHkwQ35rw30IWpdQxgOqOh4NfxSDH6uCkah1ks8R/RgQqI5hHPXMaLy9fbFseIe+dIg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.2.1 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/typescript-estree': 6.2.1(typescript@5.2.0-beta) + '@typescript-eslint/visitor-keys': 6.2.1 + debug: 4.3.4 + eslint: 8.46.0 + typescript: 5.2.0-beta + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@6.2.1: + resolution: {integrity: sha512-UCqBF9WFqv64xNsIEPfBtenbfodPXsJ3nPAr55mGPkQIkiQvgoWNo+astj9ZUfJfVKiYgAZDMnM6dIpsxUMp3Q==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/visitor-keys': 6.2.1 + dev: true + + /@typescript-eslint/type-utils@6.2.1(eslint@8.46.0)(typescript@5.2.0-beta): + resolution: {integrity: sha512-fTfCgomBMIgu2Dh2Or3gMYgoNAnQm3RLtRp+jP7A8fY+LJ2+9PNpi5p6QB5C4RSP+U3cjI0vDlI3mspAkpPVbQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.2.1(typescript@5.2.0-beta) + '@typescript-eslint/utils': 6.2.1(eslint@8.46.0)(typescript@5.2.0-beta) + debug: 4.3.4 + eslint: 8.46.0 + ts-api-utils: 1.0.1(typescript@5.2.0-beta) + typescript: 5.2.0-beta + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@6.2.1: + resolution: {integrity: sha512-528bGcoelrpw+sETlyM91k51Arl2ajbNT9L4JwoXE2dvRe1yd8Q64E4OL7vHYw31mlnVsf+BeeLyAZUEQtqahQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@6.2.1(typescript@5.2.0-beta): + resolution: {integrity: sha512-G+UJeQx9AKBHRQBpmvr8T/3K5bJa485eu+4tQBxFq0KoT22+jJyzo1B50JDT9QdC1DEmWQfdKsa8ybiNWYsi0Q==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/visitor-keys': 6.2.1 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.2.0-beta) + typescript: 5.2.0-beta + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@6.2.1(eslint@8.46.0)(typescript@5.2.0-beta): + resolution: {integrity: sha512-eBIXQeupYmxVB6S7x+B9SdBeB6qIdXKjgQBge2J+Ouv8h9Cxm5dHf/gfAZA6dkMaag+03HdbVInuXMmqFB/lKQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.2.1 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/typescript-estree': 6.2.1(typescript@5.2.0-beta) + eslint: 8.46.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@6.2.1: + resolution: {integrity: sha512-iTN6w3k2JEZ7cyVdZJTVJx2Lv7t6zFA8DCrJEHD2mwfc16AEvvBWVhbFh34XyG2NORCd0viIgQY1+u7kPI0WpA==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.2.1 + eslint-visitor-keys: 3.4.1 + dev: true + + /@vscode/codicons@0.0.33: + resolution: {integrity: sha512-VdgpnD75swH9hpXjd34VBgQ2w2quK63WljodlUcOoJDPKiV+rPjHrcUc2sjLCNKxhl6oKqmsZgwOWcDAY2GKKQ==} + dev: true + + /@wry/context@0.7.3: + resolution: {integrity: sha512-Nl8WTesHp89RF803Se9X3IiHjdmLBrIvPMaJkl+rKVJAYyPsz1TEUbu89943HpvujtSJgDUx9W4vZw3K1Mr3sA==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.1 + dev: true + + /@wry/equality@0.5.6: + resolution: {integrity: sha512-D46sfMTngaYlrH+OspKf8mIJETntFnf6Hsjb0V41jAXJ7Bx2kB8Rv8RCUujuVWYttFtHkUNp7g+FwxNQAr6mXA==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.1 + dev: true + + /@wry/trie@0.3.2: + resolution: {integrity: sha512-yRTyhWSls2OY/pYLfwff867r8ekooZ4UI+/gxot5Wj8EFwSf2rG+n+Mo/6LoLQm1TKA4GRj2+LCpbfS937dClQ==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.1 + dev: true + + /@wry/trie@0.4.3: + resolution: {integrity: sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.1 + dev: true + + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + dev: true + + /acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 2.3.8 + dev: true + + /archiver@5.3.1: + resolution: {integrity: sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==} + engines: {node: '>= 10'} + dependencies: + archiver-utils: 2.1.0 + async: 3.2.4 + buffer-crc32: 0.2.13 + readable-stream: 3.6.2 + readdir-glob: 1.1.3 + tar-stream: 2.2.0 + zip-stream: 4.1.0 + dev: true + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /aria-hidden@1.2.3: + resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} + engines: {node: '>=10'} + dependencies: + tslib: 2.6.1 + dev: true + + /aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + dependencies: + dequal: 2.0.3 + dev: true + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: true + + /array-includes@3.1.6: + resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + is-string: 1.0.7 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.findlastindex@1.2.2: + resolution: {integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.1 + dev: true + + /array.prototype.flat@1.3.1: + resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.flatmap@1.3.1: + resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: true + + /arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + + /async-mutex@0.4.0: + resolution: {integrity: sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==} + dependencies: + tslib: 2.6.1 + dev: true + + /async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: true + + /auto-bind@4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + dev: true + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /axe-core@4.7.2: + resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} + engines: {node: '>=4'} + dev: true + + /axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + dependencies: + dequal: 2.0.3 + dev: true + + /babel-plugin-macros@2.8.0: + resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} + dependencies: + '@babel/runtime': 7.22.6 + cosmiconfig: 6.0.0 + resolve: 1.22.2 + dev: true + + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.22.6 + cosmiconfig: 7.1.0 + resolve: 1.22.2 + dev: true + + /babel-plugin-transform-minify-gql-template-literals@1.1.1: + resolution: {integrity: sha512-J4Un0uOHDG8Csa8+7Q0sIAPzwT9OyafS3kAoSBhAjIpuIgsDLZaCQTjaKQr2UryikMvzObwL8FRR6LRTp0oP1w==} + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /big-integer@1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + dependencies: + big-integer: 1.6.51 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.21.10: + resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001517 + electron-to-chromium: 1.4.478 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.10) + dev: true + + /buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + dev: true + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + dependencies: + run-applescript: 5.0.0 + dev: true + + /call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.6.1 + dev: true + + /caniuse-lite@1.0.30001517: + resolution: {integrity: sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==} + dev: true + + /capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.1 + upper-case-first: 2.0.2 + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /change-case-all@1.0.15: + resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} + dependencies: + change-case: 4.1.2 + is-lower-case: 2.0.2 + is-upper-case: 2.0.2 + lower-case: 2.0.2 + lower-case-first: 2.0.2 + sponge-case: 1.0.1 + swap-case: 2.0.2 + title-case: 3.0.3 + upper-case: 2.0.2 + upper-case-first: 2.0.2 + dev: true + + /change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.6.1 + dev: true + + /checkpoint-client@1.1.24: + resolution: {integrity: sha512-nIOlLhDS7MKs4tUzS3LCm+sE1NgTCVnVrXlD0RRxaoEkkLu8LIWSUNiNWai6a+LK5unLzTyZeTCYX1Smqy0YoA==} + dependencies: + ci-info: 3.8.0 + env-paths: 2.2.1 + fast-write-atomic: 0.2.1 + make-dir: 3.1.0 + ms: 2.1.3 + node-fetch: 2.6.11 + uuid: 9.0.0 + transitivePeerDependencies: + - encoding + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} + dev: true + + /class-validator@0.14.0: + resolution: {integrity: sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==} + dependencies: + '@types/validator': 13.7.17 + libphonenumber-js: 1.10.38 + validator: 13.9.0 + dev: true + + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + + /cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + dev: true + + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: true + + /clsx@1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + dev: true + + /codemirror-graphql@2.0.9(@codemirror/language@6.0.0)(codemirror@5.65.14)(graphql@16.7.1): + resolution: {integrity: sha512-gl1LR6XSBgZtl7Dr2q4jjRNfhxMF8vn+rnjZTZPf/l+VrQgavY8l3G//hW7s3hWy73iiqkq5LZ4KE1tdaxB/vQ==} + peerDependencies: + '@codemirror/language': 6.0.0 + codemirror: ^5.65.3 + graphql: ^15.5.0 || ^16.0.0 + dependencies: + '@codemirror/language': 6.0.0 + codemirror: 5.65.14 + graphql: 16.7.1 + graphql-language-service: 5.1.7(graphql@16.7.1) + dev: true + + /codemirror@5.65.14: + resolution: {integrity: sha512-VSNugIBDGt0OU9gDjeVr6fNkoFQznrWEUdAApMlXQNbfE8gGO19776D6MwSqF/V/w/sDwonsQ0z7KmmI9guScg==} + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /comlink@4.4.1: + resolution: {integrity: sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==} + dev: true + + /commander@11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + dev: true + + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true + + /compress-commons@4.1.1: + resolution: {integrity: sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==} + engines: {node: '>= 10'} + dependencies: + buffer-crc32: 0.2.13 + crc32-stream: 4.0.2 + normalize-path: 3.0.0 + readable-stream: 3.6.2 + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.1 + upper-case: 2.0.2 + dev: true + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + dependencies: + is-what: 3.14.1 + dev: true + + /copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + dependencies: + is-what: 4.1.15 + dev: true + + /copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + dependencies: + toggle-selection: 1.0.6 + dev: true + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + + /cosmiconfig@6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: true + + /crc32-stream@4.0.2: + resolution: {integrity: sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==} + engines: {node: '>= 10'} + dependencies: + crc-32: 1.2.2 + readable-stream: 3.6.2 + dev: true + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: true + + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + dev: true + + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /dedent@1.5.1(babel-plugin-macros@3.1.0): + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + dependencies: + babel-plugin-macros: 3.1.0 + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + dependencies: + bplist-parser: 0.2.0 + untildify: 4.0.0 + dev: true + + /default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + dependencies: + bundle-name: 3.0.0 + default-browser-id: 3.0.0 + execa: 7.2.0 + titleize: 3.0.0 + dev: true + + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + + /define-properties@1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true + + /del@6.1.1: + resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} + engines: {node: '>=10'} + dependencies: + globby: 11.1.0 + graceful-fs: 4.2.11 + is-glob: 4.0.3 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 4.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + dev: true + + /dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + dev: true + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + + /detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + dev: true + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.1 + dev: true + + /dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + dev: true + + /dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + dev: true + + /dset@3.1.2: + resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} + engines: {node: '>=4'} + dev: true + + /electron-to-chromium@1.4.478: + resolution: {integrity: sha512-qjTA8djMXd+ruoODDFGnRCRBpID+AAfYWCyGtYTNhsuwxI19s8q19gbjKTwRS5z/LyVf5wICaIiPQGLekmbJbA==} + dev: true + + /emoji-regex@10.2.1: + resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true + + /entities@2.1.0: + resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==} + dev: true + + /env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + dev: true + + /errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + requiresBuild: true + dependencies: + prr: 1.0.1 + dev: true + optional: true + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.1 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.1 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 + safe-array-concat: 1.0.0 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.11 + dev: true + + /es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: true + + /es-shim-unscopables@1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + dependencies: + has: 1.0.3 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /esbin@0.0.1-beta.2(esbuild@0.18.17): + resolution: {integrity: sha512-44c90x+lr9Nu7q4YA0zM0HXLeR+gqn5+9YXEtlFpB/a7NhcN7aVvxczDbwCs3l8KgaHc8lA4XDjnq2FfZIjSPg==} + hasBin: true + peerDependencies: + esbuild: '>=0.12 <1' + dependencies: + debug: 4.3.4 + esbuild: 0.18.17 + pirates: 4.0.6 + tsconfig-paths: 4.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /esbuild-plugin-sass@1.0.1(esbuild@0.18.17): + resolution: {integrity: sha512-YFxjzD9Z1vz92QCJcAmCO15WVCUiOobw9ypdVeMsW+xa6S+zqryLUIh8d3fe/UkRHRO5PODZz/3xDAQuEXZwmQ==} + peerDependencies: + esbuild: '>=0.11.14' + dependencies: + css-tree: 1.1.3 + esbuild: 0.18.17 + fs-extra: 10.0.0 + sass: 1.47.0 + tmp: 0.2.1 + dev: true + + /esbuild@0.18.17: + resolution: {integrity: sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.17 + '@esbuild/android-arm64': 0.18.17 + '@esbuild/android-x64': 0.18.17 + '@esbuild/darwin-arm64': 0.18.17 + '@esbuild/darwin-x64': 0.18.17 + '@esbuild/freebsd-arm64': 0.18.17 + '@esbuild/freebsd-x64': 0.18.17 + '@esbuild/linux-arm': 0.18.17 + '@esbuild/linux-arm64': 0.18.17 + '@esbuild/linux-ia32': 0.18.17 + '@esbuild/linux-loong64': 0.18.17 + '@esbuild/linux-mips64el': 0.18.17 + '@esbuild/linux-ppc64': 0.18.17 + '@esbuild/linux-riscv64': 0.18.17 + '@esbuild/linux-s390x': 0.18.17 + '@esbuild/linux-x64': 0.18.17 + '@esbuild/netbsd-x64': 0.18.17 + '@esbuild/openbsd-x64': 0.18.17 + '@esbuild/sunos-x64': 0.18.17 + '@esbuild/win32-arm64': 0.18.17 + '@esbuild/win32-ia32': 0.18.17 + '@esbuild/win32-x64': 0.18.17 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-prettier@8.9.0(eslint@8.46.0): + resolution: {integrity: sha512-+sbni7NfVXnOpnRadUA8S28AUlsZt9GjgFvABIRL9Hkn8KqNzOp+7Lw4QWtrwn20KzU3wqu1QoOj2m+7rKRqkA==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.46.0 + dev: true + + /eslint-define-config@1.22.0: + resolution: {integrity: sha512-pckNJppFwC4AX+AGK63aa4sX5BluPwWwHES3fq/ER0jDR2U2czwlngg38B4EQ2ibvofufc+R5QfmdPKI6+74vQ==} + engines: {node: ^16.13.0 || >=18.0.0, npm: '>=7.0.0', pnpm: '>= 8.6.0'} + dev: true + + /eslint-import-resolver-node@0.3.7: + resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} + dependencies: + debug: 3.2.7 + is-core-module: 2.12.1 + resolve: 1.22.2 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.0)(eslint@8.46.0): + resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.46.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.46.0) + eslint-plugin-import: 2.28.0(@typescript-eslint/parser@6.2.1)(eslint@8.46.0) + get-tsconfig: 4.6.2 + globby: 13.2.2 + is-core-module: 2.12.1 + is-glob: 4.0.3 + synckit: 0.8.5 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.46.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 6.2.1(eslint@8.46.0)(typescript@5.2.0-beta) + debug: 3.2.7 + eslint: 8.46.0 + eslint-import-resolver-node: 0.3.7 + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.28.0)(eslint@8.46.0) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-import@2.28.0(@typescript-eslint/parser@6.2.1)(eslint@8.46.0): + resolution: {integrity: sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 6.2.1(eslint@8.46.0)(typescript@5.2.0-beta) + array-includes: 3.1.6 + array.prototype.findlastindex: 1.2.2 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.46.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.46.0) + has: 1.0.3 + is-core-module: 2.12.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.6 + object.groupby: 1.0.0 + object.values: 1.1.6 + resolve: 1.22.3 + semver: 6.3.1 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-unicorn@48.0.1(eslint@8.46.0): + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.44.0' + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + ci-info: 3.8.0 + clean-regexp: 1.0.0 + eslint: 8.46.0 + esquery: 1.5.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + lodash: 4.17.21 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.5.4 + strip-indent: 3.0.0 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint-visitor-keys@3.4.2: + resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.46.0: + resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@eslint-community/regexpp': 4.6.2 + '@eslint/eslintrc': 2.1.1 + '@eslint/js': 8.46.0 + '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.2 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.2 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa@7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fast-write-atomic@0.2.1: + resolution: {integrity: sha512-WvJe06IfNYlr+6cO3uQkdKdy3Cb1LlCJSF8zRs2eT8yuhdbSlR9nIt+TgQ92RUxiRrQm+/S7RARnMfCs5iuAjw==} + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: true + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: true + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /fp-ts@2.16.0: + resolution: {integrity: sha512-bLq+KgbiXdTEoT1zcARrWEpa5z6A/8b7PcDW7Gef3NSisQ+VS7ll2Xbf1E+xsgik0rWub/8u0qP/iTTjj+PhxQ==} + dev: true + + /framer-motion@6.5.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==} + peerDependencies: + react: '>=16.8 || ^17.0.0 || ^18.0.0' + react-dom: '>=16.8 || ^17.0.0 || ^18.0.0' + dependencies: + '@motionone/dom': 10.12.0 + framesync: 6.0.1 + hey-listen: 1.0.8 + popmotion: 11.0.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + style-value-types: 5.0.0 + tslib: 2.6.1 + optionalDependencies: + '@emotion/is-prop-valid': 0.8.8 + dev: true + + /framesync@6.0.1: + resolution: {integrity: sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==} + dependencies: + tslib: 2.6.1 + dev: true + + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true + + /fs-extra@10.0.0: + resolution: {integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs-jetpack@5.1.0: + resolution: {integrity: sha512-Xn4fDhLydXkuzepZVsr02jakLlmoARPy+YWIclo4kh0GyNGUHnTqeH/w/qIsVn50dFxtp8otPL2t/HcPJBbxUA==} + dependencies: + minimatch: 5.1.6 + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /function.prototype.name@1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /fuse.js@6.6.2: + resolution: {integrity: sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==} + engines: {node: '>=10'} + dev: true + + /generic-names@4.0.0: + resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} + dependencies: + loader-utils: 3.2.1 + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + dev: true + + /get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + dev: true + + /get-tsconfig@4.6.2: + resolution: {integrity: sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: true + + /global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} + dependencies: + ini: 2.0.0 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals@13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + + /goober@2.1.13(csstype@3.1.2): + resolution: {integrity: sha512-jFj3BQeleOoy7t93E9rZ2de+ScC4lQICLwiAQmKMg9F6roKGaLSHoCDYKkWlSafg138jejvq/mTdvmnwDQgqoQ==} + peerDependencies: + csstype: ^3.0.10 + dependencies: + csstype: 3.1.2 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.1 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /graphiql@3.0.5(@codemirror/language@6.0.0)(@types/node@20.4.5)(@types/react-dom@18.2.7)(@types/react@18.2.18)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-R02CKVXPajOmJcg0TAKuRMU8qvwb7ltGDYqbaQMKbLeYYw/wQUrmTxLwdVuRadgRL4ubNzl3q5vKTkQKR5Ay2Q==} + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 + react: ^16.8.0 || ^17 || ^18 + react-dom: ^16.8.0 || ^17 || ^18 + dependencies: + '@graphiql/react': 0.19.3(@codemirror/language@6.0.0)(@types/node@20.4.5)(@types/react-dom@18.2.7)(@types/react@18.2.18)(graphql@16.7.1)(react-dom@18.2.0)(react@18.2.0) + '@graphiql/toolkit': 0.9.1(@types/node@20.4.5)(graphql@16.7.1) + graphql: 16.7.1 + graphql-language-service: 5.1.7(graphql@16.7.1) + markdown-it: 12.3.2 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - '@codemirror/language' + - '@types/node' + - '@types/react' + - '@types/react-dom' + - graphql-ws + dev: true + + /graphql-language-service@5.1.7(graphql@16.7.1): + resolution: {integrity: sha512-xkawYMJeoNYGhT+SpSH3c2qf6HpGHQ/duDmrseVHBpVCrXAiGnliXGSCC4jyMGgZQ05GytsZ12p0nUo7s6lSSw==} + hasBin: true + peerDependencies: + graphql: ^15.5.0 || ^16.0.0 + dependencies: + graphql: 16.7.1 + nullthrows: 1.1.1 + vscode-languageserver-types: 3.17.3 + dev: true + + /graphql-query-complexity@0.12.0(graphql@16.7.1): + resolution: {integrity: sha512-fWEyuSL6g/+nSiIRgIipfI6UXTI7bAxrpPlCY1c0+V3pAEUo1ybaKmSBgNr1ed2r+agm1plJww8Loig9y6s2dw==} + peerDependencies: + graphql: ^14.6.0 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 16.7.1 + lodash.get: 4.4.2 + dev: true + + /graphql-scalars@1.22.2(graphql@16.7.1): + resolution: {integrity: sha512-my9FB4GtghqXqi/lWSVAOPiTzTnnEzdOXCsAC2bb5V7EFNQjVjwy3cSSbUvgYOtDuDibd+ZsCDhz+4eykYOlhQ==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 16.7.1 + tslib: 2.6.1 + dev: true + + /graphql-subscriptions@2.0.0(graphql@16.7.1): + resolution: {integrity: sha512-s6k2b8mmt9gF9pEfkxsaO1lTxaySfKoEJzEfmwguBbQ//Oq23hIXCfR1hm4kdh5hnR20RdwB+s3BCb+0duHSZA==} + peerDependencies: + graphql: ^15.7.2 || ^16.0.0 + dependencies: + graphql: 16.7.1 + iterall: 1.3.0 + dev: true + + /graphql-tag@2.12.6(graphql@16.7.1): + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 16.7.1 + tslib: 2.6.1 + dev: true + + /graphql-type-json@0.3.2(graphql@16.7.1): + resolution: {integrity: sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==} + peerDependencies: + graphql: '>=0.8.0' + dependencies: + graphql: 16.7.1 + dev: true + + /graphql@16.7.1: + resolution: {integrity: sha512-DRYR9tf+UGU0KOsMcKAlXeFfX89UiiIZ0dRU3mR0yJfu6OjZqUcp68NnFLnqQU5RexygFoDy1EW+ccOYcPfmHg==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.1 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /hasha@5.2.2: + resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} + engines: {node: '>=8'} + dependencies: + is-stream: 2.0.1 + type-fest: 0.8.1 + dev: true + + /header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + dependencies: + capital-case: 1.0.4 + tslib: 2.6.1 + dev: true + + /hey-listen@1.0.8: + resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==} + dev: true + + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: true + + /hooks.macro@1.1.2(react@18.2.0): + resolution: {integrity: sha512-cekr0kazwaRhTuoiLteb97OkGhwjpW4sGVHKFG+O24qTeGIZmMbVUATww0HMXLwiedUDCQO0nnxsL3YKyGUH+g==} + peerDependencies: + react: ^16.8.0 + dependencies: + '@babel/helper-module-imports': 7.22.5 + babel-plugin-macros: 2.8.0 + react: 18.2.0 + dev: true + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /html-parse-stringify@3.0.1: + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + dependencies: + void-elements: 3.1.0 + dev: true + + /http-proxy-agent@7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent@7.0.0: + resolution: {integrity: sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /i18next-http-backend@2.2.1(patch_hash=oxpqp5jjldpyo63xee6uzmu3na): + resolution: {integrity: sha512-ZXIdn/8NJIBJ0X4hzXfc3STYxKrCKh1fYjji9HPyIpEJfvTvy8/ZlTl8RuTizzCPj2ZcWrfaecyOMKs6bQ7u5A==} + dependencies: + cross-fetch: link:shims/cross-fetch + dev: true + patched: true + + /i18next-icu@2.3.0(intl-messageformat@10.5.0): + resolution: {integrity: sha512-x+j7kd5nDJCfbU53uwsMfXD7ALPu5uv0bqjAMQ5nVvXRoj1L7gkmswKtM3XDWYo4YUHf1jznlhSdPyy0xEwU+Q==} + peerDependencies: + intl-messageformat: ^10.3.3 + dependencies: + intl-messageformat: 10.5.0 + dev: true + + /i18next@23.4.1: + resolution: {integrity: sha512-07ekE7hbUrbxTYj97VnBzyhKcGURTJC9p4iWTwCVC8t63T+YrgqQmb/n1LBQMivZYwR61pqS+PC0G2rtENycyQ==} + dependencies: + '@babel/runtime': 7.22.6 + dev: true + + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + requiresBuild: true + dependencies: + safer-buffer: 2.1.2 + dev: true + optional: true + + /icss-utils@5.1.0(postcss@8.4.27): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.27 + dev: true + + /idb-keyval@6.2.1: + resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} + dev: true + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore-walk@5.0.1: + resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + minimatch: 5.1.6 + dev: true + + /ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + dev: true + + /image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /immediate@3.3.0: + resolution: {integrity: sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==} + dev: true + + /immer@10.0.2: + resolution: {integrity: sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==} + dev: true + + /immutable@4.3.1: + resolution: {integrity: sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /import-from@4.0.0: + resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} + engines: {node: '>=12.2'} + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + dev: true + + /internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + + /intl-messageformat@10.5.0: + resolution: {integrity: sha512-AvojYuOaRb6r2veOKfTVpxH9TrmjSdc5iR9R5RgBwrDZYSmAAFVT+QLbW3C4V7Qsg0OguMp67Q/EoUkxZzXRGw==} + dependencies: + '@formatjs/ecma402-abstract': 1.17.0 + '@formatjs/fast-memoize': 2.2.0 + '@formatjs/icu-messageformat-parser': 2.6.0 + tslib: 2.6.1 + dev: true + + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: true + + /is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + dependencies: + is-relative: 1.0.0 + is-windows: 1.0.2 + dev: true + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.12.1: + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + dependencies: + has: 1.0.3 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + + /is-lower-case@2.0.2: + resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + dependencies: + tslib: 2.6.1 + dev: true + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /is-primitive@3.0.1: + resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==} + engines: {node: '>=0.10.0'} + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + dependencies: + is-unc-path: 1.0.0 + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.11 + dev: true + + /is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + dependencies: + unc-path-regex: 0.1.2 + dev: true + + /is-upper-case@2.0.2: + resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + dependencies: + tslib: 2.6.1 + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-what@3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + dev: true + + /is-what@4.1.15: + resolution: {integrity: sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==} + engines: {node: '>=12.13'} + dev: true + + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: true + + /iterall@1.3.0: + resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true + + /language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: true + + /language-tags@1.0.8: + resolution: {integrity: sha512-aWAZwgPLS8hJ20lNPm9HNVs4inexz6S2sQa3wx/+ycuutMNE5/IfYxiWYBbi+9UWCQVaXYCOPUl6gFrPR7+jGg==} + dependencies: + language-subtag-registry: 0.3.22 + dev: true + + /lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + dependencies: + readable-stream: 2.3.8 + dev: true + + /less@4.1.3: + resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + copy-anything: 2.0.6 + parse-node-version: 1.0.1 + tslib: 2.6.1 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 3.2.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /libphonenumber-js@1.10.38: + resolution: {integrity: sha512-4NjVXVUmpZ9Zsqq6FXa2+MKI+KAI3tOqA0pxXgXGluhpj4ge5didmbWJpMBqGB3AVGv1SnEtKdGTbxjSEG1kCQ==} + dev: true + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /linkify-it@3.0.3: + resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} + dependencies: + uc.micro: 1.0.6 + dev: true + + /loader-utils@3.2.1: + resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + engines: {node: '>= 12.13.0'} + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: true + + /lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: true + + /lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + dev: true + + /lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} + dev: true + + /lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + dev: true + + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: true + + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.noop@3.0.1: + resolution: {integrity: sha512-TmYdmu/pebrdTIBDK/FDx9Bmfzs9x0sZG6QIJuMDTqEPfeciLcN13ij+cOd0i9vwJfBtbG9UQ+C7MkXgYxrIJg==} + dev: true + + /lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: true + + /lower-case-first@2.0.2: + resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + dependencies: + tslib: 2.6.1 + dev: true + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.6.1 + dev: true + + /lru-cache@10.0.0: + resolution: {integrity: sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==} + engines: {node: 14 || >=16.14} + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + pify: 4.0.1 + semver: 5.7.2 + dev: true + optional: true + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: true + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true + + /markdown-it@12.3.2: + resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 2.1.0 + linkify-it: 3.0.3 + mdurl: 1.0.1 + uc.micro: 1.0.6 + dev: true + + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true + + /mdurl@1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + dev: true + + /memoize-one@5.2.1: + resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + dev: true + + /memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /meros@1.3.0(@types/node@20.4.5): + resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 20.4.5 + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /monaco-editor@0.40.0(patch_hash=ku3o7hkzj5ntzax27c7xlqnuoa): + resolution: {integrity: sha512-1wymccLEuFSMBvCk/jT1YDW/GuxMLYwnFwF9CDyYCxoTw2Pt379J3FUhwy9c43j51JdcxVPjwk0jm0EVDsBS2g==} + dev: true + patched: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /nanoid@4.0.2: + resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} + engines: {node: ^14 || ^16 || >=18} + hasBin: true + dev: true + + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /needle@3.2.0: + resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==} + engines: {node: '>= 4.4.x'} + hasBin: true + requiresBuild: true + dependencies: + debug: 3.2.7 + iconv-lite: 0.6.3 + sax: 1.2.4 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /new-github-issue-url@0.2.1: + resolution: {integrity: sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA==} + engines: {node: '>=10'} + dev: true + + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.6.1 + dev: true + + /node-fetch@2.6.11: + resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-fetch@2.6.12: + resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.2 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + dependencies: + remove-trailing-separator: 1.1.0 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize.css@8.0.1: + resolution: {integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==} + dev: true + + /npm-bundled@2.0.1: + resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + npm-normalize-package-bin: 2.0.0 + dev: true + + /npm-normalize-package-bin@2.0.0: + resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dev: true + + /npm-packlist@5.1.3: + resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + dependencies: + glob: 8.1.0 + ignore-walk: 5.0.1 + npm-bundled: 2.0.1 + npm-normalize-package-bin: 2.0.0 + dev: true + + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + dev: true + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.fromentries@2.0.6: + resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /object.groupby@1.0.0: + resolution: {integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + dev: true + + /object.values@1.1.6: + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + + /open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + dependencies: + default-browser: 4.0.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 2.2.0 + dev: true + + /optimism@0.16.2: + resolution: {integrity: sha512-zWNbgWj+3vLEjZNIh/okkY2EUfX+vB9TJopzIZwT1xxaMqC5hRLLraePod4c5n4He08xuXNH+zhKFFCu390wiQ==} + dependencies: + '@wry/context': 0.7.3 + '@wry/trie': 0.3.2 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + dependencies: + p-map: 2.1.0 + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: true + + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.1 + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-filepath@1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} + dependencies: + is-absolute: 1.0.0 + map-cache: 0.2.2 + path-root: 0.1.1 + dev: true + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.22.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /parse-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + dev: true + + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.1 + dev: true + + /path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.1 + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-root-regex@0.1.2: + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} + dev: true + + /path-root@0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} + dependencies: + path-root-regex: 0.1.2 + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + requiresBuild: true + dev: true + optional: true + + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + + /popmotion@11.0.3: + resolution: {integrity: sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==} + dependencies: + framesync: 6.0.1 + hey-listen: 1.0.8 + style-value-types: 5.0.0 + tslib: 2.6.1 + dev: true + + /postcss-load-config@3.1.4(postcss@8.4.27)(ts-node@10.9.1): + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.27 + ts-node: 10.9.1(@types/node@20.4.5)(typescript@5.2.0-beta) + yaml: 1.10.2 + dev: true + + /postcss-modules-extract-imports@3.0.0(postcss@8.4.27): + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.27 + dev: true + + /postcss-modules-local-by-default@4.0.3(postcss@8.4.27): + resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.27) + postcss: 8.4.27 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-modules-scope@3.0.0(postcss@8.4.27): + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.27 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-modules-values@4.0.0(postcss@8.4.27): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.27) + postcss: 8.4.27 + dev: true + + /postcss-modules@6.0.0(postcss@8.4.27): + resolution: {integrity: sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + generic-names: 4.0.0 + icss-utils: 5.1.0(postcss@8.4.27) + lodash.camelcase: 4.3.0 + postcss: 8.4.27 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.27) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.27) + postcss-modules-scope: 3.0.0(postcss@8.4.27) + postcss-modules-values: 4.0.0(postcss@8.4.27) + string-hash: 1.1.3 + dev: true + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@8.4.27: + resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /pouchdb-browser@8.0.1: + resolution: {integrity: sha512-wXObS1Layd/gBRKwa6EBS99tFY9G3VPaMRu8ffWCohkpi9PZCm3z1xeB4P4S9Qecf0u5so+rxvbVVyTtgdhvaQ==} + dependencies: + immediate: 3.3.0 + spark-md5: 3.0.2 + uuid: 8.3.2 + vuvuzela: 1.0.3 + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier@3.0.0: + resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: true + + /prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + requiresBuild: true + dev: true + optional: true + + /punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: true + + /react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + dev: true + + /react-helmet@6.1.0(react@18.2.0): + resolution: {integrity: sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==} + peerDependencies: + react: '>=16.3.0' + dependencies: + object-assign: 4.1.1 + prop-types: 15.8.1 + react: 18.2.0 + react-fast-compare: 3.2.2 + react-side-effect: 2.1.2(react@18.2.0) + dev: true + + /react-hot-toast@2.4.1(csstype@3.1.2)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==} + engines: {node: '>=10'} + peerDependencies: + react: '>=16' + react-dom: '>=16' + dependencies: + goober: 2.1.13(csstype@3.1.2) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + transitivePeerDependencies: + - csstype + dev: true + + /react-i18next@13.0.3(i18next@23.4.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-/t4kt4Y2o+21hbvx+o9zpVnmoiud7KLDncyZFGN0U6TGAWYaXdTsp/ytAHFcKKSAODg4noIMaOO3X7bMgCqLHw==} + peerDependencies: + i18next: '>= 23.2.3' + react: '>= 16.8.0' + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + '@babel/runtime': 7.22.6 + html-parse-stringify: 3.0.1 + i18next: 23.4.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true + + /react-remove-scroll-bar@2.3.4(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.18 + react: 18.2.0 + react-style-singleton: 2.2.1(@types/react@18.2.18)(react@18.2.0) + tslib: 2.6.1 + dev: true + + /react-remove-scroll@2.5.5(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.18 + react: 18.2.0 + react-remove-scroll-bar: 2.3.4(@types/react@18.2.18)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.18)(react@18.2.0) + tslib: 2.6.1 + use-callback-ref: 1.3.0(@types/react@18.2.18)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.18)(react@18.2.0) + dev: true + + /react-side-effect@2.1.2(react@18.2.0): + resolution: {integrity: sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==} + peerDependencies: + react: ^16.3.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: true + + /react-style-singleton@2.2.1(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.18 + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.2.0 + tslib: 2.6.1 + dev: true + + /react-transition-state@2.1.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-kQx5g1FVu9knoz1T1WkapjUgFz08qQ/g1OmuWGi3/AoEFfS0kStxrPlZx81urjCXdz2d+1DqLpU6TyLW/Ro04Q==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /react-window@1.8.9(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-+Eqx/fj1Aa5WnhRfj9dJg4VYATGwIUP2ItwItiJ6zboKWA6EX3lYDAXfGF2hyNqplEprhbtjbipiADEcwQ823Q==} + engines: {node: '>8.0.0'} + peerDependencies: + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@babel/runtime': 7.22.6 + memoize-one: 5.2.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: true + + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.1 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + dependencies: + minimatch: 5.1.6 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /reflect-metadata@0.1.13: + resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} + dev: true + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true + + /regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + dev: true + + /regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + dev: true + + /replace-string@3.1.0: + resolution: {integrity: sha512-yPpxc4ZR2makceA9hy/jHNqc7QVkd4Je/N0WRHm6bs3PtivPuPynxE5ejU/mp5EhnCv8+uZL7vhz8rkluSlx+Q==} + engines: {node: '>=8'} + dev: true + + /reserved-words@0.1.2: + resolution: {integrity: sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==} + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + + /resolve@1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + hasBin: true + dependencies: + is-core-module: 2.12.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /resolve@1.22.3: + resolution: {integrity: sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==} + hasBin: true + dependencies: + is-core-module: 2.12.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /resolve@2.0.0-next.4: + resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} + hasBin: true + dependencies: + is-core-module: 2.12.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /response-iterator@0.2.6: + resolution: {integrity: sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw==} + engines: {node: '>=0.8'} + dev: true + + /retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + dependencies: + execa: 5.1.1 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + requiresBuild: true + dependencies: + tslib: 2.6.1 + dev: true + optional: true + + /safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-regex: 1.1.4 + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + requiresBuild: true + dev: true + optional: true + + /sass@1.47.0: + resolution: {integrity: sha512-GtXwvwgD7/6MLUZPnlA5/8cdRgC9SzT5kAnnJMRmEZQFRE3J56Foswig4NyyyQGsnmNvg6EUM/FP0Pe9Y2zywQ==} + engines: {node: '>=8.9.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.3.1 + source-map-js: 1.0.2 + dev: true + + /sass@1.64.2: + resolution: {integrity: sha512-TnDlfc+CRnUAgLO9D8cQLFu/GIjJIzJCGkE7o4ekIGQOH7T3GetiRR/PsTWJUHhkzcSPrARkPI+gNWn5alCzDg==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.3.1 + source-map-js: 1.0.2 + dev: true + + /sax@1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: true + + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: true + + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + dependencies: + no-case: 3.0.4 + tslib: 2.6.1 + upper-case-first: 2.0.2 + dev: true + + /set-value@4.1.0: + resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==} + engines: {node: '>=11.0'} + dependencies: + is-plain-object: 2.0.4 + is-primitive: 3.0.1 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true + + /slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.6.1 + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true + + /spark-md5@3.0.2: + resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==} + dev: true + + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.13 + dev: true + + /spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.13 + dev: true + + /spdx-license-ids@3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} + dev: true + + /sponge-case@1.0.1: + resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + dependencies: + tslib: 2.6.1 + dev: true + + /state-local@1.0.7: + resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} + dev: true + + /string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string.prototype.trim@1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /string.prototype.trimend@1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /string.prototype.trimstart@1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /style-mod@4.0.3: + resolution: {integrity: sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==} + dev: true + + /style-value-types@5.0.0: + resolution: {integrity: sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==} + dependencies: + hey-listen: 1.0.8 + tslib: 2.6.1 + dev: true + + /stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + dev: true + + /stylus@0.59.0: + resolution: {integrity: sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==} + hasBin: true + dependencies: + '@adobe/css-tools': 4.2.0 + debug: 4.3.4 + glob: 7.2.3 + sax: 1.2.4 + source-map: 0.7.4 + transitivePeerDependencies: + - supports-color + dev: true + + /superjson@1.13.1: + resolution: {integrity: sha512-AVH2eknm9DEd3qvxM4Sq+LTCkSXE2ssfh1t11MHMXyYXFQyQ1HLgVvV+guLTsaQnJU3gnaVo34TohHPulY/wLg==} + engines: {node: '>=10'} + dependencies: + copy-anything: 3.0.5 + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /swap-case@2.0.2: + resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} + dependencies: + tslib: 2.6.1 + dev: true + + /symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + dev: true + + /synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@pkgr/utils': 2.4.2 + tslib: 2.6.1 + dev: true + + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + + /tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /temp-dir@1.0.0: + resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==} + engines: {node: '>=4'} + dev: true + + /temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + dev: true + + /temp-write@4.0.0: + resolution: {integrity: sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==} + engines: {node: '>=8'} + dependencies: + graceful-fs: 4.2.11 + is-stream: 2.0.1 + make-dir: 3.1.0 + temp-dir: 1.0.0 + uuid: 3.4.0 + dev: true + + /tempy@1.0.1: + resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==} + engines: {node: '>=10'} + dependencies: + del: 6.1.1 + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + dev: true + + /terminal-link@2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.3.0 + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /tiny-invariant@1.3.1: + resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + dev: true + + /title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + dependencies: + tslib: 2.6.1 + dev: true + + /titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + dev: true + + /tmp@0.2.1: + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} + dependencies: + rimraf: 3.0.2 + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + dev: true + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /ts-api-utils@1.0.1(typescript@5.2.0-beta): + resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.2.0-beta + dev: true + + /ts-invariant@0.10.3: + resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} + engines: {node: '>=8'} + dependencies: + tslib: 2.6.1 + dev: true + + /ts-node@10.9.1(@types/node@20.4.5)(typescript@5.2.0-beta): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.4.5 + acorn: 8.10.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.2.0-beta + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /ts-pattern@4.3.0: + resolution: {integrity: sha512-pefrkcd4lmIVR0LA49Imjf9DYLK8vtWhqBPA3Ya1ir8xCW0O2yjL9dsCVvI7pCodLC5q7smNpEtDR2yVulQxOg==} + dev: true + + /tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib@2.5.3: + resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} + dev: true + + /tslib@2.6.1: + resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} + dev: true + + /tua-body-scroll-lock@1.4.0: + resolution: {integrity: sha512-pbl411d7RSxjYXt5pB5GdBQ5BraVg1PMvr8BSUXc4buCMeK1OYu7L10PuOU8EhdfWoxGiAfvLrioSQe6Cr9m1g==} + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: true + + /typed-emitter@2.1.0: + resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} + optionalDependencies: + rxjs: 7.8.1 + dev: true + + /typescript-plugin-css-modules@5.0.1(ts-node@10.9.1)(typescript@5.2.0-beta): + resolution: {integrity: sha512-hKXObfwfjx2/myRq4JeQ8D3xIWYTFqusi0hS/Aka7RFX1xQEoEkdOGDWyXNb8LmObawsUzbI30gQnZvqYXCrkA==} + peerDependencies: + typescript: '>=4.0.0' + dependencies: + '@types/postcss-modules-local-by-default': 4.0.0 + '@types/postcss-modules-scope': 3.0.1 + dotenv: 16.3.1 + icss-utils: 5.1.0(postcss@8.4.27) + less: 4.1.3 + lodash.camelcase: 4.3.0 + postcss: 8.4.27 + postcss-load-config: 3.1.4(postcss@8.4.27)(ts-node@10.9.1) + postcss-modules-extract-imports: 3.0.0(postcss@8.4.27) + postcss-modules-local-by-default: 4.0.3(postcss@8.4.27) + postcss-modules-scope: 3.0.0(postcss@8.4.27) + reserved-words: 0.1.2 + sass: 1.64.2 + source-map-js: 1.0.2 + stylus: 0.59.0 + tsconfig-paths: 4.2.0 + typescript: 5.2.0-beta + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + + /typescript@5.2.0-beta: + resolution: {integrity: sha512-z5cq8BXVwaY8cwltw0BiyHRCVXen3QNgIzIcJV4NiLzaWvavxltzFSXd2csO4HoBjlGnuG+/LLbUZ8is3fD6iA==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /ua-parser-js@1.0.35: + resolution: {integrity: sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==} + dev: true + + /uc.micro@1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + dev: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + dev: true + + /unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: true + + /universalify@2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: true + + /unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} + dependencies: + normalize-path: 2.1.1 + dev: true + + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: true + + /update-browserslist-db@1.0.11(browserslist@4.21.10): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.10 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + dependencies: + tslib: 2.6.1 + dev: true + + /upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + dependencies: + tslib: 2.6.1 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: true + + /use-callback-ref@1.3.0(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.18 + react: 18.2.0 + tslib: 2.6.1 + dev: true + + /use-context-selector@1.4.1(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0): + resolution: {integrity: sha512-Io2ArvcRO+6MWIhkdfMFt+WKQX+Vb++W8DS2l03z/Vw/rz3BclKpM0ynr4LYGyU85Eke+Yx5oIhTY++QR0ZDoA==} + peerDependencies: + react: '>=16.8.0' + react-dom: '*' + react-native: '*' + scheduler: '>=0.19.0' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + scheduler: 0.23.0 + dev: true + + /use-sidecar@1.1.2(@types/react@18.2.18)(react@18.2.0): + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.18 + detect-node-es: 1.1.0 + react: 18.2.0 + tslib: 2.6.1 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: true + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: true + + /uuid@9.0.0: + resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + hasBin: true + dev: true + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + + /validator@13.9.0: + resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==} + engines: {node: '>= 0.10'} + dev: true + + /value-or-promise@1.0.12: + resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} + engines: {node: '>=12'} + dev: true + + /void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + dev: true + + /vscode-languageserver-types@3.17.3: + resolution: {integrity: sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==} + dev: true + + /vuvuzela@1.0.3: + resolution: {integrity: sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==} + dev: true + + /w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + dev: true + + /webextension-polyfill@0.10.0: + resolution: {integrity: sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==} + dev: true + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /zen-observable-ts@1.2.5: + resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} + dependencies: + zen-observable: 0.8.15 + dev: true + + /zen-observable@0.8.15: + resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} + dev: true + + /zip-stream@4.1.0: + resolution: {integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==} + engines: {node: '>= 10'} + dependencies: + archiver-utils: 2.1.0 + compress-commons: 4.1.1 + readable-stream: 3.6.2 + dev: true + + /zod@3.21.4: + resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} + dev: true diff --git a/scripts/build-apps.ts b/scripts/build-apps.ts new file mode 100755 index 0000000..9714ceb --- /dev/null +++ b/scripts/build-apps.ts @@ -0,0 +1,300 @@ +#!/usr/bin/env -S node -r esbin +import "dotenv/config" +import { promises as fs } from "fs" +import { resolve } from "path" +import glob from "fast-glob" +import { program } from "commander" +import sass from "esbuild-plugin-sass" +import * as esbuild from "esbuild" +import type { PluginItem } from "@babel/core" +import { c } from "./utils" +import { cssModules } from "./plugins/esbuild-css-modules" +import { babelPlugin as babel } from "./plugins/esbuild-babel" +import { externalDep } from "./plugins/esbuild-external-dep" +import { stringImport } from "./plugins/esbuild-string-import" +import { yamlPlugin as yaml } from "./plugins/esbuild-yaml" +import { alias } from "./plugins/esbuild-alias" +import { getDefaultTarget } from "./plugins/esbuild-browserslist" + +const dist = "dist" +const SERVE_PORT = 3114 + +program + .option("-g, --grep ", "only build packages that match ") + .option("-s, --silent", "hide all output") + .option( + "-e, --env ", + "set the NODE_ENV environment variable", + process.env.NODE_ENV || "production", + ) + .option("-w, --watch", "watch for changes and rebuild") + .parse() + +const { grep, silent, env, watch } = program.opts() +const __PROD__ = env === "production" + +const log = silent ? () => {} : console.log + +async function main() { + const queue = new Queue([ + new Build("src/options/index.tsx", `${dist}/app/options`, { serve: true }), + new Build("src/popup/index.tsx", `${dist}/app/popup`), + new Build("src/server/index.ts", `${dist}/app/server`, { + platform: "node", + format: "cjs", + splitting: false, + minify: false, + }), + new Build("src/background/index.ts", `${dist}/app/background`), + new Build("src/background/compiler.ts", `${dist}/app/background/compiler`), + new Build("src/context/index.ts", `${dist}/app/context`, { + format: "iife", + splitting: false, + }), + new Build("src/devtools/index.ts", `${dist}/app/devtools`), + new Build("src/install/index.ts", `${dist}/app/install`), + new Build("src/graphiql/index.tsx", `${dist}/app/playground`), + new Build("src/reference/index.tsx", `${dist}/app/reference`, { + format: "iife", + splitting: false, + }), + ]).filter(grep ? task => task.entry.includes(grep) : () => true) + + if (!queue.length) { + return + } + + await queue.run(task => task.clean()) + + log( + watch ? "Watching" : "Building", + `${c.blue(queue.length)} package(s) in ${c.blue(env)}`, + ) + if (queue.length < 5) { + log(queue.tasks.map((t, i) => ` ${i + 1}. ${c.green(t.entry)}`).join("\n")) + } + + await queue.build() + + if (__PROD__) { + await printBundleSize() + } +} + +if (require.main === module) { + Promise.resolve() + .then(() => main()) + .catch(e => { + console.error(e) + process.exit(1) + }) +} + +type BuildOptions = Pick< + esbuild.BuildOptions, + "entryPoints" | "outdir" | "format" | "splitting" | "platform" | "minify" +> & { + serve?: boolean +} + +export const getBasicOptions = ({ + entryPoints, + minify = __PROD__, + plugins = [], + babelPlugins = [], +}: { + entryPoints: [string] + minify?: boolean + plugins?: esbuild.Plugin[] + babelPlugins?: PluginItem[] +}): Partial => ({ + entryPoints, + define: { + ...Object.entries(process.env).reduce( + (acc, [key, value]) => + key.startsWith("NEXT_PUBLIC_") + ? { ...acc, [`process.env.${key}`]: JSON.stringify(value) } + : acc, + {} as Record, + ), + "process.env.NODE_ENV": JSON.stringify(env), + "process.env.NODE_DEBUG": "false", + "process.env.SERVE_PORT": String(SERVE_PORT), + "process.browser": "true", + global: "globalThis", + }, + bundle: true, + format: "esm", + external: ["path", "glob", "fs", "util", "monaco-editor"], + plugins: [ + ...plugins, + externalDep(["prettier", "sass"]), + babel(babelPlugins), + yaml(), + stringImport(), + alias({ + lodash: require.resolve("lodash-es"), + "webextension-polyfill": require.resolve("../src/vendor/webextension-polyfill"), + "monaco-editor": require.resolve("../src/options/monaco.ts"), + + // https://github.com/MichalLytek/type-graphql/issues/366#issuecomment-511075437 + "libphonenumber-js": require.resolve("lodash.noop"), + // we never use graphql-subscriptions + "graphql-subscriptions": require.resolve("lodash.noop"), + + // Make esbuild use the module version + graphql: require.resolve("graphql/index.mjs"), + + ...(entryPoints[0].includes("graphiql") || __PROD__ + ? {} + : { + react: require.resolve("../src/vendor/why-did-you-render/index.js"), + "react/jsx-runtime": require.resolve( + "../src/vendor/why-did-you-render/jsx-runtime", + ), + }), + }), + cssModules({ + generateScopedName: __PROD__ + ? "[hash:base64:6]" + : "[name]__[local]___[hash:base64:5]", + localsConvention: "camelCaseOnly", + }), + sass(), + ].filter(Boolean), + target: getDefaultTarget(), + banner: { + js: "/* eslint-disable */", + }, + legalComments: "none", + keepNames: false, + tsconfig: "./tsconfig.json", + sourcemap: "linked", + minify, + splitting: true, + metafile: true, + loader: { + ".eot": "file", + ".png": "file", + ".ttf": "file", + ".woff": "file", + ".woff2": "file", + }, +}) + +async function printBundleSize() { + const root = resolve(dist, "app") + const files = await glob(["**/*", "!**/*.map", "!**/meta.json"], { + cwd: root, + onlyFiles: true, + }) + const sizes = await Promise.all( + files.map(async file => { + const { size } = await fs.stat(resolve(root, file)) + return { file, size } + }), + ) + + const list = sizes + .filter(a => a.size > 50000) + .sort((a, b) => b.size - a.size) + .slice(0, 10) + + for (const { file, size } of list) { + log( + c.blue(`./dist/app/${file.padEnd(38, " ")}`), + c.green(`${humanFileSize(size).padStart(9, " ")}`), + ) + } +} + +function humanFileSize(bytes: number, si = false, dp = 1) { + const thresh = si ? 1000 : 1024 + + if (Math.abs(bytes) < thresh) { + return bytes + " B" + } + + const units = si + ? ["kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"] + : ["KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"] + let u = -1 + const r = 10 ** dp + + do { + bytes /= thresh + ++u + } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1) + + return bytes.toFixed(dp) + " " + units[u] +} + +class Build { + enabled = true + + constructor( + readonly entry: string, + readonly outdir: string, + readonly options?: BuildOptions, + ) {} + + disable() { + this.enabled = false + return this + } + + async clean() { + if (!this.enabled) return + + await fs.rm(this.outdir, { recursive: true, force: true }) + } + + async build() { + if (!this.enabled) return + + const { outdir, options: { serve, ...options } = {} } = this + + const ctx = await esbuild.context({ + ...getBasicOptions({ + entryPoints: [this.entry], + }), + ...options, + outdir, + }) + + const { metafile } = await ctx.rebuild() + + if (__PROD__) { + await fs.writeFile(resolve(outdir, "meta.json"), JSON.stringify(metafile)) + } + + if (watch) { + await ctx.watch() + if (serve) { + await ctx.serve({ port: SERVE_PORT }) + } + } else { + await ctx.dispose() + } + } +} + +class Queue { + constructor(public tasks: readonly Build[]) {} + + get length() { + return this.tasks.length + } + + filter(predicate: (task: Build) => boolean) { + return new Queue(this.tasks.filter(predicate)) + } + + run(fn: (task: Build) => Promise) { + return Promise.all(this.tasks.map(fn)) + } + + build() { + return this.run(task => task.build()) + } +} diff --git a/scripts/build-css-module-def.ts b/scripts/build-css-module-def.ts new file mode 100755 index 0000000..8a42f2d --- /dev/null +++ b/scripts/build-css-module-def.ts @@ -0,0 +1,29 @@ +#!/usr/bin/env -S node -r esbin +import fs from "fs" +import { uniq } from "lodash" +import { writeFormatted } from "./utils" + +const modules = [ + "src/vendor/allotment/src/allotment.module.css", + "src/vendor/allotment/src/sash.module.css", +] + +for (const module of modules) { + const source = fs.readFileSync(module, "utf8") + const classNames = uniq( + Array.from(source.matchAll(/\.([a-z][a-z0-9_-]+)/gi), m => m[1]), + ) + + writeFormatted( + module + ".d.ts", + [ + "// This file is generated by scripts/build-css-module-def.ts", + "", + "declare const classNames: {", // + ...classNames.map(c => ` "${c}": string;`), + "}", + "", + "export default classNames;", + ].join("\n"), + ) +} diff --git a/scripts/build-gql.ts b/scripts/build-gql.ts new file mode 100755 index 0000000..77c2dbf --- /dev/null +++ b/scripts/build-gql.ts @@ -0,0 +1,91 @@ +#!/usr/bin/env -S node -r esbin +import { promises as fs } from "node:fs" +import { format } from "prettier" +import { CodeFileLoader } from "@graphql-tools/code-file-loader" +import { GraphQLFileLoader } from "@graphql-tools/graphql-file-loader" +import * as typescript from "@graphql-codegen/typescript" +import * as typescriptOperations from "@graphql-codegen/typescript-operations" +import * as add from "@graphql-codegen/add" +import { plugin as _, codegen, typedDocumentNodePlugin } from "@aet/gql-tools/codegen" +import { buildSchema } from "./build-schema-file" + +async function main() { + await buildSchema() + + const scalars: Record = { + DateTime: "Date", + } + + const context = await codegen({ + schema: { + source: "./src/generated/schema.gql", + loaders: [new GraphQLFileLoader()], + }, + documents: { + source: ["./src/**/*.{ts,tsx}", "!/src/generated/**/*.{ts,tsx}"], + loaders: [new CodeFileLoader({ pluckConfig: { skipIndent: true } })], + }, + }) + + const content = await context.generate({ + plugins: [ + _(typescript, { + immutableTypes: true, + useTypeImports: true, + declarationKind: "interface", + allowEnumStringTypes: true, + enumsAsTypes: true, + scalars, + }), + _(typescriptOperations, { + declarationKind: "interface", + allowEnumStringTypes: true, + scalars, + }), + _(add, { + content: /* js */ ` + /* eslint-disable */ + import { gql as _gql } from "@apollo/client"; + import type { DocumentNode } from "graphql"; + export { ApolloClient, useQuery, useApolloClient, useLazyQuery, useMutation } from "@apollo/client"; + + export const gql = _gql as unknown as { + ( + literals: string | readonly string[], + ...args: any[] + ): DocumentMap[K]; + ( + literals: string | readonly string[], + ...args: any[] + ): DocumentNode; + } + `, + }), + _(typedDocumentNodePlugin, { + createDocumentMap: true, + exportDocumentNodes: true, + }), + ], + pipeline: [ + source => + source + .replace(/Scalars\['String']\['(in|out)put']/g, "string") + .replace(/Scalars\['ID']\['(in|out)put']/g, "string") + .replace(/Scalars\['Boolean']\['(in|out)put']/g, "boolean") + .replace(/Scalars\['Int']\['(in|out)put']/g, "number") + .replace(/Scalars\['Float']\['(in|out)put']/g, "number") + .replaceAll("Scalars['DateTime']['input']", "Date") + .replaceAll("Scalars['JSON']['input']", "any") + .replace(/(\w+) \| `\$\{\1}`/g, " $1") + .replace(/: (Input)?Maybe<([['\]\w<> ]+)>/g, ": $2 | null") + .replace(/: Array<([\w<> ]+)>/g, ": $1[]") + .replace(/export type (\w+) = {/g, "export interface $1 {") + .replace(/export type (Make|Maybe|InputMaybe|Exact|Incremental)/g, "type $1"), + code => format(code, { parser: "typescript" }), + ], + }) + + await fs.writeFile("./src/generated/graphql.ts", content) +} + +void main() diff --git a/scripts/build-htmls.tsx b/scripts/build-htmls.tsx new file mode 100755 index 0000000..4d4ef92 --- /dev/null +++ b/scripts/build-htmls.tsx @@ -0,0 +1,91 @@ +#!/usr/bin/env -S node -r esbin +import fs from "fs" +import React from "react" +import { renderToStaticMarkup } from "react-dom/server" + +const __DEV__ = process.env.NODE_ENV !== "production" + +const Head: FC<{ + children: React.ReactNode +}> = ({ children }) => ( + + + + {children} + +) + +const files: { + [path: string]: React.ReactElement +} = { + "./dist/background.html": ( + + + ` + }) + .replace(//, (_, $1) => { + const css = fs.readFileSync(resolve(__dirname, "../dist", $1), "utf8") + return `` + }) + +fs.writeFileSync(path.replace(".html", "-bundled.html"), html) diff --git a/scripts/build-sass.ts b/scripts/build-sass.ts new file mode 100755 index 0000000..ed47707 --- /dev/null +++ b/scripts/build-sass.ts @@ -0,0 +1,86 @@ +#!/usr/bin/env -S node -r esbin +import fs from "fs" +import { resolve } from "path" +import * as esbuild from "esbuild" +import { file } from "./utils" +import { getDefaultTarget } from "./plugins/esbuild-browserslist" + +const outdir = resolve(__dirname, "../dist/vendor/sass") +fs.rmSync(outdir, { recursive: true, force: true }) + +const prefix = ` + let window = globalThis; + + let process = { + env: {}, + stdout: { + write: console.log + }, + stderr: { + write: console.error, + }, + }; +` + +const sass = fs.readFileSync( + resolve(__dirname, "../node_modules", "sass/sass.dart.js"), + "utf-8", +) + +const replaced: string = sass + .replaceAll(/typeof Buffer/g, '"undefined"') + .replaceAll("process.stdout.isTTY", "undefined") + .replaceAll("self.location", "window.location") + .replace(/require\("(chokidar|readline|fs|util)"\)/g, "{}") + .replace( + /(accept|accept\$1|add|call|toString|parse|write|scope\$1|parse[A-Z]\w+)\$(\d): function\(/g, + "$1$$$2(", + ) + .replace(/\w+\.util\.inspect\.custom/g, "Symbol()") + .replace(/(\$eq|toString|get\$\w+|join\$0): function\(/g, "$1(") + .replace("if (dartNodeIsActuallyNode) {", "if (false) {") + // CSP + .replaceAll( + /new\s+self\.Function\(\s*("[^"\\]*(?:\\.[^"\\]*)*")\s*,\s*("[^"\\]*(?:\\.[^"\\]*)*")\s*\)/g, + (_, $1, $2) => `((${JSON.parse($1)}) => { ${JSON.parse($2)} })`, + ) + .replaceAll( + /new\s+self\.Function\(\s*("[^"\\]*(?:\\.[^"\\]*)*")\s*,\s*('[^'\\]*(?:\\.[^'\\]*)*')\s*\)/g, + (_, $1, $2) => + `((${JSON.parse($1)}) => { ${JSON.parse( + '"' + $2.slice(1, -1).replaceAll('"', '\\"') + '"', + )} })`, + ) + .trim() + +const temporary = file.js(prefix + replaced) + +const entry = file.js(/* js */ ` + import "${temporary.path}"; + const sass = globalThis._cliPkgExports.pop(); + sass.load({}); + + export default sass; +`) + +try { + esbuild.buildSync({ + entryPoints: [entry.path], + outfile: resolve(outdir, "index.js"), + bundle: true, + minify: true, + format: "esm", + sourcemap: "external", + target: getDefaultTarget(), + external: ["fs", "chokidar", "readline"], + banner: { js: "/* eslint-disable */" }, + legalComments: "linked", + define: { + "process.env.NODE_ENV": '"production"', + "process.env.NODE_DEBUG": "undefined", + }, + }) +} finally { + temporary.rm() + entry.rm() +} diff --git a/scripts/build-schema-file.ts b/scripts/build-schema-file.ts new file mode 100755 index 0000000..afb768e --- /dev/null +++ b/scripts/build-schema-file.ts @@ -0,0 +1,103 @@ +#!/usr/bin/env -S node -r esbin +import fs from "fs" +import { build } from "esbuild" +import { printSchema } from "graphql" +import type { Visitor } from "@babel/core" +import { getBasicOptions } from "./build-apps" +import { file } from "./utils" +import { dependencies, devDependencies } from "../package.json" +import type * as schema from "../src/background/graphql/schema" + +const output = file.js() + +const DEBUG = !!process.env.DEBUG + +const babelPlugin: Visitor<{ filename: string }> = { + ClassMethod({ node }) { + node.params = [] + node.async = false + node.body.body = [] + }, + ClassPrivateMethod(path) { + path.remove() + }, + ClassProperty({ node }) { + node.value = null + }, + FunctionDeclaration({ node }, { filename }) { + if (!filename.includes("graphql")) { + node.body.body = [] + } + }, +} + +export async function buildSchema() { + await build({ + ...getBasicOptions({ + entryPoints: ["src/background/graphql/schema.ts"], + babelPlugins: [() => ({ visitor: babelPlugin })], + plugins: [ + { + name: "no-lib", + setup(build) { + const noop = require.resolve("lodash/noop") + const whitelist = new Set([ + "graphql-type-json", + "reflect-metadata", + "tslib", + "lodash", + "@aet/gql-tools/marco", + "@aet/gql-tools/type-graphql", + ]) + const noopRes = { path: noop, external: false } + + build.onResolve({ filter: /.*/ }, ({ path }) => { + if ( + path.includes("couchdb") || + path.includes("idb") || + path.includes("compiler") || + path.includes("webextension") + ) { + return noopRes + } + if (/^(~|\.\.?)\//.test(path)) { + return null + } + if (whitelist.has(path)) { + return { path: require.resolve(path), external: true } + } + return noopRes + }) + }, + }, + ], + }), + outfile: output.path, + target: "node20", + format: "cjs", + minify: !DEBUG, + keepNames: true, + legalComments: "none", + sourcemap: false, + splitting: false, + external: Object.keys(dependencies || {}) + .concat(Object.keys(devDependencies)) + .concat("@aet/gql-tools/type-graphql"), + }) + .then(() => { + const { getSchema } = require("../" + output.path) as typeof schema + const result = printSchema(getSchema()) + fs.writeFileSync("./src/generated/schema.gql", result) + + return result + }) + .finally(() => { + if (!DEBUG) { + output.rm() + } + }) +} + +if (require.main === module) { + void buildSchema() +} diff --git a/scripts/build-shims.js b/scripts/build-shims.js new file mode 100755 index 0000000..393e8a2 --- /dev/null +++ b/scripts/build-shims.js @@ -0,0 +1,59 @@ +#!/usr/bin/env node +/* eslint-disable spaced-comment */ +// @ts-check +const fs = require("fs") +const { resolve } = require("path") +const pkg = require("../package.json") + +/** + * @param {TemplateStringsArray} args + */ +function _([source]) { + return { + "index.js": `module.exports = ${source};\n`, + "index.mjs": `export default ${source};\n`, + "package.json": JSON.stringify({ module: "index.mjs", version: "1.0.0" }), + } +} + +const { entries, fromEntries } = Object + +/** + * @param {Record>} list + */ +function createShims(list) { + /** @type {Record} */ + const resolutions = fromEntries( + entries(pkg.resolutions).filter(([, path]) => !path.startsWith("./shims")), + ) + + for (const [name, content] of entries(list)) { + const dir = resolve(__dirname, "../shims", name) + fs.mkdirSync(dir, { recursive: true }) + content["package.json"] ??= "{}" + + for (let [fileName, text] of entries(content)) { + if (fileName === "package.json") { + text = JSON.stringify({ name, ...JSON.parse(text) }) + } + fs.writeFileSync(resolve(dir, fileName), text) + } + + resolutions[name] = `./shims/${name}` + } + + pkg.resolutions = + /** @type {any} */ + (fromEntries(entries(resolutions).sort(([a], [b]) => a.localeCompare(b)))) + + fs.writeFileSync(resolve(__dirname, "../package.json"), JSON.stringify(pkg, null, 2)) +} + +createShims({ + "cross-fetch": { + "index.js": /*js*/ `module.exports = fetch; const headers = Headers; module.exports.Headers = headers;`, + "index.mjs": /*js*/ `export default fetch; const headers = Headers; export { headers as Headers };`, + "package.json": JSON.stringify({ module: "index.mjs", version: "1.0.0" }), + }, + "is-number": _/*js*/ `value => typeof value === "number"`, +}) diff --git a/scripts/build-theme.tsx b/scripts/build-theme.tsx new file mode 100755 index 0000000..fc5c0ba --- /dev/null +++ b/scripts/build-theme.tsx @@ -0,0 +1,110 @@ +#!/usr/bin/env -S node -r esbin +import { promises as fs } from "fs" +import { resolve } from "path" +import sass from "sass" +import { kebabCase } from "lodash" +import { tokenSource } from "~/shared/theme/tokens" + +const trim = (s: string) => s.trim() + +const [, outdir] = process.argv.slice(2) +// This file is used to `make theme`. +namespace primer { + // https://github.com/primer/github-vscode-theme/commit/5f08d0cc4de8abc33e13c3f63fe92288824a11cf + // prettier-ignore + const classic = { + black: "#1b1f23", + white: "#fff", + gray: ["#fafbfc", "#f6f8fa", "#e1e4e8", "#d1d5da", "#959da5", "#6a737d", "#586069", "#444d56", "#2f363d", "#24292e"], + blue: ["#f1f8ff", "#dbedff", "#c8e1ff", "#79b8ff", "#2188ff", "#0366d6", "#005cc5", "#044289", "#032f62", "#05264c"], + green: ["#f0fff4", "#dcffe4", "#bef5cb", "#85e89d", "#34d058", "#28a745", "#22863a", "#176f2c", "#165c26", "#144620"], + yellow: ["#fffdef", "#fffbdd", "#fff5b1", "#ffea7f", "#ffdf5d", "#ffd33d", "#f9c513", "#dbab09", "#b08800", "#735c0f"], + orange: ["#fff8f2", "#ffebda", "#ffd1ac", "#ffab70", "#fb8532", "#f66a0a", "#e36209", "#d15704", "#c24e00", "#a04100"], + red: ["#ffeef0", "#ffdce0", "#fdaeb7", "#f97583", "#ea4a5a", "#d73a49", "#cb2431", "#b31d28", "#9e1c23", "#86181d"], + purple: ["#f5f0ff", "#e6dcfd", "#d1bcf9", "#b392f0", "#8a63d2", "#6f42c1", "#5a32a3", "#4c2889", "#3a1d6e", "#29134e"], + pink: ["#ffeef8", "#fedbf0", "#f9b3dd", "#f692ce", "#ec6cb9", "#ea4aaa", "#d03592", "#b93a86", "#99306f", "#6d224f"] + }; + + function addClassic(css: string, dark: boolean) { + const r = (name: string, value?: string) => + (css = css.replace( + RegExp(/(--color-NAME: )([^;]+);/.source.replace("NAME", name)), + (_, name, originalValue) => `${name}${value ?? originalValue};`, + )) + + r("canvas-default", dark ? "#1f2428" : undefined) + return css + } + + function sassCompile(code: string) { + return sass.compileString(code, { + loadPaths: [resolve(__dirname, "../node_modules")], + style: "compressed", + }).css + } + + export async function main() { + const outputDir = resolve(__dirname, "../dist/vendor/primer") + await fs.mkdir(outputDir, { recursive: true }) + + const themes = { + dark: "dark-default", + dark_colorblind: undefined, + dark_dimmed: undefined, + dark_high_contrast: undefined, + dark_tritanopia: undefined, + light: "light-default", + light_colorblind: undefined, + light_high_contrast: undefined, + light_tritanopia: undefined, + } + + const toRoot = (name: string, themeName = name) => + sassCompile(/* scss */ ` + @use "@primer/primitives/dist/scss/colors/_${name}.scss" as *; + :root[data-theme="github-${themeName}"] { + @include primer-colors-${name}; + } + `) + + await Promise.all([ + ...Object.entries(themes).map(([source, name = source]) => + fs.writeFile(resolve(outputDir, `github-${name}.css`), toRoot(source, name)), + ), + fs.writeFile( + resolve(outputDir, "github-dark.css"), + addClassic(toRoot("dark"), true), + ), + fs.writeFile( + resolve(outputDir, "github-light.css"), + addClassic(toRoot("light"), false), + ), + ]) + } +} + +async function tokens() { + const declarations = Object.entries(tokenSource).map(([name, value]) => { + const [light, dark] = value.trim().split(",").map(trim) + return { name, light, dark } + }) + + await fs.writeFile( + resolve(outdir, "tokens.generated.css"), + [ + "body{", + ...declarations.map(({ name, light }) => `--${kebabCase(name)}:${light};`), + "}", + "body.dark{", + ...declarations.map(({ name, dark }) => `--${kebabCase(name)}:${dark};`), + "}", + ].join(""), + ) +} + +async function main() { + await tokens() + await primer.main() +} + +main() diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..49364cc --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,29 @@ +#!/bin/sh +set -e + +if [ "$1" = "monaco" ]; then + rm -rf "dist/vendor/vs" + path=$(dirname "$(node -p "require.resolve('monaco-editor/package.json')")")/min/vs + cp -r "$path" "dist/vendor/vs" + exit 0 +fi + +if [ -z "$1" ]; then + export NODE_ENV=production + make all + echo "✨ Downloading locales..." + # crowdin download + echo "✨ Building gql..." + ./scripts/build-gql.ts + echo "✨ Building apps..." + ./scripts/build-apps.ts -s + echo "✨ Building license..." + ./scripts/build-license.ts +else + path=$(find ./scripts -type f -name "build-$1.*") + if [ -z "$path" ]; then + echo "Unknown task '$1'." + exit 1 + fi + $path "$@" +fi diff --git a/scripts/plugins/babel-component-name.ts b/scripts/plugins/babel-component-name.ts new file mode 100644 index 0000000..78082d2 --- /dev/null +++ b/scripts/plugins/babel-component-name.ts @@ -0,0 +1,37 @@ +import type { BabelPlugin } from "./esbuild-babel" + +export const componentName = + (): BabelPlugin => + ({ types: t }) => ({ + name: "babel-plugin-component-name", + visitor: { + ReturnStatement(path) { + if (!t.isJSXElement(path.node.argument)) return + + const funcParent = path.getFunctionParent() + if (funcParent == null || !t.isArrowFunctionExpression(funcParent.node)) return + + let id: string | undefined + + if ( + t.isCallExpression(funcParent.parent) && + t.isIdentifier(funcParent.parent.callee) && + t.isVariableDeclarator(funcParent.parentPath.parent) && + t.isIdentifier(funcParent.parentPath.parent.id) + ) { + id = funcParent.parentPath.parent.id.name + } else if ( + t.isVariableDeclarator(funcParent.parent) && + t.isIdentifier(funcParent.parent.id) + ) { + id = funcParent.parent.id.name + } + + if (id != null) { + path.node.argument.openingElement.attributes.unshift( + t.jsxAttribute(t.jsxIdentifier("data-component"), t.stringLiteral(id)), + ) + } + }, + }, + }) diff --git a/scripts/plugins/babel-constant-element.ts b/scripts/plugins/babel-constant-element.ts new file mode 100644 index 0000000..3f0306f --- /dev/null +++ b/scripts/plugins/babel-constant-element.ts @@ -0,0 +1,100 @@ +// https://github.com/babel/babel/blob/c38bf12f010520ea7abe8a286f62922b2d1e1f1b/packages/babel-plugin-transform-react-constant-elements/src/index.ts +import type { Visitor } from "@babel/core" +import type { PluginObj, types as t } from "@babel/core" + +interface PluginState { + isImmutable: boolean + mutablePropsAllowed?: boolean +} + +export default (allowMutablePropsOnTags?: string[]): PluginObj => { + const HOISTED = new WeakSet() + + const immutabilityVisitor: Visitor = { + enter(path, state) { + const stop = () => { + state.isImmutable = false + path.stop() + } + + if (path.isJSXClosingElement()) { + path.skip() + return + } + + // Elements with refs are not safe to hoist. + if ( + path.isJSXIdentifier({ name: "ref" }) && + path.parentPath.isJSXAttribute({ name: path.node }) + ) { + return stop() + } + + // Ignore identifiers & JSX expressions. + if (path.isJSXIdentifier() || path.isIdentifier() || path.isJSXMemberExpression()) { + return + } + + if (!path.isImmutable()) { + // If it's not immutable, it may still be a pure expression, such as string concatenation. + // It is still safe to hoist that, so long as its result is immutable. + // If not, it is not safe to replace as mutable values (like objects) could be mutated after render. + // https://github.com/facebook/react/issues/3226 + if (path.isPure()) { + const { confident, value } = path.evaluate() + if (confident) { + // We know the result; check its mutability. + const isMutable = + (!state.mutablePropsAllowed && value && typeof value === "object") || + typeof value === "function" + if (!isMutable) { + // It evaluated to an immutable value, so we can hoist it. + path.skip() + return + } + } + } + stop() + } + }, + } + + return { + name: "transform-react-constant-elements", + + visitor: { + Program(program) { + program.traverse({ + JSXElement(path) { + if (HOISTED.has(path.node)) return + HOISTED.add(path.node) + + const state: PluginState = { isImmutable: true } + + // This transform takes the option `allowMutablePropsOnTags`, which is an array + // of JSX tags to allow mutable props (such as objects, functions) on. Use sparingly + // and only on tags you know will never modify their own props. + if (allowMutablePropsOnTags != null) { + // Get the element's name. If it's a member expression, we use the last part of the path. + // So the option ["FormattedMessage"] would match "Intl.FormattedMessage". + let namePath = path.get("openingElement").get("name") + while (namePath.isJSXMemberExpression()) { + namePath = namePath.get("property") + } + + const elementName = (namePath.node as t.JSXIdentifier).name + state.mutablePropsAllowed = allowMutablePropsOnTags.includes(elementName) + } + + // Traverse all props passed to this element for immutability. + path.traverse(immutabilityVisitor, state) + + if (state.isImmutable) { + path.hoist(path.scope) + } + }, + }) + }, + }, + } +} diff --git a/scripts/plugins/babel-dynamic-import.ts b/scripts/plugins/babel-dynamic-import.ts new file mode 100644 index 0000000..64250f6 --- /dev/null +++ b/scripts/plugins/babel-dynamic-import.ts @@ -0,0 +1,54 @@ +import { dirname } from "path" +import glob from "fast-glob" +import type { types } from "@babel/core" +import type { BabelPlugin } from "./esbuild-babel" + +const skip = new WeakSet() + +export const dynamicImport = + (filePath: string): BabelPlugin => + ({ types: t }) => ({ + name: "dynamic-import", + visitor: { + Import(path) { + if ( + !t.isCallExpression(path.parent) || + path.parent.arguments.length !== 1 || + skip.has(path.parent) + ) { + return + } + + const [arg] = path.parent.arguments + if (!t.isTemplateLiteral(arg)) { + return + } + + const key = path.scope.generateDeclaredUidIdentifier("key") + + const globText = arg.quasis.map(x => x.value.raw).join("*") + const globCandidates = glob.sync(globText, { + cwd: dirname(filePath), + }) + + const clone = t.cloneNode(path.parent, true) + skip.add(clone) + + const cond = globCandidates.reduceRight( + (accum: types.Expression, cur) => + t.conditionalExpression( + t.binaryExpression("===", key, t.stringLiteral(cur)), + t.callExpression(t.import(), [t.stringLiteral(cur)]), + accum, + ), + clone, + ) + + t.cloneNode(path.parent) + + path.parentPath.replaceWith( + t.sequenceExpression([t.assignmentExpression("=", key, arg), cond]), + ) + }, + }, + }) diff --git a/scripts/plugins/babel-filename.ts b/scripts/plugins/babel-filename.ts new file mode 100644 index 0000000..677c480 --- /dev/null +++ b/scripts/plugins/babel-filename.ts @@ -0,0 +1,30 @@ +import { basename, dirname } from "path" +import type { BabelPlugin } from "./esbuild-babel" + +export const fileName = + ({ + hasFileName, + hasDirName, + path, + }: { + hasFileName: boolean + hasDirName: boolean + path: string + }): BabelPlugin => + ({ types: t }) => ({ + name: "__filename polyfill", + visitor: { + Program(program) { + const assign = (id: string, value: string) => + t.variableDeclaration("var", [ + t.variableDeclarator(t.identifier(id), t.stringLiteral(value)), + ]) + if (hasFileName) { + program.node.body.unshift(assign("__filename", basename(path))) + } + if (hasDirName) { + program.node.body.unshift(assign("__dirname", dirname(path))) + } + }, + }, + }) diff --git a/scripts/plugins/babel-inline-css-vars.ts b/scripts/plugins/babel-inline-css-vars.ts new file mode 100644 index 0000000..67d6c11 --- /dev/null +++ b/scripts/plugins/babel-inline-css-vars.ts @@ -0,0 +1,80 @@ +import hash from "@emotion/hash" +import type { types } from "@babel/core" +import { kebabCase } from "lodash" +import type { BabelPlugin } from "./esbuild-babel" + +export const inlineCSSVariables = + (): BabelPlugin<{ styles: { id: string; light: string; dark: string }[] }> => + ({ types: t }) => ({ + name: "inline CSS variables", + visitor: { + Program: { + enter(_, state) { + state.styles = [] + }, + exit(path, { styles }) { + if (!styles.length) return + + const css = + `body.light {${styles.map(s => `--${s.id}:${s.light}`).join(";")}}\n` + + `body.dark {${styles.map(s => `--${s.id}:${s.dark}`).join(";")}}` + + path.node.body.unshift( + t.importDeclaration([], t.stringLiteral(`data:text/css,${encodeURI(css)}`)), + ) + }, + }, + + TaggedTemplateExpression(path, state) { + function join(exp: types.Node): string[] | undefined { + if (t.isIdentifier(exp)) return [exp.name] + if (!t.isMemberExpression(exp) || !t.isIdentifier(exp.property)) return + const prev = t.isIdentifier(exp.object) ? [exp.object.name] : join(exp.object) + return prev ? [...prev, exp.property.name] : undefined + } + + const { expressions: exps } = path.node.quasi + for (const [i, exp] of exps.entries()) { + if (t.isIdentifier(exp)) { + if (exp.name === "DARK_MODE") { + exps[i] = t.stringLiteral("body.dark &") + } else if (exp.name === "LIGHT_MODE") { + exps[i] = t.stringLiteral("body.light &") + } + continue + } + + if ( + t.isCallExpression(exp) && + t.isIdentifier(exp.callee, { name: "color" }) && + exp.arguments.length === 2 && + t.isStringLiteral(exp.arguments[0]) && + t.isStringLiteral(exp.arguments[1]) + ) { + const [light, dark] = (exp.arguments as babel.types.StringLiteral[]).map( + arg => arg.value, + ) + const id = hash(`${light}-${dark}`) + state.styles.push({ id, light, dark }) + exps[i] = t.stringLiteral(`var(--${id})`) + continue + } + + let ids: string[] | undefined + if ( + t.isMemberExpression(exp) && + t.isIdentifier(exp.property) && + (ids = join(exp)) + ) { + const rest = ids.slice(1).join(".") + if (ids[0] === "vars") { + exps[i] = t.stringLiteral(`var(--${kebabCase(rest)})`) + } + if (ids[0] === "token") { + exps[i] = t.stringLiteral(`var(--color-${kebabCase(rest)})`) + } + } + } + }, + }, + }) diff --git a/scripts/plugins/babel-why-did-you-render.ts b/scripts/plugins/babel-why-did-you-render.ts new file mode 100644 index 0000000..926f435 --- /dev/null +++ b/scripts/plugins/babel-why-did-you-render.ts @@ -0,0 +1,106 @@ +import type { NodePath, types } from "@babel/core" +import type { Node } from "@babel/core" +import type { BabelPlugin } from "./esbuild-babel" + +// useWhyDidYouUpdate +export const whyDidYouRender = + ({ + hookName, + hookPath, + ignoredHooks, + }: { + hookName: string + hookPath: string + ignoredHooks: string[] + }): BabelPlugin => + ({ types: t }) => { + const ignored = new WeakSet() + + function ignore(node: Node) { + ignored.add(node) + return node + } + + return { + name: "why-did-you-render", + visitor: { + Program(path, state) { + const id = path.scope.generateUidIdentifier(hookName) + path.node.body.unshift( + t.importDeclaration( + [t.importSpecifier(id, t.identifier(hookName))], // + t.stringLiteral(hookPath), + ), + ) + state.whyDidYouRenderId = id + }, + + VariableDeclaration(path, state) { + if (ignored.has(path.node)) return + + const decls = path.node.declarations + if (decls.length !== 1) return + + const [{ init, id }] = decls + if ( + !t.isCallExpression(init) || + !t.isIdentifier(init.callee) || + !init.callee.name.startsWith("use") || + init.callee.name.length <= 3 + ) { + return + } + + if (ignoredHooks.includes(init.callee.name)) { + return + } + + const findParent = ( + predicate: (node: types.Node) => node is T, + ) => path.findParent(path => predicate(path.node)) as NodePath | undefined + + const parentId = + findParent(t.isFunctionDeclaration)?.node.id!.name ?? + (( + (findParent(t.isArrowFunctionExpression)?.parent) + ?.id + ))?.name + + if (!parentId || parentId.startsWith("use")) { + return + } + + const callee = t.cloneNode(state.whyDidYouRenderId as types.Identifier) + + if (t.isIdentifier(id)) { + path.insertAfter( + t.callExpression(callee, [ + t.stringLiteral(parentId), + t.stringLiteral(init.callee.name), + id, + ]), + ) + return + } + + const temporaryId = path.scope.generateUidIdentifier(init.callee.name) + + path.replaceWithMultiple([ + ignore( + t.variableDeclaration(path.node.kind, [ + t.variableDeclarator(temporaryId, init), + t.variableDeclarator(id, temporaryId), + ]), + ), + t.expressionStatement( + t.callExpression(callee, [ + t.stringLiteral(parentId), + t.stringLiteral(init.callee.name), + temporaryId, + ]), + ), + ]) + }, + }, + } + } diff --git a/scripts/plugins/esbuild-alias.ts b/scripts/plugins/esbuild-alias.ts new file mode 100644 index 0000000..5b833ed --- /dev/null +++ b/scripts/plugins/esbuild-alias.ts @@ -0,0 +1,24 @@ +// https://github.com/igoradamenko/esbuild-plugin-alias/blob/master/index.js +// MIT License. Copyright (c) 2021 Igor Adamenko +import type { Plugin } from "esbuild" + +export function alias(options: Record): Plugin { + const aliases = Object.keys(options) + const re = new RegExp(`^(${aliases.map(x => escapeRegExp(x)).join("|")})$`) + + return { + name: "alias", + setup(build) { + // we do not register 'file' namespace here, because the root file won't be processed + // https://github.com/evanw/esbuild/issues/791 + build.onResolve({ filter: re }, args => ({ + path: options[args.path], + })) + }, + } +} + +function escapeRegExp(string: string) { + // $& means the whole matched string + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") +} diff --git a/scripts/plugins/esbuild-babel.ts b/scripts/plugins/esbuild-babel.ts new file mode 100644 index 0000000..8910b55 --- /dev/null +++ b/scripts/plugins/esbuild-babel.ts @@ -0,0 +1,101 @@ +import fs from "fs" +import { extname } from "path" +import * as babel from "@babel/core" +import type * as esbuild from "esbuild" +import { fileName } from "./babel-filename" +import { dynamicImport } from "./babel-dynamic-import" +import { inlineCSSVariables } from "./babel-inline-css-vars" +import { componentName } from "./babel-component-name" +// import { whyDidYouRender } from "./babel-why-did-you-render"; +// import constantElement from "./babel-constant-element"; + +const __PROD__ = process.env.NODE_ENV === "production" + +export type BabelPlugin = ( + Babel: typeof babel, +) => babel.PluginObj + +export interface BabelPluginData { + path: string +} + +export const babelPlugin = (extraPlugins: babel.PluginItem[] = []): esbuild.Plugin => ({ + name: "babel", + setup(build) { + function* getBabelPlugins( + path: string, + content: string, + ): Generator { + const hasFileName = content.includes("__filename") + const hasDirName = content.includes("__dirname") + if (hasFileName || hasDirName) { + yield fileName({ hasFileName, hasDirName, path }) + } + if (!__PROD__ && /<\w/.test(content)) { + yield componentName() + } + // if (!__PROD__ && content.includes("use")) { + // yield whyDidYouRender({ + // hookName: "useWhyDidYouUpdate", + // hookPath: resolve(__dirname, "../../src/shared/hooks/useWhy.ts"), + // ignoredHooks: ["useTreeContext"], + // }); + // } + if (content.includes("vars.") || content.includes("token.")) { + yield inlineCSSVariables() + } + if (content.includes("await import(`")) { + yield dynamicImport(path) + } + if (content.includes('.macro"') || content.includes("/macro")) { + yield ["babel-plugin-macros", { typeGraphQL: { useParameterDecorator: true } }] + } + if (content.includes("@emotion")) { + yield [require("@emotion/babel-plugin"), { sourceMap: false }] + } + + if (__PROD__ && content.includes("gql`")) { + yield [require("babel-plugin-transform-minify-gql-template-literals")] + } + } + + build.onLoad({ filter: /\.tsx?$/ }, args => { + if (args.path.includes("node_modules/")) { + return null + } + + const { path } = args + const file = fs.readFileSync(path, "utf-8") + + const plugins: babel.PluginItem[] = Array.from(getBabelPlugins(path, file)).concat( + extraPlugins, + ) + + let code = file + const pluginData: BabelPluginData = { path } + + if (plugins.length) { + const res = babel.transformSync(file, { + filename: path, + babelrc: false, + configFile: false, + parserOpts: { + plugins: ["typescript", "decorators-legacy", "jsx", "importAssertions"], + }, + generatorOpts: { decoratorsBeforeExport: true }, + plugins, + })! + + code = res.code! + } else { + return null + } + + return { + contents: code, + loader: extname(path).slice(1) as any, + pluginData, + } + }) + }, +}) diff --git a/scripts/plugins/esbuild-browserslist.ts b/scripts/plugins/esbuild-browserslist.ts new file mode 100644 index 0000000..ae5a893 --- /dev/null +++ b/scripts/plugins/esbuild-browserslist.ts @@ -0,0 +1,107 @@ +// https://github.com/nihalgonsalves/esbuild-plugin-browserslist +// MIT License. Copyright (c) 2021 Nihal Gonsalves +import { z } from "zod" +import browserslist from "browserslist" + +export function getDefaultTarget() { + return getTarget( + ["Chrome", "Firefox", "Edge", "Safari"].map(browser => `last 2 ${browser} versions`), + ) +} + +enum BrowserslistKind { + Edge = "edge", + Firefox = "firefox", + Chrome = "chrome", + Safari = "safari", + iOS = "ios_saf", + Android = "android", + AndroidChrome = "and_chr", + AndroidFirefox = "and_ff", + AndroidUC = "and_uc", + AndroidQQ = "and_qq", + Samsung = "samsung", + Opera = "opera", + OperaMini = "op_mini", + OperaMobile = "op_mob", + IE = "ie", + IEMobile = "ie_mob", + BlackBerry = "bb", + Baidu = "baidu", + Kaios = "kaios", + Node = "node", +} + +const enum EsbuildEngine { + Chrome = "chrome", + Edge = "edge", + ES = "es", + Firefox = "firefox", + Hermes = "hermes", + IE = "ie", + IOS = "ios", + Node = "node", + Opera = "opera", + Rhino = "rhino", + Safari = "safari", +} + +const BrowserslistEsbuildMapping: Partial> = { + // exact map + [BrowserslistKind.Edge]: EsbuildEngine.Edge, + [BrowserslistKind.Firefox]: EsbuildEngine.Firefox, + [BrowserslistKind.Chrome]: EsbuildEngine.Chrome, + [BrowserslistKind.Safari]: EsbuildEngine.Safari, + [BrowserslistKind.iOS]: EsbuildEngine.IOS, + [BrowserslistKind.Node]: EsbuildEngine.Node, + [BrowserslistKind.IE]: EsbuildEngine.IE, + [BrowserslistKind.Opera]: EsbuildEngine.Opera, + // approximate mapping + [BrowserslistKind.Android]: EsbuildEngine.Chrome, + [BrowserslistKind.AndroidChrome]: EsbuildEngine.Chrome, + [BrowserslistKind.AndroidFirefox]: EsbuildEngine.Firefox, + // the rest have no equivalent for esbuild +} + +const BrowserSchema = z.nativeEnum(BrowserslistKind) +/** 123 or 123.456 or 123.456.789 */ +const VersionSchema = z.string().regex(/^(\d+\.\d+\.\d+|\d+\.\d+|\d+)$/) + +export function getTarget(targets: string[]): string[] { + const result = browserslist(targets) + .map(entry => { + const [rawBrowser, rawVersionOrRange] = entry.split(" ") + + const rawVersionNormalized = rawVersionOrRange + // e.g. 13.4-13.7, take the lower range + ?.replace(/-[\d.]+$/, "") + // all => replace with 1 + ?.replace("all", "1") + + const browserResult = BrowserSchema.safeParse(rawBrowser) + const versionResult = VersionSchema.safeParse(rawVersionNormalized) + + if (!browserResult.success || !versionResult.success) { + return + } + + const { data: browser } = browserResult + const { data: version } = versionResult + + const esbuildTarget = BrowserslistEsbuildMapping[browser] + + if (!esbuildTarget) { + return + } + + return { target: esbuildTarget, version } + }) + .filter(Boolean) + .map(({ target, version }) => `${target}${version}`) + + if (result.length === 0) { + throw new Error("Could not resolve any esbuild targets") + } + + return result +} diff --git a/scripts/plugins/esbuild-css-extract.ts b/scripts/plugins/esbuild-css-extract.ts new file mode 100644 index 0000000..f8b5bb6 --- /dev/null +++ b/scripts/plugins/esbuild-css-extract.ts @@ -0,0 +1,338 @@ +// import { relative, resolve } from "path"; +import type { PluginBuild } from "esbuild" +import type * as babel from "@babel/core" +import type { NodePath, types } from "@babel/core" +import { expression } from "@babel/template" +import hash from "@emotion/hash" +import { compile, serialize, stringify } from "stylis" +import { dropRightWhile } from "lodash" + +const NS = "extract-css" + +const runtimeArgs = ["Tag", "className", "vars"] as const +// const root = resolve(__dirname, "../.."); + +const shared = /* jsx */ ` + ({ as = Tag, className: cls, style, ...rest }, ref) => { + return _jsx(as, { + ...rest, + ref, + style: vars != null ? getStyle({ ...style }, className, vars) : style, + className: cx([className, cls]) + }) + } +` + +const runtime = /* jsx */ ` + import { jsx } from "react/jsx-runtime"; + import { forwardRef, memo } from "react"; + import { cx } from "@emotion/css"; + + const supportsAs = new WeakSet(); + const _jsx = jsx; + + function getStyle(style, className, vars) { + for (let i = 0; i < vars.length; i++) { + const name = "--" + className + "-" + i; + const variable = vars[i]; + if (variable !== null) { + style[name] = typeof variable === "function" ? variable(props) : variable; + } + } + return style; + } + + export default function create(${runtimeArgs.join(", ")}) { + const Component = memo( + forwardRef( + supportsAs.has(Tag) + ? ${shared.replace("as, {", "Tag, { as,")} + : ${shared} + ) + ); + + Component.withComponent = function (Tag) { + return create(${runtimeArgs.join(", ")}); + }; + + supportsAs.add(Component); + + return Component; + } +` + +const flattenArgs = (args: { [key in (typeof runtimeArgs)[number]]: string }) => + runtimeArgs.map(key => args[key]).join(", ") + +const styledComponent = expression({ + // plugins: ["jsx"], + syntacticPlaceholders: true, +})( + "%%create%%(" + + flattenArgs({ + className: "%%className%%", + Tag: "%%tag%%", + vars: "%%vars%%", + }) + + ")", +) + +const validParentTypes = new Set([ + "ArrayExpression", + "BinaryExpression", + "CallExpression", + "JSXExpressionContainer", + "LogicalExpression", + "ObjectProperty", + "VariableDeclarator", +]) + +interface State extends babel.PluginPass { + styles: string[] + program: types.Program + runtimeHelper?: types.Identifier +} + +export function extractCSS(build: PluginBuild, { className }: { className: string }) { + const RUNTIME = /^@extract-css\/runtime$/ + + build.onResolve({ filter: RUNTIME }, ({ path }) => ({ namespace: NS, path })) + + build.onLoad({ filter: RUNTIME, namespace: NS }, () => ({ + contents: runtime, + loader: "jsx", + resolveDir: __dirname, + })) + + const plugin = ({ types: t }: typeof babel): babel.PluginObj => { + const classNameMap = new WeakMap() + + function isImportedSpecifierFrom(path: NodePath, name: string, module: string) { + const declPath = path.scope.getBinding(name)!.path + return ( + t.isImportSpecifier(declPath.node) && + t.isImportDeclaration(declPath.parent) && + declPath.parent.source.value === module + ) + } + + function isDefaultImportedFrom(path: NodePath, name: string, module: string) { + const binding = path.scope.getBinding(name) + if (!binding) return false + const declPath = binding.path + return ( + t.isImportDefaultSpecifier(declPath.node) && + t.isImportDeclaration(declPath.parent) && + declPath.parent.source.value === module + ) + } + + function buildClassName(hash: string, componentName = "styled") { + return className.replaceAll("[hash]", hash).replaceAll("[name]", componentName) + } + + function getComponentName(path: NodePath): string | undefined { + if (t.isVariableDeclarator(path.parent) && t.isIdentifier(path.parent.id)) { + return path.parent.id.name + } + } + + const visitor: babel.Visitor = { + TaggedTemplateExpression(path, state) { + const { styles } = state + const quasiExps = path + .get("quasi") + .get("expressions") as NodePath[] + + const { tag, quasi } = path.node + + if (!validParentTypes.has(path.parent.type)) { + return + } + + function extract(getPrefix: (className: string) => string) { + let bailout = false + const raws = quasi.quasis.map(q => q.value.raw) + const className = buildClassName( + hash(JSON.stringify(raws)), + getComponentName(path), + ) + const skipInterpolations = new Set() + + const cssText = raws + .map((left, i) => { + if (bailout) { + return null! + } + + if (i === raws.length - 1) { + return left + } + + const exp = quasi.expressions[i] + const evaluated = quasiExps[i].evaluate() + if (evaluated.confident) { + if ( + typeof evaluated.value === "string" || + typeof evaluated.value === "number" + ) { + skipInterpolations.add(i) + return left + String(evaluated.value) + } + } + + if (t.isIdentifier(exp)) { + const binding = path.scope.getBinding(exp.name) + if (binding) { + const { node } = binding.path + if (t.isVariableDeclarator(node)) { + const cls = classNameMap.get(node.init!) + if (cls) { + skipInterpolations.add(i) + return left + cls + } + if (t.isStringLiteral(node.init)) { + skipInterpolations.add(i) + return left + node.init.value + } + } + + bailout = true + } + } else if (t.isStringLiteral(exp)) { + skipInterpolations.add(i) + return left + exp.value + } + + return `${left}var(--${className}-${i})` + }) + .join("") + + const compiled = compile(`${getPrefix(className)}{${cssText}}}`) + + return { + className, + skipInterpolations, + bailout, + style: serialize(compiled, stringify), + } + } + + function processStyled(tag: types.Expression) { + const { className, skipInterpolations, style, bailout } = extract(c => `.${c}`) + if (bailout) { + return + } + + styles.push(style) + + if (!state.runtimeHelper) { + state.runtimeHelper = path.scope.generateUidIdentifier("create") + state.program.body.unshift( + t.importDeclaration( + [t.importDefaultSpecifier(state.runtimeHelper)], + t.stringLiteral("@extract-css/runtime"), + ), + ) + } + + const fn = styledComponent({ + create: state.runtimeHelper, + className: t.stringLiteral(className), + tag: + t.isIdentifier(tag) && /^[a-z]/.test(tag.name) + ? t.stringLiteral(tag.name) + : tag, + vars: quasi.expressions.length + ? t.arrayExpression( + dropRightWhile( + quasi.expressions.map((e, i) => + skipInterpolations.has(i) + ? t.nullLiteral() + : (e as types.Expression), + ), + n => t.isNullLiteral(n), + ), + ) + : t.nullLiteral(), + }) + classNameMap.set(fn, className) + const [newPath] = path.replaceWith(fn) + newPath.addComment("leading", " @__PURE__ ") + } + + if (t.isIdentifier(tag) && tag.name === "keyframes") { + if (!isImportedSpecifierFrom(path, tag.name, "@emotion/css")) { + return + } + + const { className, style, bailout } = extract(c => `@keyframes ${c}`) + if (bailout) { + return + } + styles.push(style) + path.replaceWith(t.stringLiteral(className)) + } else if (t.isIdentifier(tag) && tag.name === "css") { + if (!isImportedSpecifierFrom(path, tag.name, "@emotion/css")) { + return + } + + const { className, style, bailout } = extract(c => `.${c}`) + if (bailout) { + return + } + styles.push(style) + path.replaceWith(t.stringLiteral(className)) + } else if ( + t.isMemberExpression(tag) && + t.isIdentifier(tag.object, { name: "styled" }) && + !t.isPrivateName(tag.property) + ) { + if (!isDefaultImportedFrom(path, tag.object.name, "@emotion/styled")) { + return + } + processStyled(tag.property) + } else if ( + t.isCallExpression(tag) && + t.isIdentifier(tag.callee, { name: "styled" }) && + tag.arguments.length === 1 && + t.isExpression(tag.arguments[0]) + ) { + if (!isDefaultImportedFrom(path, tag.callee.name, "@emotion/styled")) { + return + } + processStyled(tag.arguments[0]) + } + }, + } + + return { + name: "plugin", + visitor: { + Program: { + enter(program, state) { + state.styles = [] + state.program = program.node + }, + exit(program, state) { + program.traverse(visitor, state) + + if (state.styles.length) { + const css = + // `/*./${relative(root, state.filename!)}*/` + + state.styles.join("\n") + program.node.body.unshift( + t.importDeclaration( + [], + t.stringLiteral(`data:text/css,${encodeURI(css)}`), + ), + ) + } + }, + }, + }, + } + } + + return plugin +} diff --git a/scripts/plugins/esbuild-css-modules.ts b/scripts/plugins/esbuild-css-modules.ts new file mode 100644 index 0000000..e876f9d --- /dev/null +++ b/scripts/plugins/esbuild-css-modules.ts @@ -0,0 +1,92 @@ +import { relative, resolve } from "path" +import { promises as fs } from "fs" +import type { Plugin } from "esbuild" +import postcss from "postcss" +// @ts-expect-error +import postcssSass from "@csstools/postcss-sass" +import cssModules from "postcss-modules" + +type Options = Parameters[0] + +const PLUGIN_NAME = "esbuild-css-modules" + +async function buildCSSModule(cssFullPath: string, options: Options) { + options = { + localsConvention: "camelCaseOnly", + ...options, + } + const source = await fs.readFile(cssFullPath) + + let classNames = {} + const { css } = await postcss([ + postcssSass(), + cssModules({ + getJSON(_, json) { + classNames = json + return classNames + }, + ...options, + }), + ]).process(source, { + from: cssFullPath, + map: false, + }) + + return { + css, + classNames, + } +} + +const srcDir = resolve(__dirname, "../../src") + +const plugin = (options: Options = {}): Plugin => ({ + name: PLUGIN_NAME, + async setup(build) { + const memfs = new Map() + const FS_NAMESPACE = PLUGIN_NAME + "-fs" + + build.onResolve({ filter: /\.modules?\.s?css$/, namespace: "file" }, async args => { + const res = await build.resolve(args.path, { + kind: "import-statement", + resolveDir: args.resolveDir, + }) + + // This is just the unique ID for this CSS module. We use a relative path to make it easier to debug. + const path = relative(srcDir, res.path) + + return { + path, + namespace: PLUGIN_NAME, + pluginData: { + realPath: res.path, + }, + } + }) + + build.onResolve({ filter: /^@css-modules\/.*/ }, ({ path }) => ({ + path, + namespace: FS_NAMESPACE, + })) + + build.onLoad({ filter: /./, namespace: FS_NAMESPACE }, ({ path }) => ({ + contents: memfs.get(path)!, + loader: "css", + })) + + build.onLoad({ filter: /./, namespace: PLUGIN_NAME }, async args => { + const tmpFilePath = "@css-modules/" + args.path + const { classNames, css } = await buildCSSModule(args.pluginData.realPath, options) + memfs.set(tmpFilePath, css) + + return { + contents: + `import ${JSON.stringify(tmpFilePath)};\n` + + `module.exports = ${JSON.stringify(classNames)};`, + loader: "js", + } + }) + }, +}) + +export { plugin as cssModules } diff --git a/scripts/plugins/esbuild-external-dep.ts b/scripts/plugins/esbuild-external-dep.ts new file mode 100644 index 0000000..ce164c4 --- /dev/null +++ b/scripts/plugins/esbuild-external-dep.ts @@ -0,0 +1,14 @@ +import type * as esbuild from "esbuild" + +export const externalDep = (externals: string[]): esbuild.Plugin => ({ + name: "externalDep", + setup(build) { + for (const module of externals) { + const resolved: esbuild.OnResolveResult = { + path: `/vendor/${module}/index.js`, + external: true, + } + build.onResolve({ filter: RegExp(`^${module}$`) }, () => resolved) + } + }, +}) diff --git a/scripts/plugins/esbuild-monaco-global.ts b/scripts/plugins/esbuild-monaco-global.ts new file mode 100644 index 0000000..dd501ca --- /dev/null +++ b/scripts/plugins/esbuild-monaco-global.ts @@ -0,0 +1 @@ +module.exports = globalThis.monaco diff --git a/scripts/plugins/esbuild-string-import.ts b/scripts/plugins/esbuild-string-import.ts new file mode 100644 index 0000000..1bac414 --- /dev/null +++ b/scripts/plugins/esbuild-string-import.ts @@ -0,0 +1,32 @@ +import { dirname } from "path" +import { promises as fs } from "fs" +import * as esbuild from "esbuild" + +export const stringImport = (): esbuild.Plugin => ({ + name: "stringImport", + setup(build) { + build.onResolve({ filter: /\?string$/ }, async ({ path, importer }) => { + const resolved = await build.resolve(path.replace(/\?string$/, ""), { + kind: "import-statement", + importer, + resolveDir: dirname(importer), + }) + + return { + namespace: stringImport.name, + path: resolved.path, + } + }) + + build.onLoad({ filter: /.*/, namespace: stringImport.name }, async ({ path }) => { + let code = await fs.readFile(path, "utf-8") + if (build.initialOptions.minify && path.endsWith(".css")) { + ;({ code } = await esbuild.transform(code, { loader: "css", minify: true })) + } + return { + contents: code, + loader: "text", + } + }) + }, +}) diff --git a/scripts/plugins/esbuild-yaml.ts b/scripts/plugins/esbuild-yaml.ts new file mode 100644 index 0000000..5c7ce0f --- /dev/null +++ b/scripts/plugins/esbuild-yaml.ts @@ -0,0 +1,42 @@ +// MIT License +// Copyright (c) 2021 Marton Lederer +// https://github.com/martonlederer/esbuild-plugin-yaml/tree/d8d14d18c999f6507e906a7015ace0c991b507b4 +import { isAbsolute, join } from "path" +import { TextDecoder } from "util" +import { promises as fs } from "fs" +import type { Plugin } from "esbuild" +import type { LoadOptions } from "js-yaml" +import yaml from "js-yaml" + +interface YamlPluginOptions { + loadOptions?: LoadOptions +} + +export const yamlPlugin = (options: YamlPluginOptions = {}): Plugin => ({ + name: "yaml", + setup(build) { + // resolve .yaml and .yml files + build.onResolve({ filter: /\.(yml|yaml)$/ }, ({ path, resolveDir }) => { + if (resolveDir === "") return + + return { + path: isAbsolute(path) ? path : join(resolveDir, path), + namespace: "yaml", + } + }) + + // load files with "yaml" namespace + build.onLoad({ filter: /.*/, namespace: "yaml" }, async ({ path }) => { + const yamlContent = await fs.readFile(path) + const parsed = yaml.load( + new TextDecoder().decode(yamlContent), + options?.loadOptions, + ) as any + + return { + contents: JSON.stringify(parsed), + loader: "json", + } + }) + }, +}) diff --git a/scripts/utils.ts b/scripts/utils.ts new file mode 100644 index 0000000..335377d --- /dev/null +++ b/scripts/utils.ts @@ -0,0 +1,89 @@ +import fs from "fs" +import { extname } from "path" +import { format } from "prettier" + +export function file(extension: string, content = "") { + const path = `./.${(Date.now() - 1677e9).toString(36)}${extension}` + fs.writeFileSync(path, content) + + process.on("SIGINT", () => fs.unlinkSync(path)) + + return { + path, + rm: () => fs.unlinkSync(path), + } +} + +file.js = (content?: string) => file(".js", content) + +export function map(list: T[], fn: (item: T, index: number) => Promise) { + return Promise.all(list.map(fn)) +} + +/** + * Write a file with Prettier formatting. + */ +export async function writeFormatted(path: string, content: string) { + const ext = extname(path) + const formatted = await format(content, { + parser: ext === ".ts" ? "babel-ts" : ext === ".js" ? "babel" : undefined, + }) + return fs.promises.writeFile(path, formatted) +} + +// https://github.com/nathanbabcock/picocolors-browser/tree/d98747d1e7dd58390044ff0696b6d10995a94de3 +// ISC License. Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov +export namespace c { + const enabled = !("NO_COLOR" in process.env) + + const formatter = (open: string, close: string, replace = open) => + enabled + ? (input: number | string) => { + const string = "" + input + const index = string.indexOf(close, open.length) + return index !== -1 + ? open + replaceClose(string, close, replace, index) + close + : open + string + close + } + : String + + function replaceClose( + string: string, + close: string, + replace: string, + index: number, + ): string { + const start = string.substring(0, index) + replace + const end = string.substring(index + close.length) + const nextIndex = end.indexOf(close) + return nextIndex !== -1 + ? start + replaceClose(end, close, replace, nextIndex) + : start + end + } + + export const reset = enabled ? (s: string) => `\x1b[0m${s}\x1b[0m` : String + export const bold = formatter("\x1b[1m", "\x1b[22m", "\x1b[22m\x1b[1m") + export const dim = formatter("\x1b[2m", "\x1b[22m", "\x1b[22m\x1b[2m") + export const italic = formatter("\x1b[3m", "\x1b[23m") + export const underline = formatter("\x1b[4m", "\x1b[24m") + export const inverse = formatter("\x1b[7m", "\x1b[27m") + export const hidden = formatter("\x1b[8m", "\x1b[28m") + export const strikethrough = formatter("\x1b[9m", "\x1b[29m") + export const black = formatter("\x1b[30m", "\x1b[39m") + export const red = formatter("\x1b[31m", "\x1b[39m") + export const green = formatter("\x1b[32m", "\x1b[39m") + export const yellow = formatter("\x1b[33m", "\x1b[39m") + export const blue = formatter("\x1b[34m", "\x1b[39m") + export const magenta = formatter("\x1b[35m", "\x1b[39m") + export const cyan = formatter("\x1b[36m", "\x1b[39m") + export const white = formatter("\x1b[37m", "\x1b[39m") + export const gray = formatter("\x1b[90m", "\x1b[39m") + export const bgBlack = formatter("\x1b[40m", "\x1b[49m") + export const bgRed = formatter("\x1b[41m", "\x1b[49m") + export const bgGreen = formatter("\x1b[42m", "\x1b[49m") + export const bgYellow = formatter("\x1b[43m", "\x1b[49m") + export const bgBlue = formatter("\x1b[44m", "\x1b[49m") + export const bgMagenta = formatter("\x1b[45m", "\x1b[49m") + export const bgCyan = formatter("\x1b[46m", "\x1b[49m") + export const bgWhite = formatter("\x1b[47m", "\x1b[49m") +} diff --git a/src/background/compiler.ts b/src/background/compiler.ts new file mode 100644 index 0000000..41f19a1 --- /dev/null +++ b/src/background/compiler.ts @@ -0,0 +1,89 @@ +/* eslint-disable @typescript-eslint/require-await */ +/* eslint-disable @typescript-eslint/no-extraneous-class */ +/* eslint-disable class-methods-use-this */ +import sass, { type OutputStyle } from "sass" +import UAParser from "ua-parser-js" +import { expose } from "comlink" + +const parser = new UAParser(navigator.userAgent) +const quote = JSON.stringify + +const modules = Object.entries({ + navigator: () => /* scss */ ` + $browser: ${quote(parser.getBrowser().name)}; + $platform: ${quote(navigator.userAgentData?.platform)}; + $userAgent: ${quote(navigator.userAgent)}; + $language: ${quote(navigator.language)}; + `, +}).map(([key, value]) => ({ + key, + url: new URL(`sass://${key}`), + module: { + syntax: "scss", + get contents() { + return value() + }, + } as sass.ImporterResult, +})) + +@expose +export class Compiler { + static async compileSASS(data: string, outputStyle: OutputStyle): Promise { + try { + let { css } = sass.compileString(data, { + style: outputStyle, + importers: [ + { + canonicalize: url => modules.find(m => m.key === url)?.url ?? null, + load: url => modules.find(m => m.url.href === url.href)?.module ?? null, + }, + ], + }) + // https://github.com/sass/dart-sass/issues/472 + if (css.charCodeAt(0) === 0xfeff) { + css = css.slice(1) + } + return css + } catch (e) { + if (process.env.NODE_ENV === "development") { + console.log(data) + console.error(e.stack) + } + Object.defineProperty(e, "name", { + enumerable: true, + value: e.name || "Error", + }) + throw clone(e) + } + } +} + +function clone(e: any): any { + const keys = Reflect.ownKeys(e).concat(Reflect.ownKeys(Object.getPrototypeOf(e))) + return Object.fromEntries( + keys + .map(key => [key, e[key]]) + .filter(([key, value]) => !key.startsWith("_") && typeof value !== "function") + .map(([key, value]) => [ + key, + typeof value === "object" && value != null ? clone(value) : value, + ]), + ) +} + +interface Brand { + readonly brand: string + readonly version: string +} + +interface NavigatorUAData { + readonly brands: Brand[] + readonly mobile: boolean + readonly platform: string +} + +declare global { + interface Navigator { + readonly userAgentData: NavigatorUAData + } +} diff --git a/src/background/compilerBridge.ts b/src/background/compilerBridge.ts new file mode 100644 index 0000000..6e2afa1 --- /dev/null +++ b/src/background/compilerBridge.ts @@ -0,0 +1,33 @@ +import { wrap } from "comlink" +import { LRUCache } from "lru-cache" +import type { OutputStyle } from "sass" +import type { Compiler } from "./compiler" + +const worker = wrap( + new Worker(new URL("./compiler/compiler.js", import.meta.url).href, { type: "module" }), +) + +const lru = new LRUCache({ max: 450 }) + +export async function compileSASS( + source: string, + outputStyle: OutputStyle = "compressed", + insertCache = true, +): Promise { + if (lru.has(source)) { + return lru.get(source)! + } + + try { + const result = await worker.compileSASS(source, outputStyle) + if (insertCache) { + lru.set(source, result) + } + return result + } catch (e) { + if (process.env.NODE_ENV === "development") { + console.error(e.message) + } + throw e + } +} diff --git a/src/background/couchdb.ts b/src/background/couchdb.ts new file mode 100644 index 0000000..16849fc --- /dev/null +++ b/src/background/couchdb.ts @@ -0,0 +1,66 @@ +import PouchDB from "pouchdb-browser" +import { LAST_SYNC, PASSWORD_KEY, USERNAME_KEY } from "~/shared/constants" +import type { File } from "~/shared/models" + +export const localDb = new PouchDB("styles") +export let remoteDb: PouchDB.Database | undefined +let sync: PouchDB.Replication.Sync + +export function login(username: string, password: string) { + logout() + + remoteDb = new PouchDB(process.env.NEXT_PUBLIC_SERVER_URL, { + auth: { username, password }, + }) + sync = localDb.sync(remoteDb, { + live: true, + retry: true, + }) + + void sync.on + + void sync.on("change", () => { + localStorage.setItem(LAST_SYNC, new Date().toISOString()) + }) + + return remoteDb +} + +export function logout() { + if (remoteDb) { + sync!.cancel() + remoteDb = undefined + } +} + +const username = localStorage.getItem(USERNAME_KEY) +const password = localStorage.getItem(PASSWORD_KEY) + +if (username && password) { + void login(username, password) +} + +export async function getDocs() { + const docs = await localDb.allDocs({ include_docs: true }) + return docs.rows.map(row => row.doc!) +} + +export async function deleteDoc(id: string) { + const doc = await localDb.get(id) + await localDb.remove(doc) +} + +export async function exists(id: string) { + try { + await localDb.get(id) + return true + } catch (e) { + if ((e as Error).name === "not_found") { + return false + } else { + throw e + } + } +} + +Object.assign(globalThis, { localDb, remoteDb }) diff --git a/src/background/graphql/.eslintrc b/src/background/graphql/.eslintrc new file mode 100644 index 0000000..2a2773f --- /dev/null +++ b/src/background/graphql/.eslintrc @@ -0,0 +1,7 @@ +{ + "extends": "../../../.eslintrc", + "rules": { + "class-methods-use-this": "off", + "@typescript-eslint/consistent-type-imports": "off" + } +} diff --git a/src/background/graphql/api.ts b/src/background/graphql/api.ts new file mode 100644 index 0000000..1ed53b5 --- /dev/null +++ b/src/background/graphql/api.ts @@ -0,0 +1,39 @@ +import type { TypedDocumentNode } from "@apollo/client" +import { type DocumentNode, type ExecutionResult, execute, graphql } from "graphql" +import { getSchema } from "./schema" + +const schema = getSchema() + +class GraphQLError extends Error {} + +export async function query>( + source: string, + variableValues: T extends TypedDocumentNode ? K : never = {} as any, +): Promise ? K : never>> { + const result = await graphql({ schema, source, variableValues }) + return result as any +} + +async function executeNode( + document: DocumentNode, + variableValues: T extends TypedDocumentNode ? K : never = {} as any, +): Promise ? K : never>> { + const result = await execute({ schema, document, variableValues }) + return result as any +} +export { executeNode as execute } + +export async function queryOrThrow>( + source: string, + variableValues: T extends TypedDocumentNode ? K : never, +): Promise ? K : never> { + const result = await graphql({ schema, source, variableValues }) + if (result.data) { + return result.data as any + } else { + if (process.env.NODE_ENV === "development") { + console.error(result.errors) + } + throw new GraphQLError(result.errors?.[0].message) + } +} diff --git a/src/background/graphql/helpers.ts b/src/background/graphql/helpers.ts new file mode 100644 index 0000000..b5c696b --- /dev/null +++ b/src/background/graphql/helpers.ts @@ -0,0 +1,14 @@ +/* eslint-disable @typescript-eslint/no-unused-vars, class-methods-use-this, @typescript-eslint/consistent-type-imports */ +import type { ClassType } from "@aet/gql-tools/macro" +import { AutoObjectType } from "@aet/gql-tools/macro" + +export function PaginatedResponse<_TItem extends object>(_TItem: ClassType<_TItem>) { + @AutoObjectType() + abstract class PaginatedResponseClass { + items!: _TItem[] + total!: number + hasMore!: boolean + } + + return PaginatedResponseClass +} diff --git a/src/background/graphql/resolvers/CloudResolver.ts b/src/background/graphql/resolvers/CloudResolver.ts new file mode 100644 index 0000000..d76495c --- /dev/null +++ b/src/background/graphql/resolvers/CloudResolver.ts @@ -0,0 +1,64 @@ +import { Arg, AutoObjectType, Int, Mutation, Query, Resolver } from "@aet/gql-tools/macro" +import { login, logout, remoteDb } from "../../couchdb" + +@AutoObjectType() +class DatabaseInfo { + dbName!: string + diskFormatVersion?: Int + docCount!: Int + docDeleteCount?: Int + idbAttachmentFormat?: string + instantStartTime?: string + purgeSeq?: string + sizes?: DatabaseSize + sqlitePlugin?: boolean + updateSeq?: string +} + +@AutoObjectType() +class DatabaseSize { + active!: Int + external!: Int + file!: Int +} + +@Resolver() +export class CloudResolver { + @Query() + async remoteInfo(): Promise { + if (!remoteDb) return + + try { + const info = await remoteDb.info() + return { + dbName: info.db_name, + diskFormatVersion: (info as any).disk_format_version, + docCount: info.doc_count, + docDeleteCount: (info as any).doc_del_count, + idbAttachmentFormat: info.idb_attachment_format, + instantStartTime: (info as any).instant_start_time, + purgeSeq: (info as any).purge_seq, + sizes: (info as any).sizes, + sqlitePlugin: info.sqlite_plugin, + updateSeq: String(info.update_seq), + } + } catch {} + } + + @Mutation() + async login(@Arg() username: string, @Arg() password: string): Promise { + const db = login(username, password) + try { + await db.info() + return true + } catch { + return false + } + } + + @Mutation() + logout(): boolean { + logout() + return true + } +} diff --git a/src/background/graphql/resolvers/DatabaseResolver.ts b/src/background/graphql/resolvers/DatabaseResolver.ts new file mode 100644 index 0000000..0b89c2f --- /dev/null +++ b/src/background/graphql/resolvers/DatabaseResolver.ts @@ -0,0 +1,64 @@ +import { Arg, Mutation, Query, Resolver } from "@aet/gql-tools/macro" +import UAParser from "ua-parser-js" +import { ClientMetadata, InputExportedV1 } from "~/shared/models/index" +import { getDocs, localDb } from "../../couchdb" +import { PreferencesCache } from "./PreferencesResolver" + +/** + * Handles exporting, importing and synchronizing the database and + * preferences. + */ +@Resolver() +export class DatabaseResolver { + @Query() + async export(): Promise> { + const { clientName, ...preferences } = PreferencesCache.cache.get() + const files: InputExportedV1 = { + schema: 1, + files: await getDocs(), + source: clientName || getDefaultClientName(), + preferences, + } + return files + } + + @Mutation() + async restore(@Arg() backup: InputExportedV1): Promise { + const { schema, files, preferences } = backup + switch (schema) { + case 1: + await Promise.all( + files.map(file => + localDb.put({ + _id: file.id, + ...file, + createdAt: new Date(file.createdAt).valueOf(), + updatedAt: new Date(file.updatedAt).valueOf(), + state: file.state ?? "None", + }), + ), + ) + PreferencesCache.cache.set(preferences) + return true + + default: + throw new Error("Unknown backup schema") + } + } + + @Query() + clientMetadata(): ClientMetadata { + const parser = new UAParser(navigator.userAgent) + return { + browser: parser.getBrowser().name || "Unknown", + os: parser.getOS().name || "Unknown", + } + } +} + +function getDefaultClientName() { + const parser = new UAParser(navigator.userAgent) + const browser = parser.getBrowser().name || "Unknown" + const os = parser.getOS().name || "Unknown" + return `${os} ${browser}` +} diff --git a/src/background/graphql/resolvers/FileResolver.ts b/src/background/graphql/resolvers/FileResolver.ts new file mode 100644 index 0000000..fc5a69a --- /dev/null +++ b/src/background/graphql/resolvers/FileResolver.ts @@ -0,0 +1,226 @@ +import { + Arg, + Args, + FieldResolver, + ID, + Int, + Mutation, + Query, + Resolver, + Root, +} from "@aet/gql-tools/macro" +import browser from "webextension-polyfill" +import { customAlphabet } from "nanoid/non-secure" +import { File, FileFilter, FindFilterArgs, PartialFileInput } from "~/shared/models/index" +import { FileSortBy, FileState, fileMatches } from "~/shared/models/utils" +import { statistics } from "../../idb" +import { deleteDoc, exists, getDocs, localDb } from "../../couchdb" +import { GLOBAL_STYLE_ID, isGlobalStyle } from "~/shared" +import { broadcast } from "../utils" +import { guessFileLanguage } from "../utils/guessLanguage" +import { PreferencesCache } from "./PreferencesResolver" +import { isFileLoggingDisabled } from "./StatisticsResolver" + +@Resolver(() => File) +export class FileResolver { + private readonly nanoId = customAlphabet("1234567890abcdef", 24) + + @Query() + async file(@Arg() id: ID): Promise { + return await localDb.get(id) + } + + private static fileMatches(file: File, filter: FileFilter) { + // To add a filter: (filterExists && !filterMatchesFile) || + return !( + (filter.enabled != null && file.enabled !== filter.enabled) || + (filter.tags && !filter.tags.some(tag => file.tags.includes(tag))) || + (filter.url != null && !fileMatches(file, filter.url)) || + (filter.id?.length && !filter.id.includes(file.id)) || + (filter.state != null && file.state !== filter.state) || + (filter.isGlobal != null && isGlobalStyle(file) !== filter.isGlobal) + ) + } + + @Query() + async files( + @Args() { filter, take, sortBy, logQuery }: FindFilterArgs, + ): Promise { + let files = await getDocs() + + if (filter) { + files = files.filter(file => FileResolver.fileMatches(file, filter)) + } + + if (take) { + files = files.slice(0, take) + } + + switch (sortBy) { + case FileSortBy.Name: + files = files.sort((a, b) => a.name.localeCompare(b.name)) + break + case FileSortBy.UpdatedAt: + files = files.sort((a, b) => b.updatedAt - a.updatedAt) + break + + default: + // noop; + } + + if (PreferencesCache.cache.get().recordUsageData && logQuery) { + files + .filter(file => !isFileLoggingDisabled(file.id)) + .forEach(file => { + void statistics.set(file.id, { lastRequested: new Date() }) + }) + } + + return files + } + + async #newFile(input: PartialFileInput): Promise { + const id = this.nanoId() + const created = new Date() + const file = new File({ + id, + name: input.name! || browser.i18n.getMessage("untitled"), + mimeType: "text/x-scss", + enabled: true, + tags: [], + createdAt: created, + updatedAt: created, + rules: [], + hidden: false, + state: FileState.None, + sections: [ + { + id: this.nanoId(), + name: "", + code: "", + enabled: true, + }, + ], + ...input, + }) + await localDb.put({ + _id: id, + ...file, + }) + return file + } + + @Mutation() + async newFile(@Arg() input: PartialFileInput): Promise { + const file = await this.#newFile(input) + void broadcast() + return file + } + + @Mutation() + async createGlobalStyle(): Promise { + if (await exists(GLOBAL_STYLE_ID)) { + throw new Error("Global style already exists") + } + + const created = new Date() + const file = new File({ + id: GLOBAL_STYLE_ID, + name: "__global__", + enabled: true, + mimeType: "text/x-scss", + tags: ["global"], + createdAt: created, + updatedAt: created, + rules: [], + hidden: false, + state: FileState.None, + sections: [ + { + id: this.nanoId(), + name: "", + code: "", + enabled: true, + }, + ], + }) + await localDb.put({ + _id: GLOBAL_STYLE_ID, + ...file, + }) + void broadcast() + return file + } + + @Mutation() + async newFiles(@Arg() inputs: PartialFileInput[]): Promise { + const files = await Promise.all(inputs.map(input => this.newFile(input))) + void broadcast() + return files + } + + @Mutation() + async deleteFile(@Arg() id: ID) { + await deleteDoc(id) + void broadcast() + return true + } + + @Mutation() + async deleteFiles(@Arg() ids: ID[]) { + await Promise.all(ids.map(id => deleteDoc(id))) + void broadcast() + return true + } + + @Mutation() + async setFile(@Arg() id: ID, @Arg() input: PartialFileInput): Promise { + const file = await setFile(id, input) + void broadcast() + return file + } + + @Mutation() + async setFiles(@Arg() ids: ID[], @Arg() input: PartialFileInput): Promise { + const files = await Promise.all(ids.map(fileId => setFile(fileId, input))) + void broadcast() + return files + } + + @Mutation() + async deleteAllFiles() { + await localDb.destroy() + void broadcast() + return true + } + + @FieldResolver() + nameLanguage(@Root() file: File): string | undefined { + return guessFileLanguage(file) + } + + @FieldResolver() + lastRequestedAt(@Root() file: File): Date | undefined { + return statistics.get(file.id)?.lastRequested + } + + @FieldResolver() + size(@Root() file: File): Int { + return file.sections.reduce((acc, section) => acc + section.code.length, 0) + } +} + +export async function setFile(id: ID, input: PartialFileInput): Promise { + const existing = await localDb.get(id)! + const now = new Date() + + const file = new File({ + ...existing, + ...(input as Partial), + updatedAt: now, + }) + + await localDb.put(file) + + return file +} diff --git a/src/background/graphql/resolvers/FindResolver.ts b/src/background/graphql/resolvers/FindResolver.ts new file mode 100644 index 0000000..17ca4ba --- /dev/null +++ b/src/background/graphql/resolvers/FindResolver.ts @@ -0,0 +1,108 @@ +import { Arg, Query, Resolver } from "@aet/gql-tools/macro" +import { Match } from "~/shared/models/index" +import { getDocs } from "~/background/couchdb" + +@Resolver() +export class FindResolver { + @Query() + async search( + @Arg() query: string, + @Arg() caseSensitive = false, + @Arg() regExp: boolean, + ): Promise { + if (!query) { + return [] + } + + if (regExp) { + return searchRegExp(query) + } + + const files = await getDocs() + const matches: Match[] = [] + + const searchText = caseSensitive ? query : query.toLocaleUpperCase() + + for (const file of files) { + const content = file.sections[0].code + let prevIndex: number | null | undefined + + // https://stackoverflow.com/questions/69060325 + const searchFrom = caseSensitive ? content : content.toLocaleUpperCase() + + while (prevIndex !== null) { + if (matches.length > 100) { + return matches + } + + const index = stripInvalid( + searchFrom.indexOf(searchText, prevIndex ? prevIndex + 1 : 0), + ) + prevIndex = index + if (index == null) continue + + const { line, start } = getLineAround(content, index) + + matches.push({ + file, + line, + index, + submatch: { + match: content.slice(index, index + searchText.length), + start: index - start, + end: index - start + query.length, + }, + }) + await (0 as any) + } + } + + return matches + } +} + +function stripInvalid(index: number) { + return index === -1 ? null : index +} + +function getLineAround(text: string, index: number) { + const start = stripInvalid(text.lastIndexOf("\n", index)) ?? 0 + const end = stripInvalid(text.indexOf("\n", index)) ?? text.length + return { + start, + line: text.substring(start, end), + } +} + +async function searchRegExp(query: string): Promise { + const files = await getDocs() + const matches: Match[] = [] + const regexp = new RegExp(query, "g") + + for (const file of files) { + const content = file.sections[0].code + const prevIndex: number | null = null + + while (prevIndex != null) { + for (const matched of content.matchAll(regexp)) { + if (matched.index == null) continue + const { index } = matched + + const { line, start } = getLineAround(content, index) + matches.push({ + file, + line, + index, + submatch: { + match: matched[0], + start: index - start, + end: index - start + matched[0].length, + }, + }) + } + await (0 as any) + } + } + + return matches +} diff --git a/src/background/graphql/resolvers/PreferencesResolver.ts b/src/background/graphql/resolvers/PreferencesResolver.ts new file mode 100644 index 0000000..7ec0e6a --- /dev/null +++ b/src/background/graphql/resolvers/PreferencesResolver.ts @@ -0,0 +1,63 @@ +import { Arg, Mutation, Query, Resolver } from "@aet/gql-tools/macro" +import { InputPreferences, Preferences, defaultPreferences } from "~/shared/models/index" +import { broadcast } from "../utils" + +const PREFS_KEY = "preferences" + +@Resolver(() => Preferences) +export class PreferencesResolver { + @Query() + preferences(): Preferences { + return PreferencesCache.cache.get() + } + + @Mutation() + setPreferences(@Arg() preferences: InputPreferences): Preferences { + return PreferencesCache.cache.set(preferences) + } +} + +export class PreferencesCache { + private data: Preferences + private static _instance: PreferencesCache + + static get cache(): PreferencesCache { + return (this._instance ??= new PreferencesCache()) + } + + constructor() { + const text = localStorage.getItem(PREFS_KEY)! + const prefs = new Preferences({ ...defaultPreferences }) + Object.assign(prefs, JSON.parse(text)) + this.data = prefs + } + + get(): Preferences { + return this.data + } + + set(preferences: Partial): Preferences { + Object.assign(this.data, stripUndefined(preferences)) + if ("enabled" in preferences) { + broadcast() + } + localStorage.setItem(PREFS_KEY, JSON.stringify(this.data)) + return this.data + } +} + +export function getPreference( + key: K, +): Preferences[K] | undefined { + try { + const text = localStorage.getItem(PREFS_KEY)! + const prefs = JSON.parse(text) + return prefs[key] + } catch {} +} + +function stripUndefined(obj: T): Partial { + return Object.fromEntries( + Object.entries(obj).filter(([, value]) => value !== undefined), + ) as T +} diff --git a/src/background/graphql/resolvers/SectionResolver.ts b/src/background/graphql/resolvers/SectionResolver.ts new file mode 100644 index 0000000..0b1bc10 --- /dev/null +++ b/src/background/graphql/resolvers/SectionResolver.ts @@ -0,0 +1,117 @@ +import { + Arg, + Args, + ArgsType, + Field, + FieldResolver, + Query, + Resolver, + Root, +} from "@aet/gql-tools/macro" +import { GraphQLError } from "graphql" +import { Section } from "~/shared/models/index" +import { compileSASS } from "../../compilerBridge" +import { GLOBAL_STYLE_ID } from "~/shared" +import { localDb } from "~/background/couchdb" + +@ArgsType() +class CompileCode { + @Field() code!: string + @Field() includeGlobal!: boolean + @Field() compressed!: boolean + @Field() cache!: boolean +} + +@Resolver(() => Section) +export class SectionResolver { + @FieldResolver() + async compiledCode(@Root() section: Section, @Arg() cache = true): Promise { + return this.compileCode({ + code: section.code, + includeGlobal: true, + compressed: true, + cache, + }) + } + + @Query() + async compileCode( + @Args() { code, includeGlobal, compressed, cache }: CompileCode, + ): Promise { + let prefix = "" + if (includeGlobal) { + const style = await localDb.get(GLOBAL_STYLE_ID) + const globalStyle = + style?.state === null && style?.enabled && style?.sections[0].code + prefix = globalStyle ? globalStyle + "\n" : "" + } + + const source = prefix + code + try { + return await compileSASS(source, compressed ? "compressed" : "expanded", cache) + } catch (e) { + if (e?.name !== "Error") { + throw e + } + + throw new GraphQLError(e.message, { + extensions: getErrorExtension(e as SassException), + }) + } + } +} + +export type ErrorExtension = ReturnType + +function getErrorExtension(e: SassException) { + return { + code: "BAD_USER_INPUT" as const, + span: { + start: { + line: e.span.start.line, + column: e.span.start.column, + offset: e.span.start.offset, + }, + end: { + line: e.span.end.line, + column: e.span.end.column, + offset: e.span.end.offset, + }, + }, + } +} + +interface SourceFile { + url: null + _cachedLine: null + _decodedChars: Uint32Array + _lineStarts: number[] +} + +interface FileLocation { + file: SourceFile + offset: number + column: number + line: number +} + +interface FileSpan { + _end: number + _file$_start: number + context: string + end: FileLocation + file: SourceFile + start: FileLocation + text: string + url: null +} + +interface SassException extends Error { + _dartException: { + _span: FileSpan + _span_exception$_message: string + } + sassMessage: string + sassStack: string + span: FileSpan +} diff --git a/src/background/graphql/resolvers/StatisticsResolver.ts b/src/background/graphql/resolvers/StatisticsResolver.ts new file mode 100644 index 0000000..8c43fa2 --- /dev/null +++ b/src/background/graphql/resolvers/StatisticsResolver.ts @@ -0,0 +1,31 @@ +import { Arg, FieldResolver, ID, Mutation, Resolver, Root } from "@aet/gql-tools/macro" +import { statistics } from "../../idb" +import { File } from "~/shared/models" + +@Resolver(() => File) +export class StatisticsResolver { + @Mutation() + async toggleDisableLogging(@Arg() fileId: ID, @Arg() value: boolean) { + await statistics.update(fileId, data => ({ ...data, disableLogging: value })) + return true + } + + @Mutation() + async resetUsageData(@Arg() fileId?: ID) { + if (fileId == null) { + await statistics.clear() + } else { + await statistics.update(fileId, data => ({ ...data, lastRequested: undefined })) + } + return true + } + + @FieldResolver() + disabledLogging(@Root() file: File): boolean { + return isFileLoggingDisabled(file.id) + } +} + +export function isFileLoggingDisabled(fileId: ID) { + return statistics.get(fileId)?.disableLogging || false +} diff --git a/src/background/graphql/resolvers/TagResolver.ts b/src/background/graphql/resolvers/TagResolver.ts new file mode 100644 index 0000000..3ae453f --- /dev/null +++ b/src/background/graphql/resolvers/TagResolver.ts @@ -0,0 +1,37 @@ +import { Arg, Mutation, Query, Resolver } from "@aet/gql-tools/macro" +import { File } from "~/shared/models/index" +import { getDocs } from "../../couchdb" +import { setFile } from "./FileResolver" + +@Resolver() +export class TagResolver { + @Query() + async tags(): Promise { + const files = await getDocs() + return Array.from(new Set(files.flatMap(s => s.tags))) + } + + @Mutation() + async deleteTag(@Arg() tag: string): Promise { + return Promise.all( + (await getDocs()) + .filter(file => file.tags.includes(tag)) + .map(file => { + const tags = file.tags.filter(t => t !== tag) + return setFile(file.id, { tags }) + }), + ) + } + + @Mutation() + async renameTag(@Arg() oldTag: string, @Arg() newTag: string): Promise { + return Promise.all( + (await getDocs()) + .filter(file => file.tags.includes(oldTag)) + .map(file => { + const tags = file.tags.map(tag => (tag === oldTag ? newTag : tag)) + return setFile(file.id, { tags }) + }), + ) + } +} diff --git a/src/background/graphql/schema.ts b/src/background/graphql/schema.ts new file mode 100644 index 0000000..ae149c2 --- /dev/null +++ b/src/background/graphql/schema.ts @@ -0,0 +1,28 @@ +import "reflect-metadata" +import type { GraphQLSchema } from "graphql" +import { buildSchema } from "@aet/gql-tools/macro" +import { FileResolver } from "./resolvers/FileResolver" +import { SectionResolver } from "./resolvers/SectionResolver" +import { FindResolver } from "./resolvers/FindResolver" +import { PreferencesResolver } from "./resolvers/PreferencesResolver" +import { DatabaseResolver } from "./resolvers/DatabaseResolver" +import { TagResolver } from "./resolvers/TagResolver" +import { StatisticsResolver } from "./resolvers/StatisticsResolver" +import { CloudResolver } from "./resolvers/CloudResolver" + +export function getSchema(): GraphQLSchema { + return buildSchema({ + validate: process.env.NODE_ENV !== "production", + disableInferringDefaultValues: true, + resolvers: [ + DatabaseResolver, + FindResolver, + PreferencesResolver, + SectionResolver, + FileResolver, + TagResolver, + StatisticsResolver, + CloudResolver, + ], + }) +} diff --git a/src/background/graphql/utils.ts b/src/background/graphql/utils.ts new file mode 100644 index 0000000..337854c --- /dev/null +++ b/src/background/graphql/utils.ts @@ -0,0 +1,12 @@ +import browser from "webextension-polyfill" +import { debounce, flatMap } from "lodash" +import { updateTabIcons } from "../update" + +export const broadcast = debounce(async () => { + const tabs = flatMap( + await browser.windows.getAll({ populate: true }), + window => window.tabs!, + ) + tabs.forEach(tab => updateTabIcons({ ...tab, tabId: tab.id! })) + tabs.forEach(tab => browser.tabs.sendMessage(tab.id!, { method: "fileUpdated" })) +}, 100) diff --git a/src/background/graphql/utils/guessLanguage.ts b/src/background/graphql/utils/guessLanguage.ts new file mode 100644 index 0000000..b352894 --- /dev/null +++ b/src/background/graphql/utils/guessLanguage.ts @@ -0,0 +1,71 @@ +import sc from "./lang-sc.json" assert { type: "json" } +import shin from "./lang-shin.json" assert { type: "json" } +import type { Rule } from "~/shared/models" +import { RuleType } from "~/shared/models/enums.generated" + +const AZ = /^[A-Za-zÀ-ÖØ-öø-ÿ\d ]+$/ + +// Handles Han unification font problems +export function guessFileLanguage({ name, rules }: { name: string; rules: Rule[] }) { + const chars = name.split("") + + // Fast path + if (AZ.test(name)) { + return + } + + // Check if the name contains Japanese kana characters + if ( + /\p{Script_Extensions=Kana}/u.test(name) || + /\p{Script_Extensions=Hira}/u.test(name) || + chars.some(c => shin.includes(c)) + ) { + return "ja" + } + + // Check if the name contains Korean hangul + if (/\p{Script_Extensions=Hang}/u.test(name)) { + return "ko" + } + + // Check if the name contains Simplified Chinese characters + if (chars.some(c => sc.includes(c))) { + return "zh-CN" + } + + const domains = rules + .map(r => { + try { + return r.type === RuleType.Domain + ? r.value + : r.type === RuleType.URL + ? new URL(r.value).hostname + : r.type === RuleType.URLPrefix + ? new URL(r.value).hostname + : null + } catch { + return null + } + }) + .filter(Boolean) + + // Check the domains for TLDs that correspond to a specific language + for (const domain of domains) { + if (domain.endsWith(".cn")) { + return "zh-CN" + } + if (domain.endsWith(".hk")) { + return "zh-HK" + } + if (domain.endsWith(".tw")) { + return "zh-TW" + } + if (domain.endsWith(".jp")) { + return "ja" + } + } + + if (/\p{Script_Extensions=Hani}/u.test(name)) { + return "zh-TW" + } +} diff --git a/src/background/graphql/utils/lang-sc.json b/src/background/graphql/utils/lang-sc.json new file mode 100644 index 0000000..44be8ab --- /dev/null +++ b/src/background/graphql/utils/lang-sc.json @@ -0,0 +1,1634 @@ +[ + "匀", + "吊", + "户", + "册", + "泛", + "丢", + "亘", + "凶", + "夫", + "咤", + "污", + "伫", + "别", + "占", + "吴", + "删", + "吕", + "兑", + "囱", + "夹", + "妆", + "决", + "冲", + "秃", + "灾", + "贝", + "车", + "迤", + "见", + "两", + "并", + "并", + "仑", + "亚", + "协", + "儿", + "恤", + "姗", + "佛", + "冈", + "东", + "抛", + "殁", + "况", + "卧", + "珏", + "纠", + "芈", + "轧", + "系", + "兖", + "侠", + "长", + "门", + "侣", + "克", + "则", + "劲", + "侄", + "奸", + "奂", + "尸", + "帅", + "后", + "拐", + "汹", + "为", + "栅", + "抵", + "杯", + "纣", + "红", + "纪", + "纫", + "纥", + "约", + "苎", + "计", + "订", + "讣", + "贞", + "负", + "军", + "轨", + "俩", + "页", + "风", + "飞", + "们", + "伥", + "闩", + "仿", + "个", + "韦", + "幸", + "伦", + "仓", + "冻", + "刚", + "员", + "娱", + "剥", + "孙", + "岛", + "师", + "宫", + "库", + "耻", + "书", + "气", + "时", + "乌", + "泾", + "狈", + "疱", + "佩", + "亩", + "纷", + "纺", + "纱", + "纹", + "纯", + "纽", + "纰", + "级", + "纭", + "胁", + "纳", + "纸", + "脉", + "兹", + "刍", + "荆", + "记", + "讦", + "讨", + "讧", + "讪", + "讯", + "托", + "训", + "讫", + "岂", + "财", + "贡", + "钉", + "针", + "轩", + "钊", + "轫", + "闪", + "阵", + "乃", + "陕", + "回", + "只", + "饥", + "马", + "斗", + "干", + "咱", + "伪", + "伟", + "侦", + "侧", + "哑", + "坚", + "垩", + "务", + "动", + "问", + "执", + "念", + "够", + "娄", + "衔", + "妇", + "张", + "强", + "峥", + "昆", + "雕", + "仑", + "从", + "带", + "帐", + "专", + "屉", + "凄", + "怅", + "舍", + "扫", + "败", + "挂", + "启", + "扪", + "抡", + "斩", + "挣", + "采", + "卷", + "弃", + "栀", + "勖", + "枭", + "杀", + "氢", + "杆", + "凉", + "渊", + "捆", + "凄", + "泪", + "狰", + "沦", + "净", + "现", + "璃", + "众", + "产", + "牵", + "朱", + "毕", + "异", + "细", + "绅", + "组", + "终", + "钵", + "荚", + "习", + "绊", + "弦", + "统", + "庄", + "扎", + "绍", + "唇", + "绋", + "绌", + "贫", + "处", + "觅", + "规", + "访", + "轭", + "讶", + "软", + "诀", + "这", + "讷", + "许", + "设", + "讼", + "连", + "讹", + "术", + "衮", + "贩", + "迳", + "责", + "贯", + "货", + "贪", + "伧", + "伞", + "凯", + "顶", + "剀", + "顷", + "创", + "钗", + "鱼", + "扣", + "鸟", + "劳", + "钓", + "胜", + "钏", + "勋", + "闭", + "家", + "陈", + "陆", + "阴", + "备", + "杰", + "围", + "尧", + "丧", + "场", + "寻", + "报", + "岚", + "单", + "壶", + "帧", + "哟", + "几", + "唤", + "厕", + "乔", + "厢", + "复", + "换", + "恶", + "扬", + "闷", + "拣", + "惬", + "恻", + "恼", + "挥", + "涌", + "凑", + "减", + "枣", + "钦", + "栋", + "壳", + "栈", + "涡", + "汤", + "栖", + "测", + "珐", + "发", + "浑", + "涣", + "困", + "无", + "苏", + "砚", + "秆", + "犹", + "痉", + "丝", + "络", + "烟", + "给", + "绚", + "笔", + "肃", + "华", + "笋", + "庵", + "莱", + "肾", + "绞", + "胀", + "结", + "绒", + "绝", + "评", + "贵", + "词", + "买", + "证", + "贬", + "诂", + "贸", + "诏", + "贷", + "诅", + "诈", + "诋", + "诉", + "诊", + "贮", + "贴", + "贰", + "贻", + "视", + "贲", + "轲", + "注", + "费", + "轴", + "咏", + "贺", + "轶", + "闵", + "闰", + "开", + "周", + "闲", + "间", + "进", + "闲", + "队", + "邮", + "阶", + "乡", + "阳", + "钞", + "钙", + "钮", + "钠", + "钧", + "钝", + "隽", + "钤", + "云", + "韧", + "项", + "顺", + "须", + "饪", + "饭", + "饨", + "饮", + "饬", + "冯", + "驭", + "佣", + "债", + "涂", + "冢", + "传", + "吗", + "仅", + "倾", + "啬", + "伤", + "块", + "坞", + "偬", + "呜", + "铲", + "呛", + "剿", + "妈", + "园", + "媪", + "势", + "圆", + "汇", + "损", + "抢", + "栗", + "摇", + "干", + "愠", + "捣", + "忾", + "厦", + "怆", + "汇", + "彷", + "晖", + "榨", + "晕", + "业", + "爱", + "极", + "烦", + "炼", + "杨", + "沟", + "桢", + "灭", + "炀", + "枫", + "焕", + "爷", + "岁", + "毁", + "准", + "狮", + "沧", + "琅", + "烟", + "珲", + "睐", + "棱", + "睁", + "禀", + "痹", + "节", + "盏", + "粤", + "经", + "绢", + "莴", + "捆", + "脚", + "绑", + "肿", + "绥", + "虏", + "脑", + "义", + "羡", + "荤", + "圣", + "苇", + "蜕", + "叶", + "肠", + "话", + "诛", + "补", + "诡", + "询", + "诠", + "里", + "诟", + "袅", + "较", + "载", + "诧", + "轼", + "该", + "贼", + "轾", + "详", + "资", + "试", + "贾", + "农", + "诗", + "贿", + "运", + "诘", + "赀", + "游", + "夸", + "赁", + "诙", + "赂", + "诣", + "赅", + "达", + "诚", + "迹", + "违", + "铀", + "铅", + "刨", + "钩", + "过", + "铂", + "铃", + "闸", + "邹", + "陨", + "电", + "钴", + "钳", + "钹", + "钚", + "钾", + "预", + "顽", + "顿", + "顼", + "颁", + "颂", + "饲", + "饴", + "饱", + "饰", + "驰", + "驮", + "驯", + "鸠", + "呕", + "伙", + "侥", + "叹", + "梦", + "喽", + "夺", + "奁", + "仆", + "啧", + "侨", + "雇", + "妪", + "团", + "图", + "划", + "尘", + "匮", + "厌", + "宁", + "垫", + "堑", + "尝", + "实", + "殷", + "态", + "对", + "畅", + "屡", + "惯", + "崭", + "恸", + "岖", + "惭", + "币", + "荣", + "帼", + "杠", + "构", + "搂", + "别", + "折", + "掴", + "彻", + "枪", + "渐", + "涨", + "氲", + "涟", + "滚", + "沪", + "渔", + "渗", + "渍", + "涤", + "汉", + "满", + "尔", + "荦", + "狱", + "琐", + "玛", + "疟", + "疡", + "疯", + "愈", + "痪", + "监", + "笺", + "筝", + "硕", + "祯", + "绽", + "祸", + "绾", + "种", + "综", + "绰", + "洼", + "绫", + "窝", + "绿", + "紧", + "缀", + "网", + "纲", + "绮", + "绸", + "绵", + "彩", + "纶", + "维", + "绪", + "缁", + "罚", + "闻", + "搜", + "苍", + "席", + "蚀", + "莅", + "盖", + "制", + "荪", + "诵", + "志", + "语", + "诬", + "认", + "诫", + "误", + "说", + "诰", + "诲", + "诱", + "诳", + "狸", + "宾", + "赈", + "赊", + "铰", + "赵", + "铐", + "赶", + "银", + "局", + "铜", + "辅", + "铭", + "辄", + "铢", + "轻", + "铬", + "挽", + "铨", + "衔", + "远", + "阂", + "闺", + "逊", + "闽", + "阁", + "阀", + "递", + "合", + "际", + "颇", + "领", + "飒", + "饺", + "饼", + "饵", + "饷", + "驳", + "肮", + "鸣", + "鸢", + "厉", + "凤", + "唠", + "么", + "齐", + "亿", + "哗", + "仪", + "嘘", + "价", + "喷", + "侬", + "侩", + "啸", + "俭", + "叽", + "凛", + "剧", + "刘", + "坟", + "剑", + "坠", + "娴", + "婵", + "妩", + "娇", + "宽", + "审", + "层", + "帜", + "废", + "厨", + "庙", + "厮", + "广", + "厂", + "弹", + "惮", + "抚", + "愤", + "捻", + "征", + "敌", + "庆", + "挚", + "虑", + "暂", + "扑", + "忧", + "捞", + "样", + "戚", + "撑", + "椁", + "怂", + "拨", + "桩", + "欲", + "挠", + "标", + "怜", + "悯", + "桨", + "乐", + "溃", + "枞", + "润", + "疮", + "涧", + "皑", + "殇", + "皱", + "盘", + "浆", + "热", + "眯", + "泼", + "牦", + "奖", + "洁", + "确", + "浇", + "莹", + "码", + "纬", + "肤", + "致", + "缄", + "谷", + "缅", + "缉", + "莲", + "编", + "缘", + "荫", + "窑", + "缐", + "穷", + "缎", + "缓", + "蒋", + "缍", + "范", + "骂", + "卜", + "罢", + "葱", + "缔", + "练", + "胶", + "虾", + "课", + "蜗", + "诿", + "虱", + "谄", + "调", + "谁", + "论", + "卫", + "诤", + "冲", + "竖", + "复", + "赔", + "赏", + "谊", + "赋", + "谅", + "贱", + "谈", + "账", + "谆", + "赌", + "诞", + "贤", + "请", + "卖", + "诸", + "赐", + "质", + "碰", + "辉", + "辆", + "辍", + "辈", + "辇", + "轮", + "辎", + "适", + "锐", + "锉", + "锋", + "闾", + "迁", + "阅", + "邻", + "郑", + "邓", + "腌", + "巩", + "锌", + "颉", + "锑", + "刮", + "销", + "养", + "铺", + "饿", + "锄", + "馁", + "铝", + "驼", + "驻", + "驷", + "驶", + "驽", + "驾", + "驹", + "驸", + "发", + "闹", + "鱿", + "鲁", + "鸩", + "鸦", + "麸", + "齿", + "俦", + "傧", + "剂", + "吨", + "惫", + "懔", + "哝", + "忆", + "嗳", + "战", + "垦", + "坛", + "拥", + "挡", + "奋", + "挞", + "袅", + "据", + "掳", + "导", + "择", + "宪", + "凭", + "捡", + "机", + "历", + "烫", + "历", + "焖", + "晓", + "淀", + "焰", + "浓", + "朴", + "泽", + "桦", + "浊", + "玑", + "瓯", + "树", + "炽", + "卢", + "椭", + "炖", + "磷", + "桥", + "烧", + "瞒", + "缣", + "砖", + "萦", + "缚", + "御", + "县", + "积", + "颖", + "稣", + "窥", + "腻", + "蓑", + "筑", + "笃", + "兴", + "箬", + "舱", + "筛", + "缢", + "荡", + "萧", + "芜", + "蚂", + "萤", + "裤", + "亲", + "觎", + "谛", + "谚", + "谏", + "讳", + "辐", + "谋", + "辑", + "谍", + "输", + "谐", + "谘", + "办", + "诺", + "谒", + "谓", + "选", + "讽", + "迟", + "谕", + "辽", + "遗", + "猫", + "赖", + "锭", + "表", + "锯", + "踊", + "锰", + "错", + "钱", + "钢", + "锡", + "录", + "铮", + "锥", + "锦", + "阎", + "险", + "沾", + "䩄", + "颊", + "哄", + "颈", + "鲍", + "频", + "鸵", + "颔", + "鸪", + "头", + "鸯", + "颓", + "鸭", + "颐", + "鸰", + "鸳", + "馆", + "饯", + "馄", + "龙", + "馅", + "龟", + "骇", + "骈", + "优", + "骆", + "偿", + "储", + "咛", + "尝", + "吓", + "压", + "婴", + "嫔", + "嬷", + "尴", + "屿", + "岭", + "帮", + "档", + "应", + "恳", + "检", + "桧", + "戏", + "栉", + "殓", + "泞", + "击", + "滨", + "济", + "挤", + "拧", + "蒙", + "涛", + "拟", + "滥", + "搁", + "敛", + "涩", + "毙", + "浚", + "暧", + "营", + "灿", + "烛", + "毁", + "烩", + "墙", + "狞", + "获", + "环", + "瑷", + "痨", + "疗", + "荡", + "粪", + "了", + "矫", + "缩", + "绩", + "缪", + "缕", + "矶", + "缧", + "绷", + "缝", + "总", + "纵", + "缫", + "篓", + "聪", + "联", + "耸", + "脓", + "脸", + "脍", + "临", + "举", + "艰", + "姜", + "褛", + "蔷", + "觊", + "谜", + "谤", + "谦", + "亏", + "讲", + "谎", + "谣", + "谢", + "誊", + "溪", + "蝼", + "赚", + "赛", + "蝈", + "购", + "趋", + "亵", + "辖", + "辗", + " ", + "辕", + "舆", + "还", + "迈", + "酝", + "丑", + "镀", + "镁", + "虽", + "锚", + "键", + "炼", + "锲", + "韩", + "锅", + "颗", + "锤", + "飓", + "钟", + "喂", + "锺", + "骋", + "锹", + "骏", + "锻", + "鲜", + "锾", + "鲛", + "阔", + "鲔", + "阕", + "鸿", + "阑", + "鸽", + "闱", + "板", + "隐", + "隶", + "斋", + "丛", + "噜", + "向", + "圹", + "垒", + "婶", + "懑", + "扩", + "掷", + "扰", + "撵", + "摆", + "擞", + "熏", + "犷", + "猎", + "槟", + "瓮", + "柜", + "槛", + "疠", + "柠", + "愈", + "棹", + "欤", + "归", + "殡", + "础", + "泻", + "沈", + "穑", + "滤", + "秽", + "渎", + "窜", + "溅", + "窍", + "箫", + "浏", + "箪", + "篑", + "简", + "粮", + "织", + "缮", + "绕", + "缭", + "绣", + "坛", + "翘", + "职", + "聂", + "脐", + "膑", + "萨", + "踪", + "蓝", + "躯", + "转", + "借", + "辙", + "迩", + "蛲", + "蝉", + "酱", + "厘", + "镕", + "觐", + "镑", + "觞", + "锁", + "谟", + "钨", + "谨", + "镍", + "谬", + "镇", + "丰", + "阖", + "赘", + "闯", + "阗", + "蹒", + "杂", + "雏", + "鸡", + "秋", + "额", + "颜", + "题", + "颚", + "颛", + "飏", + "馏", + "馊", + "馈", + "骑", + "松", + "鲨", + "怀", + "鲤", + "懒", + "鲫", + "鹃", + "鹅", + "拢", + "鹄", + "旷", + "冬", + "橱", + "椟", + "榈", + "咽", + "橹", + "咙", + "坏", + "潇", + "垄", + "濑", + "坜", + "宠", + "沥", + "庞", + "濒", + "庐", + "惩", + "烁", + "牍", + "犊", + "兽", + "獭", + "玺", + "琼", + "畴", + "蒙", + "碍", + "祷", + "获", + "稳", + "帘", + "签", + "檐", + "系", + "茧", + "裆", + "绎", + "绳", + "袄", + "绘", + "哗", + "罗", + "谱", + "膻", + "识", + "证", + "谭", + "腊", + "谲", + "讥", + "艺", + "赠", + "薮", + "赞", + "药", + "蚁", + "蝇", + "蝎", + "跷", + "辚", + "轿", + "边", + "镜", + "镝", + "铲", + "镞", + "链", + "镗", + "镘", + "镖", + "镙", + "锵", + "镂", + "铿", + "关", + "陇", + "离", + "鹊", + "难", + "鹌", + "鹏", + "雾", + "丽", + "韬", + "韵", + "麹", + "类", + "愿", + "劝", + "颠", + "飕", + "嘤", + "馒", + "严", + "骛", + "骗", + "胡", + "鲸", + "鲳", + "鹑", + "悬", + "鹉", + "忏", + "拦", + "搀", + "胧", + "澜", + "牺", + "珑", + "痒", + "症", + "矿", + "砺", + "矾", + "砾", + "窦", + "竞", + "筹", + "蕴", + "篮", + "蚝", + "褴", + "辫", + "觉", + "缤", + "继", + "议", + "胪", + "译", + "舰", + "赢", + "赡", + "蔼", + "趸", + "蔺", + "芦", + "跶", + "苹", + "释", + "锈", + "阐", + "飘", + "饶", + "饥", + "骞", + "腾", + "骚", + "鳃", + "鳅", + "咸", + "面", + "龃", + "出", + "龄", + "苏", + "钟", + "铙", + "俪", + "嗫", + "续", + "啭", + "嚣", + "兰", + "藓", + "蛎", + "惧", + "慑", + "蜡", + "摄", + "袜", + "携", + "览", + "樱", + "谴", + "栏", + "护", + "歼", + "赃", + "烂", + "踌", + "癞", + "跃", + "眬", + "轰", + "藤", + "辩", + "缠", + "镰", + "镭", + "铁", + "铛", + "铎", + "镯", + "辟", + "响", + "顾", + "驱", + "骠", + "蓦", + "骡", + "髅", + "鳍", + "鳏", + "莺", + "鹤", + "鹞", + "龇", + "龈", + "俨", + "呓", + "啰", + "孪", + "巅", + "峦", + "弯", + "摊", + "踯", + "权", + "辔", + "欢", + "铸", + "洒", + "鉴", + "滩", + "鉴", + "猡", + "霁", + "叠", + "瘾", + "鞑", + "癣", + "缰", + "笼", + "颤", + "籁", + "骄", + "聋", + "须", + "听", + "鳖", + "脏", + "鲢", + "袭", + "鳔", + "衬", + "鳗", + "读", + "鹧", + "赎", + "鸥", + "赝", + "鼹", + "龉", + "龊", + "龚", + "苏", + "岩", + "挛", + "搅", + "签", + "缨", + "纤", + "萝", + "蛊", + "变", + "逦", + "镳", + "铄", + "靥", + "显", + "餍", + "惊", + "驿", + "验", + "脏", + "鳝", + "鳞", + "鳜", + "鸶", + "霉", + null, + "坝", + "揽", + "瘫", + "癫", + "羁", + "让", + "谗", + "谶", + "赣", + "酿", + "雳", + "灵", + "霭", + "鳄", + "鲈", + "黩", + "艳", + "凿", + "鹦", + "骊", + "郁", + "鸾", + "吁", + "颦", + "骤", + "鬓", + "魇", + "鹰", + "鹭", + "硷", + "盐", + "鳌", + "龌", + "龋", + "厅", + "榄", + "篱", + "箩", + "蹑", + "衅", + "镶", + "钥", + "颅", + "馋", + "滦", + "瞩", + "赞", + "驴", + "骥", + "缆", + "躏", + "钻", + "銮", + "锣" +] diff --git a/src/background/graphql/utils/lang-shin.json b/src/background/graphql/utils/lang-shin.json new file mode 100644 index 0000000..bdd0f4e --- /dev/null +++ b/src/background/graphql/utils/lang-shin.json @@ -0,0 +1,327 @@ +[ + "亜", + "悪", + "圧", + "囲", + "為", + "壱", + "逸", + "飲", + "隠", + "羽", + "栄", + "営", + "鋭", + "衛", + "益", + "駅", + "謁", + "閲", + "円", + "塩", + "縁", + "艶", + "応", + "桜", + "穏", + "仮", + "価", + "禍", + "悔", + "海", + "絵", + "壊", + "懐", + "慨", + "概", + "拡", + "殻", + "覚", + "楽", + "喝", + "渇", + "褐", + "鎌", + "缶", + "巻", + "陥", + "間", + "勧", + "寛", + "漢", + "関", + "歓", + "館", + "観", + "顔", + "巌", + "気", + "祈", + "既", + "既", + "帰", + "亀", + "器", + "偽", + "戯", + "犠", + "拠", + "挙", + "強", + "教", + "郷", + "響", + "尭", + "暁", + "勤", + "謹", + "駆", + "勲", + "薫", + "契", + "恵", + "掲", + "渓", + "経", + "蛍", + "軽", + "継", + "鶏", + "芸", + "撃", + "欠", + "研", + "県", + "倹", + "剣", + "険", + "圏", + "検", + "権", + "顕", + "験", + "厳", + "戸", + "呉", + "娯", + "広", + "効", + "鉱", + "告", + "黒", + "穀", + "砕", + "済", + "斎", + "歳", + "剤", + "冊", + "殺", + "雑", + "桟", + "産", + "賛", + "糸", + "祉", + "視", + "歯", + "飼", + "児", + "実", + "社", + "舎", + "者", + "煮", + "釈", + "収", + "臭", + "従", + "渋", + "獣", + "縦", + "祝", + "粛", + "処", + "渚", + "暑", + "署", + "緒", + "諸", + "尚", + "祥", + "渉", + "焼", + "証", + "奨", + "乗", + "浄", + "剰", + "畳", + "縄", + "壌", + "嬢", + "穣", + "譲", + "醸", + "神", + "真", + "慎", + "図", + "粋", + "酔", + "穂", + "髄", + "瀬", + "青", + "斉", + "清", + "晴", + "靖", + "精", + "摂", + "節", + "説", + "絶", + "専", + "戦", + "銭", + "繊", + "祖", + "荘", + "捜", + "挿", + "巣", + "曽", + "痩", + "僧", + "層", + "総", + "聡", + "騒", + "増", + "憎", + "蔵", + "贈", + "臓", + "即", + "続", + "対", + "帯", + "滝", + "択", + "沢", + "琢", + "単", + "嘆", + "団", + "弾", + "遅", + "痴", + "鋳", + "著", + "庁", + "徴", + "聴", + "懲", + "勅", + "鎮", + "塚", + "禎", + "逓", + "鉄", + "転", + "伝", + "都", + "稲", + "闘", + "闘", + "徳", + "読", + "突", + "難", + "弐", + "悩", + "脳", + "覇", + "拝", + "廃", + "売", + "梅", + "発", + "髪", + "抜", + "飯", + "繁", + "晩", + "卑", + "秘", + "碑", + "姫", + "浜", + "賓", + "頻", + "敏", + "瓶", + "侮", + "福", + "払", + "仏", + "併", + "並", + "塀", + "餅", + "辺", + "変", + "弁", + "弁", + "弁", + "勉", + "歩", + "舗", + "豊", + "褒", + "墨", + "翻", + "槙", + "毎", + "満", + "免", + "麺", + "黙", + "訳", + "薬", + "祐", + "予", + "揺", + "様", + "謡", + "頼", + "覧", + "欄", + "竜", + "隆", + "旅", + "虜", + "両", + "猟", + "緑", + "隣", + "涙", + "塁", + "類", + "戻", + "霊", + "隷", + "齢", + "暦", + "歴", + "廉", + "練", + "錬", + "労", + "郎", + "朗", + "廊", + "録", + "" +] diff --git a/src/background/idb.ts b/src/background/idb.ts new file mode 100644 index 0000000..337b005 --- /dev/null +++ b/src/background/idb.ts @@ -0,0 +1,6 @@ +import { Storage } from "~/shared/idb" + +export const statistics = await Storage.of<{ + lastRequested?: Date + disableLogging?: boolean +}>("statistics", "statistics-store") diff --git a/src/background/index.ts b/src/background/index.ts new file mode 100644 index 0000000..d76ea13 --- /dev/null +++ b/src/background/index.ts @@ -0,0 +1,47 @@ +import { flatMap } from "lodash" +import browser from "webextension-polyfill" +import { query } from "./graphql/api" +import { updateTabIcons } from "./update" + +function replaceFiles({ tabId, frameId }: { tabId: number; frameId: number }) { + void browser.tabs.sendMessage(tabId, { method: "fileUpdated" }, { frameId }) +} + +browser.runtime.onMessage.addListener((msg, _sender, sendResponse) => { + const { method, body } = msg + if (method === "gql") { + query(body.query, body.variables) + .then(result => { + if (process.env.NODE_ENV === "development") { + console.log({ ...body, result }) + } + // @ts-expect-error wrong type + sendResponse(result) + }) + .catch(console.error) + return true + } +}) + +browser.webNavigation.onCommitted.addListener(updateTabIcons) +browser.webNavigation.onHistoryStateUpdated.addListener(info => { + void updateTabIcons(info) + replaceFiles(info) +}) +browser.webNavigation.onBeforeNavigate.addListener(updateTabIcons) + +browser.tabs.onUpdated.addListener((tabId, info) => { + void updateTabIcons({ ...info, tabId, url: info.url, frameId: 0 }) + if (info.status === "loading") { + replaceFiles({ tabId, frameId: 0 }) + } +}) + +const tabs = flatMap( + await browser.windows.getAll({ populate: true }), + window => window.tabs!, +) + +await Promise.all( + tabs.map(tab => updateTabIcons({ tabId: tab.id!, url: tab.url, frameId: 0 })), +) diff --git a/src/background/update.ts b/src/background/update.ts new file mode 100644 index 0000000..5b4d76e --- /dev/null +++ b/src/background/update.ts @@ -0,0 +1,85 @@ +import browser from "webextension-polyfill" +import type { BackgroundQueryDocument } from "~/generated/graphql" +import { queryOrThrow } from "./graphql/api" + +const gql = String.raw + +const BACKGROUND_QUERY = gql` + query BackgroundQuery($url: String!) { + preferences { + enabled + } + files(filter: { url: $url, enabled: true }) { + id + } + } +` + +export async function updateTabIcons({ + frameId, + tabId, + url, + status, +}: { + frameId?: number + tabId: number + url?: string + status?: string +}) { + if ( + !url || + url.startsWith("chrome-error://") || + url.startsWith("chrome-extension://") || + url.startsWith("chrome://newtab/") + ) { + return + } + + const { + preferences: { enabled }, + files, + } = await queryOrThrow(BACKGROUND_QUERY, { url }) + + await browser.browserAction.setBadgeBackgroundColor({ + color: enabled ? [251, 43, 105, 255] : [170, 170, 170, 255], + }) + + if (frameId && frameId !== 0) { + return + } + + const count = files.length + + try { + if (url === "chrome://newtab/" && status && status !== "complete") return + + if (!(await tabExists(tabId))) return + + const postfix = enabled ? "" : "w" + + await browser.browserAction.setIcon({ + tabId, + path: { + 16: `assets/images/16${postfix}.png`, + 32: `assets/images/32${postfix}.png`, + 19: `assets/images/19${postfix}.png`, + 38: `assets/images/38${postfix}.png`, + }, + }) + + if (count) { + await browser.browserAction.setBadgeText({ + text: `${count}`, + tabId, + }) + } + } catch {} +} + +async function tabExists(id?: number) { + try { + return Boolean(id != null && (await browser.tabs.get(id))) + } catch { + return false + } +} diff --git a/src/context/index.ts b/src/context/index.ts new file mode 100644 index 0000000..314713a --- /dev/null +++ b/src/context/index.ts @@ -0,0 +1,181 @@ +// import "./picker"; +import browser from "webextension-polyfill" +import type { GetCompiledStyleDocument } from "../generated/graphql" +import { graphql } from "~/shared/messaging" + +const BLACKLIST = ["docs.google.com"] +const REAPPLY = ["wikia.com"] +const PREVENT_REMOVAL = ["tanstack.com"] + +const gql = String.raw +const isFirefox = navigator.userAgent.includes("Gecko/") + +// Global states +let isExtensionEnabled = false +let lastIDs = new Set() +const styleNodes = new WeakSet() +const styleNodesMap = new Map() + +const isXMLViewer = () => document.head?.firstElementChild?.id === "xml-viewer-style" + +function toggleEnableStyles(state: boolean) { + if (state === isExtensionEnabled) return + + isExtensionEnabled = state + + Array.from(document.styleSheets) + .filter(({ ownerNode }) => styleNodes.has(ownerNode as Element)) + .forEach(stylesheet => { + stylesheet.disabled = !isExtensionEnabled + }) +} + +function applyStyles(enabled: boolean, files: { id: string; code: string }[]) { + toggleEnableStyles(enabled) + if (!enabled) return + + const ids = new Set(files.map(_ => _.id)) + for (const id of lastIDs) { + if (!ids.has(id)) { + const node = styleNodesMap.get(id) + styleNodesMap.delete(id) + node?.remove() + } + } + + lastIDs = ids + + for (const { id, code } of files) { + applyStyle(id, code) + } + + if (styleNodesMap.size) { + if (!isXMLViewer() && !isFirefox) { + function migrate() { + // Move before all the attached styles so they can take precedence. + const style = Array.from( + document.documentElement.querySelectorAll(`:scope > style`), + ).find(style => styleNodes.has(style)) + if (!style) return + if (document.body) { + document.documentElement.insertBefore(document.body, style) + } else { + setTimeout(migrate, 1000) + } + } + document.addEventListener("DOMContentLoaded", migrate) + } + } +} + +function applyStyle(styleId: string, code: string) { + const current = styleNodesMap.get(styleId) + if (current) { + ;(current.childNodes[0] as Text).textContent = code + return + } + + const namespace = document.documentElement.namespaceURI + const node: HTMLStyleElement = document.createElementNS(namespace, "style") as any + if (isPatched) { + node.dataset.keep = "" + } + node.appendChild(document.createTextNode(code)) + + node.disabled = !isExtensionEnabled + + const clonedNode = document.adoptNode(node) + styleNodes.add(clonedNode) + if (isFirefox) { + setTimeout(() => { + document.body.appendChild(clonedNode) + }, 29) + } else if (isXMLViewer()) { + /** + * When site response is `application/xml`, Chrome displays our style elements + * under document.documentElement as plain text so we need to move them into + * (which already is auto-generated at this moment for the XML response). + */ + document.head.appendChild(clonedNode) + } else { + document.documentElement.appendChild(clonedNode) + } + + styleNodes.add(node) + styleNodesMap.set(String(styleId), node) +} + +const GET_COMPILED_STYLE = gql` + query GetCompiledStyle($url: String!) { + preferences { + enabled + } + files( + filter: { url: $url, enabled: true, state: None, isGlobal: false } + logQuery: true + ) { + id + sections { + compiledCode + } + } + } +` as any as GetCompiledStyleDocument + +async function applyCompiledStyle() { + const { + data: { preferences, files }, + } = await graphql(GET_COMPILED_STYLE, { url: location.href }) + + applyStyles( + preferences.enabled ?? true, + files.map(file => ({ + id: file.id, + code: file.sections.map(section => section.compiledCode).join("\n"), + })), + ) +} + +function endsWith(text: string, list: string[]) { + return list.some(item => text.endsWith(item)) +} + +if (!endsWith(location.hostname, BLACKLIST)) { + void applyCompiledStyle() + + browser.runtime.onMessage.addListener(req => { + if (req.method === "fileUpdated") { + void applyCompiledStyle() + } + }) +} + +const isPatched = endsWith(location.hostname, PREVENT_REMOVAL) + +// Some React sites remove