diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 2c28acbb..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,140 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true, - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking" - ], - "ignorePatterns": [ - "node_modules/", - "dist/", - "exporters/", - "tools/", - "svelte.config.ts", - "vitest.config.ts", - "src/util/bufferGeometryUtils.ts", - "tests/**/*" - ], - "overrides": [ - { - "files": ["*.js", "*.d.ts"], - "parserOptions": { - "project": "./tsconfig.json", - "tsconfigRootDir": "./" - }, - "rules": {} - } - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": ["./tsconfig.json"], - "tsconfigRootDir": "./" - }, - "plugins": ["@typescript-eslint"], - "rules": { - "semi": ["warn", "never"], - "prefer-const": "warn", - "no-fallthrough": "off", - "no-mixed-spaces-and-tabs": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-floating-promises": ["error", { "ignoreVoid": true }], - "@typescript-eslint/array-type": ["warn", { "default": "array-simple" }], - "@typescript-eslint/ban-types": "warn", - "@typescript-eslint/consistent-indexed-object-style": ["warn", "record"], - "@typescript-eslint/consistent-generic-constructors": "warn", - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/restrict-template-expressions": "off", - "@typescript-eslint/naming-convention": [ - "warn", - { - "selector": "class", - "format": ["PascalCase"] - }, - { - "selector": ["classProperty", "classMethod"], - "format": ["camelCase"] - }, - { - "selector": ["classProperty", "classMethod"], - "filter": { - "regex": "^_.*$", - "match": true - }, - "prefix": ["_"], - "format": ["camelCase"] - }, - { - "selector": "typeProperty", - "format": null - }, - { - "selector": "variable", - "modifiers": ["const"], - "format": null - }, - { - "selector": "variable", - "modifiers": ["const", "destructured"], - "format": ["camelCase", "PascalCase", "UPPER_CASE"] - }, - { - "selector": "variable", - "modifiers": ["const", "global"], - "format": ["UPPER_CASE"] - }, - { - "selector": "variable", - "modifiers": ["const", "global"], - "filter": { - "regex": "^_.*$", - "match": true - }, - "prefix": ["_"], - "format": ["UPPER_CASE"] - }, - { - "selector": "variable", - "modifiers": ["const", "global"], - "types": ["function"], - "format": ["camelCase", "UPPER_CASE"] - }, - { - "selector": "variable", - "modifiers": ["const", "global", "exported"], - "format": ["camelCase", "UPPER_CASE"] - }, - { "selector": "variableLike", "format": ["camelCase"] }, - { "selector": "interface", "format": ["PascalCase"] }, - { - "selector": "interface", - "modifiers": ["exported"], - "format": ["PascalCase"], - "prefix": ["I"] - }, - { "selector": "typeLike", "format": ["PascalCase"] }, - { "selector": "objectLiteralProperty", "format": null }, - { "selector": "default", "format": ["camelCase"] }, - { - "selector": "parameter", - "modifiers": ["unused"], - "format": null - }, - { - "selector": "enumMember", - "format": ["UPPER_CASE"] - } - ], - "@typescript-eslint/no-unsafe-member-access": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/ban-ts-comment": "off", - "@typescript-eslint/require-await": "warn", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/unbound-method": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/triple-slash-reference": "off" - } -} diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 9395d6ca..4dddd09b 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,9 @@ { - "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint", "svelte.svelte-vscode"] + "recommendations": [ + "esbenp.prettier-vscode", + "dbaeumer.vscode-eslint", + "svelte.svelte-vscode", + "ExodiusStudios.comment-anchors", + "SuperAnt.mc-dp-icons" + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index efe4f7ef..7c823c2f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -24,6 +24,11 @@ "**/Thumbs.db": true, "**/node_modules": true }, + "[yaml]": { + "editor.tabSize": 2, + "editor.insertSpaces": true, + "editor.detectIndentation": false + }, "npm.exclude": ["**/node_modules"], "errorLens.excludePatterns": ["**/node_modules/**/*"], "eslint.validate": ["javascript", "typescript", "svelte"], diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz new file mode 100644 index 00000000..08f8fe41 Binary files /dev/null and b/.yarn/install-state.gz differ diff --git a/.yarn/patches/deepslate-npm-0.19.2-f859599b0a.patch b/.yarn/patches/deepslate-npm-0.19.2-f859599b0a.patch new file mode 100644 index 00000000..7c5cf247 --- /dev/null +++ b/.yarn/patches/deepslate-npm-0.19.2-f859599b0a.patch @@ -0,0 +1,36 @@ +diff --git a/lib/nbt/index.d.ts b/lib/nbt/index.d.ts +index 69843e7fc1b7c47c89bcd58270289736d2ef1a71..e3bbf5213144a5249a22b351ac6feeee6dd66972 100644 +--- a/lib/nbt/index.d.ts ++++ b/lib/nbt/index.d.ts +@@ -1,7 +1,7 @@ +-export * from './io/DataInput.js'; +-export * from './io/DataOutput.js'; +-export * from './NbtChunk.js'; +-export * from './NbtFile.js'; +-export * from './NbtRegion.js'; +-export * from './tags/index.js'; ++export * from './io/DataInput.js' ++export * from './io/DataOutput.js' ++// export * from './NbtChunk.js'; ++// export * from './NbtFile.js'; ++// export * from './NbtRegion.js'; ++export * from './tags/index.js' + //# sourceMappingURL=index.d.ts.map +diff --git a/lib/nbt/index.js b/lib/nbt/index.js +index 5906e500f45d93439fc3c683a4cd11135980535b..15de3352ccbfb6f09b266edb0250e7b349324d8a 100644 +--- a/lib/nbt/index.js ++++ b/lib/nbt/index.js +@@ -1,7 +1,7 @@ +-export * from './io/DataInput.js'; +-export * from './io/DataOutput.js'; +-export * from './NbtChunk.js'; +-export * from './NbtFile.js'; +-export * from './NbtRegion.js'; +-export * from './tags/index.js'; ++export * from './io/DataInput.js' ++export * from './io/DataOutput.js' ++// export * from './NbtChunk.js'; ++// export * from './NbtFile.js'; ++// export * from './NbtRegion.js'; ++export * from './tags/index.js' + //# sourceMappingURL=index.js.map diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 00000000..3186f3f0 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..b8f300ee --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,75 @@ +
+ +

🧑‍💻 Contributing to Animated Java

+
+ +Contributions are always welcome, but please consult @SnaveSutit before starting to avoid duplicates or misalignment of goals. I don't want you to waste all that time and effort on a PR that gets refused! + +
+ Thank you! ❤️ +
+ +
+ +

💻 Setting up the Development Environment

+ +### 🛠️ Prerequisites + +- #### Required + + - [Node.js](https://nodejs.org/en/) + - [Yarn](https://classic.yarnpkg.com/lang/en/docs/install/#windows-stable) + - [Git](https://git-scm.com/) + +- #### Recommended + + - [VSCode](https://code.visualstudio.com/) + > (or any other code editor, but this project has configurations for VSCode) + - [Blockbench](https://www.blockbench.net/) + > The repository includes [Envbench](https://github.com/SnaveSutit/envbench) to create and manage a dev instance of Blockbench, So installing Blockbench separately is not strictly required. + - [SnaveSutit's Blockbench Types](https://github.com/SnaveSutit/blockbench-types) + > Bleeding edge types for Blockbench plugins.
Install via `yarn add -D https://github.com/SnaveSutit/blockbench-types.git` + - [GitButler](https://gitbutler.com/) + > A Git client for simultaneous branches on top of your existing workflow. + +## 🖇️ Cloning the Repository + +1. Clone the repository via git + + > [How do I clone a repository?](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) + +2. Run `yarn install` to install dependencies. + +3. Open up `src/blockbenchTypes.d.ts` and replace the first line with the following: + + ```ts + /// + ``` + + > By default this references my local fork of the Blockbench types to quickly add / adjust types as needed. So you need to adjust this to the official Blockbench types, or your own fork, if you're not me. + +4. Run `yarn dev` to start the development environment, which will watch for changes and recompile the plugin. + +5. Open a new terminal, or click `Split` if you're in VSCode's terminal, and run `yarn start` to start the development instance of Blockbench. + +6. That's it! You're ready to start developing. + +> [!IMPORTANT] +> Note that whenever you make changes, reloading just the plugins won't be enough, you must fully reload Blockbench for the plugin to function as expected.
+> You can use CTRL + SHIFT + R +> to reload Blockbench, or run `Blockbench.reload()` in the dev-tools console. + +## 💬 Adding Localizations + +1. Follow the instructions for [Cloning the Repository](#🖇️-cloning-the-repository). + +2. Duplicate `src/lang/en.yml` and rename it to match the language you're translating to. (e.g. `fr.yml` for French). + + > See [this page](https://github.com/JannisX11/blockbench/tree/master/lang) for the list of languages Blockbench supports. + +3. Start Translating! Make sure to check your changes in Blockbench to ensure they work correctly. + + > [!IMPORTANT] + > You will see strings that have curly brackets surrounding a number (`{0}`) in them, these are placeholders that indicate where variables should inserted into a string. Make sure to keep them in your translations! + +4. Once you're done translating, open a pull request with your changes. diff --git a/README.md b/README.md index be731cc3..d4af7cd0 100644 --- a/README.md +++ b/README.md @@ -1,80 +1,111 @@
- -

Animated Java -

-
-
- Dynamic JSON Badge - Total Downloads - Discord - Static Badge + Animated Java Icon +
+
+ + + Animated Java +

- A Blockbench plugin that makes complex animation a breeze in Minecraft: Java Edition. + Effortlessly craft complex animations in Minecraft: Java Edition

-# What is Animated Java? +
+
+ + + Latest Release + + + + + Blockbench Installs + + + + + Discord Server + + + + + Support Me on Ko-Fi! + + +
+ +--- + +
+ +# ❔ What is Animated Java? + +Animated Java is a cutting-edge Blockbench plugin designed for Minecraft: Java Edition mapmakers and Data Pack developers. By leveraging Blockbench's familiar interface, and the power of Java Edition's Data Pack and Resource Pack systems, Animated Java allows you to create complex animations with ease! + +
+ +# ✨ Key Features + +- **Function API** - Simple, yet powerful, API for summoning, and controlling animated models. + +- **Variants** - Swap between different textures in-game. + +- **Text Displays** - Preview, edit, and animate text displays in Blockbench. + +- **Keyframe Easing Curves** - Create smooth animations with ease. + +- **Locators** - Execute commands using Command Keyframes, teleport entities in an animation, and more. + +- **Animation Tweening** - Smoothly transition between animations. + +- **Camera Support** - Install the [Official Camera Plugin](https://www.blockbench.net/plugins/cameras) to create cinematic camera paths with ease. -Animated Java is a plugin for Blockbench that allows you to create custom animations and models -for Vanilla Minecraft. It uses the power of Java Edition's Data Pack and Resource Pack systems -to bring your creations to life! +- **Well Optimized** - Hours of effort have been poured into making Animated Java's Data Pack as low-impact as possible. -## Features +- **Resource Packs are Optional** - Animate Vanilla block and item models using Item and Block Display entities. -- Variants: Swap between different textures in-game. -- Highly optimized: Hours of performance tests and optimization tweaks have gone into Animated - Java's Exported Data Pack to make sure it has as little performance impact as possible. -- Custom easing functions for keyframes. -- Limited Molang support. If Blockbench can render it, Animated Java can bake it. -- Text Display previewing and animation support. -- Resource Pack-less exporting. Animate Vanilla block and item models! -- Locators: Run commands relative to a locators position via keyframes. -- Camera Plugin Support: Install the [Official Camera Plugin](https://www.blockbench.net/plugins/cameras) to create cinematic camera paths with ease! -- Animation Tweening: Create smooth transitions between animations. -- Many different configuration options. -- Complete Documentation at https://animated-java.dev +- **Molang Support** - If Blockbench can render your Molang expressions in the preview, you can use it in Animated Java. -And much more! +
-# How to Install +# 📦 Installation -Follow our guide [here](https://animated-java.dev/docs/getting-started/installing-animated-java) for detailed instructions on how to install the latest release of Animated Java. +- ❔ [Getting Started](https://animated-java.dev/docs/getting-started/using-animated-java) +- 📚 [Documentation](https://animated-java.dev/docs) +- 🕸️ [Website](https://animated-java.dev) +- 🗣️ [Discord](https://animated-java.dev/discord) -# Getting Started +
-Check out the [Getting Started](https://animated-java.dev/docs/getting-started/installing-animated-java) page of our documentation to learn how to use Animated Java. +# 💬 Testimonials -# Contributing to Animated Java +> _I love AJ 3000!_ +> — [MrMakistein](https://www.youtube.com/@McMakistein) -We welcome contributions to Animated Java! If you're interested in contributing, please make sure to run your ideas by us in our [Discord server](https://discord.com/invite/jFgY4PXZfp) before starting work on them. So that we can ensure that your contributions align with the goals of the project. +> _Wonderful tool, thank you for contributing to the creative possibilities in this game!_ +> — [Leroidesafk](https://www.curseforge.com/members/leroidesafk/projects) -## Prerequisites +> _Super thankful for AJ Snave! Its allowed me to create some insane sh\*\*_ +> — [phiac](https://www.youtube.com/channel/UCh2OK3oqxy-_azT-iwcSCag) -Things you'll need installed before you can setup the development environment +> _Thank you for the lovely tool!_ +> — [LeCarbonator](https://github.com/LeCarbonator) -- [Blockbench](https://www.blockbench.net/) -- [Node.js](https://nodejs.org/en/) -- [Yarn](https://classic.yarnpkg.com/lang/en/docs/install/#windows-stable) +
-## Setting up the Development Environment +# 🧑‍💻 Contributing -1. Clone the repository. -2. Run `yarn install` to install dependencies. -3. Open up `types/blockbench-types.d.ts` and replace the content of the file with the following: - ```ts - /// - ``` -4. Run `yarn dev` to start the development environment, which will watch for changes and recompile the plugin. -5. Open Blockbench, then go to `File > Plugins > Load Plugin From File` and select the `animated_java.js` file from your local repo (`dist/pluginPackage/animated-java.js`). -6. That's it! You're ready to start developing. +Contributions are always welcome! Check out [CONTRIBUTING.md](CONTRIBUTING.md) for more information. -> [!NOTE] -> Note that whenever you make changes, you must reload Blockbench as a whole for the changes to function as expected.
-> You can use `Ctrl + Shift + R` to reload Blockbench. +
-## Adding Localizations +# ⭐ Star History -1. Follow the steps above to set up the development environment. -2. Duplicate `src/lang/en.yml` and rename it to match the language you're translating to. (e.g. `fr.yml` for French) -3. Start Translating! Make sure to check your changes in Blockbench to ensure they display correctly. -4. Once you're done translating, open a pull request with your changes. + + + + + Star History Chart + + diff --git a/TODO.md b/TODO.md index 06f09465..ad419336 100644 --- a/TODO.md +++ b/TODO.md @@ -1,146 +1,33 @@ +# Misc. + +- [ ] Remove direct NBT editing in favor of on-summon commands with the `data` command. + # Blockbench -- [x] ~~Add a root NBT blueprint setting~~ Add a custom summon commands setting. -- [x] Custom animation properties dialog -- [x] Prevent the user setting their export namespace to 'global' or 'minecraft' -- [x] Add affected bones list to variant, and animation properties. - - [x] Variant Properties - - [x] Animation Properties -- [x] Implement .ajmodel to blueprint conversion. -- [x] Change .ajmeta to use relative file paths. -- [x] Resolve env variables in blueprint settings. -- [x] Add renderbox options to the blueprint settings. -- [x] Render and handle invalid cubes with a red outline. -- [x] Force animations to be at least 1 tick long -- [x] Respect Variant inheritance when applying variants in the animation preview. -- [x] Add a transparency option to the variant texture map selection. (And don't export completely transparent bones) -- [x] Locators - - [x] Custom command keyframes. - - [x] Locator config. - - [x] Data Pack Compiler support. -- [x] Natively support step keyframes. -- [x] When upgrading old ajmodels, if they have command keyframes in the effect animator, create a locator at 0 0 0 with those keyframes. -- [x] Add support for Text Displays - - [x] Basic rendering - - [x] Word wrapping - Thanks Fetchbot! - - [x] Italic - - [x] Bold - - [x] Underline - - [x] Strikethrough - - [x] Array style inheritance - - [x] Support vanilla fonts - - [x] minecraft:default - - [x] minecraft:alt - - [x] minecraft:illageralt - - [x] User interface - - [x] Figure out a nice way to configure text displays... - - [x] Include an option to change the text. - - [x] Include an option to change the max line width. - - [x] Animation - - [x] Make sure the text display is animatable. - - [x] Add a TextDisplay config. - - [x] Add support for billboarding to TextDisplays. - - [ ] Add an option to change the alignment of the text. -- [x] Respect inheritance in the bone config. -- [x] Change font rendering to use a geometry for each character instead of a single plane for the entire text display. This will open the possibility of loading custom fonts and spacing. -- [x] Add vanilla block displays - - [x] Create a custom element type for block displays. - - [x] Add rendering for vanilla block models. - - [x] Use Blockstates to select models. - - [x] Parent model inheritance - - [x] block/block - - [x] Add overrides for entity-based block models. - - [x] chest - - [x] ender_chest - - [x] mob heads - - [x] shulker boxes - - [x] beds - - [x] multi-parts like walls throw an intneral error if they don't have any elements. -- [x] Add an option to Locators to use the old entity-based functionality. -- [x] Add an about page. -- [x] Camera Plugin Support - - [x] Data Pack Compiler support. -- [x] Add vanilla item displays - - [x] Create a custom element type for item displays. - - [x] Add rendering for vanilla item models. - - [x] Parent model inheritance - - [x] item/generated - - [x] item/handheld - - [x] item/handheld_rod - - [x] item/handheld_mace - - [ ] Add overrides for entity-based models. - - [x] conduit - - [x] decorated_pot - - [x] template_banner - - [x] template_shulker_box - - [x] template_skull - - [x] banners - - [x] shield - - [x] trident -- [ ] Change the Collection setting type to allow single-click swapping of items between lists. -- [ ] Look into adding a color picker for tintable vanilla items. -- [ ] Add Variants to the UndoSystem (Blocked by vanilla Blockbench not supporting custom undo actions). -- [ ] Remove `easingArgs` and `easingMode` from saved keyframes if `easingType` is `linear`. -- [ ] Add an option to generate a `damage_flash` variant for mob-type entities. -- [ ] Add a fix for 360 rotation snap by using `set_frame` instead of `apply_frame` for the first frame of the animation. +- [ ] Change the Collection setting type to allow single-click swapping of items between lists. +- [ ] Look into adding a color picker for tintable vanilla items. +- [ ] Add Variants to the UndoSystem (Blocked by vanilla Blockbench not supporting custom undo actions). +- [ ] Remove `easingArgs` and `easingMode` from saved keyframes if `easingType` is `linear`. +- [ ] Add an option to generate a `damage_flash` variant for mob-type entities. +- [ ] Add a fix for 360 rotation snap by using `set_frame` instead of `apply_frame` for the first frame of the animation. +- [ ] Add an `Interaction` Outliner Element. # Data Pack Compiler -- [x] Merge on_tick and on_load function tags -- [x] When merging the new minecraft:tick tag with old one, try and find any old style function references (AKA animated_java:my_project/zzzzzz/tick), and remove them. -- [x] Animation Tweening -- [x] Implement animation loop mode tech. -- [x] Write files after compilaion is done by using a queue system. -- [x] Make data pack compiler as async as possible. -- [x] Actually respect variant config options. -- [x] Warn the user when a previously summoned rig needs to be re-summoned due to changes in the blueprint. -- [x] Figure out how to add repeating functionality to command keyframes. -- [x] Add toggles to command keyframes to allow continuously running the commands in the keyframe instead of only once when the keyframe is reached. -- [x] Teleport the rig to the execution location of the summon command. -- [x] Rotate the bones with the root entity. -- [x] Add default saved Locator positions to the summoned rig. -- [x] Add support for text displays. -- [x] Add support for vanilla item displays. -- [x] Add support for vanilla block displays. -- [x] Locator rotation inheritance support - looks like they've supported it all this time... -- [x] Apply variant keyframes in animations. -- [x] Figure out how cameras will work. -- [x] See how much swapping to a static list of UUIDs for selecting bones effects performance. -- [x] Split up animation storage data command to avoid command length limit. -- [x] Check for references to non-existant functions in merged function tags, and remove them. -- [ ] When applying variants, remove / replace any bones that have / had no elements with textured faces. +- [ ] When applying variants, remove / replace any bones that have / had no elements with textured faces. +- [ ] Add a system that detects the version of Minecraft that the data pack is being exported into. (Can probably use the level.dat of the world if it exists?) -- [x] Add a toast notification for when the model has invalid rotations. # Resource Pack -- [x] Warn the user when they have custom elements in their model, but have disabled the resource pack export. +- [x] Warn the user when they have custom elements in their model, but have disabled the resource pack export. # Plugin Exporter -- [x] Add an option to export a JSON file. - -# List of numbers to track - -- [ ] Total exports - - Stored in amount per day -- [ ] Total functions created by the data pack compiler - - Stored in amount per day - -# Github - -- [x] Reorganize the repo's branches. - - [x] Create a `release` branch. - - [x] Create a `dev` branch. - - [x] Create a `legacy-beta` tag. - - [x] Create a `legacy-armorstands` tag. -- [ ] Reorganize the repo's tags. - - [ ] Create a `v1.0.0` tag. - - [x] Create a `legacy-beta` tag. - - [x] Create a `legacy-armorstands` tag. +- [x] Add an option to export a JSON file. # Post 1.0.0 -- [ ] Add support for [block-display.com's API](https://wiki.block-display.com/api/get-api) -- [ ] Add support for custom fonts in TextDisplays. -- [ ] Add support and previewing for interaction entity based locators. -- [ ] Add support for previewing player skins on heads. +- [ ] Add support for [block-display.com's API](https://wiki.block-display.com/api/get-api) +- [ ] Add support for custom fonts in TextDisplays. +- [ ] Add support and previewing for interaction entity based locators. +- [ ] Add support for previewing player skins on heads. diff --git a/eslint.config.ts b/eslint.config.ts new file mode 100644 index 00000000..a87994e7 --- /dev/null +++ b/eslint.config.ts @@ -0,0 +1,268 @@ +import checkFile from 'eslint-plugin-check-file' +import svelteEslint from 'eslint-plugin-svelte' +import svelteParser from 'svelte-eslint-parser' +import tsESLint, { type ConfigWithExtends } from 'typescript-eslint' +import svelteConfig from './svelte.config' +import type { NamingConventionRule } from './tools/tslintNamingConventionRule' + +console.log(`[${new Date().toLocaleTimeString()}] Loading ESLint config`) + +const IGNORE_PATTERNS = [ + '.DS_Store', + '.env', + '.env.*', + '.github', + '.vscode', + '**/node_modules/**', + + // Blockbench Plugin Template + 'dist/**/*', + + // Ignore files for PNPM, NPM and YARN + 'pnpm-lock.yaml', + 'package-lock.json', + 'yarn.lock', +] + +const CUSTOM_RULES: ConfigWithExtends['rules'] = { + // ESLint + semi: ['error', 'never'], + 'prefer-const': 'warn', + 'no-fallthrough': 'off', + 'no-mixed-spaces-and-tabs': 'off', + 'no-unreachable': 'warn', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + vars: 'local', + args: 'after-used', + argsIgnorePattern: '^_', + ignoreRestSiblings: true, + }, + ], + // Svelte + 'svelte/html-quotes': ['warn', { prefer: 'double' }], + 'svelte/block-lang': ['error', { script: ['ts', null], style: null }], + 'svelte/comment-directive': ['error', { reportUnusedDisableDirectives: true }], + // Check File + 'check-file/filename-naming-convention': [ + 'error', + { + 'src/**/*.{ts.d.ts}': 'CAMEL_CASE', + 'tools/**/*.{ts.d.ts}': 'CAMEL_CASE', + }, + ], + 'check-file/folder-naming-convention': [ + 'error', + { + 'src/**': 'KEBAB_CASE', + 'tools/**': 'KEBAB_CASE', + }, + ], + // TypeScript + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }], + '@typescript-eslint/array-type': ['warn', { default: 'array-simple' }], + '@typescript-eslint/consistent-indexed-object-style': ['warn', 'interface'], + '@typescript-eslint/consistent-generic-constructors': 'warn', + '@typescript-eslint/no-namespace': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/require-await': 'warn', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/unbound-method': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/triple-slash-reference': 'off', + // Naming conventions + '@typescript-eslint/naming-convention': [ + 'warn', + { + // DFU Version imports + selector: ['import'], + modifiers: ['default'], + filter: { + regex: 'v\\d+_\\d+_\\d+$', + match: true, + }, + custom: { + match: true, + regex: 'v\\d+_\\d+_\\d+$', + }, + format: null, + }, + { + selector: ['import'], + modifiers: ['default'], + format: ['camelCase', 'PascalCase', 'UPPER_CASE'], + }, + { + selector: 'class', + format: ['PascalCase'], + }, + { + selector: ['classProperty', 'classMethod'], + format: ['camelCase'], + }, + { + selector: ['classProperty', 'classMethod'], + leadingUnderscore: 'allow', + format: ['camelCase'], + }, + { + selector: ['classProperty', 'classMethod'], + modifiers: ['private'], + leadingUnderscore: 'allowDouble', + trailingUnderscore: 'allowDouble', + format: ['camelCase'], + }, + { + selector: 'typeProperty', + format: null, + }, + { + selector: 'variable', + modifiers: ['const', 'destructured'], + format: null, + }, + { + selector: 'variable', + modifiers: ['const', 'global'], + types: ['function'], + leadingUnderscore: 'allow', + format: ['UPPER_CASE', 'camelCase'], + }, + { + selector: 'variable', + modifiers: ['const', 'global'], + leadingUnderscore: 'allow', + format: ['UPPER_CASE'], + }, + { + selector: 'variable', + modifiers: ['const', 'exported'], + format: ['camelCase', 'UPPER_CASE'], + }, + { + selector: 'variableLike', + format: ['camelCase'], + }, + { selector: 'interface', format: ['PascalCase'] }, + { + selector: 'interface', + modifiers: ['exported'], + format: ['PascalCase'], + prefix: ['I'], + }, + { selector: 'typeLike', format: ['PascalCase'] }, + { selector: 'objectLiteralProperty', format: null }, + { selector: 'default', format: ['camelCase'] }, + { + selector: 'parameter', + modifiers: ['unused'], + format: ['camelCase'], + leadingUnderscore: 'allow', + }, + { + selector: 'parameter', + format: ['camelCase'], + }, + { + selector: 'enumMember', + format: ['camelCase', 'PascalCase', 'UPPER_CASE'], + }, + { + selector: 'enum', + format: ['UPPER_CASE'], + }, + ] satisfies NamingConventionRule, +} + +export default tsESLint.config( + { + ignores: IGNORE_PATTERNS, + }, + ...tsESLint.configs.stylisticTypeChecked, + ...svelteEslint.configs['flat/prettier'], + { + plugins: { + '@typescript-eslint': tsESLint.plugin, + svelte: svelteEslint, + 'check-file': checkFile, + }, + }, + { + rules: CUSTOM_RULES, + }, + { + languageOptions: { + parser: tsESLint.parser, + parserOptions: { + project: './tsconfig.json', + extraFileExtensions: ['.svelte'], + }, + globals: { + browser: true, + node: true, + }, + }, + }, + { + files: ['**/*.svelte'], + rules: { + // Causes issues with Svelte and global types + 'no-undef': 'off', + '@typescript-eslint/naming-convention': [ + 'warn', + { + selector: 'variable', + modifiers: ['exported'], + format: ['camelCase'], + }, + { + selector: 'variable', + modifiers: ['const', 'global'], + format: ['UPPER_CASE'], + }, + { + selector: 'variable', + modifiers: ['const', 'global'], + types: ['function'], + format: ['camelCase'], + }, + { + selector: 'variable', + format: ['camelCase'], + leadingUnderscore: 'allow', + }, + ] satisfies NamingConventionRule, + }, + languageOptions: { + parser: svelteParser, + parserOptions: { + parser: tsESLint.parser, + svelteConfig: svelteConfig, + extraFileExtensions: ['.svelte'], + }, + globals: { + browser: true, + node: true, + }, + }, + settings: { + ignoreWarnings: ['svelte/a11y-no-onchange', 'a11y-no-onchange'], + }, + }, + { + languageOptions: { + parserOptions: { + projectService: true, + tsconfigRootDir: __dirname, + }, + }, + linterOptions: { + reportUnusedDisableDirectives: true, + }, + } +) diff --git a/package.json b/package.json index 08e53c6e..96ab8841 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { - "type": "module", + "type": "commonjs", "name": "animated_java", "title": "Animated Java", "icon": "icon.svg", - "description": "A Blockbench plugin that makes complex animation a breeze in Minecraft: Java Edition.", + "description": "Effortlessly craft complex animations in Minecraft: Java Edition", "version": "1.7.3", "min_blockbench_version": "4.12.0", "variant": "desktop", @@ -76,7 +76,8 @@ "scripts": { "build:scripts": "esbuild --bundle --platform=node --outfile=dist/build.cjs --packages=external ./tools/esbuild.ts", "dev": "yarn build:scripts && node ./dist/build.cjs --mode=dev", - "prod": "node ./tools/cleanupDist.cjs && yarn build:scripts && node ./dist/build.cjs", + "prod": "yarn build:scripts && node ./dist/build.cjs", + "lint": "eslint . --max-warnings=0", "format": "prettier --write .", "test": "yarn build:scripts && vitest run", "coverage": "yarn build:scripts && vitest run --coverage" @@ -84,33 +85,40 @@ "devDependencies": { "@novacbn/svelte-codejar": "^0.1.2", "@types/download": "^8.0.5", - "@types/eslint": "^8.21.1", + "@types/eslint": "^9.6.1", + "@types/find-cache-dir": "^5.0.2", "@types/js-yaml": "^4.0.5", - "@types/node": "^17.0.21", + "@types/node": "^22.13.5", "@types/websocket": "^1.0.10", - "@typescript-eslint/eslint-plugin": "^5.54.0", - "@typescript-eslint/parser": "^5.54.0", + "@typescript-eslint/eslint-plugin": "^8.24.0", + "@typescript-eslint/parser": "^8.24.0", "blockbench-types": "https://github.com/SnaveSutit/blockbench-types.git", - "esbuild": "^0.17.10", + "envbench": "^3.0.2", + "esbuild": "^0.25.0", "esbuild-plugin-import-glob": "^0.1.1", "esbuild-plugin-inline-image": "^0.0.9", "esbuild-plugin-inline-worker": "^0.1.1", "esbuild-plugin-svelte": "^0.1.1", - "eslint": "^8.35.0", + "eslint": "^9.20.0", + "eslint-plugin-check-file": "^3.0.0", + "eslint-plugin-svelte": "^2.46.1", + "find-cache-dir": "^5.0.0", "firebase": "^9.19.0", + "jiti": "^2.4.2", "js-yaml": "^4.1.0", - "prettier": "^2.5.1", - "svelte": "^3.55.1", + "node-modules-vscode-problems-patch": "^1.0.8", + "prettier": "^3.5.0", + "svelte": "3.59.2", "svelte-awesome-color-picker": "^3.0.0-beta.7", - "svelte-multiselect": "^11.0.0-rc.1", + "svelte-eslint-parser": "^0.43.0", "svelte-preprocess": "^5.0.1", "svelte-preprocess-esbuild": "^3.0.1", - "typescript": "^4.5.5", + "typescript": "^5.7.3", + "typescript-eslint": "^8.24.0", "vitest": "^2.1.8" }, "dependencies": { - "deepslate": "^0.19.2", - "download": "^8.0.0", + "deepslate": "patch:deepslate@npm%3A0.19.2#~/.yarn/patches/deepslate-npm-0.19.2-f859599b0a.patch", "fflate": "^0.8.2", "generic-stream": "^1.2.6", "marked": "^4.3.0", @@ -118,7 +126,8 @@ "mc-build": "^3.5.1", "request-progress": "^3.0.0", "svelte-ace": "^1.0.21", - "svelte-dnd-action": "^0.9.38" + "svelte-dnd-action": "^0.9.38", + "svelte-multiselect": "^11.1.1" }, - "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" + "packageManager": "yarn@4.6.0+sha512.5383cc12567a95f1d668fbe762dfe0075c595b4bfff433be478dbbe24e05251a8e8c3eb992a986667c1d53b6c3a9c85b8398c35a960587fbd9fa3a0915406728" } diff --git a/src/assets/banners/animated_java_title_banner.svg b/src/assets/banners/animated_java_title_banner.svg new file mode 100644 index 00000000..bd2073b7 --- /dev/null +++ b/src/assets/banners/animated_java_title_banner.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/animated_java_fancy_icon.svg b/src/assets/icons/animated_java_fancy_icon.svg new file mode 100644 index 00000000..ecad65e5 --- /dev/null +++ b/src/assets/icons/animated_java_fancy_icon.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/animated_java_icon.svg b/src/assets/icons/animated_java_icon.svg similarity index 100% rename from src/assets/animated_java_icon.svg rename to src/assets/icons/animated_java_icon.svg diff --git a/src/assets/animated_java_icon.webp b/src/assets/icons/animated_java_icon.webp similarity index 100% rename from src/assets/animated_java_icon.webp rename to src/assets/icons/animated_java_icon.webp diff --git a/src/assets/animated_java_icon_no_background.svg b/src/assets/icons/animated_java_icon_no_background.svg similarity index 100% rename from src/assets/animated_java_icon_no_background.svg rename to src/assets/icons/animated_java_icon_no_background.svg diff --git a/src/assets/animated_paper_icon.svg b/src/assets/icons/animated_paper_icon.svg similarity index 100% rename from src/assets/animated_paper_icon.svg rename to src/assets/icons/animated_paper_icon.svg diff --git a/src/assets/easingIcons/Back.svg b/src/assets/icons/easings/Back.svg similarity index 100% rename from src/assets/easingIcons/Back.svg rename to src/assets/icons/easings/Back.svg diff --git a/src/assets/easingIcons/Bounce.svg b/src/assets/icons/easings/Bounce.svg similarity index 100% rename from src/assets/easingIcons/Bounce.svg rename to src/assets/icons/easings/Bounce.svg diff --git a/src/assets/easingIcons/Circ.svg b/src/assets/icons/easings/Circ.svg similarity index 100% rename from src/assets/easingIcons/Circ.svg rename to src/assets/icons/easings/Circ.svg diff --git a/src/assets/easingIcons/Cubic.svg b/src/assets/icons/easings/Cubic.svg similarity index 100% rename from src/assets/easingIcons/Cubic.svg rename to src/assets/icons/easings/Cubic.svg diff --git a/src/assets/easingIcons/Elastic.svg b/src/assets/icons/easings/Elastic.svg similarity index 100% rename from src/assets/easingIcons/Elastic.svg rename to src/assets/icons/easings/Elastic.svg diff --git a/src/assets/easingIcons/Expo.svg b/src/assets/icons/easings/Expo.svg similarity index 100% rename from src/assets/easingIcons/Expo.svg rename to src/assets/icons/easings/Expo.svg diff --git a/src/assets/easingIcons/InOut.svg b/src/assets/icons/easings/InOut.svg similarity index 100% rename from src/assets/easingIcons/InOut.svg rename to src/assets/icons/easings/InOut.svg diff --git a/src/assets/easingIcons/Linear.svg b/src/assets/icons/easings/Linear.svg similarity index 100% rename from src/assets/easingIcons/Linear.svg rename to src/assets/icons/easings/Linear.svg diff --git a/src/assets/easingIcons/Out.svg b/src/assets/icons/easings/Out.svg similarity index 100% rename from src/assets/easingIcons/Out.svg rename to src/assets/icons/easings/Out.svg diff --git a/src/assets/easingIcons/Quad.svg b/src/assets/icons/easings/Quad.svg similarity index 100% rename from src/assets/easingIcons/Quad.svg rename to src/assets/icons/easings/Quad.svg diff --git a/src/assets/easingIcons/Quart.svg b/src/assets/icons/easings/Quart.svg similarity index 100% rename from src/assets/easingIcons/Quart.svg rename to src/assets/icons/easings/Quart.svg diff --git a/src/assets/easingIcons/Quint.svg b/src/assets/icons/easings/Quint.svg similarity index 100% rename from src/assets/easingIcons/Quint.svg rename to src/assets/icons/easings/Quint.svg diff --git a/src/assets/easingIcons/Sine.svg b/src/assets/icons/easings/Sine.svg similarity index 100% rename from src/assets/easingIcons/Sine.svg rename to src/assets/icons/easings/Sine.svg diff --git a/src/assets/easingIcons/Step.svg b/src/assets/icons/easings/Step.svg similarity index 100% rename from src/assets/easingIcons/Step.svg rename to src/assets/icons/easings/Step.svg diff --git a/src/assets/impulse_command_block.png b/src/assets/impulse_command_block.png new file mode 100644 index 00000000..6553b9c7 Binary files /dev/null and b/src/assets/impulse_command_block.png differ diff --git a/src/assets/papermc.svg b/src/assets/papermc.svg new file mode 100644 index 00000000..6b44eda9 --- /dev/null +++ b/src/assets/papermc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/blockbench-additions/class-properties/animation.ts b/src/blockbench-additions/class-properties/animation.ts new file mode 100644 index 00000000..3b5e0ec7 --- /dev/null +++ b/src/blockbench-additions/class-properties/animation.ts @@ -0,0 +1,27 @@ +import { PACKAGE } from '../../constants' +import { type ContextProperty, createBlockbenchMod } from '../../util/moddingTools' +import { translate } from '../../util/translation' +import { isCurrentFormat } from '../model-formats/ajblueprint' + +createBlockbenchMod( + `${PACKAGE.name}:additions/class-properties/animation`, + { + excludedNodesProperty: undefined as ContextProperty<'array'>, + }, + context => { + context.excludedNodesProperty = new Property( + Blockbench.Animation, + 'array', + 'excluded_nodes', + { + condition: () => isCurrentFormat(), + label: translate('animation.excluded_nodes'), + default: [], + } + ) + return context + }, + context => { + context.excludedNodesProperty?.delete() + } +) diff --git a/src/mods/bonePropertiesMod.ts b/src/blockbench-additions/class-properties/group.ts similarity index 75% rename from src/mods/bonePropertiesMod.ts rename to src/blockbench-additions/class-properties/group.ts index 349640da..4cd59ce1 100644 --- a/src/mods/bonePropertiesMod.ts +++ b/src/blockbench-additions/class-properties/group.ts @@ -1,6 +1,6 @@ -import { isCurrentFormat as condition } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { type ContextProperty, createBlockbenchMod } from '../util/moddingTools' +import { PACKAGE } from '../../constants' +import { type ContextProperty, createBlockbenchMod } from '../../util/moddingTools' +import { isCurrentFormat as condition } from '../model-formats/ajblueprint' class DeepClonedObjectProperty extends Property<'object'> { constructor(targetClass: any, name: string, options?: PropertyOptions) { @@ -19,7 +19,7 @@ class DeepClonedObjectProperty extends Property<'object'> { } createBlockbenchMod( - `${PACKAGE.name}:boneProperties`, + `${PACKAGE.name}:additions/class-properties/group`, { configs: undefined as ContextProperty<'object'>, }, diff --git a/src/blockbench-additions/class-properties/keyframe.ts b/src/blockbench-additions/class-properties/keyframe.ts new file mode 100644 index 00000000..95902e90 --- /dev/null +++ b/src/blockbench-additions/class-properties/keyframe.ts @@ -0,0 +1,28 @@ +import { PACKAGE } from '../../constants' +import { type ContextProperty, createBlockbenchMod } from '../../util/moddingTools' +import { isCurrentFormat } from '../model-formats/ajblueprint' + +import { EASING_DEFAULT } from '../../util/easing' + +createBlockbenchMod( + `${PACKAGE.name}:additions/class-properties/keyframe`, + { + easingProperty: undefined as ContextProperty<'string'>, + easingArgsProperty: undefined as ContextProperty<'array'>, + }, + context => { + context.easingProperty = new Property(Blockbench.Keyframe, 'string', 'easing', { + default: EASING_DEFAULT, + condition: () => isCurrentFormat(), + }) + context.easingArgsProperty = new Property(Blockbench.Keyframe, 'array', 'easingArgs', { + condition: () => isCurrentFormat(), + }) + + return context + }, + context => { + context.easingProperty?.delete() + context.easingArgsProperty?.delete() + } +) diff --git a/src/mods/locatorPropertiesMod.ts b/src/blockbench-additions/class-properties/locator.ts similarity index 51% rename from src/mods/locatorPropertiesMod.ts rename to src/blockbench-additions/class-properties/locator.ts index 21806c88..49160d25 100644 --- a/src/mods/locatorPropertiesMod.ts +++ b/src/blockbench-additions/class-properties/locator.ts @@ -1,9 +1,9 @@ -import { isCurrentFormat as condition } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { type ContextProperty, createBlockbenchMod } from '../util/moddingTools' +import { PACKAGE } from '../../constants' +import { type ContextProperty, createBlockbenchMod } from '../../util/moddingTools' +import { isCurrentFormat as condition } from '../model-formats/ajblueprint' createBlockbenchMod( - `${PACKAGE.name}:locatorProperties`, + `${PACKAGE.name}:additions/class-properties/locator`, { config: undefined as ContextProperty<'instance'>, }, diff --git a/src/blockbench-additions/index.ts b/src/blockbench-additions/index.ts new file mode 100644 index 00000000..442b4aa2 --- /dev/null +++ b/src/blockbench-additions/index.ts @@ -0,0 +1,11 @@ +// Class Properties +import './class-properties/animation' +import './class-properties/group' +import './class-properties/keyframe' +import './class-properties/locator' +// Model Formats +import './model-formats/ajblueprint' +// Outliner Elements +import './outliner-elements/blockDisplay' +import './outliner-elements/itemDisplay' +import './outliner-elements/textDisplay' diff --git a/src/systems/modelDataFixerUpper.ts b/src/blockbench-additions/model-formats/ajblueprint/dfu.ts similarity index 93% rename from src/systems/modelDataFixerUpper.ts rename to src/blockbench-additions/model-formats/ajblueprint/dfu.ts index bd20252c..386cf91f 100644 --- a/src/systems/modelDataFixerUpper.ts +++ b/src/blockbench-additions/model-formats/ajblueprint/dfu.ts @@ -1,9 +1,9 @@ +import { CommonDisplayConfig } from '@aj/systems/node-configs' +import TransparentTexture from '@assets/transparent.png' import { NbtCompound, NbtList, NbtString, NbtTag } from 'deepslate/lib/nbt' -import TransparentTexture from '../assets/transparent.png' -import { IBlueprintFormatJSON, getDefaultProjectSettings } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { openUnexpectedErrorDialog } from '../interface/dialog/unexpectedError' -import { BoneConfig } from '../nodeConfigs' +import { type IBlueprintFormatJSON, getDefaultProjectSettings } from '.' +import { PACKAGE } from '../../../constants' +import { openUnexpectedErrorDialog } from '../../../ui/dialogs/unexpected-error' export function process(model: any): any { console.log('Running MDFU...', JSON.parse(JSON.stringify(model))) @@ -105,8 +105,7 @@ function updateModelToOld1_0(model: any) { } if ( - model.animations && - model.animations.find((a: any) => + model.animations?.find((a: any) => Object.keys(a.animators as Record).find(name => name === 'effects') ) ) { @@ -197,7 +196,7 @@ function updateModelToOld1_4(model: any) { } // region v0.3.10 -// eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-unused-vars +// eslint-disable-next-line @typescript-eslint/naming-convention function updateModelTo0_3_10(model: any) { console.log('Processing model for AJ 0.3.10', JSON.parse(JSON.stringify(model))) } @@ -218,7 +217,7 @@ function updateModelTo1_0pre1(model: any) { meta: { format: 'animated_java_blueprint', format_version: '0.5.0', - uuid: model.meta.uuid || guid(), + uuid: model.meta.uuid ?? guid(), last_used_export_namespace: model.animated_java.settings.project_namespace, }, project_settings: { @@ -258,9 +257,9 @@ function updateModelTo1_0pre1(model: any) { variants: { default: { name: 'default', - display_name: defaultVariant.name || 'Default', - uuid: defaultVariant.uuid || guid(), - texture_map: defaultVariant.textureMap || {}, + display_name: defaultVariant.name ?? 'Default', + uuid: defaultVariant.uuid ?? guid(), + texture_map: defaultVariant.textureMap ?? {}, // @ts-ignore excluded_bones: [], }, @@ -280,7 +279,7 @@ function updateModelTo1_0pre1(model: any) { if (typeof node === 'string') return bones.push(node.uuid as string) node.configs = { - default: new BoneConfig().toJSON(), + default: new CommonDisplayConfig().toJSON(), variants: {}, } node.children.forEach((child: any) => { @@ -304,13 +303,13 @@ function updateModelTo1_0pre1(model: any) { } if (element.entity_type) element.config.entity_type = element.entity_type if (element.nbt) { - const summon_commands: string[] = [] + const summonCommands: string[] = [] const nbt = NbtTag.fromString(element.nbt as string) as NbtCompound nbt.delete('Passengers') const tags = (nbt.get('Tags') as NbtList)?.map(t => t.getAsString()) nbt.delete('Tags') - summon_commands.push('data merge entity @s ' + nbt.toString()) - if (tags) summon_commands.push(...tags.map(t => `tag @s add ${t}`)) + summonCommands.push('data merge entity @s ' + nbt.toString()) + if (tags) summonCommands.push(...tags.map(t => `tag @s add ${t}`)) const recursePassengers = (stringNbt: string): string[] => { const nbt = NbtTag.fromString(stringNbt) as NbtCompound @@ -348,16 +347,16 @@ function updateModelTo1_0pre1(model: any) { } try { - summon_commands.push(...recursePassengers(element.nbt as string)) + summonCommands.push(...recursePassengers(element.nbt as string)) } catch (e) { console.error('Failed to parse NBT', element.nbt) console.error(e) } - if (summon_commands.length === 0) { - summon_commands.push(`data merge entity @s ${element.nbt as string}`) + if (summonCommands.length === 0) { + summonCommands.push(`data merge entity @s ${element.nbt as string}`) } - element.config.summon_commands = summon_commands.join('\n') + element.config.summon_commands = summonCommands.join('\n') } } } @@ -413,14 +412,14 @@ function updateModelTo1_0pre6(model: any): IBlueprintFormatJSON { delete defaultVariant.excluded_bones } - for (const variant of model?.variants?.list || []) { + for (const variant of model?.variants?.list ?? []) { if (variant?.excluded_bones) { variant.excluded_nodes = variant.excluded_bones delete variant.excluded_bones } } - for (const animation of model?.animations || []) { + for (const animation of model?.animations ?? []) { if (animation?.excluded_bones) { animation.excluded_nodes = animation.excluded_bones delete animation.excluded_bones @@ -499,7 +498,7 @@ function updateModelTo1_6_3(model: IBlueprintFormatJSON): IBlueprintFormatJSON { { name: 'transparent' }, '797174ae-5c58-4a83-a630-eefd51007c80' ).fromDataURL(TransparentTexture) - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + model.textures.push(texture.getSaveCopy()) break } diff --git a/src/components/formatPage.svelte b/src/blockbench-additions/model-formats/ajblueprint/formatPage.svelte similarity index 73% rename from src/components/formatPage.svelte rename to src/blockbench-additions/model-formats/ajblueprint/formatPage.svelte index 6e5097ea..bd26afb5 100644 --- a/src/components/formatPage.svelte +++ b/src/blockbench-additions/model-formats/ajblueprint/formatPage.svelte @@ -1,33 +1,33 @@ - {#if $pluginMode} diff --git a/src/blockbench-additions/model-formats/ajblueprint/versions/v1.6.4.ts b/src/blockbench-additions/model-formats/ajblueprint/versions/v1.6.4.ts new file mode 100644 index 00000000..464986ad --- /dev/null +++ b/src/blockbench-additions/model-formats/ajblueprint/versions/v1.6.4.ts @@ -0,0 +1,110 @@ +import type { PACKAGE } from '@aj/constants' +import type { + CameraConfig, + CommonDisplayConfig, + LocatorConfig, + Serialized, + TextDisplayConfig, +} from '@aj/systems/node-configs' + +namespace v1_6_4 { + export type IBlueprintBoneConfigJSON = Serialized + export type IBlueprintLocatorConfigJSON = Serialized + export type IBlueprintCameraConfigJSON = Serialized + export type IBlueprintTextDisplayConfigJSON = Serialized + + /** + * The serialized Variant + */ + export interface IBlueprintVariantJSON { + /** + * The display name of the Variant. Only use in Blockbench and for error messages. + */ + display_name: string + /** + * The name of the Variant + */ + name: string + /** + * The uuid of the Variant + */ + uuid: string + /** + * The texture map for the Variant + */ + texture_map: Record + /** + * The list of bones that should be ignored when applying the Variant + */ + excluded_nodes: string[] + /** + * Whether or not this is the default Variant + */ + is_default?: true + } + + /** + * The serialized Blueprint + */ + export interface IBlueprintFormatJSON { + meta: { + format: 'animated_java_blueprint' + format_version: string + uuid: string + last_used_export_namespace: string + box_uv?: boolean + backup?: boolean + save_location?: string + } + /** + * The project settings of the Blueprint + */ + blueprint_settings?: NonNullable['animated_java'] + /** + * The variants of the Blueprint + */ + variants: { + /** + * The default Variant of the Blueprint + */ + default: IBlueprintVariantJSON + /** + * The list of variants of the Blueprint, excluding the default Variant + */ + list: IBlueprintVariantJSON[] + } + + resolution: { + width: number + height: number + } + + elements: any[] + outliner: any[] + textures: Texture[] + animations: AnimationOptions[] + animation_controllers?: AnimationControllerOptions[] + animation_variable_placeholders: string + backgrounds?: Record + } + + export interface IBlueprintFormat { + meta: { + format: `${typeof PACKAGE.name}:utility_model` + format_version: '0.0.5' + } + } +} + +export default { + upgrade(model: any): v1_6_4.IBlueprintFormat { + console.groupCollapsed('Updating utility model to 1.6.4') + + // As this is the first version the DFU knows of, there is nothing to upgrade. + // However, we should make sure the format version is correct. + model.meta.format_version = '1.6.4' + + console.groupEnd() + return model as v1_6_4.IBlueprintFormat + }, +} diff --git a/src/outliner/vanillaBlockDisplay.ts b/src/blockbench-additions/outliner-elements/blockDisplay.ts similarity index 73% rename from src/outliner/vanillaBlockDisplay.ts rename to src/blockbench-additions/outliner-elements/blockDisplay.ts index 254872f1..e1eb8260 100644 --- a/src/outliner/vanillaBlockDisplay.ts +++ b/src/blockbench-additions/outliner-elements/blockDisplay.ts @@ -1,23 +1,38 @@ -import { IBlueprintBoneConfigJSON, isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { VANILLA_BLOCK_DISPLAY_CONFIG_ACTION } from '../interface/dialog/vanillaBlockDisplayConfig' -import { BoneConfig } from '../nodeConfigs' -import { getBlockModel } from '../systems/minecraft/blockModelManager' -import { BlockStateValue, getBlockState } from '../systems/minecraft/blockstateManager' -import { MINECRAFT_REGISTRY } from '../systems/minecraft/registryManager' -import { getCurrentVersion } from '../systems/minecraft/versionManager' -import { events } from '../util/events' -import { parseBlock } from '../util/minecraftUtil' -import { createAction, createBlockbenchMod } from '../util/moddingTools' -import { Valuable } from '../util/stores' -import { translate } from '../util/translation' +import { getBlockModel } from '@aj/systems/minecraft-temp/blockModelManager' +import { type BlockStateValue, getBlockState } from '@aj/systems/minecraft-temp/blockstateManager' +import { MINECRAFT_REGISTRY } from '@aj/systems/minecraft-temp/registryManager' +import { getCurrentVersion } from '@aj/systems/minecraft-temp/versionManager' +import { BlockDisplayConfig, CommonDisplayConfig, type Serialized } from '@aj/systems/node-configs' +import EVENTS from '@events' +import { PACKAGE } from '../../constants' +import { VANILLA_BLOCK_DISPLAY_CONFIG_ACTION } from '../../ui/dialogs/block-display-config' +import { parseBlock } from '../../util/minecraftUtil' +import { + createAction, + createBlockbenchMod, + fixClassPropertyInheritance, +} from '../../util/moddingTools' +import { Syncable } from '../../util/stores' +import { translate } from '../../util/translation' +import { isCurrentFormat } from '../model-formats/ajblueprint' import { ResizableOutlinerElement } from './resizableOutlinerElement' import { sanitizeOutlinerElementName } from './util' const ERROR_OUTLINE_MATERIAL = Canvas.outlineMaterial.clone() ERROR_OUTLINE_MATERIAL.color.set('#ff0000') -interface VanillaBlockDisplayOptions { +export type ItemDisplayMode = + | 'none' + | 'thirdperson_lefthand' + | 'thirdperson_righthand' + | 'firstperson_lefthand' + | 'firstperson_righthand' + | 'head' + | 'gui' + | 'ground' + | 'fixed' + +interface BlockDisplayOptions { name?: string block?: string position?: ArrayVector3 @@ -26,20 +41,23 @@ interface VanillaBlockDisplayOptions { visibility?: boolean } -export class VanillaBlockDisplay extends ResizableOutlinerElement { - static type = `${PACKAGE.name}:vanilla_block_display` - static selected: VanillaBlockDisplay[] = [] - static all: VanillaBlockDisplay[] = [] +@fixClassPropertyInheritance +export class BlockDisplay extends ResizableOutlinerElement { + static type = `${PACKAGE.name}:block_display` + static selected: BlockDisplay[] = [] + static all: BlockDisplay[] = [] - public type = VanillaBlockDisplay.type + public type = BlockDisplay.type public icon = 'deployed_code' + public title = translate('node.block_display.title') public needsUniqueName = true // Properties - public _block = new Valuable('minecraft:stone') - public config: IBlueprintBoneConfigJSON + private __block = new Syncable('minecraft:stone') + public config: Serialized + public commonConfig: Serialized - public error = new Valuable('') + public error = new Syncable('') public menu = new Menu([ ...Outliner.control_menu_group, @@ -54,12 +72,12 @@ export class VanillaBlockDisplay extends ResizableOutlinerElement { public ready = false - constructor(data: VanillaBlockDisplayOptions, uuid = guid()) { + constructor(data: BlockDisplayOptions, uuid = guid()) { super(data, uuid) - VanillaBlockDisplay.all.push(this) + BlockDisplay.all.push(this) - for (const key in VanillaBlockDisplay.properties) { - VanillaBlockDisplay.properties[key].reset(this) + for (const key in BlockDisplay.properties) { + BlockDisplay.properties[key].reset(this) } this.name = 'block_display' @@ -67,6 +85,7 @@ export class VanillaBlockDisplay extends ResizableOutlinerElement { this.block ??= 'minecraft:stone' this.config ??= {} + this.commonConfig ??= {} this.sanitizeName() @@ -93,19 +112,19 @@ export class VanillaBlockDisplay extends ResizableOutlinerElement { } } - this._block.subscribe(value => { + this.__block.subscribe(value => { void updateBlock(value) }) } get block() { - if (this._block === undefined) return 'minecraft:stone' - return this._block.get() + if (this.__block === undefined) return 'minecraft:stone' + return this.__block.get() } set block(value: string) { - if (this._block === undefined) return + if (this.__block === undefined) return if (this.block === value) return - this._block.set(value) + this.__block.set(value) } async waitForReady() { @@ -120,10 +139,10 @@ export class VanillaBlockDisplay extends ResizableOutlinerElement { } getUndoCopy() { - const copy = {} as VanillaBlockDisplayOptions & { uuid: string; type: string } + const copy = {} as BlockDisplayOptions & { uuid: string; type: string } - for (const key in VanillaBlockDisplay.properties) { - VanillaBlockDisplay.properties[key].copy(this, copy) + for (const key in BlockDisplay.properties) { + BlockDisplay.properties[key].copy(this, copy) } copy.uuid = this.uuid @@ -133,19 +152,17 @@ export class VanillaBlockDisplay extends ResizableOutlinerElement { getSaveCopy() { const el: any = {} - for (const key in VanillaBlockDisplay.properties) { - VanillaBlockDisplay.properties[key].copy(this, el) + for (const key in BlockDisplay.properties) { + BlockDisplay.properties[key].copy(this, el) } el.uuid = this.uuid el.type = this.type - // eslint-disable-next-line @typescript-eslint/no-unsafe-return return el } select() { - if (Group.first_selected) { - Group.first_selected.unselect() - } + Group.all.forEachReverse(el => el.unselect()) + if (!Pressing.ctrl && !Pressing.shift) { if (Cube.selected.length) { Cube.selected.forEachReverse(el => el.unselect()) @@ -155,7 +172,7 @@ export class VanillaBlockDisplay extends ResizableOutlinerElement { } } - VanillaBlockDisplay.selected.safePush(this) + BlockDisplay.selected.safePush(this) this.selectLow() this.showInOutliner() updateSelection() @@ -176,25 +193,25 @@ export class VanillaBlockDisplay extends ResizableOutlinerElement { Timeline.selected.empty() } Project!.selected_elements.remove(this) - VanillaBlockDisplay.selected.remove(this) + BlockDisplay.selected.remove(this) this.selected = false TickUpdates.selection = true this.preview_controller.updateHighlight(this) } } -new Property(VanillaBlockDisplay, 'string', 'block', { default: 'minecraft:stone' }) -new Property(VanillaBlockDisplay, 'object', 'config', { +new Property(BlockDisplay, 'string', 'block', { default: 'minecraft:stone' }) +new Property(BlockDisplay, 'object', 'config', { get default() { - return new BoneConfig().toJSON() + return new CommonDisplayConfig().toJSON() }, }) -OutlinerElement.registerType(VanillaBlockDisplay, VanillaBlockDisplay.type) +OutlinerElement.registerType(BlockDisplay, BlockDisplay.type) -export const PREVIEW_CONTROLLER = new NodePreviewController(VanillaBlockDisplay, { - setup(el: VanillaBlockDisplay) { +export const PREVIEW_CONTROLLER = new NodePreviewController(BlockDisplay, { + setup(el: BlockDisplay) { ResizableOutlinerElement.prototype.preview_controller.setup(el) }, - updateGeometry(el: VanillaBlockDisplay) { + updateGeometry(el: BlockDisplay) { if (!el.mesh) return void getBlockModel(el.block) @@ -232,10 +249,10 @@ export const PREVIEW_CONTROLLER = new NodePreviewController(VanillaBlockDisplay, el.ready = true }) }, - updateTransform(el: VanillaBlockDisplay) { + updateTransform(el: BlockDisplay) { ResizableOutlinerElement.prototype.preview_controller.updateTransform(el) }, - updateHighlight(el: VanillaBlockDisplay, force?: boolean | VanillaBlockDisplay) { + updateHighlight(el: BlockDisplay, force?: boolean | BlockDisplay) { if (!isCurrentFormat() || !el?.mesh) return const highlighted = Modes.edit && (force === true || force === el || el.selected) ? 1 : 0 @@ -254,20 +271,20 @@ export const PREVIEW_CONTROLLER = new NodePreviewController(VanillaBlockDisplay, }, }) -class VanillaBlockDisplayAnimator extends BoneAnimator { - private _name: string +class BlockDisplayAnimator extends BoneAnimator { + private __name: string public uuid: string - public element: VanillaBlockDisplay | undefined + public element: BlockDisplay | undefined constructor(uuid: string, animation: _Animation, name: string) { super(uuid, animation, name) this.uuid = uuid - this._name = name + this.__name = name } getElement() { - this.element = OutlinerNode.uuids[this.uuid] as VanillaBlockDisplay + this.element = OutlinerNode.uuids[this.uuid] as BlockDisplay return this.element } @@ -372,8 +389,8 @@ class VanillaBlockDisplayAnimator extends BoneAnimator { return this } } -VanillaBlockDisplayAnimator.prototype.type = VanillaBlockDisplay.type -VanillaBlockDisplay.animator = VanillaBlockDisplayAnimator as any +BlockDisplayAnimator.prototype.type = BlockDisplay.type +BlockDisplay.animator = BlockDisplayAnimator as any createBlockbenchMod( `${PACKAGE.name}:vanillaBlockDisplay`, @@ -386,14 +403,14 @@ createBlockbenchMod( MenuBar.menus.edit.addAction(CREATE_ACTION, 8) context.subscriptions.push( - events.SELECT_PROJECT.subscribe(project => { + EVENTS.SELECT_PROJECT.subscribe(project => { project.vanillaBlockDisplays ??= [] - VanillaBlockDisplay.all.empty() - VanillaBlockDisplay.all.push(...project.vanillaBlockDisplays) + BlockDisplay.all.empty() + BlockDisplay.all.push(...project.vanillaBlockDisplays) }), - events.UNSELECT_PROJECT.subscribe(project => { - project.vanillaBlockDisplays = [...VanillaBlockDisplay.all] - VanillaBlockDisplay.all.empty() + EVENTS.UNSELECT_PROJECT.subscribe(project => { + project.vanillaBlockDisplays = [...BlockDisplay.all] + BlockDisplay.all.empty() }) ) return context @@ -407,8 +424,8 @@ createBlockbenchMod( } ) -export const CREATE_ACTION = createAction(`${PACKAGE.name}:create_vanilla_block_display`, { - name: translate('action.create_vanilla_block_display.title'), +export const CREATE_ACTION = createAction(`${PACKAGE.name}:create_block_display`, { + name: translate('action.create_block_display.title'), icon: 'deployed_code', category: 'animated_java', condition() { @@ -417,7 +434,7 @@ export const CREATE_ACTION = createAction(`${PACKAGE.name}:create_vanilla_block_ click() { Undo.initEdit({ outliner: true, elements: [], selection: true }) - const vanillaBlockDisplay = new VanillaBlockDisplay({}).init() + const vanillaBlockDisplay = new BlockDisplay({}).init() const group = getCurrentGroup() if (group instanceof Group) { @@ -426,7 +443,7 @@ export const CREATE_ACTION = createAction(`${PACKAGE.name}:create_vanilla_block_ } selected.forEachReverse(el => el.unselect()) - Group.first_selected && Group.first_selected.unselect() + Group.all.forEachReverse(el => el.unselect()) vanillaBlockDisplay.select() Undo.finishEdit('Create Vanilla Block Display', { @@ -445,7 +462,7 @@ export function debugBlocks() { const block = MINECRAFT_REGISTRY.block.items[i] const x = (i % maxX) * 32 const y = Math.floor(i / maxX) * 32 - new VanillaBlockDisplay({ name: block, block, position: [x, 8, y] }).init() + new BlockDisplay({ name: block, block, position: [x, 8, y] }).init() } } @@ -460,7 +477,7 @@ export async function debugBlockState(block: string) { const x = (i % maxX) * 32 const y = Math.floor(i / maxX) * 32 const str = generateBlockStateString(permutations[i]) - new VanillaBlockDisplay({ + new BlockDisplay({ name: block + str, block: block + str, position: [x, 8, y], diff --git a/src/outliner/vanillaItemDisplay.ts b/src/blockbench-additions/outliner-elements/itemDisplay.ts similarity index 65% rename from src/outliner/vanillaItemDisplay.ts rename to src/blockbench-additions/outliner-elements/itemDisplay.ts index fcf7fc81..d3db3793 100644 --- a/src/outliner/vanillaItemDisplay.ts +++ b/src/blockbench-additions/outliner-elements/itemDisplay.ts @@ -1,57 +1,52 @@ -import { IBlueprintBoneConfigJSON, isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { VANILLA_ITEM_DISPLAY_CONFIG_ACTION } from '../interface/dialog/vanillaItemDisplayConfig' -import { BoneConfig } from '../nodeConfigs' -import { getItemModel } from '../systems/minecraft/itemModelManager' -import { MINECRAFT_REGISTRY } from '../systems/minecraft/registryManager' -import { getCurrentVersion } from '../systems/minecraft/versionManager' -import { events } from '../util/events' -import { createAction, createBlockbenchMod } from '../util/moddingTools' -import { Valuable } from '../util/stores' -import { translate } from '../util/translation' +import { getItemModel } from '@aj/systems/minecraft-temp/itemModelManager' +import { MINECRAFT_REGISTRY } from '@aj/systems/minecraft-temp/registryManager' +import { getCurrentVersion } from '@aj/systems/minecraft-temp/versionManager' +import { CommonDisplayConfig, ItemDisplayConfig, type Serialized } from '@aj/systems/node-configs' +import EVENTS from '@events' +import { PACKAGE } from '../../constants' +import { + createAction, + createBlockbenchMod, + fixClassPropertyInheritance, +} from '../../util/moddingTools' +import { Syncable } from '../../util/stores' +import { translate } from '../../util/translation' +import { isCurrentFormat } from '../model-formats/ajblueprint' import { ResizableOutlinerElement } from './resizableOutlinerElement' import { sanitizeOutlinerElementName } from './util' -export type ItemDisplayMode = - | 'none' - | 'thirdperson_lefthand' - | 'thirdperson_righthand' - | 'firstperson_lefthand' - | 'firstperson_righthand' - | 'head' - | 'gui' - | 'ground' - | 'fixed' - -interface VanillaItemDisplayOptions { +interface ItemDisplayOptions { name?: string item?: string - itemDisplay?: ItemDisplayMode + item_display?: string position?: ArrayVector3 rotation?: ArrayVector3 scale?: ArrayVector3 visibility?: boolean } -export class VanillaItemDisplay extends ResizableOutlinerElement { - static type = `${PACKAGE.name}:vanilla_item_display` - static selected: VanillaItemDisplay[] = [] - static all: VanillaItemDisplay[] = [] +@fixClassPropertyInheritance +export class ItemDisplay extends ResizableOutlinerElement { + static type = `${PACKAGE.name}:item_display` + static selected: ItemDisplay[] = [] + static all: ItemDisplay[] = [] - public type = VanillaItemDisplay.type + public type = ItemDisplay.type public icon = 'icecream' + public title = translate('node.item_display.title') public needsUniqueName = true // Properties - public _item = new Valuable('minecraft:diamond') - public _itemDisplay = new Valuable('none') - public config: IBlueprintBoneConfigJSON + private __item = new Syncable('minecraft:diamond') + private __itemDisplay = new Syncable('none') + public config: Serialized + public commonConfig: Serialized - public error = new Valuable('') + public error = new Syncable('') public menu = new Menu([ ...Outliner.control_menu_group, - VANILLA_ITEM_DISPLAY_CONFIG_ACTION, + ITEM_DISPLAY_CONFIG_ACTION, '_', 'rename', 'delete', @@ -62,12 +57,12 @@ export class VanillaItemDisplay extends ResizableOutlinerElement { public ready = false - constructor(data: VanillaItemDisplayOptions, uuid = guid()) { + constructor(data: ItemDisplayOptions, uuid = guid()) { super(data, uuid) - VanillaItemDisplay.all.push(this) + ItemDisplay.all.push(this) - for (const key in VanillaItemDisplay.properties) { - VanillaItemDisplay.properties[key].reset(this) + for (const key in ItemDisplay.properties) { + ItemDisplay.properties[key].reset(this) } this.name = 'item_display' @@ -80,6 +75,7 @@ export class VanillaItemDisplay extends ResizableOutlinerElement { this.scale ??= [1, 1, 1] this.visibility ??= true this.config ??= {} + this.commonConfig ??= {} this.sanitizeName() @@ -104,27 +100,27 @@ export class VanillaItemDisplay extends ResizableOutlinerElement { } } - this._item.subscribe(value => { + this.__item.subscribe(value => { updateItem(value) }) } get item() { - if (this._item === undefined) return 'minecraft:diamond' - return this._item.get() + if (this.__item === undefined) return 'minecraft:diamond' + return this.__item.get() } set item(value: string) { - if (this._item === undefined) return - this._item.set(value) + if (this.__item === undefined) return + this.__item.set(value) } get itemDisplay() { - if (this._itemDisplay === undefined) return 'none' - return this._itemDisplay.get() + if (this.__itemDisplay === undefined) return 'none' + return this.__itemDisplay.get() } - set itemDisplay(value: ItemDisplayMode) { - if (this._itemDisplay === undefined) return - this._itemDisplay.set(value) + set itemDisplay(value: string) { + if (this.__itemDisplay === undefined) return + this.__itemDisplay.set(value) } async waitForReady() { @@ -139,10 +135,10 @@ export class VanillaItemDisplay extends ResizableOutlinerElement { } getUndoCopy() { - const copy = {} as VanillaItemDisplayOptions & { uuid: string; type: string } + const copy = {} as ItemDisplayOptions & { uuid: string; type: string } - for (const key in VanillaItemDisplay.properties) { - VanillaItemDisplay.properties[key].copy(this, copy) + for (const key in ItemDisplay.properties) { + ItemDisplay.properties[key].copy(this, copy) } copy.uuid = this.uuid @@ -152,19 +148,17 @@ export class VanillaItemDisplay extends ResizableOutlinerElement { getSaveCopy() { const el: any = {} - for (const key in VanillaItemDisplay.properties) { - VanillaItemDisplay.properties[key].copy(this, el) + for (const key in ItemDisplay.properties) { + ItemDisplay.properties[key].copy(this, el) } el.uuid = this.uuid el.type = this.type - // eslint-disable-next-line @typescript-eslint/no-unsafe-return return el } select() { - if (Group.first_selected) { - Group.first_selected.unselect() - } + Group.all.forEachReverse(el => el.unselect()) + if (!Pressing.ctrl && !Pressing.shift) { if (Cube.selected.length) { Cube.selected.forEachReverse(el => el.unselect()) @@ -174,7 +168,7 @@ export class VanillaItemDisplay extends ResizableOutlinerElement { } } - VanillaItemDisplay.selected.safePush(this) + ItemDisplay.selected.safePush(this) this.selectLow() this.showInOutliner() updateSelection() @@ -195,26 +189,26 @@ export class VanillaItemDisplay extends ResizableOutlinerElement { Timeline.selected.empty() } Project!.selected_elements.remove(this) - VanillaItemDisplay.selected.remove(this) + ItemDisplay.selected.remove(this) this.selected = false TickUpdates.selection = true this.preview_controller.updateHighlight(this) } } -new Property(VanillaItemDisplay, 'string', 'item', { default: 'minecraft:diamond' }) -new Property(VanillaItemDisplay, 'string', 'itemDisplay', { default: 'none' }) -new Property(VanillaItemDisplay, 'object', 'config', { +new Property(ItemDisplay, 'string', 'item', { default: 'minecraft:diamond' }) +new Property(ItemDisplay, 'string', 'item_display', { default: 'none' }) +new Property(ItemDisplay, 'object', 'config', { get default() { - return new BoneConfig().toJSON() + return new CommonDisplayConfig().toJSON() }, }) -OutlinerElement.registerType(VanillaItemDisplay, VanillaItemDisplay.type) +OutlinerElement.registerType(ItemDisplay, ItemDisplay.type) -export const PREVIEW_CONTROLLER = new NodePreviewController(VanillaItemDisplay, { - setup(el: VanillaItemDisplay) { +export const PREVIEW_CONTROLLER = new NodePreviewController(ItemDisplay, { + setup(el: ItemDisplay) { ResizableOutlinerElement.prototype.preview_controller.setup(el) }, - updateGeometry(el: VanillaItemDisplay) { + updateGeometry(el: ItemDisplay) { if (!el.mesh) return void getItemModel(el.item) @@ -243,10 +237,10 @@ export const PREVIEW_CONTROLLER = new NodePreviewController(VanillaItemDisplay, el.ready = true }) }, - updateTransform(el: VanillaItemDisplay) { + updateTransform(el: ItemDisplay) { ResizableOutlinerElement.prototype.preview_controller.updateTransform(el) }, - updateHighlight(el: VanillaItemDisplay, force?: boolean | VanillaItemDisplay) { + updateHighlight(el: ItemDisplay, force?: boolean | ItemDisplay) { if (!isCurrentFormat() || !el?.mesh) return const highlighted = Modes.edit && (force === true || force === el || el.selected) ? 1 : 0 @@ -265,20 +259,20 @@ export const PREVIEW_CONTROLLER = new NodePreviewController(VanillaItemDisplay, }, }) -class VanillaItemDisplayAnimator extends BoneAnimator { - private _name: string +class ItemDisplayAnimator extends BoneAnimator { + private __name: string public uuid: string - public element: VanillaItemDisplay | undefined + public element: ItemDisplay | undefined constructor(uuid: string, animation: _Animation, name: string) { super(uuid, animation, name) this.uuid = uuid - this._name = name + this.__name = name } getElement() { - this.element = OutlinerNode.uuids[this.uuid] as VanillaItemDisplay + this.element = OutlinerNode.uuids[this.uuid] as ItemDisplay return this.element } @@ -314,7 +308,7 @@ class VanillaItemDisplayAnimator extends BoneAnimator { } } - if (this.element && this.element.parent && this.element.parent !== 'root') { + if (this.element?.parent && this.element.parent !== 'root') { this.element.parent.openUp() } @@ -323,7 +317,7 @@ class VanillaItemDisplayAnimator extends BoneAnimator { doRender() { this.getElement() - return !!(this.element && this.element.mesh) + return !!this.element?.mesh } displayRotation(arr: ArrayVector3 | ArrayVector4, multiplier = 1) { @@ -335,13 +329,13 @@ class VanillaItemDisplayAnimator extends BoneAnimator { if (arr) { if (arr.length === 4) { - const added_rotation = new THREE.Euler().setFromQuaternion( + const addedRotation = new THREE.Euler().setFromQuaternion( new THREE.Quaternion().fromArray(arr), 'ZYX' ) - bone.rotation.x -= added_rotation.x * multiplier - bone.rotation.y -= added_rotation.y * multiplier - bone.rotation.z += added_rotation.z * multiplier + bone.rotation.x -= addedRotation.x * multiplier + bone.rotation.y -= addedRotation.y * multiplier + bone.rotation.z += addedRotation.z * multiplier } else { bone.rotation.x += Math.degToRad(-arr[0]) * multiplier bone.rotation.y += Math.degToRad(-arr[1]) * multiplier @@ -382,8 +376,8 @@ class VanillaItemDisplayAnimator extends BoneAnimator { return this } } -VanillaItemDisplayAnimator.prototype.type = VanillaItemDisplay.type -VanillaItemDisplay.animator = VanillaItemDisplayAnimator as any +ItemDisplayAnimator.prototype.type = ItemDisplay.type +ItemDisplay.animator = ItemDisplayAnimator as any createBlockbenchMod( `${PACKAGE.name}:vanillaItemDisplay`, @@ -396,14 +390,14 @@ createBlockbenchMod( MenuBar.menus.edit.addAction(CREATE_ACTION, 8) context.subscriptions.push( - events.SELECT_PROJECT.subscribe(project => { + EVENTS.SELECT_PROJECT.subscribe(project => { project.vanillaItemDisplays ??= [] - VanillaItemDisplay.all.empty() - VanillaItemDisplay.all.push(...project.vanillaItemDisplays) + ItemDisplay.all.empty() + ItemDisplay.all.push(...project.vanillaItemDisplays) }), - events.UNSELECT_PROJECT.subscribe(project => { - project.vanillaItemDisplays = [...VanillaItemDisplay.all] - VanillaItemDisplay.all.empty() + EVENTS.UNSELECT_PROJECT.subscribe(project => { + project.vanillaItemDisplays = [...ItemDisplay.all] + ItemDisplay.all.empty() }) ) return context @@ -417,8 +411,8 @@ createBlockbenchMod( } ) -export const CREATE_ACTION = createAction(`${PACKAGE.name}:create_vanilla_item_display`, { - name: translate('action.create_vanilla_item_display.title'), +export const CREATE_ACTION = createAction(`${PACKAGE.name}:create_item_display`, { + name: translate('action.create_item_display.title'), icon: 'icecream', category: 'animated_java', condition() { @@ -427,7 +421,7 @@ export const CREATE_ACTION = createAction(`${PACKAGE.name}:create_vanilla_item_d click() { Undo.initEdit({ outliner: true, elements: [], selection: true }) - const vanillaItemDisplay = new VanillaItemDisplay({}).init() + const vanillaItemDisplay = new ItemDisplay({}).init() const group = getCurrentGroup() if (group instanceof Group) { @@ -436,7 +430,7 @@ export const CREATE_ACTION = createAction(`${PACKAGE.name}:create_vanilla_item_d } selected.forEachReverse(el => el.unselect()) - Group.first_selected && Group.first_selected.unselect() + Group.all.forEachReverse(el => el.unselect()) vanillaItemDisplay.select() Undo.finishEdit('Create Vanilla Item Display', { diff --git a/src/outliner/resizableOutlinerElement.ts b/src/blockbench-additions/outliner-elements/resizableOutlinerElement.ts similarity index 95% rename from src/outliner/resizableOutlinerElement.ts rename to src/blockbench-additions/outliner-elements/resizableOutlinerElement.ts index efc6f4df..d1e536a9 100644 --- a/src/outliner/resizableOutlinerElement.ts +++ b/src/blockbench-additions/outliner-elements/resizableOutlinerElement.ts @@ -1,4 +1,4 @@ -import { makeNotZero } from '../util/misc' +import { makeNotZero } from '../../util/misc' export class ResizableOutlinerElement extends OutlinerElement { // Properties @@ -93,7 +93,7 @@ export class ResizableOutlinerElement extends OutlinerElement { // allowNegative: boolean, // bidirectional: boolean ) { - let before = this.oldScale !== undefined ? this.oldScale : this.size(axis) + let before = this.oldScale ?? this.size(axis) if (before instanceof Array) before = before[axis] // For some unknown reason scale is not inverted on the y axis const sign = before < 0 && axis !== 1 ? -1 : 1 @@ -110,7 +110,7 @@ new Property(ResizableOutlinerElement, 'string', 'name', { default: 'resizable_o new Property(ResizableOutlinerElement, 'vector', 'position', { default: [0, 0, 0] }) new Property(ResizableOutlinerElement, 'vector', 'rotation', { default: [0, 0, 0] }) new Property(ResizableOutlinerElement, 'vector', 'scale', { default: [1, 1, 1] }) -new Property(ResizableOutlinerElement, 'string', 'visibility', { default: true }) +new Property(ResizableOutlinerElement, 'boolean', 'visibility', { default: true }) export const PREVIEW_CONTROLLER = new NodePreviewController(ResizableOutlinerElement, { setup(el: ResizableOutlinerElement) { diff --git a/src/outliner/textDisplay.ts b/src/blockbench-additions/outliner-elements/textDisplay.ts similarity index 54% rename from src/outliner/textDisplay.ts rename to src/blockbench-additions/outliner-elements/textDisplay.ts index d376265b..bbc681be 100644 --- a/src/outliner/textDisplay.ts +++ b/src/blockbench-additions/outliner-elements/textDisplay.ts @@ -1,18 +1,19 @@ +import { PACKAGE } from '../../constants' import { - BLUEPRINT_FORMAT, - IBlueprintTextDisplayConfigJSON, - isCurrentFormat, -} from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { createAction, createBlockbenchMod } from '../util/moddingTools' -// import * as MinecraftFull from '../assets/MinecraftFull.json' -import { TEXT_DISPLAY_CONFIG_ACTION } from '../interface/dialog/textDisplayConfig' -import { TextDisplayConfig } from '../nodeConfigs' -import { getVanillaFont } from '../systems/minecraft/fontManager' -import { JsonText } from '../systems/minecraft/jsonText' -import { events } from '../util/events' -import { Valuable } from '../util/stores' -import { translate } from '../util/translation' + createAction, + createBlockbenchMod, + fixClassPropertyInheritance, + ObjectProperty, +} from '../../util/moddingTools' +import { BLUEPRINT_FORMAT, isCurrentFormat } from '../model-formats/ajblueprint' +// import * as MinecraftFull from '@assets/MinecraftFull.json' +import { getVanillaFont } from '@aj/systems/minecraft-temp/fontManager' +import { CommonDisplayConfig, TextDisplayConfig, type Serialized } from '@aj/systems/node-configs' +import EVENTS from '@events' + +import { TEXT_DISPLAY_CONFIG_ACTION } from '../../ui/dialogs/text-display-config' +import { Syncable } from '../../util/stores' +import { translate } from '../../util/translation' import { ResizableOutlinerElement } from './resizableOutlinerElement' import { sanitizeOutlinerElementName } from './util' @@ -30,6 +31,7 @@ interface TextDisplayOptions { } export type Alignment = 'left' | 'center' | 'right' +@fixClassPropertyInheritance export class TextDisplay extends ResizableOutlinerElement { static type = `${PACKAGE.name}:text_display` static selected: TextDisplay[] = [] @@ -37,10 +39,12 @@ export class TextDisplay extends ResizableOutlinerElement { public type = TextDisplay.type public icon = 'text_fields' + public title = translate('node.text_display.title') public needsUniqueName = true // Properties - public config: IBlueprintTextDisplayConfigJSON + public config: Serialized + public commonConfig: Serialized public menu = new Menu([ ...Outliner.control_menu_group, @@ -54,26 +58,13 @@ export class TextDisplay extends ResizableOutlinerElement { public preview_controller = PREVIEW_CONTROLLER public ready = false - public textError = new Valuable('') - - private _updating = false - private _text = new Valuable('Hello World!') - private _newText: string | undefined - private _lineWidth = new Valuable(200) - private _newLineWidth: number | undefined - private _backgroundColor = new Valuable('#000000') - private _newBackgroundColor: string | undefined - private _backgroundAlpha = new Valuable(0.25) - private _newBackgroundAlpha: number | undefined - private _shadow = new Valuable(false) - private _newShadow: boolean | undefined - private _align = new Valuable('center') - private _newAlign: Alignment | undefined - public seeThrough = false + public textError = new Syncable('') + + private __renderingTextComponent = false constructor(data: TextDisplayOptions, uuid = guid()) { super(data, uuid) - TextDisplay.all.push(this) + TextDisplay.all.safePush(this) for (const key in TextDisplay.properties) { TextDisplay.properties[key].reset(this) @@ -86,36 +77,11 @@ export class TextDisplay extends ResizableOutlinerElement { this.position ??= [0, 0, 0] this.rotation ??= [0, 0, 0] this.scale ??= [1, 1, 1] - this.align ??= 'center' this.visibility ??= true this.config ??= {} + this.commonConfig ??= {} this.sanitizeName() - - this._text.subscribe(v => { - this._newText = v - void this.updateText() - }) - this._lineWidth.subscribe(v => { - this._newLineWidth = v - void this.updateText() - }) - this._backgroundColor.subscribe(v => { - this._newBackgroundColor = v - void this.updateText() - }) - this._backgroundAlpha.subscribe(v => { - this._newBackgroundAlpha = v - void this.updateText() - }) - this._shadow.subscribe(v => { - this._newShadow = v - void this.updateText() - }) - this._align.subscribe(v => { - this._newAlign = v - void this.updateText() - }) } public sanitizeName(): string { @@ -123,68 +89,11 @@ export class TextDisplay extends ResizableOutlinerElement { return this.name } - get text() { - if (this._text === undefined) return TextDisplay.properties['text'].default as string - return this._text.get() - } - - set text(value) { - if (this._text === undefined) return - if (value === this.text) return - this._text.set(value) - } - - get lineWidth() { - if (this._lineWidth === undefined) - return TextDisplay.properties['lineWidth'].default as number - return this._lineWidth.get() - } - - set lineWidth(value) { - if (this._lineWidth === undefined) return - this._lineWidth.set(value) - } - - get backgroundColor() { - if (this._backgroundColor === undefined) - return TextDisplay.properties['backgroundColor'].default as string - return this._backgroundColor.get() - } - - set backgroundColor(value) { - if (this._backgroundColor === undefined) return - this._backgroundColor.set(value) - } - - get backgroundAlpha() { - if (this._backgroundAlpha === undefined) - return TextDisplay.properties['backgroundAlpha'].default as number - return this._backgroundAlpha.get() - } - - set backgroundAlpha(value) { - if (this._backgroundAlpha === undefined) return - this._backgroundAlpha.set(value) - } - - get shadow() { - if (this._shadow === undefined) return TextDisplay.properties['shadow'].default as boolean - return this._shadow.get() - } - - set shadow(value) { - if (this._shadow === undefined) return - this._shadow.set(value) - } - - get align() { - if (this._align === undefined) return TextDisplay.properties['align'].default as Alignment - return this._align.get() - } - - set align(value) { - if (this._align === undefined) return - this._align.set(value) + public extend(data: any) { + for (const key in TextDisplay.properties) { + TextDisplay.properties[key].merge(this, data) + } + return this } getUndoCopy() { @@ -207,14 +116,12 @@ export class TextDisplay extends ResizableOutlinerElement { } el.uuid = this.uuid el.type = this.type - // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return el } select() { - if (Group.first_selected) { - Group.first_selected.unselect() - } + Group.all.forEachReverse(el => el.unselect()) if (!Pressing.ctrl && !Pressing.shift) { if (Cube.selected.length) { @@ -251,102 +158,68 @@ export class TextDisplay extends ResizableOutlinerElement { TickUpdates.selection = true } - async updateText() { - if (this._updating) return - this._updating = true - let latestMesh: THREE.Mesh | undefined - while ( - this._newText !== undefined || - this._newLineWidth !== undefined || - this._newBackgroundColor !== undefined || - this._newBackgroundAlpha !== undefined || - this._newShadow !== undefined || - this._newAlign !== undefined - ) { - let text: JsonText | undefined - this.textError.set('') - try { - text = JsonText.fromString(this.text) - console.log(text) - } catch (e: any) { - console.error(e) - this.textError.set(e.message as string) - this._updating = false - text = new JsonText({ text: 'Invalid JSON Text!', color: 'red' }) - } - this._newText = undefined - this._newLineWidth = undefined - this._newBackgroundColor = undefined - this._newBackgroundAlpha = undefined - this._newShadow = undefined - this._newAlign = undefined - if (text === undefined) continue - latestMesh = await this.setText(text) - } - this._updating = false - return latestMesh - } - async waitForReady() { while (!this.ready) { await new Promise(resolve => requestAnimationFrame(resolve)) } } - private async setText(jsonText: JsonText) { - await this.waitForReady() - const font = await getVanillaFont() - // Hide the geo while rendering - - const { mesh: newMesh, outline } = await font.generateTextMesh({ - jsonText, - maxLineWidth: this.lineWidth, - backgroundColor: this.backgroundColor, - backgroundAlpha: this.backgroundAlpha, - shadow: this.shadow, - alignment: this.align, - }) - newMesh.name = this.uuid + '_text' - const previousMesh = this.mesh.children.find(v => v.name === newMesh.name) - if (previousMesh) this.mesh.remove(previousMesh) - - const mesh = this.mesh as THREE.Mesh - mesh.name = this.uuid - mesh.geometry = (newMesh.children[0] as THREE.Mesh).geometry.clone() - mesh.geometry.translate( - newMesh.children[0].position.x, - newMesh.children[0].position.y, - newMesh.children[0].position.z - ) - mesh.geometry.rotateY(Math.PI) - mesh.geometry.scale(newMesh.scale.x, newMesh.scale.y, newMesh.scale.z) - mesh.material = Canvas.transparentMaterial - - mesh.add(newMesh) - - outline.name = this.uuid + '_outline' - outline.visible = this.selected - mesh.outline = outline - const previousOutline = mesh.children.find(v => v.name === outline.name) - if (previousOutline) mesh.remove(previousOutline) - mesh.add(outline) - mesh.visible = this.visibility - return newMesh + async updateText() { + if (this.__renderingTextComponent) return + try { + this.__renderingTextComponent = true + await this.waitForReady() + const font = await getVanillaFont() + const config = new TextDisplayConfig().fromJSON( + this.config + ) as Required + const { mesh: newMesh, outline } = await font.generateTextMesh(config) + newMesh.name = this.uuid + '_text' + const previousMesh = this.mesh.children.find(v => v.name === newMesh.name) + if (previousMesh) this.mesh.remove(previousMesh) + + const mesh = this.mesh as THREE.Mesh + mesh.name = this.uuid + mesh.geometry = (newMesh.children[0] as THREE.Mesh).geometry.clone() + mesh.geometry.translate( + newMesh.children[0].position.x, + newMesh.children[0].position.y, + newMesh.children[0].position.z + ) + mesh.geometry.rotateY(Math.PI) + mesh.geometry.scale(newMesh.scale.x, newMesh.scale.y, newMesh.scale.z) + mesh.material = Canvas.transparentMaterial + + mesh.add(newMesh) + + outline.name = this.uuid + '_outline' + outline.visible = this.selected + mesh.outline = outline + const previousOutline = mesh.children.find(v => v.name === outline.name) + if (previousOutline) mesh.remove(previousOutline) + mesh.add(outline) + mesh.visible = this.visibility + return newMesh + } catch (err: any) { + console.error(err) + this.textError.set(err.message) + } finally { + this.__renderingTextComponent = false + } } } -new Property(TextDisplay, 'string', 'text', { default: '"Hello World!"' }) -new Property(TextDisplay, 'number', 'lineWidth', { default: 200 }) -new Property(TextDisplay, 'string', 'backgroundColor', { default: '#000000' }) -new Property(TextDisplay, 'number', 'backgroundAlpha', { default: 0.25 }) -new Property(TextDisplay, 'string', 'align', { default: 'center' }) -new Property(TextDisplay, 'boolean', 'shadow', { default: false }) -new Property(TextDisplay, 'boolean', 'seeThrough', { default: false }) -new Property(TextDisplay, 'object', 'config', { +new ObjectProperty(TextDisplay, 'config', { get default() { return new TextDisplayConfig().toJSON() }, }) +new ObjectProperty(TextDisplay, 'commonConfig', { + get default() { + return new CommonDisplayConfig().toJSON() + }, +}) + OutlinerElement.registerType(TextDisplay, TextDisplay.type) export const PREVIEW_CONTROLLER = new NodePreviewController(TextDisplay, { @@ -376,7 +249,7 @@ export const PREVIEW_CONTROLLER = new NodePreviewController(TextDisplay, { }) class TextDisplayAnimator extends BoneAnimator { - private _name: string + private __name: string public uuid: string public element: TextDisplay | undefined @@ -384,7 +257,7 @@ class TextDisplayAnimator extends BoneAnimator { constructor(uuid: string, animation: _Animation, name: string) { super(uuid, animation, name) this.uuid = uuid - this._name = name + this.__name = name } getElement() { @@ -424,7 +297,7 @@ class TextDisplayAnimator extends BoneAnimator { } } - if (this.element && this.element.parent && this.element.parent !== 'root') { + if (this.element?.parent && this.element.parent !== 'root') { this.element.parent.openUp() } @@ -433,7 +306,7 @@ class TextDisplayAnimator extends BoneAnimator { doRender() { this.getElement() - return !!(this.element && this.element.mesh) + return !!this.element?.mesh } displayRotation(arr: ArrayVector3 | ArrayVector4, multiplier = 1) { @@ -445,13 +318,13 @@ class TextDisplayAnimator extends BoneAnimator { if (arr) { if (arr.length === 4) { - const added_rotation = new THREE.Euler().setFromQuaternion( + const addedRotation = new THREE.Euler().setFromQuaternion( new THREE.Quaternion().fromArray(arr), 'ZYX' ) - bone.rotation.x -= added_rotation.x * multiplier - bone.rotation.y -= added_rotation.y * multiplier - bone.rotation.z += added_rotation.z * multiplier + bone.rotation.x -= addedRotation.x * multiplier + bone.rotation.y -= addedRotation.y * multiplier + bone.rotation.z += addedRotation.z * multiplier } else { bone.rotation.x -= Math.degToRad(arr[0]) * multiplier bone.rotation.y -= Math.degToRad(arr[1]) * multiplier @@ -506,13 +379,13 @@ createBlockbenchMod( MenuBar.menus.edit.addAction(CREATE_ACTION, 8) context.subscriptions.push( - events.SELECT_PROJECT.subscribe(project => { + EVENTS.SELECT_PROJECT.subscribe(project => { if (project.format.id !== BLUEPRINT_FORMAT.id) return project.textDisplays ??= [] TextDisplay.all.empty() TextDisplay.all.push(...project.textDisplays) }), - events.UNSELECT_PROJECT.subscribe(project => { + EVENTS.UNSELECT_PROJECT.subscribe(project => { if (project.format.id !== BLUEPRINT_FORMAT.id) return project.textDisplays = [...TextDisplay.all] TextDisplay.all.empty() @@ -548,7 +421,7 @@ export const CREATE_ACTION = createAction(`${PACKAGE.name}:create_text_display`, } selected.forEachReverse(el => el.unselect()) - Group.first_selected && Group.first_selected.unselect() + Group.all.forEachReverse(el => el.unselect()) textDisplay.select() Undo.finishEdit('Create Text Display', { diff --git a/src/outliner/util.ts b/src/blockbench-additions/outliner-elements/util.ts similarity index 76% rename from src/outliner/util.ts rename to src/blockbench-additions/outliner-elements/util.ts index 3b1582bf..d7c26c62 100644 --- a/src/outliner/util.ts +++ b/src/blockbench-additions/outliner-elements/util.ts @@ -1,15 +1,15 @@ -import { sanitizePathName } from '../util/minecraftUtil' +import { sanitizePathName } from '@aj/util/minecraftUtil' +import { BlockDisplay } from './blockDisplay' +import { ItemDisplay } from './itemDisplay' import { TextDisplay } from './textDisplay' -import { VanillaBlockDisplay } from './vanillaBlockDisplay' -import { VanillaItemDisplay } from './vanillaItemDisplay' export function sanitizeOutlinerElementName(name: string, elementUUID: string): string { name = sanitizePathName(name) let otherNodes: OutlinerElement[] = [ - ...VanillaBlockDisplay.all, + ...BlockDisplay.all, ...Group.all, ...TextDisplay.all, - ...VanillaItemDisplay.all, + ...ItemDisplay.all, ...Locator.all, ] if (OutlinerElement.types.camera) { @@ -24,7 +24,7 @@ export function sanitizeOutlinerElementName(name: string, elementUUID: string): } let i = 1 - const match = name.match(/\d+$/) + const match = /\d+$/.exec(name) if (match) { i = parseInt(match[0]) name = name.slice(0, -match[0].length) diff --git a/src/mods/addLocatorActionMod.ts b/src/blockbench-mods/action/addLocator.ts similarity index 65% rename from src/mods/addLocatorActionMod.ts rename to src/blockbench-mods/action/addLocator.ts index 269277ad..69a00c8d 100644 --- a/src/mods/addLocatorActionMod.ts +++ b/src/blockbench-mods/action/addLocator.ts @@ -1,9 +1,9 @@ -import { isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { createBlockbenchMod } from '../util/moddingTools' +import { isCurrentFormat } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:addLocatorAction`, + `${PACKAGE.name}:mods/action/addLocator`, { action: BarItems.add_locator as Action, originalCondition: (BarItems.add_locator as Action).condition, diff --git a/src/mods/animationPropertiesAction.ts b/src/blockbench-mods/action/animationProperties.ts similarity index 63% rename from src/mods/animationPropertiesAction.ts rename to src/blockbench-mods/action/animationProperties.ts index 4384641f..ce268b75 100644 --- a/src/mods/animationPropertiesAction.ts +++ b/src/blockbench-mods/action/animationProperties.ts @@ -1,10 +1,10 @@ -import { isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { openAnimationPropertiesDialog } from '../interface/dialog/animationProperties' -import { createBlockbenchMod } from '../util/moddingTools' +import { isCurrentFormat } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { openAnimationPropertiesDialog } from '../../ui/dialogs/animation-properties' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:animationPropertiesAction`, + `${PACKAGE.name}:mods/action/animationProperties`, { originalOpen: Blockbench.Animation.prototype.propertiesDialog, }, diff --git a/src/mods/exportOverActionMod.ts b/src/blockbench-mods/action/exportOver.ts similarity index 77% rename from src/mods/exportOverActionMod.ts rename to src/blockbench-mods/action/exportOver.ts index fe37b5fe..2793d868 100644 --- a/src/mods/exportOverActionMod.ts +++ b/src/blockbench-mods/action/exportOver.ts @@ -1,9 +1,12 @@ -import { BLUEPRINT_CODEC, BLUEPRINT_FORMAT } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { createBlockbenchMod } from '../util/moddingTools' +import { + BLUEPRINT_CODEC, + BLUEPRINT_FORMAT, +} from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:exportOverAction`, + `${PACKAGE.name}:mods/action/exportOver`, { action: BarItems.export_over as Action, originalClick: (BarItems.export_over as Action).click, diff --git a/src/mods/projectSettingsActionOverride.ts b/src/blockbench-mods/action/projectSettings.ts similarity index 56% rename from src/mods/projectSettingsActionOverride.ts rename to src/blockbench-mods/action/projectSettings.ts index 2cdd50d8..6d4a82b4 100644 --- a/src/mods/projectSettingsActionOverride.ts +++ b/src/blockbench-mods/action/projectSettings.ts @@ -1,10 +1,10 @@ -import PACKAGE from '../../package.json' -import { BLUEPRINT_FORMAT } from '../blueprintFormat' -import { openBlueprintSettingsDialog } from '../interface/dialog/blueprintSettings' -import { createBlockbenchMod } from '../util/moddingTools' +import PACKAGE from '../../../package.json' +import { BLUEPRINT_FORMAT } from '../../blockbench-additions/model-formats/ajblueprint' +import { openBlueprintSettingsDialog } from '../../ui/dialogs/blueprint-settings' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:projectSettingsActionOverride`, + `${PACKAGE.name}:mods/action/projectSettings`, { action: BarItems.project_window as Action, oldClick: (BarItems.project_window as Action).click, diff --git a/src/mods/saveAllAnimationsActionMod.ts b/src/blockbench-mods/action/saveAllAnimations.ts similarity index 64% rename from src/mods/saveAllAnimationsActionMod.ts rename to src/blockbench-mods/action/saveAllAnimations.ts index eb0b2c44..43606337 100644 --- a/src/mods/saveAllAnimationsActionMod.ts +++ b/src/blockbench-mods/action/saveAllAnimations.ts @@ -1,9 +1,9 @@ -import { BLUEPRINT_FORMAT } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { createBlockbenchMod } from '../util/moddingTools' +import { BLUEPRINT_FORMAT } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:saveAllAnimationsActionMod`, + `${PACKAGE.name}:mods/action/saveAllAnimations`, { action: BarItems.save_all_animations as Action, }, diff --git a/src/mods/saveProjectActionMod.ts b/src/blockbench-mods/action/saveProject.ts similarity index 63% rename from src/mods/saveProjectActionMod.ts rename to src/blockbench-mods/action/saveProject.ts index 016ae13a..3f3bb2e3 100644 --- a/src/mods/saveProjectActionMod.ts +++ b/src/blockbench-mods/action/saveProject.ts @@ -1,9 +1,12 @@ -import { BLUEPRINT_FORMAT, saveBlueprint } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { createBlockbenchMod } from '../util/moddingTools' +import { + BLUEPRINT_FORMAT, + saveBlueprint, +} from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:save_project`, + `${PACKAGE.name}:mods/action/saveProject`, { action: BarItems.save_project as Action, originalClick: (BarItems.save_project as Action).click, diff --git a/src/mods/saveProjectAsActionMod.ts b/src/blockbench-mods/action/saveProjectAs.ts similarity index 64% rename from src/mods/saveProjectAsActionMod.ts rename to src/blockbench-mods/action/saveProjectAs.ts index 67c24faa..a8a24b9e 100644 --- a/src/mods/saveProjectAsActionMod.ts +++ b/src/blockbench-mods/action/saveProjectAs.ts @@ -1,9 +1,12 @@ -import { BLUEPRINT_CODEC, BLUEPRINT_FORMAT } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { createBlockbenchMod } from '../util/moddingTools' +import { + BLUEPRINT_CODEC, + BLUEPRINT_FORMAT, +} from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:save_project_as`, + `${PACKAGE.name}:mods/action/saveProjectAs`, { action: BarItems.save_project_as as Action, originalClick: (BarItems.save_project_as as Action).click, diff --git a/src/mods/animationPropertiesMod.ts b/src/blockbench-mods/class-properties/animationProperties.ts similarity index 61% rename from src/mods/animationPropertiesMod.ts rename to src/blockbench-mods/class-properties/animationProperties.ts index fd914745..8ea965e7 100644 --- a/src/mods/animationPropertiesMod.ts +++ b/src/blockbench-mods/class-properties/animationProperties.ts @@ -1,14 +1,13 @@ -import { isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { roundToNth } from '../util/misc' -import { ContextProperty, createBlockbenchMod } from '../util/moddingTools' -import { translate } from '../util/translation' +import { isCurrentFormat } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { roundToNth } from '../../util/misc' +import { createBlockbenchMod } from '../../util/moddingTools' export const DEFAULT_SNAPPING_VALUE = 20 export const MINIMUM_ANIMATION_LENGTH = 0.05 createBlockbenchMod( - `${PACKAGE.name}:animationDefaultPropertiesMod`, + `${PACKAGE.name}:mods/class-properties/animation`, { originalExtend: Blockbench.Animation.prototype.extend, originalSetLength: Blockbench.Animation.prototype.setLength, @@ -39,7 +38,7 @@ createBlockbenchMod( Blockbench.Animation.prototype.setLength = function (this: _Animation, length?: number) { if (isCurrentFormat()) { - length = Math.max(length || this.length, MINIMUM_ANIMATION_LENGTH) + length = Math.max(length ?? this.length, MINIMUM_ANIMATION_LENGTH) } return context.originalSetLength.call(this, length) } @@ -51,26 +50,3 @@ createBlockbenchMod( Blockbench.Animation.prototype.setLength = context.originalSetLength } ) - -createBlockbenchMod( - `${PACKAGE.name}:animationPropertiesMod`, - { - excludedNodesProperty: undefined as ContextProperty<'array'>, - }, - context => { - context.excludedNodesProperty = new Property( - Blockbench.Animation, - 'array', - 'excluded_nodes', - { - condition: () => isCurrentFormat(), - label: translate('animation.excluded_nodes'), - default: [], - } - ) - return context - }, - context => { - context.excludedNodesProperty?.delete() - } -) diff --git a/src/blockbench-mods/css/panelTitleTextWrap.ts b/src/blockbench-mods/css/panelTitleTextWrap.ts new file mode 100644 index 00000000..f61a01ea --- /dev/null +++ b/src/blockbench-mods/css/panelTitleTextWrap.ts @@ -0,0 +1,24 @@ +import { PACKAGE } from '@aj/constants' +import { createBlockbenchMod } from '@aj/util/moddingTools' + +/** + * Makes the text in panel titles clip instead of wrapping + */ +createBlockbenchMod( + `${PACKAGE.name}:panelTitleTextWrap`, + { + css: undefined as Deletable | undefined, + }, + ctx => { + ctx.css = Blockbench.addCSS(` + .panel_handle label { + text-overflow: ellipsis; + text-wrap-mode: nowrap; + } + `) + return ctx + }, + ctx => { + ctx.css?.delete() + } +) diff --git a/src/mods/blockbenchReadMod.ts b/src/blockbench-mods/function-overwrites/blockbenchRead.ts similarity index 68% rename from src/mods/blockbenchReadMod.ts rename to src/blockbench-mods/function-overwrites/blockbenchRead.ts index 0a5bf5d4..b3e632a0 100644 --- a/src/mods/blockbenchReadMod.ts +++ b/src/blockbench-mods/function-overwrites/blockbenchRead.ts @@ -1,13 +1,13 @@ -import { PACKAGE } from '../constants' -import { - closeBlueprintLoadingDialog, - openBlueprintLoadingDialog, - PROGRESS, -} from '../interface/popup/blueprintLoading' -import { createBlockbenchMod } from '../util/moddingTools' +import { PACKAGE } from '../../constants' +// import { +// closeBlueprintLoadingDialog, +// openBlueprintLoadingDialog, +// PROGRESS, +// } from '../../ui/popups/blueprint-loading' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:blockbenchReadMod`, + `${PACKAGE.name}:mods/function-overwrites/blockbenchRead`, { original: Blockbench.read, }, @@ -19,9 +19,9 @@ createBlockbenchMod( ) { for (const file of files) { context.original([file], options, cb) - await new Promise(r => { + await new Promise(resolve => { if (Project?.loadingPromises) { - openBlueprintLoadingDialog() + // openBlueprintLoadingDialog() const promises: Array> = [] for (const promise of Project.loadingPromises) { promises.push( @@ -29,7 +29,7 @@ createBlockbenchMod( promise .catch((err: any) => console.error(err)) .finally(() => { - PROGRESS.set(PROGRESS.get() + 1) + // PROGRESS.set(PROGRESS.get() + 1) r() }) }) @@ -41,12 +41,12 @@ createBlockbenchMod( console.error(err) }) .finally(() => { - closeBlueprintLoadingDialog() - r() + // closeBlueprintLoadingDialog() + resolve() }) return } - r() + resolve() }) } } diff --git a/src/mods/customKeyframeEasingsMod.ts b/src/blockbench-mods/function-overwrites/reverseKeyframes.ts similarity index 54% rename from src/mods/customKeyframeEasingsMod.ts rename to src/blockbench-mods/function-overwrites/reverseKeyframes.ts index 64180946..37378c45 100644 --- a/src/mods/customKeyframeEasingsMod.ts +++ b/src/blockbench-mods/function-overwrites/reverseKeyframes.ts @@ -1,81 +1,13 @@ -import { ContextProperty, createBlockbenchMod } from '../util/moddingTools' -import { isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' -import { - EASING_DEFAULT, - EasingKey, - easingFunctions, - getEasingArgDefault, - hasArgs, -} from '../util/easing' +import { type EasingKey } from '../../util/easing' interface IEasingProperties { easing?: EasingKey easingArgs?: any[] } -function lerp(start: number, stop: number, amt: number): number { - return amt * (stop - start) + start -} - -createBlockbenchMod( - `${PACKAGE.name}:keyframeEasingMod`, - { - originalGetLerp: Blockbench.Keyframe.prototype.getLerp, - easingProperty: undefined as ContextProperty<'string'>, - easingArgsProperty: undefined as ContextProperty<'array'>, - }, - context => { - context.easingProperty = new Property(Blockbench.Keyframe, 'string', 'easing', { - default: EASING_DEFAULT, - condition: isCurrentFormat(), - }) - context.easingArgsProperty = new Property(Blockbench.Keyframe, 'array', 'easingArgs', { - condition: isCurrentFormat(), - }) - - Blockbench.Keyframe.prototype.getLerp = function ( - this: _Keyframe, - other, - axis, - amount, - allowExpression - ): number { - const easing = other.easing || 'linear' - - if (!isCurrentFormat() || easing === 'linear') - return context.originalGetLerp.call(this, other, axis, amount, allowExpression) - - let easingFunc = easingFunctions[easing] - if (hasArgs(easing)) { - const arg1 = - Array.isArray(other.easingArgs) && other.easingArgs.length > 0 - ? other.easingArgs[0] - : getEasingArgDefault(other) - - easingFunc = easingFunc.bind(null, arg1 || 0) - } - const easedAmount = easingFunc(amount) - const start = this.calc(axis) - const stop = other.calc(axis) - const result = lerp(start, stop, easedAmount) - - if (Number.isNaN(result)) { - throw new Error('Invalid easing function or arguments.') - } - return result - } - - return context - }, - context => { - context.easingProperty?.delete() - context.easingArgsProperty?.delete() - Blockbench.Keyframe.prototype.getLerp = context.originalGetLerp - } -) - export function reverseEasing(easing?: EasingKey): EasingKey | undefined { if (!easing) return easing if (easing.startsWith('easeInOut')) return easing @@ -85,7 +17,7 @@ export function reverseEasing(easing?: EasingKey): EasingKey | undefined { } createBlockbenchMod( - `${PACKAGE.name}:reverseKeyframesMod`, + `${PACKAGE.name}:mods/function-overwrites/reverseKeyframes`, { action: BarItems.reverse_keyframes as Action, originalClick: (BarItems.reverse_keyframes as Action).click, diff --git a/src/mods/showDefaultPoseMod.ts b/src/blockbench-mods/function-overwrites/showDefaultPose.ts similarity index 67% rename from src/mods/showDefaultPoseMod.ts rename to src/blockbench-mods/function-overwrites/showDefaultPose.ts index 536061f4..6be31582 100644 --- a/src/mods/showDefaultPoseMod.ts +++ b/src/blockbench-mods/function-overwrites/showDefaultPose.ts @@ -1,9 +1,12 @@ -import { isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { createBlockbenchMod } from '../util/moddingTools' +import { isCurrentFormat } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' +/** + * Corrects the handling of fix_position, fix_rotation, and fix_scale in the showDefaultPose method. + */ createBlockbenchMod( - `${PACKAGE.name}:showDefaultPose`, + `${PACKAGE.name}:mods/function-overwrites/showDefaultPose`, { original: Animator.showDefaultPose, }, @@ -21,9 +24,7 @@ createBlockbenchMod( if (mesh.fix_scale) mesh.scale.copy(mesh.fix_scale) else if ( // @ts-expect-error - node.constructor.animator.prototype.channels && - // @ts-expect-error - node.constructor.animator.prototype.channels.scale + node.constructor.animator.prototype.channels?.scale ) { mesh.scale.x = mesh.scale.y = mesh.scale.z = 1 } diff --git a/src/blockbench-mods/index.ts b/src/blockbench-mods/index.ts new file mode 100644 index 00000000..d67703eb --- /dev/null +++ b/src/blockbench-mods/index.ts @@ -0,0 +1,38 @@ +// Action +import './action/addLocator' +import './action/animationProperties' +import './action/exportOver' +import './action/projectSettings' +import './action/saveAllAnimations' +import './action/saveProject' +import './action/saveProjectAs' +// Class Properties +import './class-properties/animationProperties' +// CSS +import './css/panelTitleTextWrap' +// Function Overwrites +import './function-overwrites/blockbenchRead' +import './function-overwrites/reverseKeyframes' +import './function-overwrites/showDefaultPose' +// Prototype +import './prototype/animationController' +import './prototype/boneInterpolation' +import './prototype/cameraName' +import './prototype/cubeOutline' +// import './prototype/groupContextMenu' +import './prototype/groupName' +import './prototype/keyframeGetLerp' +import './prototype/keyframeSelectEvents' +// import './prototype/locatorContextMenu' +import './prototype/modelFormatEvents' +import './prototype/variantPreviewCubeFace' +// UI +import './ui/animationsPanel' +import './ui/formatIcon' +import './ui/formatOrder' +import './ui/incompatiblePluginNotice' +import './ui/structureNodeIcons' +// Misc +import './misc/customKeyframes' +import './misc/locatorAnimator' +import './misc/prismLanguages' diff --git a/src/mods/customKeyframesMod.ts b/src/blockbench-mods/misc/customKeyframes.ts similarity index 94% rename from src/mods/customKeyframesMod.ts rename to src/blockbench-mods/misc/customKeyframes.ts index ba6ec78d..073fe6a8 100644 --- a/src/mods/customKeyframesMod.ts +++ b/src/blockbench-mods/misc/customKeyframes.ts @@ -1,7 +1,10 @@ -import { BLUEPRINT_FORMAT, isCurrentFormat } from '../blueprintFormat' -import { events } from '../util/events' -import { translate } from '../util/translation' -import { Variant } from '../variants' +import EVENTS from '@events' +import { + BLUEPRINT_FORMAT, + isCurrentFormat, +} from '../../blockbench-additions/model-formats/ajblueprint' +import { translate } from '../../util/translation' +import { Variant } from '../../variants' const DEFAULT_CHANNELS = { ...EffectAnimator.prototype.channels } const DEFAULT_EFFECT_DISPLAY_FRAME = EffectAnimator.prototype.displayFrame @@ -9,6 +12,10 @@ export const CUSTOM_CHANNELS = ['variant', 'commands'] let installed = false +/** + * This mod is ✨ special ✨, it has to be injected, and extracted when switching between formats. + */ + function injectCustomKeyframes() { if (installed) return @@ -168,7 +175,7 @@ function extractCustomKeyframes() { installed = false } -events.PRE_SELECT_PROJECT.subscribe(project => { +EVENTS.PRE_SELECT_PROJECT.subscribe(project => { if (project.format.id === BLUEPRINT_FORMAT.id) { injectCustomKeyframes() } else { diff --git a/src/mods/locatorAnimatorMod.ts b/src/blockbench-mods/misc/locatorAnimator.ts similarity index 91% rename from src/mods/locatorAnimatorMod.ts rename to src/blockbench-mods/misc/locatorAnimator.ts index 94891074..92af13dd 100644 --- a/src/mods/locatorAnimatorMod.ts +++ b/src/blockbench-mods/misc/locatorAnimator.ts @@ -1,6 +1,6 @@ -import { BLUEPRINT_FORMAT } from '../blueprintFormat' -import { events } from '../util/events' -import { translate } from '../util/translation' +import EVENTS from '@events' +import { BLUEPRINT_FORMAT } from '../../blockbench-additions/model-formats/ajblueprint' +import { translate } from '../../util/translation' const DEFAULT_SHOW_MOTION_TRAIL = Animator.showMotionTrail const DEFAULT_PREVIEW = Animator.preview @@ -56,7 +56,7 @@ export class LocatorAnimator extends BoneAnimator { } } - if (this.element && this.element.parent && this.element.parent !== 'root') { + if (this.element?.parent && this.element.parent !== 'root') { this.element.parent.openUp() } @@ -65,7 +65,7 @@ export class LocatorAnimator extends BoneAnimator { doRender() { this.getElement() - return !!(this.element && this.element.mesh) + return !!this.element?.mesh } displayPosition(arr?: ArrayVector3, multiplier = 1) { @@ -157,7 +157,7 @@ function extract() { installed = false } -events.PRE_SELECT_PROJECT.subscribe(project => { +EVENTS.PRE_SELECT_PROJECT.subscribe(project => { if (project.format.id === BLUEPRINT_FORMAT.id) { inject() } else { diff --git a/src/blockbench-mods/misc/prismLanguages.ts b/src/blockbench-mods/misc/prismLanguages.ts new file mode 100644 index 00000000..6bf90185 --- /dev/null +++ b/src/blockbench-mods/misc/prismLanguages.ts @@ -0,0 +1,351 @@ +Prism.languages.clike = { + comment: [ + { + pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, + lookbehind: true, + greedy: true, + }, + { + pattern: /(^|[^\\:])\/\/.*/, + lookbehind: true, + greedy: true, + }, + ], + string: { + pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, + greedy: true, + }, + 'class-name': { + pattern: + /(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i, + lookbehind: true, + inside: { + punctuation: /[.\\]/, + }, + }, + keyword: + /\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/, + boolean: /\b(?:false|true)\b/, + function: /\b\w+(?=\()/, + number: /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i, + operator: /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/, + punctuation: /[{}[\];(),.:]/, +} + +Prism.languages.javascript = Prism.languages.extend('clike', { + 'class-name': [ + // @ts-expect-error + Prism.languages.clike['class-name'], + { + pattern: + /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/, + lookbehind: true, + }, + ], + keyword: [ + { + pattern: /((?:^|\})\s*)catch\b/, + lookbehind: true, + }, + { + pattern: + /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/, + lookbehind: true, + }, + ], + // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444) + function: + /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/, + number: { + pattern: RegExp( + /(^|[^\w$])/.source + + '(?:' + + // constant + (/NaN|Infinity/.source + + '|' + + // binary integer + /0[bB][01]+(?:_[01]+)*n?/.source + + '|' + + // octal integer + /0[oO][0-7]+(?:_[0-7]+)*n?/.source + + '|' + + // hexadecimal integer + /0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source + + '|' + + // decimal bigint + /\d+(?:_\d+)*n/.source + + '|' + + // decimal number (integer or float) but no bigint + /(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/ + .source) + + ')' + + /(?![\w$])/.source + ), + lookbehind: true, + }, + operator: + /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/, +}) + +// @ts-expect-error +Prism.languages.javascript['class-name'][0].pattern = + /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/ + +Prism.languages.insertBefore('javascript', 'keyword', { + regex: { + pattern: RegExp( + // lookbehind + /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source + + // Regex pattern: + // There are 2 regex patterns here. The RegExp set notation proposal added support for nested character + // classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible + // with the only syntax, so we have to define 2 different regex patterns. + /\//.source + + '(?:' + + /(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\[\r\n])+\/[dgimyus]{0,7}/.source + + '|' + + // `v` flag syntax. This supports 3 levels of nested character classes. + /(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/ + .source + + ')' + + // lookahead + /(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source + ), + lookbehind: true, + greedy: true, + inside: { + 'regex-source': { + pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/, + lookbehind: true, + alias: 'language-regex', + inside: Prism.languages.regex, + }, + 'regex-delimiter': /^\/|\/$/, + 'regex-flags': /^[a-z]+$/, + }, + }, + // This must be declared before keyword because we use "function" inside the look-forward + 'function-variable': { + pattern: + /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/, + alias: 'function', + }, + parameter: [ + { + pattern: + /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/, + lookbehind: true, + inside: Prism.languages.javascript, + }, + { + pattern: + /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i, + lookbehind: true, + inside: Prism.languages.javascript, + }, + { + pattern: /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/, + lookbehind: true, + inside: Prism.languages.javascript, + }, + { + pattern: + /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/, + lookbehind: true, + inside: Prism.languages.javascript, + }, + ], + constant: /\b[A-Z](?:[A-Z_]|\dx?)*\b/, +}) + +Prism.languages.insertBefore('javascript', 'string', { + hashbang: { + pattern: /^#!.*/, + greedy: true, + alias: 'comment', + }, + 'template-string': { + pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/, + greedy: true, + inside: { + 'template-punctuation': { + pattern: /^`|`$/, + alias: 'string', + }, + interpolation: { + pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/, + lookbehind: true, + inside: { + 'interpolation-punctuation': { + pattern: /^\$\{|\}$/, + alias: 'punctuation', + }, + rest: Prism.languages.javascript, + }, + }, + string: /[\s\S]+/, + }, + }, + 'string-property': { + pattern: /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m, + lookbehind: true, + greedy: true, + alias: 'property', + }, +}) + +Prism.languages.insertBefore('javascript', 'operator', { + 'literal-property': { + pattern: + /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m, + lookbehind: true, + alias: 'property', + }, +}) + +Prism.languages.mcfunction = { + comment: { + pattern: /^#.*/m, + greedy: true, + }, + string: { + pattern: /"(?:\\.|[^\\"])*"/, + greedy: true, + }, + number: { + pattern: /\b\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b/, + greedy: true, + }, + boolean: { + pattern: /\b(?:true|false)\b/, + greedy: true, + }, + uuid: { + pattern: /\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b/, + greedy: true, + }, + selector: { + pattern: /@[a-z]/, + greedy: true, + }, + keyword: { + pattern: + /\b(?:execute|run|if|unless|function|schedule|tag|advancement|enchantment|item_modifier|loot_table|predicate|recipe|chat_type|damage_type|dimension|dimension_type|worldgen|block|tick|load|clock|REPEAT|IF|ELSE)\b/, + greedy: true, + }, + operator: { + pattern: /[~%^?!+*<>\\/|&=.:,;-]/, + greedy: true, + }, + 'macro-indicator': { + pattern: /^[ \t]*\$/, + alias: ['italic', 'operator'], + }, + property: { + pattern: /[a-z_][a-z0-9_]*\s*:/, + greedy: true, + }, + function: { + pattern: /\b[a-z_][a-z0-9_]*\b/, + greedy: true, + }, +} + +Prism.languages['mc-build'] = { + comment: { + pattern: /^[ \t]*#.*/m, + greedy: true, + }, + 'inline-js': { + pattern: /<%[^%]+%>/, + inside: { + keyword: /<%|%>/, + js: { + pattern: /.+/, + inside: Prism.languages.javascript, + }, + }, + }, + 'multiline-js': { + pattern: /<%%[\s\S]*?%%>/, + inside: { + keyword: /<%%|%%>/, + js: { + pattern: /[\s\S]+/, + inside: Prism.languages.javascript, + }, + }, + }, + 'schedule-block': { + pattern: /^[ \t]*\$?schedule\s+(\d+(t|s|d))(?:\s+(replace|append))?\s*{[\s\S]*?^[ \t]*}$/m, + inside: { + operator: /\$(?=schedule)/, + keyword: /^[ \t]*\$?schedule/, + constant: /(\d+(t|s|d))/, + 'keyword-other': { + pattern: /\b(replace|append)\b/, + alias: 'keyword', + }, + content: { + pattern: /{[\s\S]*}/, + get inside() { + return Prism.languages['mc-build'] + }, + }, + }, + }, + 'function-block': { + pattern: /block\s*[a-z0-9_]*\s*{(?:$|({.+|with .+)$)/m, + inside: { + keyword: /^block/, + entity: /[a-z0-9_]+/, + content: { + pattern: /{[\s\S]*}/, + get inside() { + return Prism.languages['mc-build'] + }, + }, + }, + }, + execute: { + pattern: + /((?: |^[ \t]*)(\$?execute\b)|(\belse \$?execute\b)|else)[\s\S]*?(?: |^[ \t]*)(\$?run\b)/m, + inside: { + keyword: /(\$?execute\b|\belse \$?execute\b|else|\$?run\b)/, + operator: /\$/, + content: { + pattern: /[\s\S]+/, + get inside() { + return Prism.languages['mc-build'] + }, + }, + }, + }, + 'execute-if-function': { + pattern: /(if|unless)\s+function\s*{[\s\S]*?^[ \t]*}$/m, + inside: { + keyword: /(if|unless)/, + entity: /function/, + content: { + pattern: /{[\s\S]*}/, + get inside() { + return Prism.languages['mc-build'] + }, + }, + }, + }, + 'special-function-call': { + pattern: /^[ \t]*function\s+#?(?:\*|\.?\.\/).+?(?: |$)/m, + inside: { + keyword: /^function/, + entity: /#?(?:\*|\.?\.\/).+?(?: |$)/, + content: { + pattern: /.+/, + get inside() { + return Prism.languages['mc-build'] + }, + }, + }, + }, + ...Prism.languages.mcfunction, +} diff --git a/src/mods/animationControllerMod.ts b/src/blockbench-mods/prototype/animationController.ts similarity index 64% rename from src/mods/animationControllerMod.ts rename to src/blockbench-mods/prototype/animationController.ts index 91cc42be..23e9a4e3 100644 --- a/src/mods/animationControllerMod.ts +++ b/src/blockbench-mods/prototype/animationController.ts @@ -1,9 +1,9 @@ -import { BLUEPRINT_FORMAT } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { createBlockbenchMod, createPropertySubscribable } from '../util/moddingTools' +import { BLUEPRINT_FORMAT } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod, createPropertySubscribable } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:animationControllerMod`, + `${PACKAGE.name}:mods/prototype/animationController`, undefined, () => { const [, set] = createPropertySubscribable(AnimationController.prototype, 'saved') diff --git a/src/mods/boneInterpolationMod.ts b/src/blockbench-mods/prototype/boneInterpolation.ts similarity index 86% rename from src/mods/boneInterpolationMod.ts rename to src/blockbench-mods/prototype/boneInterpolation.ts index 22554d83..8060dc36 100644 --- a/src/mods/boneInterpolationMod.ts +++ b/src/blockbench-mods/prototype/boneInterpolation.ts @@ -1,10 +1,10 @@ -import { isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { roundToNth } from '../util/misc' -import { createBlockbenchMod } from '../util/moddingTools' +import { isCurrentFormat } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { roundToNth } from '../../util/misc' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:boneInterpolationMod`, + `${PACKAGE.name}:mods/prototype/boneInterpolation`, { orignalInterpolate: BoneAnimator.prototype.interpolate, }, @@ -54,7 +54,6 @@ createBlockbenchMod( Math.lerp(before[1], after[1], diff), Math.lerp(before[2], after[2], diff), ] - // console.log(diff) return result diff --git a/src/mods/cameraNameMod.ts b/src/blockbench-mods/prototype/cameraName.ts similarity index 73% rename from src/mods/cameraNameMod.ts rename to src/blockbench-mods/prototype/cameraName.ts index f061da24..6e89dceb 100644 --- a/src/mods/cameraNameMod.ts +++ b/src/blockbench-mods/prototype/cameraName.ts @@ -1,10 +1,10 @@ -import { isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { sanitizeOutlinerElementName } from '../outliner/util' -import { createBlockbenchMod } from '../util/moddingTools' +import { isCurrentFormat } from '../../blockbench-additions/model-formats/ajblueprint' +import { sanitizeOutlinerElementName } from '../../blockbench-additions/outliner-elements/util' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:cameraNameMod`, + `${PACKAGE.name}:mods/prototype/cameraName`, { originalRename: OutlinerElement.types.camera?.prototype.saveName, originalSanitize: OutlinerElement.types.camera?.prototype.sanitizeName, diff --git a/src/mods/cubeOutlineMod.ts b/src/blockbench-mods/prototype/cubeOutline.ts similarity index 87% rename from src/mods/cubeOutlineMod.ts rename to src/blockbench-mods/prototype/cubeOutline.ts index 0654adf4..19aa3192 100644 --- a/src/mods/cubeOutlineMod.ts +++ b/src/blockbench-mods/prototype/cubeOutline.ts @@ -1,16 +1,16 @@ -import { isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { isCubeValid } from '../systems/util' -import { createBlockbenchMod, createPropertySubscribable } from '../util/moddingTools' +import { isCurrentFormat } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { isCubeValid } from '../../util/misc' +import { createBlockbenchMod, createPropertySubscribable } from '../../util/moddingTools' const ERROR_OUTLINE_MATERIAL = Canvas.outlineMaterial.clone() ERROR_OUTLINE_MATERIAL.color.set('#ff0000') createBlockbenchMod( - `${PACKAGE.name}:cubeOutlineMod`, + `${PACKAGE.name}:mods/prototype/cubeOutline`, { - originalUpdateTransform: Cube.preview_controller.updateTransform, originalInit: Cube.prototype.init, + originalUpdateTransform: Cube.preview_controller.updateTransform, }, context => { Cube.preview_controller.updateTransform = function (cube: Cube) { diff --git a/src/mods/groupContextMenuMod.ts b/src/blockbench-mods/prototype/groupContextMenu.ts similarity index 53% rename from src/mods/groupContextMenuMod.ts rename to src/blockbench-mods/prototype/groupContextMenu.ts index 13024ca7..d1748322 100644 --- a/src/mods/groupContextMenuMod.ts +++ b/src/blockbench-mods/prototype/groupContextMenu.ts @@ -1,9 +1,12 @@ -import { PACKAGE } from '../constants' -import { BONE_CONFIG_ACTION } from '../interface/dialog/boneConfig' -import { createBlockbenchMod } from '../util/moddingTools' +import { PACKAGE } from '../../constants' +import { BONE_CONFIG_ACTION } from '../../ui/dialogs/bone-config' +import { createBlockbenchMod } from '../../util/moddingTools' +/** + * Adds the bone config action to the group context menu + */ createBlockbenchMod( - `${PACKAGE.name}:groupContextMenu`, + `${PACKAGE.name}:mods/prototype/groupContextMenu`, { menuStructure: Group.prototype.menu!.structure, }, diff --git a/src/mods/groupNameMod.ts b/src/blockbench-mods/prototype/groupName.ts similarity index 59% rename from src/mods/groupNameMod.ts rename to src/blockbench-mods/prototype/groupName.ts index 6db69049..58943964 100644 --- a/src/mods/groupNameMod.ts +++ b/src/blockbench-mods/prototype/groupName.ts @@ -1,10 +1,13 @@ -import { isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { sanitizeOutlinerElementName } from '../outliner/util' -import { createBlockbenchMod } from '../util/moddingTools' +import { isCurrentFormat } from '../../blockbench-additions/model-formats/ajblueprint' +import { sanitizeOutlinerElementName } from '../../blockbench-additions/outliner-elements/util' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' +/** + * Changes the sanitization of group names to use the same method as all other outliner elements in a Blueprint + */ createBlockbenchMod( - `${PACKAGE.name}:groupNameMod`, + `${PACKAGE.name}:mods/prototype/groupName`, { originalRename: Group.prototype.saveName, originalSanitize: Group.prototype.sanitizeName, diff --git a/src/blockbench-mods/prototype/keyframeGetLerp.ts b/src/blockbench-mods/prototype/keyframeGetLerp.ts new file mode 100644 index 00000000..b5cb85ac --- /dev/null +++ b/src/blockbench-mods/prototype/keyframeGetLerp.ts @@ -0,0 +1,54 @@ +import { isCurrentFormat } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' + +import { easingFunctions, getEasingArgDefault, hasArgs } from '../../util/easing' + +function lerp(start: number, stop: number, amt: number): number { + return amt * (stop - start) + start +} + +createBlockbenchMod( + `${PACKAGE.name}:mods/prototype/keyframeGetLerp`, + { + originalGetLerp: Blockbench.Keyframe.prototype.getLerp, + }, + context => { + Blockbench.Keyframe.prototype.getLerp = function ( + this: _Keyframe, + other, + axis, + amount, + allowExpression + ): number { + const easing = other.easing ?? 'linear' + + if (!isCurrentFormat() || easing === 'linear') + return context.originalGetLerp.call(this, other, axis, amount, allowExpression) + + let easingFunc = easingFunctions[easing] + if (hasArgs(easing)) { + const arg1 = + Array.isArray(other.easingArgs) && other.easingArgs.length > 0 + ? other.easingArgs[0] + : getEasingArgDefault(other) + + easingFunc = easingFunc.bind(null, arg1 ?? 0) + } + const easedAmount = easingFunc(amount) + const start = this.calc(axis) + const stop = other.calc(axis) + const result = lerp(start, stop, easedAmount) + + if (Number.isNaN(result)) { + throw new Error('Invalid easing function or arguments.') + } + return result + } + + return context + }, + context => { + Blockbench.Keyframe.prototype.getLerp = context.originalGetLerp + } +) diff --git a/src/mods/keyframeMod.ts b/src/blockbench-mods/prototype/keyframeSelectEvents.ts similarity index 75% rename from src/mods/keyframeMod.ts rename to src/blockbench-mods/prototype/keyframeSelectEvents.ts index ae586d6f..8c9d07aa 100644 --- a/src/mods/keyframeMod.ts +++ b/src/blockbench-mods/prototype/keyframeSelectEvents.ts @@ -1,10 +1,13 @@ -import { isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { events } from '../util/events' -import { createBlockbenchMod } from '../util/moddingTools' +import EVENTS from '@events' +import { isCurrentFormat } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' +/** + * Dispatches custom events when keyframes are selected or unselected + */ createBlockbenchMod( - `${PACKAGE.name}:keyframeSelectEventMod`, + `${PACKAGE.name}:mods/prototype/keyframeSelectEvents`, { originalKeyframeSelect: Blockbench.Keyframe.prototype.select, originalUpdateKeyframeSelection: updateKeyframeSelection, @@ -15,7 +18,7 @@ createBlockbenchMod( Blockbench.Keyframe.prototype.select = function (this: _Keyframe, event: any) { if (!isCurrentFormat()) return context.originalKeyframeSelect.call(this, event) const kf = context.originalKeyframeSelect.call(this, event) - events.SELECT_KEYFRAME.dispatch(kf) + EVENTS.SELECT_KEYFRAME.dispatch(kf) return kf } @@ -25,7 +28,7 @@ createBlockbenchMod( Timeline.keyframes.forEach(kf => { if (kf.selected && Timeline.selected && !Timeline.selected.includes(kf)) { kf.selected = false - events.UNSELECT_KEYFRAME.dispatch() + EVENTS.UNSELECT_KEYFRAME.dispatch() } let hasExpressions = false if (kf.transform) { @@ -43,8 +46,7 @@ createBlockbenchMod( }) if (Timeline.selected) { - console.log('Selected keyframe:', Timeline.selected[0]) - events.SELECT_KEYFRAME.dispatch(Timeline.selected[0]) + EVENTS.SELECT_KEYFRAME.dispatch(Timeline.selected[0]) } return context.originalUpdateKeyframeSelection() @@ -55,9 +57,9 @@ createBlockbenchMod( if (isCurrentFormat()) { if (Timeline.selected && Timeline.selected.length > 0) { - events.SELECT_KEYFRAME.dispatch(Timeline.selected[0]) + EVENTS.SELECT_KEYFRAME.dispatch(Timeline.selected[0]) } else { - events.UNSELECT_KEYFRAME.dispatch() + EVENTS.UNSELECT_KEYFRAME.dispatch() } } diff --git a/src/mods/locatorContextMenuMod.ts b/src/blockbench-mods/prototype/locatorContextMenu.ts similarity index 59% rename from src/mods/locatorContextMenuMod.ts rename to src/blockbench-mods/prototype/locatorContextMenu.ts index c771e76d..e2fe2ebf 100644 --- a/src/mods/locatorContextMenuMod.ts +++ b/src/blockbench-mods/prototype/locatorContextMenu.ts @@ -1,9 +1,9 @@ -import { PACKAGE } from '../constants' -import { LOCATOR_CONFIG_ACTION } from '../interface/dialog/locatorConfig' -import { createBlockbenchMod } from '../util/moddingTools' +import { PACKAGE } from '../../constants' +import { LOCATOR_CONFIG_ACTION } from '../../ui/dialogs/locator-config' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:groupContextMenu`, + `${PACKAGE.name}:mods/prototype/locatorContextMenu`, { menuStructure: Locator.prototype.menu!.structure, }, diff --git a/src/mods/modelFormatMod.ts b/src/blockbench-mods/prototype/modelFormatEvents.ts similarity index 52% rename from src/mods/modelFormatMod.ts rename to src/blockbench-mods/prototype/modelFormatEvents.ts index 9dd42ec4..00af221c 100644 --- a/src/mods/modelFormatMod.ts +++ b/src/blockbench-mods/prototype/modelFormatEvents.ts @@ -1,17 +1,17 @@ -import { BLUEPRINT_FORMAT } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { events } from '../util/events' -import { createBlockbenchMod } from '../util/moddingTools' +import EVENTS from '@events' +import { BLUEPRINT_FORMAT } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:modelFormatPreSelectProjectEvent`, + `${PACKAGE.name}:mods/prototype/modelFormatEvents`, { originalSelect: ModelProject.prototype.select, }, context => { ModelProject.prototype.select = function (this: ModelProject) { if (this.format.id === BLUEPRINT_FORMAT.id) { - events.PRE_SELECT_PROJECT.dispatch(this) + EVENTS.PRE_SELECT_PROJECT.dispatch(this) } return context.originalSelect.call(this) } diff --git a/src/mods/variantPreviewCubeFaceMod.ts b/src/blockbench-mods/prototype/variantPreviewCubeFace.ts similarity index 70% rename from src/mods/variantPreviewCubeFaceMod.ts rename to src/blockbench-mods/prototype/variantPreviewCubeFace.ts index 775285af..442f08ff 100644 --- a/src/mods/variantPreviewCubeFaceMod.ts +++ b/src/blockbench-mods/prototype/variantPreviewCubeFace.ts @@ -1,10 +1,13 @@ -import { isCurrentFormat } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { createBlockbenchMod } from '../util/moddingTools' -import { Variant } from '../variants' +import { isCurrentFormat } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' +import { Variant } from '../../variants' +/** + * Swaps out the texture of a cube face with the variant texture based on the currently selected variant + */ createBlockbenchMod( - `${PACKAGE.name}:variantPreviewCubeFace`, + `${PACKAGE.name}:mods/prototype/variantPreviewCubeFace`, { originalGetTexture: CubeFace.prototype.getTexture, }, diff --git a/src/mods/panelMod.ts b/src/blockbench-mods/ui/animationsPanel.ts similarity index 69% rename from src/mods/panelMod.ts rename to src/blockbench-mods/ui/animationsPanel.ts index 65f54406..e8f1a902 100644 --- a/src/mods/panelMod.ts +++ b/src/blockbench-mods/ui/animationsPanel.ts @@ -1,14 +1,15 @@ -import { BLUEPRINT_FORMAT } from '../blueprintFormat' -import { PACKAGE } from '../constants' -import { createBlockbenchMod } from '../util/moddingTools' +import { BLUEPRINT_FORMAT } from '../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' createBlockbenchMod( - `${PACKAGE.name}:panelMod`, + `${PACKAGE.name}:mods/ui/animationsPanel`, { panel: Interface.Panels.animations, }, context => { - const originalFilesFunction = context.panel.inside_vue.$options.computed!.files as () => any + const originalFilesFunction = context.panel.inside_vue.$options.computed! + .files as () => Record context.panel.inside_vue.$options.computed!.files = function (this) { if (Format.id === BLUEPRINT_FORMAT.id) { diff --git a/src/blockbench-mods/ui/formatIcon.ts b/src/blockbench-mods/ui/formatIcon.ts new file mode 100644 index 00000000..1438ea7f --- /dev/null +++ b/src/blockbench-mods/ui/formatIcon.ts @@ -0,0 +1,32 @@ +import Icon from '@svelte-components/icon.svelte' +import { PACKAGE } from '../../constants' +import { injectSvelteCompomponent } from '../../util/injectSvelteComponent' +import { createBlockbenchMod } from '../../util/moddingTools' + +/** + * Adds an icon to the format category title. + */ +createBlockbenchMod( + `${PACKAGE.name}:mods/ui/formatIcon`, + undefined, + () => { + void injectSvelteCompomponent({ + elementSelector: () => document.querySelector('[format=animated_java_blueprint]'), + component: Icon, + props: {}, + prepend: true, + postMount: () => { + document + .querySelector('[format=animated_java_blueprint] span i') + ?.parentElement?.remove() + const duplicates = [...document.querySelectorAll('#animated_java\\:icon')] + if (duplicates.length > 1) { + duplicates.slice(1).forEach(d => d.remove()) + } + }, + }) + }, + () => { + document.querySelector('#animated_java\\:icon')?.remove() + } +) diff --git a/src/blockbench-mods/ui/formatOrder.ts b/src/blockbench-mods/ui/formatOrder.ts new file mode 100644 index 00000000..2cbc903c --- /dev/null +++ b/src/blockbench-mods/ui/formatOrder.ts @@ -0,0 +1,27 @@ +import { PACKAGE } from '../../constants' +import { createBlockbenchMod } from '../../util/moddingTools' + +/** + * I want alphabetically ordered format categories. + */ +createBlockbenchMod( + `${PACKAGE.name}:mods/ui/formatOrder`, + undefined, + () => { + const interval = setInterval(() => { + const ajFormats = $("li.format_category > label:contains('Animated Java')") + .first() + .parent() + if (ajFormats.length === 0) return + + const mcFormats = $("li.format_category > label:contains('General')").first().parent() + + ajFormats.insertBefore(mcFormats) + + clearInterval(interval) + }, 16) + }, + () => { + // Pass + } +) diff --git a/src/mods/pluginsDialogMod.ts b/src/blockbench-mods/ui/incompatiblePluginNotice.ts similarity index 57% rename from src/mods/pluginsDialogMod.ts rename to src/blockbench-mods/ui/incompatiblePluginNotice.ts index 36d841c9..58160992 100644 --- a/src/mods/pluginsDialogMod.ts +++ b/src/blockbench-mods/ui/incompatiblePluginNotice.ts @@ -1,10 +1,10 @@ -import IncompatiblePluginNotice from '../components/incompatiblePluginNotice.svelte' -import { PACKAGE } from '../constants' -import { injectSvelteCompomponentMod } from '../util/injectSvelteComponent' -import { createBlockbenchMod } from '../util/moddingTools' -import { Valuable } from '../util/stores' +import IncompatiblePluginNotice from '@svelte-components/incompatiblePluginNotice.svelte' +import { PACKAGE } from '../../constants' +import { injectSvelteCompomponentMod } from '../../util/injectSvelteComponent' +import { createBlockbenchMod } from '../../util/moddingTools' +import { Syncable } from '../../util/stores' -const SELECTED_PLUGIN = new Valuable(null) +const SELECTED_PLUGIN = new Syncable(null) injectSvelteCompomponentMod({ component: IncompatiblePluginNotice, @@ -17,9 +17,9 @@ injectSvelteCompomponentMod({ }) createBlockbenchMod( - `${PACKAGE.name}:pluginsDialogMod`, + `${PACKAGE.name}:mods/ui/incompatiblePluginNotice`, { - // @ts-expect-error + // @ts-expect-error - Vue components default to having no methods originalSelect: Plugins.dialog.component.methods.selectPlugin, }, context => { @@ -27,7 +27,6 @@ createBlockbenchMod( Plugins.dialog.component.methods.selectPlugin = function (this, plugin: BBPlugin) { const result = context.originalSelect.call(this, plugin) SELECTED_PLUGIN.set(plugin) - // eslint-disable-next-line @typescript-eslint/no-unsafe-return return result } diff --git a/src/blockbench-mods/ui/structureNodeIcons.ts b/src/blockbench-mods/ui/structureNodeIcons.ts new file mode 100644 index 00000000..b9c7ccc6 --- /dev/null +++ b/src/blockbench-mods/ui/structureNodeIcons.ts @@ -0,0 +1,56 @@ +import { PACKAGE } from '@aj/constants' +import { createBlockbenchMod } from '@aj/util/moddingTools' +import { translate } from '@aj/util/translation' + +createBlockbenchMod( + `${PACKAGE.name}:structureNodeIcons`, + { + // @ts-expect-error + originalIcon: Group.prototype.icon, + // @ts-expect-error + originalTitle: Group.prototype.title, + }, + ctx => { + Object.defineProperty(Group.prototype, 'icon', { + get() { + for (const child of this.children) { + if (child instanceof Cube) { + return ctx.originalIcon + } + } + return 'account_tree' + }, + set() { + console.warn('Setting the default Group icon is not allowed!') + }, + }) + + Object.defineProperty(Group.prototype, 'title', { + get() { + for (const child of this.children) { + if (child instanceof Cube) { + return ctx.originalTitle + } + } + return translate('node.structure.title').replaceAll('
', '\n') + }, + set() { + console.warn('Setting the default Group icon is not allowed!') + }, + }) + + return ctx + }, + ctx => { + Object.defineProperty(Group.prototype, 'icon', { + value: ctx.originalIcon, + get: undefined, + set: undefined, + }) + Object.defineProperty(Group.prototype, 'title', { + value: ctx.originalTitle, + get: undefined, + set: undefined, + }) + } +) diff --git a/src/blockbenchTypeMods.d.ts b/src/blockbenchTypeMods.d.ts deleted file mode 100644 index aa2befcc..00000000 --- a/src/blockbenchTypeMods.d.ts +++ /dev/null @@ -1,108 +0,0 @@ -import type { - BLUEPRINT_CODEC, - BLUEPRINT_FORMAT, - IBlueprintBoneConfigJSON, - IBlueprintLocatorConfigJSON, -} from './blueprintFormat' -import { blueprintSettingErrors, defaultValues } from './blueprintSettings' -import { openExportProgressDialog } from './interface/dialog/exportProgress' -import { openUnexpectedErrorDialog } from './interface/dialog/unexpectedError' -import { TextDisplay } from './outliner/textDisplay' -import { VanillaBlockDisplay } from './outliner/vanillaBlockDisplay' -import { VanillaItemDisplay } from './outliner/vanillaItemDisplay' -import datapackCompiler from './systems/datapackCompiler' -import { MINECRAFT_REGISTRY } from './systems/minecraft/registryManager' -import resourcepackCompiler from './systems/resourcepackCompiler' -import { EasingKey } from './util/easing' -import { isDataPackPath, isResourcePackPath } from './util/minecraftUtil' -import { Valuable } from './util/stores' -import { type Variant } from './variants' - -declare module 'three' { - interface Object3D { - isVanillaItemModel?: boolean - isVanillaBlockModel?: boolean - isTextDisplayText?: boolean - fix_scale?: THREE.Vector3 - } -} - -declare global { - interface ModelProject { - animated_java: { [T in keyof typeof defaultValues]: (typeof defaultValues)[T] } - last_used_export_namespace: string - visualBoundingBox?: THREE.LineSegments - pluginMode: Valuable - transparentTexture: Texture - - showingInvalidCubeRotations: boolean - - variants: Variant[] - textDisplays: TextDisplay[] - vanillaItemDisplays: VanillaItemDisplay[] - vanillaBlockDisplays: VanillaBlockDisplay[] - - loadingPromises?: Array> - } - - // eslint-disable-next-line @typescript-eslint/naming-convention - interface _Animation { - excluded_nodes: CollectionItem[] - } - - interface AnimationUndoCopy { - excluded_nodes: string[] - } - - interface AnimationOptions { - excluded_nodes: string[] - } - - // eslint-disable-next-line @typescript-eslint/naming-convention - interface _Keyframe { - easing?: EasingKey - easingArgs?: number[] - } - - interface Group { - configs: { - default: IBlueprintBoneConfigJSON - /** - * @key Variant UUID - * @value Variant Bone Config - */ - variants: Record - } - } - - interface Locator { - config: IBlueprintLocatorConfigJSON - } - - interface Cube { - rotationInvalid: boolean - } - - interface CubeFace { - lastVariant: Variant | undefined - } - - const AnimatedJava: { - API: { - compileDataPack: typeof datapackCompiler - compileResourcePack: typeof resourcepackCompiler - Variant: typeof Variant - MINECRAFT_REGISTRY: typeof MINECRAFT_REGISTRY - openExportProgressDialog: typeof openExportProgressDialog - isResourcePackPath: typeof isResourcePackPath - isDataPackPath: typeof isDataPackPath - blueprintSettingErrors: typeof blueprintSettingErrors - openUnexpectedErrorDialog: typeof openUnexpectedErrorDialog - BLUEPRINT_FORMAT: typeof BLUEPRINT_FORMAT - BLUEPRINT_CODEC: typeof BLUEPRINT_CODEC - TextDisplay: typeof TextDisplay - VanillaItemDisplay: typeof VanillaItemDisplay - VanillaBlockDisplay: typeof VanillaBlockDisplay - } - } -} diff --git a/src/blockbenchTypes.d.ts b/src/blockbenchTypes.d.ts new file mode 100644 index 00000000..7d6845f5 --- /dev/null +++ b/src/blockbenchTypes.d.ts @@ -0,0 +1,72 @@ +import { BlockDisplay } from './blockbench-additions/outliner-elements/blockDisplay' +import { ItemDisplay } from './blockbench-additions/outliner-elements/itemDisplay' +import { TextDisplay } from './blockbench-additions/outliner-elements/textDisplay' +import { defaultValues } from './blueprintSettings' +import type { CommonDisplayConfig, LocatorConfig, Serialized } from './systems/node-configs' +import { EasingKey } from './util/easing' +import { isDataPackPath, isResourcePackPath } from './util/minecraftUtil' +import { Syncable } from './util/stores' +import { type Variant } from './variants' + +declare module 'three' { + interface Object3D { + isVanillaItemModel?: boolean + isVanillaBlockModel?: boolean + isTextDisplayText?: boolean + fix_scale?: THREE.Vector3 + } +} + +declare global { + interface ModelProject { + animated_java: { [T in keyof typeof defaultValues]: (typeof defaultValues)[T] } + last_used_export_namespace: string + visualBoundingBox?: THREE.LineSegments + pluginMode: Syncable + transparentTexture: Texture + + showingInvalidCubeRotations: boolean + + variants: Variant[] + textDisplays: TextDisplay[] + vanillaItemDisplays: ItemDisplay[] + vanillaBlockDisplays: BlockDisplay[] + + loadingPromises?: Array> + } + + // eslint-disable-next-line @typescript-eslint/naming-convention + interface _Animation { + excluded_nodes: CollectionItem[] + } + + interface AnimationUndoCopy { + excluded_nodes: string[] + } + + interface AnimationOptions { + excluded_nodes: string[] + } + + // eslint-disable-next-line @typescript-eslint/naming-convention + interface _Keyframe { + easing?: EasingKey + easingArgs?: number[] + } + + interface Group { + commonConfig: Serialized + } + + interface Locator { + config: Serialized + } + + interface Cube { + rotationInvalid: boolean + } + + interface CubeFace { + lastVariant: Variant | undefined + } +} diff --git a/src/blueprintFormat.ts b/src/blueprintFormat.ts index 24515ee3..c97e3825 100644 --- a/src/blueprintFormat.ts +++ b/src/blueprintFormat.ts @@ -8,7 +8,7 @@ import { events } from './util/events' import { injectSvelteCompomponent } from './util/injectSvelteComponent' import { sanitizePathName } from './util/minecraftUtil' import { addProjectToRecentProjects } from './util/misc' -import { Valuable } from './util/stores' +import { Syncable } from './util/stores' import { translate } from './util/translation' import { Variant } from './variants' @@ -595,7 +595,7 @@ export const BLUEPRINT_FORMAT = new Blockbench.ModelFormat({ Project.loadingPromises.push( new Promise(resolve => { requestAnimationFrame(() => { - thisProject.pluginMode = new Valuable( + thisProject.pluginMode = new Syncable( thisProject.animated_java.enable_plugin_mode ) // Remove the default title diff --git a/src/blueprintSettings.ts b/src/blueprintSettings.ts index f9f4e5e6..08f370db 100644 --- a/src/blueprintSettings.ts +++ b/src/blueprintSettings.ts @@ -1,23 +1,27 @@ import { MinecraftVersion } from './systems/global' -import { Valuable } from './util/stores' +import { Syncable } from './util/stores' -export type ExportMode = 'raw' | 'zip' | 'none' +export type ExportMode = 'folder' | 'zip' | 'none' +export type ExportEnvironment = 'vanilla' | 'plugin' +export type DataPackAnimationSystem = 'functions' | 'storage' export const defaultValues = { - export_namespace: 'blueprint', + id: 'animated_java:new_blueprint', + tag_prefix: `aj.new_blueprint`, + auto_generate_tag_prefix: true, show_bounding_box: false, auto_bounding_box: true, bounding_box: [48, 48], // Export Settings - enable_plugin_mode: false, - resource_pack_export_mode: 'raw' as ExportMode, - data_pack_export_mode: 'raw' as ExportMode, + environment: 'vanilla' as ExportEnvironment, + resource_pack_export_mode: 'folder' as ExportMode, + data_pack_export_mode: 'folder' as ExportMode, target_minecraft_versions: ['1.21.4'] as MinecraftVersion[], // Resource Pack Settings - display_item: 'minecraft:white_dye', custom_model_data_offset: 0, enable_advanced_resource_pack_settings: false, resource_pack: '', + display_item: 'minecraft:white_dye', // Data Pack Settings enable_advanced_data_pack_settings: false, data_pack: '', @@ -26,12 +30,12 @@ export const defaultValues = { ticking_commands: '', interpolation_duration: 1, teleportation_duration: 1, - use_storage_for_animation: false, + animation_system: 'functions' as DataPackAnimationSystem, show_function_errors: true, show_outdated_warning: true, // Plugin Settings - baked_animations: true, + bake_animations: false, json_file: '', } -export const blueprintSettingErrors = new Valuable>({}) +export const blueprintSettingErrors = new Syncable>({}) diff --git a/src/components/blueprintSettingsDialog.svelte b/src/components/blueprintSettingsDialog.svelte deleted file mode 100644 index 9cc9fda1..00000000 --- a/src/components/blueprintSettingsDialog.svelte +++ /dev/null @@ -1,881 +0,0 @@ - - - - -
- -
- - - - - - - - - {#if !$autoBoundingBox} - - {/if} - - - - - - - - {#if $enablePluginMode} - - - - - - {:else} - - - - - {#if $resourcePackExportMode !== 'none'} - - - - - - - {#if $enableAdvancedResourcePackSettings} -

- {translate('dialog.blueprint_settings.advanced_settings_warning')} -

- - - {/if} - - {#if $resourcePackExportMode === 'raw'} - - {:else if $resourcePackExportMode === 'zip'} - - {/if} - {/if} - - {#if $dataPackExportMode !== 'none'} - - - {#if $dataPackExportMode === 'raw'} - - {:else if $dataPackExportMode === 'zip'} - - {/if} - - - - - - - - - - - - - - - - - {/if} - {/if} -
- -{#if showSupportMePopup} -
-
-
- ❤️ - Animated Java? - - - close - -
- - - -
-
-
-{/if} - - diff --git a/src/components/boneConfigDialog.svelte b/src/components/boneConfigDialog.svelte deleted file mode 100644 index 38cfef2e..00000000 --- a/src/components/boneConfigDialog.svelte +++ /dev/null @@ -1,326 +0,0 @@ - - - - -
-
- {translate('dialog.bone_config.selected_variant', variant.displayName)} -
- {#if variant.isDefault} -
- {translate('dialog.bone_config.default_variant_subtitle')} -
- {:else} -
- {translate('dialog.bone_config.selected_variant_subtitle')} -
- {/if} - - {#if pluginModeEnabled} - - - - - - - - - - - - - {#if $overrideGlowColor} - - {/if} - - - - - - - - {#if $overrideBrightness} - - {/if} - - - - - {/if} - {/if} -
- - diff --git a/src/components/dialogItems/dialogItemUtil.d.ts b/src/components/dialogItems/dialogItemUtil.d.ts deleted file mode 100644 index 4ff027dc..00000000 --- a/src/components/dialogItems/dialogItemUtil.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -type DialogItemValueChecker = - | ((value: Value) => { type: string; message: string }) - | undefined - -type CollectionItem = { icon?: string; name: string; value: string } diff --git a/src/components/dialogItems/numberSlider.svelte b/src/components/dialogItems/numberSlider.svelte deleted file mode 100644 index 9195d5f7..00000000 --- a/src/components/dialogItems/numberSlider.svelte +++ /dev/null @@ -1,85 +0,0 @@ - - - -
- -
- -
- code -
-
-
-
diff --git a/src/components/keyframePanels/variantKeyframePanel.svelte b/src/components/keyframePanels/variantKeyframePanel.svelte deleted file mode 100644 index ab3e6e00..00000000 --- a/src/components/keyframePanels/variantKeyframePanel.svelte +++ /dev/null @@ -1,63 +0,0 @@ - - -
- -
-
- - diff --git a/src/components/unexpectedErrorDialog.svelte b/src/components/unexpectedErrorDialog.svelte deleted file mode 100644 index e70000e3..00000000 --- a/src/components/unexpectedErrorDialog.svelte +++ /dev/null @@ -1,114 +0,0 @@ - - - - -
-
- -

{@html pickRandomFlavorQuote()}

- -
-

- {@html translate( - 'dialog.unexpected_error.paragraph', - 'Discord', - 'Github', - )} -

-
- + {/if} +
--> + + diff --git a/src/ui/panels/item-display-element/index.ts b/src/ui/panels/item-display-element/index.ts new file mode 100644 index 00000000..5d5c22bf --- /dev/null +++ b/src/ui/panels/item-display-element/index.ts @@ -0,0 +1,62 @@ +import { isCurrentFormat } from '../../../blockbench-additions/model-formats/ajblueprint' +import { ItemDisplay } from '../../../blockbench-additions/outliner-elements/itemDisplay' +import { PACKAGE } from '../../../constants' +import { injectSvelteCompomponentMod } from '../../../util/injectSvelteComponent' +import { translate } from '../../../util/translation' +import ItemDisplayElementPanel from './vanillaItemDisplayElementPanel.svelte' + +injectSvelteCompomponentMod({ + component: ItemDisplayElementPanel, + props: {}, + elementSelector() { + return document.querySelector('#panel_element') + }, +}) + +export const ITEM_DISPLAY_ITEM_DISPLAY_SELECT = new BarSelect( + `${PACKAGE.name}:itemDisplayAlignmentSelect`, + { + name: translate('tool.item_display.item_display.title'), + icon: 'format_align_left', + description: translate('tool.item_display.item_display.description'), + condition: () => isCurrentFormat() && !!ItemDisplay.selected.length, + options: { + none: translate('tool.item_display.item_display.options.none'), + thirdperson_lefthand: translate( + 'tool.item_display.item_display.options.thirdperson_lefthand' + ), + thirdperson_righthand: translate( + 'tool.item_display.item_display.options.thirdperson_righthand' + ), + firstperson_lefthand: translate( + 'tool.item_display.item_display.options.firstperson_lefthand' + ), + firstperson_righthand: translate( + 'tool.item_display.item_display.options.firstperson_righthand' + ), + head: translate('tool.item_display.item_display.options.head'), + gui: translate('tool.item_display.item_display.options.gui'), + ground: translate('tool.item_display.item_display.options.ground'), + fixed: translate('tool.item_display.item_display.options.fixed'), + }, + } +) +ITEM_DISPLAY_ITEM_DISPLAY_SELECT.get = function () { + const selected = ItemDisplay.selected[0] + if (!selected) return 'left' + return selected.itemDisplay +} +ITEM_DISPLAY_ITEM_DISPLAY_SELECT.set = function (this: BarSelect, value: string) { + const selected = ItemDisplay.selected[0] + if (!selected) return this + this.value = value + const name = this.getNameFor(value) + this.nodes.forEach(node => { + $(node).find('bb-select').text(name) + }) + if (!this.nodes.includes(this.node)) { + $(this.node).find('bb-select').text(name) + } + selected.itemDisplay = value + return this +} diff --git a/src/ui/panels/item-display-element/vanillaItemDisplayElementPanel.svelte b/src/ui/panels/item-display-element/vanillaItemDisplayElementPanel.svelte new file mode 100644 index 00000000..eb3260b0 --- /dev/null +++ b/src/ui/panels/item-display-element/vanillaItemDisplayElementPanel.svelte @@ -0,0 +1,82 @@ + + +

+ {translate('panel.item_display.title')} +

+ +
+
+ +
+
+
+ +
+ {$error} +
+ + diff --git a/src/ui/panels/text-display-element/index.ts b/src/ui/panels/text-display-element/index.ts new file mode 100644 index 00000000..166686a1 --- /dev/null +++ b/src/ui/panels/text-display-element/index.ts @@ -0,0 +1,162 @@ +import { isCurrentFormat } from '../../../blockbench-additions/model-formats/ajblueprint' +import { + TextDisplay, + type Alignment, +} from '../../../blockbench-additions/outliner-elements/textDisplay' +import { PACKAGE } from '../../../constants' +import { injectSvelteCompomponentMod } from '../../../util/injectSvelteComponent' +import { floatToHex } from '../../../util/misc' +import { translate } from '../../../util/translation' +import TextDisplayElementPanel from './textDisplayElementPanel.svelte' + +injectSvelteCompomponentMod({ + component: TextDisplayElementPanel, + props: {}, + elementSelector() { + return document.querySelector('#panel_element') + }, +}) + +export const TEXT_DISPLAY_WIDTH_SLIDER = new NumSlider( + `${PACKAGE.name}:textDisplayLineWidthSlider`, + { + name: translate('tool.text_display.line_width.title'), + icon: 'format_size', + description: translate('tool.text_display.line_width.description'), + settings: { + min: 1, + max: 10000, + interval: 1, + }, + condition: () => isCurrentFormat() && !!TextDisplay.selected.length, + get() { + const selected = TextDisplay.selected[0] + if (!selected) return 0 + return selected.lineWidth + }, + change(value) { + const selected = TextDisplay.selected[0] + if (!selected) return + selected.lineWidth = Math.clamp(value(selected.lineWidth), 1, 10000) + }, + } +) + +export const TEXT_DISPLAY_BACKGROUND_COLOR_PICKER = new ColorPicker( + `${PACKAGE.name}:textDisplayBackgroundColorPicker`, + { + name: translate('tool.text_display.background_color.title'), + icon: 'format_color_fill', + description: translate('tool.text_display.background_color.description'), + condition: () => isCurrentFormat() && !!TextDisplay.selected.length, + } +) +// @ts-expect-error +TEXT_DISPLAY_BACKGROUND_COLOR_PICKER.jq.spectrum('option', 'defaultColor', '#0000003f') +TEXT_DISPLAY_BACKGROUND_COLOR_PICKER.get = function () { + const selected = TextDisplay.selected[0] + if (!selected) return new tinycolor('#0000003f') + return new tinycolor(selected.backgroundColor + floatToHex(selected.backgroundAlpha)) +} +TEXT_DISPLAY_BACKGROUND_COLOR_PICKER.set = function (this: ColorPicker, color: string) { + this.value = new tinycolor(color) + // @ts-expect-error + this.jq.spectrum('set', this.value.toHex8String()) + + const selected = TextDisplay.selected[0] + if (!selected) return this + selected.backgroundColor = this.value.toHexString() + selected.backgroundAlpha = this.value.getAlpha() + return this +} +TEXT_DISPLAY_BACKGROUND_COLOR_PICKER.change = function ( + this: ColorPicker, + color: InstanceType +) { + const selected = TextDisplay.selected[0] + if (!selected) return this + selected.backgroundColor = color.toHexString() + selected.backgroundAlpha = color.getAlpha() + return this +} + +export const TEXT_DISPLAY_SHADOW_TOGGLE = new Toggle(`${PACKAGE.name}:textDisplayShadowToggle`, { + name: translate('tool.text_display.text_shadow.title'), + icon: 'check_box_outline_blank', + description: translate('tool.text_display.text_shadow.description'), + condition: () => isCurrentFormat() && !!TextDisplay.selected.length, + click() { + // + }, + onChange() { + const scope = TEXT_DISPLAY_SHADOW_TOGGLE + scope.setIcon(scope.value ? 'check_box' : 'check_box_outline_blank') + const selected = TextDisplay.selected[0] + if (!selected) return + selected.shadow = TEXT_DISPLAY_SHADOW_TOGGLE.value + }, +}) +TEXT_DISPLAY_SHADOW_TOGGLE.set = function (value) { + if (this.value === value) return this + this.click() + return this +} + +export const TEXT_DISPLAY_ALIGNMENT_SELECT = new BarSelect( + `${PACKAGE.name}:textDisplayAlignmentSelect`, + { + name: translate('tool.text_display.text_alignment.title'), + icon: 'format_align_left', + description: translate('tool.text_display.text_alignment.description'), + condition: () => isCurrentFormat() && !!TextDisplay.selected.length, + options: { + left: translate('tool.text_display.text_alignment.options.left'), + center: translate('tool.text_display.text_alignment.options.center'), + right: translate('tool.text_display.text_alignment.options.right'), + }, + } +) +TEXT_DISPLAY_ALIGNMENT_SELECT.get = function () { + const selected = TextDisplay.selected[0] + if (!selected) return 'left' + return selected.align +} +TEXT_DISPLAY_ALIGNMENT_SELECT.set = function (this: BarSelect, value: Alignment) { + const selected = TextDisplay.selected[0] + if (!selected) return this + this.value = value + const name = this.getNameFor(value) + this.nodes.forEach(node => { + $(node).find('bb-select').text(name) + }) + if (!this.nodes.includes(this.node)) { + $(this.node).find('bb-select').text(name) + } + selected.align = value + return this +} + +export const TEXT_DISPLAY_SEE_THROUGH_TOGGLE = new Toggle( + `${PACKAGE.name}:textDisplaySeeThroughToggle`, + { + name: translate('tool.text_display.see_through.title'), + icon: 'check_box_outline_blank', + description: translate('tool.text_display.see_through.description'), + condition: () => isCurrentFormat() && !!TextDisplay.selected.length, + click() { + // + }, + onChange() { + const scope = TEXT_DISPLAY_SEE_THROUGH_TOGGLE + scope.setIcon(scope.value ? 'check_box' : 'check_box_outline_blank') + const selected = TextDisplay.selected[0] + if (!selected) return + selected.seeThrough = TEXT_DISPLAY_SEE_THROUGH_TOGGLE.value + }, + } +) +TEXT_DISPLAY_SEE_THROUGH_TOGGLE.set = function (value) { + if (this.value === value) return this + this.click() + return this +} diff --git a/src/components/textDisplayElementPanel.svelte b/src/ui/panels/text-display-element/textDisplayElementPanel.svelte similarity index 78% rename from src/components/textDisplayElementPanel.svelte rename to src/ui/panels/text-display-element/textDisplayElementPanel.svelte index a59666c2..a0e945ce 100644 --- a/src/components/textDisplayElementPanel.svelte +++ b/src/ui/panels/text-display-element/textDisplayElementPanel.svelte @@ -1,33 +1,29 @@

diff --git a/src/interface/panel/variants.ts b/src/ui/panels/variants/index.ts similarity index 74% rename from src/interface/panel/variants.ts rename to src/ui/panels/variants/index.ts index 26ca68ff..d80d801c 100644 --- a/src/interface/panel/variants.ts +++ b/src/ui/panels/variants/index.ts @@ -1,11 +1,11 @@ -import { isCurrentFormat } from '../../blueprintFormat' -import VariantsPanel from '../../components/variantsPanel.svelte' -import { PACKAGE } from '../../constants' -import { createAction, createMenu } from '../../util/moddingTools' -import { SveltePanel } from '../../util/sveltePanel' -import { translate } from '../../util/translation' -import { Variant } from '../../variants' -import { openVariantConfigDialog } from '../dialog/variantConfig' +import { isCurrentFormat } from '../../../blockbench-additions/model-formats/ajblueprint' +import { PACKAGE } from '../../../constants' +import { createAction, createMenu } from '../../../util/moddingTools' +import { SveltePanel } from '../../../util/sveltePanel' +import { translate } from '../../../util/translation' +import { Variant } from '../../../variants' +import { openVariantConfigDialog } from '../../dialogs/variant-config' +import VariantsPanel from './variantsPanel.svelte' export const CREATE_VARIANT_ACTION = createAction(`${PACKAGE.name}:createVariant`, { name: translate('action.variants.create'), @@ -71,12 +71,7 @@ export const VARIANTS_PANEL = new SveltePanel({ }, icon: 'settings', condition: () => - !!( - isCurrentFormat() && - Modes.selected && - (Modes.selected.id === Modes.options.edit.id || - Modes.selected.id === Modes.options.paint.id) - ), + !!((isCurrentFormat() && Mode.selected?.id === 'edit') || Mode.selected?.id === 'paint'), component: VariantsPanel, props: {}, }) diff --git a/src/components/variantsPanel.svelte b/src/ui/panels/variants/variantsPanel.svelte similarity index 86% rename from src/components/variantsPanel.svelte rename to src/ui/panels/variants/variantsPanel.svelte index 437a2d21..0910a535 100644 --- a/src/components/variantsPanel.svelte +++ b/src/ui/panels/variants/variantsPanel.svelte @@ -1,49 +1,50 @@ - + const FLIP_DURATION = 100 - -

diff --git a/src/interface/popup/animatedJavaLoading.ts b/src/ui/popups/animated-java-loading/index.ts similarity index 71% rename from src/interface/popup/animatedJavaLoading.ts rename to src/ui/popups/animated-java-loading/index.ts index ec808005..c77413cb 100644 --- a/src/interface/popup/animatedJavaLoading.ts +++ b/src/ui/popups/animated-java-loading/index.ts @@ -1,12 +1,12 @@ -import { SvelteComponentDev } from 'svelte/internal' -import AnimatedJavaLoadingPopup from '../../components/animatedJavaLoadingPopup.svelte' -import { injectSvelteCompomponent } from '../../util/injectSvelteComponent' -import { Valuable } from '../../util/stores' +import type { SvelteComponentDev } from 'svelte/internal' +import { injectSvelteCompomponent } from '../../../util/injectSvelteComponent' +import { Syncable } from '../../../util/stores' +import AnimatedJavaLoadingPopup from './animatedJavaLoadingPopup.svelte' -const LOADED = new Valuable(false) -const OFFLINE = new Valuable(false) -const PROGRESS = new Valuable(0) -const PROGRESS_LABEL = new Valuable('') +const LOADED = new Syncable(false) +const OFFLINE = new Syncable(false) +const PROGRESS = new Syncable(0) +const PROGRESS_LABEL = new Syncable('') let activeComponent: SvelteComponentDev | undefined export async function showLoadingPopup() { diff --git a/src/components/blueprintLoadingPopup.svelte b/src/ui/popups/blueprint-loading/blueprintLoadingPopup.svelte similarity index 58% rename from src/components/blueprintLoadingPopup.svelte rename to src/ui/popups/blueprint-loading/blueprintLoadingPopup.svelte index b52b9092..7049b3c3 100644 --- a/src/components/blueprintLoadingPopup.svelte +++ b/src/ui/popups/blueprint-loading/blueprintLoadingPopup.svelte @@ -1,11 +1,9 @@ - -
diff --git a/src/interface/popup/blueprintLoading.ts b/src/ui/popups/blueprint-loading/index.ts similarity index 61% rename from src/interface/popup/blueprintLoading.ts rename to src/ui/popups/blueprint-loading/index.ts index 9ae44be5..bd753b9f 100644 --- a/src/interface/popup/blueprintLoading.ts +++ b/src/ui/popups/blueprint-loading/index.ts @@ -1,11 +1,11 @@ -import BlueprintLoadingPopup from '../../components/blueprintLoadingPopup.svelte' -import { PACKAGE } from '../../constants' -import { Valuable } from '../../util/stores' -import { SvelteDialog } from '../../util/svelteDialog' -import { translate } from '../../util/translation' +import { PACKAGE } from '../../../constants' +import { Syncable } from '../../../util/stores' +import { SvelteDialog } from '../../../util/svelteDialog' +import { translate } from '../../../util/translation' +import BlueprintLoadingPopup from './blueprintLoadingPopup.svelte' -export const PROGRESS = new Valuable(0) -export const MAX_PROGRESS = new Valuable(1) +export const PROGRESS = new Syncable(0) +export const MAX_PROGRESS = new Syncable(1) let instance: SvelteDialog | null = null diff --git a/src/components/incompatabilityPopup.svelte b/src/ui/popups/incompatability/incompatabilityPopup.svelte similarity index 90% rename from src/components/incompatabilityPopup.svelte rename to src/ui/popups/incompatability/incompatabilityPopup.svelte index 54ca9b8d..9c714bc8 100644 --- a/src/components/incompatabilityPopup.svelte +++ b/src/ui/popups/incompatability/incompatabilityPopup.svelte @@ -1,6 +1,6 @@
diff --git a/src/util/bufferGeometryUtils.ts b/src/util/bufferGeometryUtils.ts index 32a9cd4f..379296dc 100644 --- a/src/util/bufferGeometryUtils.ts +++ b/src/util/bufferGeometryUtils.ts @@ -1,3 +1,4 @@ +/* eslint-disable */ const { BufferAttribute, BufferGeometry, @@ -12,7 +13,7 @@ const { } = THREE function computeMikkTSpaceTangents(geometry: any, MikkTSpace: any, negateSign = true) { - if (!MikkTSpace || !MikkTSpace.isReady) { + if (!MikkTSpace?.isReady) { throw new Error('BufferGeometryUtils: Initialized MikkTSpace library required.') } @@ -1177,13 +1178,13 @@ function toCreasedNormals(geometry: any, creaseAngle = Math.PI / 3 /* 60 degrees export { computeMikkTSpaceTangents, - mergeGeometries, - mergeAttributes, - interleaveAttributes, - estimateBytesUsed, - mergeVertices, - toTrianglesDrawMode, computeMorphedAttributes, + estimateBytesUsed, + interleaveAttributes, + mergeAttributes, + mergeGeometries, mergeGroups, + mergeVertices, toCreasedNormals, + toTrianglesDrawMode, } diff --git a/src/util/easing.ts b/src/util/easing.ts index 54c26c4a..e54466ea 100644 --- a/src/util/easing.ts +++ b/src/util/easing.ts @@ -230,13 +230,13 @@ class Easing { } } -const quart = Easing.poly(4) -const quint = Easing.poly(5) -const back = (direction: DirectionFunction, scalar: number, t: number) => +const QUART = Easing.poly(4) +const QUINT = Easing.poly(5) +const BACK = (direction: DirectionFunction, scalar: number, t: number) => direction(Easing.back(1.70158 * scalar))(t) -const elastic = (direction: DirectionFunction, bounciness: number, t: number) => +const ELASTIC = (direction: DirectionFunction, bounciness: number, t: number) => direction(Easing.elastic(bounciness))(t) -const bounce = (direction: DirectionFunction, bounciness: number, t: number) => +const BOUNCE = (direction: DirectionFunction, bounciness: number, t: number) => direction(Easing.bounce(bounciness))(t) export const easingFunctions: Record = { @@ -251,12 +251,12 @@ export const easingFunctions: Record = { easeInCubic: Easing.in(Easing.cubic), easeOutCubic: Easing.out(Easing.cubic), easeInOutCubic: Easing.inOut(Easing.cubic), - easeInQuart: Easing.in(quart), - easeOutQuart: Easing.out(quart), - easeInOutQuart: Easing.inOut(quart), - easeInQuint: Easing.in(quint), - easeOutQuint: Easing.out(quint), - easeInOutQuint: Easing.inOut(quint), + easeInQuart: Easing.in(QUART), + easeOutQuart: Easing.out(QUART), + easeInOutQuart: Easing.inOut(QUART), + easeInQuint: Easing.in(QUINT), + easeOutQuint: Easing.out(QUINT), + easeInOutQuint: Easing.inOut(QUINT), easeInSine: Easing.in(Easing.sin), easeOutSine: Easing.out(Easing.sin), easeInOutSine: Easing.inOut(Easing.sin), @@ -266,15 +266,15 @@ export const easingFunctions: Record = { easeInCirc: Easing.in(Easing.circle), easeOutCirc: Easing.out(Easing.circle), easeInOutCirc: Easing.inOut(Easing.circle), - easeInBack: back.bind(null, Easing.in), - easeOutBack: back.bind(null, Easing.out), - easeInOutBack: back.bind(null, Easing.inOut), - easeInElastic: elastic.bind(null, Easing.in), - easeOutElastic: elastic.bind(null, Easing.out), - easeInOutElastic: elastic.bind(null, Easing.inOut), - easeInBounce: bounce.bind(null, Easing.in), - easeOutBounce: bounce.bind(null, Easing.out), - easeInOutBounce: bounce.bind(null, Easing.inOut), + easeInBack: BACK.bind(null, Easing.in), + easeOutBack: BACK.bind(null, Easing.out), + easeInOutBack: BACK.bind(null, Easing.inOut), + easeInElastic: ELASTIC.bind(null, Easing.in), + easeOutElastic: ELASTIC.bind(null, Easing.out), + easeInOutElastic: ELASTIC.bind(null, Easing.inOut), + easeInBounce: BOUNCE.bind(null, Easing.in), + easeOutBounce: BOUNCE.bind(null, Easing.out), + easeInOutBounce: BOUNCE.bind(null, Easing.inOut), } export type EasingKey = keyof typeof easingFunctions diff --git a/src/util/events.ts b/src/util/events.ts index ae02915e..d265f8bf 100644 --- a/src/util/events.ts +++ b/src/util/events.ts @@ -1,5 +1,5 @@ -import * as PACKAGE from '../../package.json' -import { Variant } from '../variants' +import { name as pluginID } from '../../package.json' +import type { Variant } from '../variants' import { Subscribable } from './subscribable' export class PluginEvent extends Subscribable { @@ -11,7 +11,7 @@ export class PluginEvent extends Subscribable { } // Plugin Events -export const events = { +const EVENTS = { LOAD: new PluginEvent('load'), UNLOAD: new PluginEvent('unload'), INSTALL: new PluginEvent('install'), @@ -48,29 +48,31 @@ export const events = { REDO: new PluginEvent('redo'), } +export default EVENTS + function injectionHandler() { - console.groupCollapsed(`Injecting BlockbenchMods added by '${PACKAGE.name}'`) - events.INJECT_MODS.dispatch() + console.groupCollapsed(`Injecting BlockbenchMods added by '${pluginID}'`) + EVENTS.INJECT_MODS.dispatch() console.groupEnd() } function extractionHandler() { - console.groupCollapsed(`Extracting BlockbenchMods added by '${PACKAGE.name}'`) - events.EXTRACT_MODS.dispatch() + console.groupCollapsed(`Extracting BlockbenchMods added by '${pluginID}'`) + EVENTS.EXTRACT_MODS.dispatch() console.groupEnd() } -events.LOAD.subscribe(injectionHandler) -events.UNLOAD.subscribe(extractionHandler) -events.INSTALL.subscribe(injectionHandler) -events.UNINSTALL.subscribe(extractionHandler) +EVENTS.LOAD.subscribe(injectionHandler) +EVENTS.UNLOAD.subscribe(extractionHandler) +EVENTS.INSTALL.subscribe(injectionHandler) +EVENTS.UNINSTALL.subscribe(extractionHandler) Blockbench.on('select_project', ({ project }: { project: ModelProject }) => { - events.SELECT_PROJECT.dispatch(project) + EVENTS.SELECT_PROJECT.dispatch(project) }) Blockbench.on('unselect_project', ({ project }: { project: ModelProject }) => { - events.UNSELECT_PROJECT.dispatch(project) + EVENTS.UNSELECT_PROJECT.dispatch(project) }) -Blockbench.on('update_selection', () => events.UPDATE_SELECTION.dispatch()) -Blockbench.on('undo', (entry: UndoEntry) => events.UNDO.dispatch(entry)) -Blockbench.on('redo', (entry: UndoEntry) => events.REDO.dispatch(entry)) +Blockbench.on('update_selection', () => EVENTS.UPDATE_SELECTION.dispatch()) +Blockbench.on('undo', (entry: UndoEntry) => EVENTS.UNDO.dispatch(entry)) +Blockbench.on('redo', (entry: UndoEntry) => EVENTS.REDO.dispatch(entry)) diff --git a/src/util/excludedNodes.ts b/src/util/excludedNodes.ts index c1c71761..aec98a8a 100644 --- a/src/util/excludedNodes.ts +++ b/src/util/excludedNodes.ts @@ -1,13 +1,13 @@ -import { TextDisplay } from '../outliner/textDisplay' -import { VanillaBlockDisplay } from '../outliner/vanillaBlockDisplay' -import { VanillaItemDisplay } from '../outliner/vanillaItemDisplay' +import { BlockDisplay } from '../blockbench-additions/outliner-elements/blockDisplay' +import { ItemDisplay } from '../blockbench-additions/outliner-elements/itemDisplay' +import { TextDisplay } from '../blockbench-additions/outliner-elements/textDisplay' export function getAvailableNodes( excludedNodes: CollectionItem[], options: { groupsOnly?: boolean; excludeEmptyGroups?: boolean } = {} ): CollectionItem[] { const allNodes: Array< - Group | Locator | TextDisplay | VanillaItemDisplay | VanillaBlockDisplay | OutlinerElement + Group | Locator | TextDisplay | ItemDisplay | BlockDisplay | OutlinerElement > = [] if (options?.excludeEmptyGroups) { allNodes.push( @@ -22,8 +22,8 @@ export function getAvailableNodes( allNodes.push( ...Locator.all, ...TextDisplay.all, - ...VanillaItemDisplay.all, - ...VanillaBlockDisplay.all, + ...ItemDisplay.all, + ...BlockDisplay.all, ...(OutlinerElement.types.camera?.all || []) ) } @@ -42,8 +42,8 @@ export function getAvailableNodes( icon = 'anchor' break case node instanceof TextDisplay: - case node instanceof VanillaItemDisplay: - case node instanceof VanillaBlockDisplay: + case node instanceof ItemDisplay: + case node instanceof BlockDisplay: icon = node.icon break case node instanceof OutlinerElement.types.camera: diff --git a/src/util/fileUtil.ts b/src/util/fileUtil.ts index 4ca9be1c..9c048fa5 100644 --- a/src/util/fileUtil.ts +++ b/src/util/fileUtil.ts @@ -68,3 +68,11 @@ export function safeReadSync(path: string): Buffer | undefined { export async function safeRead(path: string) { return fs.promises.readFile(path).catch(() => undefined) } + +export function directoryExists(path: string): boolean { + return fs.existsSync(path) && !!fs.lstatSync(path, { throwIfNoEntry: false })?.isDirectory() +} + +export function fileExists(path: string): boolean { + return fs.existsSync(path) && !!fs.lstatSync(path, { throwIfNoEntry: false })?.isFile() +} diff --git a/src/util/injectSvelteComponent.ts b/src/util/injectSvelteComponent.ts index 1e6998b2..b62431ce 100644 --- a/src/util/injectSvelteComponent.ts +++ b/src/util/injectSvelteComponent.ts @@ -1,9 +1,9 @@ -import type { SvelteComponentConstructor } from './misc' import type { ComponentConstructorOptions, SvelteComponentDev } from 'svelte/internal' -import { pollPromise } from './promises' +import type { SvelteComponentConstructor } from './misc' import { createBlockbenchMod } from './moddingTools' +import { pollPromise } from './promises' -type InjectSvelteComponentOptions = { +interface InjectSvelteComponentOptions { /** * The svelte component constructor. */ diff --git a/src/util/minecraftUtil.ts b/src/util/minecraftUtil.ts index d3702cc9..7b42868d 100644 --- a/src/util/minecraftUtil.ts +++ b/src/util/minecraftUtil.ts @@ -1,10 +1,10 @@ -import * as pathjs from 'path' import { MinecraftVersion } from '../systems/global' import { BlockStateRegistryEntry, - BlockStateValue, + type BlockStateValue, getBlockState, -} from '../systems/minecraft/blockstateManager' +} from '@aj/systems/minecraft-temp/blockstateManager' +import * as pathjs from 'path' export interface IMinecraftResourceLocation { packRoot: string @@ -55,9 +55,27 @@ export function getPathFromResourceLocation(resourceLocation: string, type: stri return `assets/${namespace}/${type}/${path.join('/')}` } +export function createTagPrefixFromBlueprintID(id: string) { + const parsed = parseResourceLocation(id) + if (parsed) { + const namespace = parsed.namespace === 'animated_java' ? 'aj' : parsed.namespace + return namespace + '.' + parsed.subpath.replaceAll('/', '.') + } +} + +export function containsInvalidScoreboardTagCharacters(tag: string) { + if (tag.match(/[^a-zA-Z0-9_\-.]/g)) return true + return false +} + +export function containsInvalidResourceLocationCharacters(resourceLocation: string) { + if (resourceLocation.match(/[^a-z0-9_/.:]/g)) return true + return false +} + export function isResourcePackPath(path: string) { const parsed = parseResourcePackPath(path) - return !!(parsed && parsed.namespace && parsed.resourcePath) + return !!(parsed?.namespace && parsed.resourcePath) } export function parseResourcePackPath(path: string): IMinecraftResourceLocation | undefined { @@ -97,14 +115,13 @@ export function parseResourceLocation(resourceLocation: string) { parts = [namespace] namespace = 'minecraft' } - const path = parts.join('') - const resourceType = path.split('/')[0] - const parsed = PathModule.parse(path) - const fullPath = PathModule.join(namespace, path) + const subpath = parts.join('') + const resourceType = subpath.split('/')[0] + const parsed = PathModule.parse(subpath) return { namespace, - path, - fullPath, + subpath, + path: PathModule.join(namespace, parsed.name), type: resourceType, dir: parsed.dir, name: parsed.name, @@ -113,7 +130,7 @@ export function parseResourceLocation(resourceLocation: string) { export function isDataPackPath(path: string) { const parsed = parseDataPackPath(path) - return !!(parsed && parsed.namespace && parsed.resourcePath) + return !!(parsed?.namespace && parsed.resourcePath) } export function parseDataPackPath(path: string): IMinecraftResourceLocation | undefined { @@ -212,7 +229,7 @@ export interface IParsedBlock { export async function parseBlock(block: string): Promise { const states: Record> = {} if (block.includes('[')) { - const match = block.match(/(.+?)\[((?:[^,=[\]]+=[^,=[\]]+,?)+)?]/) + const match = /(.+?)\[((?:[^,=[\]]+=[^,=[\]]+,?)+)?]/.exec(block) if (!match) return if (match[2] !== undefined) { const args = match[2].split(',') @@ -227,7 +244,7 @@ export async function parseBlock(block: string): Promise = new ( options: U @@ -67,7 +67,7 @@ export function scrubUndefined>(obj: T) { } // Developed by FetchBot 💖 -type LLNode = { +interface LLNode { parent?: LLNode name: string } @@ -119,3 +119,55 @@ export function mapObjEntries( ): Record { return Object.fromEntries(Object.entries(obj).map(([k, v]) => cb(k, v))) } + +export function markdownToHTML(markdown: string) { + return markdown + .replaceAll('\n', '
') + .replaceAll(/`(.+?)`/g, '$1') + .replaceAll(/\*\*(.+?)\*\*/g, '$1') + .replaceAll(/\*(.+?)\*/g, '$1') + .replaceAll(/~~(.+?)~~/g, '$1') + .replaceAll(/\[([^\]]+?)\]\(([^)]+?)\)/g, '$1') +} + +/** + * Returns a new object with the keys sorted alphabetically + */ +export function sortObjectKeys>(obj: T): T { + const sorted: Record = {} + Object.keys(obj) + .sort() + .forEach(key => { + sorted[key] = obj[key] + }) + return sorted as T +} + +export function isCubeValid(cube: Cube) { + // Cube is automatically valid if it has no rotation + if (cube.rotation[0] === 0 && cube.rotation[1] === 0 && cube.rotation[2] === 0) { + return true + } + const rotation = cube.rotation[0] + cube.rotation[1] + cube.rotation[2] + // prettier-ignore + if ( + // Make sure the cube is rotated in only one axis by adding all the rotations together, and checking if the sum is equal to one of the rotations. + ( + rotation === cube.rotation[0] || + rotation === cube.rotation[1] || + rotation === cube.rotation[2] + ) + && + // Make sure the cube is rotated in one of the allowed 22.5 degree increments + ( + rotation === -45 || + rotation === -22.5 || + rotation === 0 || + rotation === 22.5 || + rotation === 45 + ) + ) { + return true + } + return false +} diff --git a/src/util/moddingTools.ts b/src/util/moddingTools.ts index 13b80950..da28610c 100644 --- a/src/util/moddingTools.ts +++ b/src/util/moddingTools.ts @@ -1,4 +1,4 @@ -import { events } from './events' +import EVENTS from '@events' import { Subscribable } from './subscribable' export type NamespacedString = `${string}${string}:${string}${string}` @@ -59,7 +59,7 @@ export function createBlockbenchMod( let installed = false let extractContext: ExtractContext - events.INJECT_MODS.subscribe(() => { + EVENTS.INJECT_MODS.subscribe(() => { console.log(`Injecting BBMod '${id}'`) try { if (installed) new Error('Mod is already installed!') @@ -71,7 +71,7 @@ export function createBlockbenchMod( console.log('Sucess!') }) - events.EXTRACT_MODS.subscribe(() => { + EVENTS.EXTRACT_MODS.subscribe(() => { console.log(`Extracting BBMod '${id}'`) try { if (!installed) new Error('Mod is not installed!') @@ -84,16 +84,28 @@ export function createBlockbenchMod( }) } -/** Creates a new Blockbench.Action and automatically handles it's deletion on the plugin unload and uninstall events. +type CreateActionOptions = ActionOptions & { + /** + * @param path Path pointing to the location. Use the ID of each level of the menu, or index or group within a level, separated by a period. For example; `file.export.0` places the action at the top position of the Export submenu in the File menu. + */ + menu_path?: string +} +/** Creates a new Blockbench.Action and automatically handles it's deletion on the plugin unload and uninstall EVENTS. * See https://www.blockbench.net/wiki/api/action for more information on the Blockbench.Action class. * @param id A namespaced ID ('my-plugin-id:my-action') * @param options The options for the action. * @returns The created action. */ -export function createAction(id: NamespacedString, options: ActionOptions) { +export function createAction(id: NamespacedString, options: CreateActionOptions) { const action = new Action(id, options) + if (options.menu_path !== undefined) { + MenuBar.addAction(action, options.menu_path) + } - events.EXTRACT_MODS.subscribe(() => { + EVENTS.EXTRACT_MODS.subscribe(() => { + if (options.menu_path !== undefined) { + MenuBar.removeAction(options.menu_path) + } action.delete() }, true) @@ -101,7 +113,7 @@ export function createAction(id: NamespacedString, options: ActionOptions) { } /** - * Creates a new Blockbench.ModelLoader and automatically handles it's deletion on the plugin unload and uninstall events. + * Creates a new Blockbench.ModelLoader and automatically handles it's deletion on the plugin unload and uninstall EVENTS. * @param id A namespaced ID ('my-plugin-id:my-model-loader') * @param options The options for the model loader. * @returns The created model loader. @@ -109,7 +121,7 @@ export function createAction(id: NamespacedString, options: ActionOptions) { export function createModelLoader(id: string, options: ModelLoaderOptions): ModelLoader { const modelLoader = new ModelLoader(id, options) - events.EXTRACT_MODS.subscribe(() => { + EVENTS.EXTRACT_MODS.subscribe(() => { modelLoader.delete() }, true) @@ -117,7 +129,7 @@ export function createModelLoader(id: string, options: ModelLoaderOptions): Mode } /** - * Creates a new Blockbench.Menu and automatically handles it's deletion on the plugin unload and uninstall events. + * Creates a new Blockbench.Menu and automatically handles it's deletion on the plugin unload and uninstall EVENTS. * See https://www.blockbench.net/wiki/api/menu for more information on the Blockbench.Menu class. * @param template The menu template. * @param options The options for the menu. @@ -126,7 +138,7 @@ export function createModelLoader(id: string, options: ModelLoaderOptions): Mode export function createMenu(template: MenuItem[], options?: MenuOptions) { const menu = new Menu(template, options) - // events.EXTRACT_MODS.subscribe(() => { + // EVENTS.EXTRACT_MODS.subscribe(() => { // menu.delete() // }, true) @@ -134,7 +146,7 @@ export function createMenu(template: MenuItem[], options?: MenuOptions) { } /** - * Creates a new Blockbench.BarMenu and automatically handles it's deletion on the plugin unload and uninstall events. + * Creates a new Blockbench.BarMenu and automatically handles it's deletion on the plugin unload and uninstall EVENTS. * @param id A namespaced ID ('my-plugin-id:my-menu') * @param structure The menu structure. * @param condition The condition for the menu to be visible. @@ -147,7 +159,7 @@ export function createBarMenu( ) { const menu = new BarMenu(id, structure, condition) - // events.EXTRACT_MODS.subscribe(() => { + // EVENTS.EXTRACT_MODS.subscribe(() => { // menu.delete() // }, true) @@ -161,7 +173,7 @@ const SUBSCRIBABLES = new Map< any, [ Subscribable<{ storage: Storage; value: any }>, - Subscribable<{ storage: Storage; newValue: any }> + Subscribable<{ storage: Storage; newValue: any }>, ] >() @@ -171,7 +183,7 @@ const SUBSCRIBABLES = new Map< * @param key The key of the property on the object. * @returns A tuple of {@link Subscribable | Subscribables} [onGet, onSet] * @example - * Using the subscribables as simple events. + * Using the subscribables as simple EVENTS. * ```ts * const [onGet, onSet] = createPropertySubscribable(Blockbench, 'version') * onGet.subscribe(({ value }) => console.log('Blockbench version:', value)) @@ -215,7 +227,7 @@ export function createPropertySubscribable(object: any, key: string configurable: true, }) - events.EXTRACT_MODS.subscribe(() => { + EVENTS.EXTRACT_MODS.subscribe(() => { const value = object[key] delete object[key] Object.defineProperty(object, key, { @@ -248,3 +260,33 @@ export function createPropertySubscribable(object: any, key: string // ) { // // // } + +/** + * A wrapper for the Blockbench.Property class that deep-clones the property value when copying or merging. + */ +export class ObjectProperty extends Property<'object'> { + constructor(target: any, name: string, options: PropertyOptions) { + super(target, 'object', name, options) + } + + copy(instance: any, target: any) { + if (instance[this.name] == undefined) { + target[this.name] = instance[this.name] + } else { + target[this.name] = JSON.parse(JSON.stringify(instance[this.name])) + } + } + + merge(instance: any, data: any) { + if (data[this.name] == undefined) { + instance[this.name] = this.default + } else { + instance[this.name] = JSON.parse(JSON.stringify(data[this.name])) + } + } +} + +export const fixClassPropertyInheritance: ClassDecorator = target => { + target.properties = { ...target.properties } + return target +} diff --git a/src/util/stores.ts b/src/util/stores.ts index 809ee975..551475da 100644 --- a/src/util/stores.ts +++ b/src/util/stores.ts @@ -1,27 +1,45 @@ import { get, type Subscriber, type Unsubscriber, type Writable, writable } from 'svelte/store' +import { mapObjEntries } from './misc' -export class Valuable implements Writable { - static all: Array> = [] +/** + * Syncables are stores that have both a getter and a setter. + * + * They are useful when you want to have a store that needs to be accessed and modified from multiple places. + */ +export class Syncable implements Writable { + static all: Array> = [] private store: Writable - private valueValidator: (value: T) => T - - constructor(value: T, valueValidator?: Valuable['valueValidator']) { + private validator: (value: T) => T + /** + * @param value The initial value of the store. + * @param validator A function that validates the value before it is set. + */ + constructor(value: T, validator?: Syncable['validator']) { this.store = writable(value) - this.valueValidator = valueValidator || ((value: T) => value) - Valuable.all.push(this) + this.validator = validator ?? (v => v) + Syncable.all.push(this) } get() { - return this.valueValidator(get(this.store)) + return this.validator(get(this.store)) } set(value: T) { - return this.store.set(this.valueValidator(value)) + return this.store.set(this.validator(value)) + } + + /** + * Dispatches the current value to all subscribers. + * + * This is useful when the value is an object or array and you want to notify all subscribers that the value has changed. + */ + dispatch() { + this.store.set(this.get()) } update(fn: (value: T) => T) { - return this.store.update((value: T) => this.valueValidator(fn(value))) + return this.store.update(v => this.validator(fn(v))) } subscribe(run: Subscriber, invalidate?: (value?: T) => void): Unsubscriber { @@ -29,7 +47,7 @@ export class Valuable implements Writable { } } -export class SetStore extends Valuable> { +export class SetStore extends Syncable> { constructor(value: Set) { super(value, (value: Set) => new Set(value)) } @@ -37,12 +55,42 @@ export class SetStore extends Valuable> { add(value: T) { const set = this.get() set.add(value) - this.set(set) + this.dispatch() } delete(value: T) { const set = this.get() set.delete(value) - this.set(set) + this.dispatch() + } +} + +export class MapStore extends Syncable> { + constructor(value: Map) { + super(value, (value: Map) => new Map(value)) + } + + setKey(key: K, value: V) { + const map = this.get() + map.set(key, value) + this.dispatch() + } + + delete(key: K) { + const map = this.get() + map.delete(key) + this.dispatch() + } +} + +export function makeSyncable>(obj: O) { + return mapObjEntries(obj, (k, v) => [k, new Syncable(v)]) as { + [Key in keyof O]: Syncable + } +} + +export function makeNotSyncable>>(obj: O) { + return mapObjEntries(obj, (k, v) => [k, v.get()]) as { + [Key in keyof O]: ReturnType } } diff --git a/src/util/svelteDialog.ts b/src/util/svelteDialog.ts index 9d1c94d2..a349bb35 100644 --- a/src/util/svelteDialog.ts +++ b/src/util/svelteDialog.ts @@ -6,7 +6,7 @@ const DIALOG_STACK: Array> = [] type SvelteDialogOptions = Omit< DialogOptions, - 'lines' + 'lines' | 'sidebar' | 'component' > & { id: string component: SvelteComponentConstructor @@ -24,11 +24,10 @@ export class SvelteDialog> extends Dialog { const mount = document.createComment(`svelte-dialog-` + guid()) const dialogOptions = { ...options } - delete dialogOptions.component - - super(options.id, { + super({ ...dialogOptions, lines: [mount], + component: undefined, }) this.onOpen = () => { @@ -90,3 +89,135 @@ export class SvelteDialog> extends Dialog { } } } + +interface SidebarDialogPage { + icon: string + label: string + component: SvelteComponentConstructor + props: U['props'] + condition?: () => boolean +} + +interface SidebarDialogOptions + extends DialogSidebarOptions { + pages: Record> + defaultPage?: string + onPageSwitch?(page: string): void +} + +type SvelteSidebarDialogOptions = Omit & { + id: string + sidebar: SidebarDialogOptions + preventKeybinds?: boolean + preventKeybindConfirm?: boolean + preventKeybindCancel?: boolean + onClose?: () => void + stackable?: boolean +} + +export class SvelteSidebarDialog extends Dialog { + instance?: SvelteComponentDev | undefined + pages: Record> + defaultPage: string + + private conditionInterval: ReturnType + + constructor(options: SvelteSidebarDialogOptions) { + const mount = document.createComment(`svelte-dialog-` + guid()) + + const dialogOptions = { ...options } + + const userOnPageSwitch = options.sidebar.onPageSwitch + options.sidebar.onPageSwitch = (page: string) => { + this.instance?.$destroy() + this.instance = new this.pages[page].component({ + target: mount.parentElement, + props: this.pages[page].props, + }) as SvelteComponentDev + + userOnPageSwitch?.(page) + } + + super(options.id, { + ...dialogOptions, + lines: [mount], + component: undefined, + }) + + this.conditionInterval = setInterval(() => { + for (const [key, other] of Object.entries(this.pages)) { + if (other.condition === undefined) continue + this.sidebar!.page_menu[key].style.display = other.condition?.() ? '' : 'none' + } + }, 1000 / 60) + + this.pages = options.sidebar.pages + + if (Object.keys(this.pages).length === 0) { + throw new Error('No pages provided for sidebar dialog!') + } + + this.defaultPage = Object.keys(options.sidebar.pages)[0] + if (options.sidebar.defaultPage) { + this.defaultPage = options.sidebar.defaultPage + } + + this.onOpen = () => { + const parentElement = mount.parentElement + if (this.instance || !parentElement) return + parentElement.style.overflow = 'visible' + + this.sidebar!.onPageSwitch(this.defaultPage) + + if (options.onOpen) options.onOpen() + if (!options.stackable) { + DIALOG_STACK.forEach(v => v.cancel()) + DIALOG_STACK.empty() + } + DIALOG_STACK.push(this) + } + + this.confirm = (e: Event) => { + if (e instanceof KeyboardEvent) { + if (options.preventKeybinds) { + e.preventDefault() + e.stopPropagation() + return + } else if ( + options.preventKeybindConfirm && + e.key === Keybinds.extra.confirm.keybind.getCode() + ) { + e.preventDefault() + e.stopPropagation() + return + } else if ( + options.preventKeybindCancel && + e.key === Keybinds.extra.cancel.keybind.getCode() + ) { + e.preventDefault() + e.stopPropagation() + return + } + } + this.close(this.confirmIndex, e) + } + + this.onButton = (...args) => { + if (!this.instance) return + this.instance.$destroy() + this.instance = undefined + if (options.onButton) options.onButton(...args) + if (options.onClose) options.onClose() + } + + this.onCancel = (...args) => { + if (!this.instance) return + this.instance.$destroy() + this.instance = undefined + if (options.onCancel) options.onCancel(...args) + if (options.onClose) options.onClose() + } + + console.log(this) + } +} diff --git a/src/util/sveltePanel.ts b/src/util/sveltePanel.ts index c88a5a0f..352d57ab 100644 --- a/src/util/sveltePanel.ts +++ b/src/util/sveltePanel.ts @@ -1,7 +1,7 @@ -import { ComponentConstructorOptions, SvelteComponent } from 'svelte' -import { SvelteComponentConstructor } from './misc' -import * as PACKAGE from '../../package.json' +import { type ComponentConstructorOptions, SvelteComponent } from 'svelte' +import PACKAGE from '../../package.json' import { pollPromise } from '../util/promises' +import { type SvelteComponentConstructor } from './misc' type SveltePanelOptions = Omit< PanelOptions, @@ -27,7 +27,7 @@ export class SveltePanel extends Panel { void pollPromise(() => document.querySelector(`#${mountId}`)).then(el => { this.instance = new options.component({ - target: el.parentElement, + target: el, props: options.props, }) }) diff --git a/src/util/translation.ts b/src/util/translation.ts index 65711ef5..1d18f35f 100644 --- a/src/util/translation.ts +++ b/src/util/translation.ts @@ -1,23 +1,46 @@ // @ts-ignore import { default as LANGUAGES, filenames as filepaths } from '../lang/*.yml' +import { markdownToHTML } from './misc' const FILE_NAMES = filepaths.map((path: string) => PathModule.basename(path, '.yml')) +interface TranslationFile { + [key: string]: string | TranslationFile +} + +function flattenTranslations(obj: TranslationFile, path: string[] = []): Record { + const result: Record = {} + for (const key in obj) { + const value = obj[key] + if (typeof value === 'string') { + result[[...path, key].join('.')] = value + } else { + Object.assign(result, flattenTranslations(value, [...path, key])) + } + } + return result +} + +const TRANSLATIONS = LANGUAGES.map((v: { default: TranslationFile }) => + flattenTranslations(v.default) +) + export function translate(key: string, ...args: string[]) { let languageIndex = FILE_NAMES.indexOf(settings.language.value) if (languageIndex === -1) { console.warn(`Could not find language '${settings.language.value as string}'`) languageIndex = FILE_NAMES.indexOf('en') } - const lang = LANGUAGES[languageIndex] as Record - if (!key.startsWith('animated_java.')) { - key = `animated_java.${key}` + const lang = TRANSLATIONS[languageIndex] as Record + + let translation = lang[key] + if (translation === undefined && !key.startsWith('animated_java.')) { + translation = lang[`animated_java.${key}`] } - const translation = lang[key] if (translation) { - return translation.replace(/\{(\d+)\}/g, (str, index) => args[index] || '') + return markdownToHTML(translation.replace(/\{(\d+)\}/g, (str, index) => args[index] || '')) } else { - console.warn(`Could not find translation for '${key}'`) + console.warn(`Could not find translation for '${key}' or 'animated_java.${key}'`) return key } } diff --git a/src/variants.ts b/src/variants.ts index 97d3f28c..f0e3c256 100644 --- a/src/variants.ts +++ b/src/variants.ts @@ -1,6 +1,6 @@ -import { IBlueprintVariantJSON } from './blueprintFormat' -import { getKeyframeVariant, setKeyframeVariant } from './mods/customKeyframesMod' -import { events } from './util/events' +import EVENTS from '@events' +import { type IBlueprintVariantJSON } from './blockbench-additions/model-formats/ajblueprint' +import { getKeyframeVariant, setKeyframeVariant } from './blockbench-mods/misc/customKeyframes' import { sanitizePathName } from './util/minecraftUtil' export class TextureMap { @@ -99,14 +99,14 @@ export class Variant { } Variant.all.push(this) // this.select() - events.CREATE_VARIANT.dispatch(this) + EVENTS.CREATE_VARIANT.dispatch(this) } public select() { if (Variant.selected) Variant.selected.unselect() Variant.selected = this Canvas.updateAllFaces() - events.SELECT_VARIANT.dispatch(this) + EVENTS.SELECT_VARIANT.dispatch(this) } public unselect() { @@ -138,7 +138,7 @@ export class Variant { Variant.selectDefault() } - events.DELETE_VARIANT.dispatch(this) + EVENTS.DELETE_VARIANT.dispatch(this) } public toJSON() { @@ -193,7 +193,7 @@ export class Variant { } let i = 1 - const match = displayName.match(/\d+$/) + const match = /\d+$/.exec(displayName) if (match) { i = parseInt(match[0]) displayName = displayName.slice(0, -match[0].length) @@ -218,7 +218,7 @@ export class Variant { } let i = 1 - const match = name.match(/\d+$/) + const match = /\d+$/.exec(name) if (match) { i = parseInt(match[0]) name = name.slice(0, -match[0].length) @@ -246,10 +246,10 @@ export class Variant { } } -events.SELECT_PROJECT.subscribe(project => { +EVENTS.SELECT_PROJECT.subscribe(project => { project.variants ??= [] Variant.all = project.variants }) -events.UNSELECT_PROJECT.subscribe(() => { +EVENTS.UNSELECT_PROJECT.subscribe(() => { Variant.all = [] }) diff --git a/structure.yaml b/structure.yaml new file mode 100644 index 00000000..6f6ab050 --- /dev/null +++ b/structure.yaml @@ -0,0 +1,116 @@ +naming-conventions: + - folders: Folders should be named in kebab-case + - files: |- + Most files should be in camelCase. (e.g. myFile.ts) + Files with versions should use underscore instead of a period in version numbers. (e.g. v1_0_0.ts). + Files that are the entry point for a folder should be named index.ts + +repo-folder-structure: + - src: + - assets: # Contains any assets used by the plugin + + - ui: # Contains most of the UI components and their entry index.ts files + - index.ts # Exports all the UI components so the plugin index can import './ui' + - dialogs: + - dialog-example: + - index.ts + - dialogExample.svelte + - sidebar-dialog-example: + - index.ts + - sidebarDialogExample.svelte + - pages: + - page1.svelte + - page2.svelte + - panels: + - popups: + + - svelte-components: # Generic Svelte components that can be used in multiple places + - dialog-items: + - sidebar-dialog-items: + + - lang: # Contains the language files + - en.yml + + - blockbench-mods: # Contains any mods made to Blockbench by the plugin + - action: + - class-properties: + - function-overwrites: + - global: + - prototype: + - ui: + - misc: # Contains any other mods that don't fit into the other categories + - modName.ts # If the mod only uses one file, it can be placed directly in the mod's folder. + - mod-name: + # Each mod should globally declare any type modifications it makes to Blockbench classes, interfaces, and functions. + # This keeps the global.d.ts file clean and keeps a mod's changes all in one place. + - index.ts + + - blockbench-additions: # Contains any additions to Blockbench by the plugin + - class-properties: + - outliner-elements: + - resizeableOutlinerElement.ts + - textDisplay.ts + - itemDisplay.ts + - blockDisplay.ts + - model-formats: # Contains model format additions + - ajblueprint: + - versions: + - v0_0_0.ts # Each version of the model format, typed, and with an upgrade function as the default export + - index.ts + - codec.ts + - settings.ts + - converter.ts + - dfu.ts # Data Fixer Upper + + - systems: # Contains the systems used by the plugin + # The data and resource pack compilers should be updated to only export to a virtual file system, and not write to disk. + # The disk writing should be handled after all compilation is complete. + - data-pack-compiler: # Contains the datapack compiler system + - index.ts + - versions: + - mc-1_20_4.ts + - resource-pack-compiler: # Contains the datapack compiler system + - index.ts + - versions: + - mc-1_20_4.ts + - plugin-json-compiler: # Contains the Plugin JSON compiler system + - index.ts + - versions: + - v0.ts + - minecraft-assets: # Contains Minecraft-specific systems + # A resource pack that contains overrides for vanilla assets that are either missing in vanilla, + # or need to be changed to work with AJ's rendering system. + - vanilla-asset-overrides: + - models: + - index.ts + - itemModel.ts + - blockModel.ts + - blockstate.ts + - versions.ts + - minecraft-text-components: + - minecraft-fonts: + - index.ts + - fontRenderer.ts + - rig-renderer: + - animation-renderer: + + - util: # Contains general utilities + - blockbench: # Contains Blockbench specific utilities + - minecraft: # Contains Minecraft specific utilities + + - plugin: + - index.ts # Defines the plugin instance and registers it with Blockbench + - package: # The unprocessed plugin package for the Blockbench plugin repo + - about.svelte + - changelog.json + - icon.svg + - members.yml + + - index.ts # Main entry point for the plugin, imports everything. + - global.d.ts + - blockbench-types.d.ts # Contains any global type modifications to blockbench-types + + - tests: + - tools: + - esbuild-plugins: + - esbuild.ts diff --git a/svelte.config.ts b/svelte.config.ts index be3ebfe1..d42660f1 100644 --- a/svelte.config.ts +++ b/svelte.config.ts @@ -1,11 +1,7 @@ import { resolve } from 'path' -import prep from 'svelte-preprocess' +import sveltePreprocess from 'svelte-preprocess' import { typescript } from 'svelte-preprocess-esbuild' - -export const compilerOptions = { - dev: process.env.NODE_ENV === 'development', - css: true, -} +import type { ISvelteESBuildPluginOptions } from './tools/esbuild-plugins/svelte' export const preprocess = [ typescript({ @@ -14,14 +10,17 @@ export const preprocess = [ 'process.browser': 'true', }, }), - prep({ typescript: false }), + sveltePreprocess({ + typescript: false, + sourceMap: process.env.NODE_ENV === 'development', + }), ] const IMPORT_PATH = resolve(__dirname, '../src/util/', 'events.ts') -export const transformCssToJs = ( - css: string -) => `import { events as SVELTE_EVENTS } from ${JSON.stringify(IMPORT_PATH)}; +export const transformCssToJs = (css: string) => `import SVELTE_EVENTS from ${JSON.stringify( + IMPORT_PATH +)}; (() => { const $deletable = Blockbench.addCSS(${JSON.stringify(css)}); function DELETE_SVELTE_CSS() { $deletable?.delete() } @@ -29,4 +28,11 @@ export const transformCssToJs = ( SVELTE_EVENTS.UNINSTALL.subscribe(DELETE_SVELTE_CSS, true); })()` -export default { preprocess, transformCssToJs } +export default { + preprocess, + transformCssToJs, + compilerOptions: { + dev: process.env.NODE_ENV === 'development', + errorMode: process.env.NODE_ENV === 'development' ? 'warn' : 'throw', + }, +} satisfies ISvelteESBuildPluginOptions diff --git a/test_ajmodels/armor_stand.ajmodel b/test-ajmodels/armor_stand.ajmodel similarity index 100% rename from test_ajmodels/armor_stand.ajmodel rename to test-ajmodels/armor_stand.ajmodel diff --git a/test_ajmodels/bonnie.ajmodel b/test-ajmodels/bonnie.ajmodel similarity index 100% rename from test_ajmodels/bonnie.ajmodel rename to test-ajmodels/bonnie.ajmodel diff --git a/test_ajmodels/no_animations.ajmodel b/test-ajmodels/no_animations.ajmodel similarity index 100% rename from test_ajmodels/no_animations.ajmodel rename to test-ajmodels/no_animations.ajmodel diff --git a/test_ajmodels/test_project.ajmodel b/test-ajmodels/test_project.ajmodel similarity index 100% rename from test_ajmodels/test_project.ajmodel rename to test-ajmodels/test_project.ajmodel diff --git a/test-blueprints/ajbooth_witch_broom.ajblueprint b/test-blueprints/ajbooth_witch_broom.ajblueprint new file mode 100644 index 00000000..f64ce025 --- /dev/null +++ b/test-blueprints/ajbooth_witch_broom.ajblueprint @@ -0,0 +1,2763 @@ +{ + "meta": { + "format": "animated_java_blueprint", + "format_version": "1.5.2", + "uuid": "5603b13d-d160-8027-d740-d40383fe7c83", + "save_location": "D:\\github-repos\\animated-java\\animated-java\\test_blueprints\\ajbooth_witch_broom.ajblueprint", + "last_used_export_namespace": "ajbooth_witch_broom" + }, + "blueprint_settings": { + "export_namespace": "ajbooth_witch_broom", + "show_bounding_box": false, + "auto_bounding_box": true, + "bounding_box": [48, 48], + "enable_plugin_mode": false, + "resource_pack_export_mode": "raw", + "data_pack_export_mode": "raw", + "target_minecraft_version": "1.21.4", + "display_item": "minecraft:light_blue_dye", + "custom_model_data_offset": 0, + "enable_advanced_resource_pack_settings": false, + "enable_advanced_resource_pack_folders": false, + "resource_pack": "C:\\Users\\SnaveSutit\\AppData\\Roaming\\.modrinth\\profiles\\Animated Java Dev\\resourcepacks\\resourcepack", + "display_item_path": "", + "model_folder": "", + "texture_folder": "", + "enable_advanced_data_pack_settings": false, + "data_pack": "C:\\Users\\SnaveSutit\\AppData\\Roaming\\.modrinth\\profiles\\Animated Java Dev\\saves\\Animated Java Dev\\datapacks\\datapack", + "summon_commands": "", + "ticking_commands": "", + "interpolation_duration": 1, + "teleportation_duration": 1, + "use_storage_for_animation": false, + "show_function_errors": false, + "show_outdated_warning": false, + "baked_animations": true, + "json_file": "" + }, + "resolution": { + "width": 64, + "height": 64 + }, + "elements": [ + { + "name": "Body", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-4, 12, -2], + "to": [4, 24, 2], + "autouv": 0, + "color": 0, + "origin": [0, 0, 0], + "uv_offset": [16, 16], + "faces": { + "north": { + "uv": [20, 20, 28, 32], + "texture": 0 + }, + "east": { + "uv": [16, 20, 20, 32], + "texture": 0 + }, + "south": { + "uv": [32, 20, 40, 32], + "texture": 0 + }, + "west": { + "uv": [28, 20, 32, 32], + "texture": 0 + }, + "up": { + "uv": [28, 20, 20, 16], + "texture": 0 + }, + "down": { + "uv": [36, 16, 28, 20], + "texture": 0 + } + }, + "type": "cube", + "uuid": "45d82418-2321-4f24-9a63-b5bc2057e800" + }, + { + "name": "Body Layer", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-4, 12, -2], + "to": [4, 24, 2], + "autouv": 0, + "color": 0, + "inflate": 0.25, + "origin": [0, 0, 0], + "uv_offset": [16, 32], + "faces": { + "north": { + "uv": [20, 36, 28, 48], + "texture": 0 + }, + "east": { + "uv": [16, 36, 20, 48], + "texture": 0 + }, + "south": { + "uv": [32, 36, 40, 48], + "texture": 0 + }, + "west": { + "uv": [28, 36, 32, 48], + "texture": 0 + }, + "up": { + "uv": [28, 36, 20, 32], + "texture": 0 + }, + "down": { + "uv": [36, 32, 28, 36], + "texture": 0 + } + }, + "type": "cube", + "uuid": "37dca7a9-789b-3984-4d16-fdaa3b292048" + }, + { + "name": "Body Layer Inverted", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [4, 24, 2], + "to": [-4, 12, -2], + "autouv": 0, + "color": 0, + "inflate": -0.25, + "origin": [8, 12, 4], + "uv_offset": [16, 32], + "faces": { + "north": { + "uv": [32, 48, 40, 36], + "texture": 0 + }, + "east": { + "uv": [28, 48, 32, 36], + "texture": 0 + }, + "south": { + "uv": [20, 48, 28, 36], + "texture": 0 + }, + "west": { + "uv": [16, 48, 20, 36], + "texture": 0 + }, + "up": { + "uv": [28, 32, 36, 36], + "texture": 0 + }, + "down": { + "uv": [20, 36, 28, 32], + "texture": 0 + } + }, + "type": "cube", + "uuid": "53130d68-3a4f-7a65-51bc-882312407cb7" + }, + { + "name": "Right Arm", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [4, 12, -2.05], + "to": [7, 24, 1.95], + "autouv": 0, + "color": 0, + "origin": [0, 0, -0.05], + "uv_offset": [40, 16], + "faces": { + "north": { + "uv": [44, 20, 47, 32], + "texture": 0 + }, + "east": { + "uv": [40, 20, 44, 32], + "texture": 0 + }, + "south": { + "uv": [51, 20, 54, 32], + "texture": 0 + }, + "west": { + "uv": [47, 20, 51, 32], + "texture": 0 + }, + "up": { + "uv": [47, 20, 44, 16], + "texture": 0 + }, + "down": { + "uv": [50, 16, 47, 20], + "texture": 0 + } + }, + "type": "cube", + "uuid": "a22f9634-063d-97f7-86c5-24256821bb96" + }, + { + "name": "Right Arm Layer", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [4, 12, -2.05], + "to": [7, 24, 1.95], + "autouv": 0, + "color": 0, + "inflate": 0.25, + "origin": [0, 0, -0.05], + "uv_offset": [40, 32], + "faces": { + "north": { + "uv": [44, 36, 47, 48], + "texture": 0 + }, + "east": { + "uv": [40, 36, 44, 48], + "texture": 0 + }, + "south": { + "uv": [51, 36, 54, 48], + "texture": 0 + }, + "west": { + "uv": [47, 36, 51, 48], + "texture": 0 + }, + "up": { + "uv": [47, 36, 44, 32], + "texture": 0 + }, + "down": { + "uv": [50, 32, 47, 36], + "texture": 0 + } + }, + "type": "cube", + "uuid": "6b4537cd-19f5-52e2-fa6a-4b8cd831ff30" + }, + { + "name": "Right Arm Layer Inverted", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [7, 24, 1.95], + "to": [4, 12, -2.05], + "autouv": 0, + "color": 0, + "inflate": -0.25, + "origin": [4, 12, 3.95], + "uv_offset": [40, 32], + "faces": { + "north": { + "uv": [51, 48, 54, 36], + "texture": 0 + }, + "east": { + "uv": [47, 48, 51, 36], + "texture": 0 + }, + "south": { + "uv": [44, 48, 47, 36], + "texture": 0 + }, + "west": { + "uv": [40, 48, 44, 36], + "texture": 0 + }, + "up": { + "uv": [47, 32, 50, 36], + "texture": 0 + }, + "down": { + "uv": [44, 36, 47, 32], + "texture": 0 + } + }, + "type": "cube", + "uuid": "db64cc71-2153-401a-dd3c-b1cea98adebe" + }, + { + "name": "Left Arm", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-7, 12, -2.05], + "to": [-4, 24, 1.95], + "autouv": 0, + "color": 0, + "origin": [0, 0, -0.05], + "uv_offset": [32, 48], + "faces": { + "north": { + "uv": [36, 52, 39, 64], + "texture": 0 + }, + "east": { + "uv": [32, 52, 36, 64], + "texture": 0 + }, + "south": { + "uv": [43, 52, 46, 64], + "texture": 0 + }, + "west": { + "uv": [39, 52, 43, 64], + "texture": 0 + }, + "up": { + "uv": [39, 52, 36, 48], + "texture": 0 + }, + "down": { + "uv": [42, 48, 39, 52], + "texture": 0 + } + }, + "type": "cube", + "uuid": "7ff42713-1443-789a-5165-dbef83209ad8" + }, + { + "name": "Left Arm Layer", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-7, 12, -2.05], + "to": [-4, 24, 1.95], + "autouv": 0, + "color": 0, + "inflate": 0.25, + "origin": [0, 0, -0.05], + "uv_offset": [48, 48], + "faces": { + "north": { + "uv": [52, 52, 55, 64], + "texture": 0 + }, + "east": { + "uv": [48, 52, 52, 64], + "texture": 0 + }, + "south": { + "uv": [59, 52, 62, 64], + "texture": 0 + }, + "west": { + "uv": [55, 52, 59, 64], + "texture": 0 + }, + "up": { + "uv": [55, 52, 52, 48], + "texture": 0 + }, + "down": { + "uv": [59, 48, 55, 52], + "texture": 0 + } + }, + "type": "cube", + "uuid": "693f4ac0-3774-4a83-c93b-2a2951987a65" + }, + { + "name": "Left Arm Layer Inverted", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-4, 24, 1.95], + "to": [-7, 12, -2.05], + "autouv": 0, + "color": 0, + "inflate": -0.25, + "origin": [4, 12, 3.95], + "uv_offset": [48, 48], + "faces": { + "north": { + "uv": [59, 64, 62, 52], + "texture": 0 + }, + "east": { + "uv": [55, 64, 59, 52], + "texture": 0 + }, + "south": { + "uv": [52, 64, 55, 52], + "texture": 0 + }, + "west": { + "uv": [48, 64, 52, 52], + "texture": 0 + }, + "up": { + "uv": [55, 48, 58, 52], + "texture": 0 + }, + "down": { + "uv": [52, 52, 55, 48], + "texture": 0 + } + }, + "type": "cube", + "uuid": "55a3b67f-8f28-db5a-8b77-62ce1e10fcc4" + }, + { + "name": "Head", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-4, 24, -4], + "to": [4, 32, 4], + "autouv": 0, + "color": 0, + "origin": [0, 0, 0], + "faces": { + "north": { + "uv": [8, 8, 16, 16], + "texture": 0 + }, + "east": { + "uv": [0, 8, 8, 16], + "texture": 0 + }, + "south": { + "uv": [24, 8, 32, 16], + "texture": 0 + }, + "west": { + "uv": [16, 8, 24, 16], + "texture": 0 + }, + "up": { + "uv": [16, 8, 8, 0], + "texture": 0 + }, + "down": { + "uv": [24, 0, 16, 8], + "texture": 0 + } + }, + "type": "cube", + "uuid": "9a20434d-4a80-a43d-b8f4-c747f469e12b" + }, + { + "name": "Hat Layer", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-4, 24, -4], + "to": [4, 32, 4], + "autouv": 0, + "color": 0, + "inflate": 0.5, + "origin": [0, 0.5, 0], + "uv_offset": [32, 0], + "faces": { + "north": { + "uv": [40, 8, 48, 16], + "texture": 0 + }, + "east": { + "uv": [32, 8, 40, 16], + "texture": 0 + }, + "south": { + "uv": [56, 8, 64, 16], + "texture": 0 + }, + "west": { + "uv": [48, 8, 56, 16], + "texture": 0 + }, + "up": { + "uv": [48, 8, 40, 0], + "texture": 0 + }, + "down": { + "uv": [56, 0, 48, 8], + "texture": 0 + } + }, + "type": "cube", + "uuid": "f9c88722-d723-f7de-ce1d-40d630c00049" + }, + { + "name": "Hat Layer Inverted", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [4, 32, 4], + "to": [-4, 24, -4], + "autouv": 0, + "color": 0, + "inflate": -0.5, + "origin": [8, 8.5, 8], + "uv_offset": [32, 0], + "faces": { + "north": { + "uv": [56, 16, 64, 8], + "texture": 0 + }, + "east": { + "uv": [48, 16, 56, 8], + "texture": 0 + }, + "south": { + "uv": [40, 16, 48, 8], + "texture": 0 + }, + "west": { + "uv": [32, 16, 40, 8], + "texture": 0 + }, + "up": { + "uv": [48, 0, 56, 8], + "texture": 0 + }, + "down": { + "uv": [40, 8, 48, 0], + "texture": 0 + } + }, + "type": "cube", + "uuid": "55fb5425-1275-3a16-70a7-4b6276ac5999" + }, + { + "name": "Right Leg", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-0.1, 0, -2], + "to": [3.9, 12, 2], + "autouv": 0, + "color": 0, + "origin": [0, 0, 0], + "uv_offset": [0, 16], + "faces": { + "north": { + "uv": [4, 20, 8, 32], + "texture": 0 + }, + "east": { + "uv": [0, 20, 4, 32], + "texture": 0 + }, + "south": { + "uv": [12, 20, 16, 32], + "texture": 0 + }, + "west": { + "uv": [8, 20, 12, 32], + "texture": 0 + }, + "up": { + "uv": [8, 20, 4, 16], + "texture": 0 + }, + "down": { + "uv": [12, 16, 8, 20], + "texture": 0 + } + }, + "type": "cube", + "uuid": "73b9fdbc-c2f9-e43c-ef6d-bc159d183193" + }, + { + "name": "Right Leg Layer", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-0.1, 0, -2], + "to": [3.9, 12, 2], + "autouv": 0, + "color": 0, + "inflate": 0.25, + "origin": [0, 0, 0], + "uv_offset": [0, 32], + "faces": { + "north": { + "uv": [4, 36, 8, 48], + "texture": 0 + }, + "east": { + "uv": [0, 36, 4, 48], + "texture": 0 + }, + "south": { + "uv": [12, 36, 16, 48], + "texture": 0 + }, + "west": { + "uv": [8, 36, 12, 48], + "texture": 0 + }, + "up": { + "uv": [8, 36, 4, 32], + "texture": 0 + }, + "down": { + "uv": [12, 32, 8, 36], + "texture": 0 + } + }, + "type": "cube", + "uuid": "ac495b61-fa9f-44f0-7d4c-30799a96a4c8" + }, + { + "name": "Right Leg Layer Inverted", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [3.9, 12, 2], + "to": [-0.1, 0, -2], + "autouv": 0, + "color": 0, + "inflate": -0.25, + "origin": [4, 12, 4], + "uv_offset": [0, 32], + "faces": { + "north": { + "uv": [12, 48, 16, 36], + "texture": 0 + }, + "east": { + "uv": [8, 48, 12, 36], + "texture": 0 + }, + "south": { + "uv": [4, 48, 8, 36], + "texture": 0 + }, + "west": { + "uv": [0, 48, 4, 36], + "texture": 0 + }, + "up": { + "uv": [8, 32, 12, 36], + "texture": 0 + }, + "down": { + "uv": [4, 36, 8, 32], + "texture": 0 + } + }, + "type": "cube", + "uuid": "426f5735-a6d5-8fdd-78de-06675b178e88" + }, + { + "name": "Left Leg", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-3.9, 0, -2.05], + "to": [0.1, 12, 1.95], + "autouv": 0, + "color": 0, + "origin": [0, 0, -0.05], + "uv_offset": [16, 48], + "faces": { + "north": { + "uv": [20, 52, 24, 64], + "texture": 0 + }, + "east": { + "uv": [16, 52, 20, 64], + "texture": 0 + }, + "south": { + "uv": [28, 52, 32, 64], + "texture": 0 + }, + "west": { + "uv": [24, 52, 28, 64], + "texture": 0 + }, + "up": { + "uv": [24, 52, 20, 48], + "texture": 0 + }, + "down": { + "uv": [28, 48, 24, 52], + "texture": 0 + } + }, + "type": "cube", + "uuid": "de1c2115-133b-e2de-0275-6d784aee8ecc" + }, + { + "name": "Left Leg Layer", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-3.9, 0, -2.05], + "to": [0.1, 12, 1.95], + "autouv": 0, + "color": 0, + "inflate": 0.25, + "origin": [0, 0, -0.05], + "uv_offset": [0, 48], + "faces": { + "north": { + "uv": [4, 52, 8, 64], + "texture": 0 + }, + "east": { + "uv": [0, 52, 4, 64], + "texture": 0 + }, + "south": { + "uv": [12, 52, 16, 64], + "texture": 0 + }, + "west": { + "uv": [8, 52, 12, 64], + "texture": 0 + }, + "up": { + "uv": [8, 52, 4, 48], + "texture": 0 + }, + "down": { + "uv": [12, 48, 8, 52], + "texture": 0 + } + }, + "type": "cube", + "uuid": "0185a3b1-67bf-38b5-373f-6a6facb044bc" + }, + { + "name": "Left Leg Layer Inverted", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [0.1, 12, 1.95], + "to": [-3.9, 0, -2.05], + "autouv": 0, + "color": 0, + "inflate": -0.25, + "origin": [4, 12, 3.95], + "uv_offset": [0, 48], + "faces": { + "north": { + "uv": [12, 64, 16, 52], + "texture": 0 + }, + "east": { + "uv": [8, 64, 12, 52], + "texture": 0 + }, + "south": { + "uv": [4, 64, 8, 52], + "texture": 0 + }, + "west": { + "uv": [0, 64, 4, 52], + "texture": 0 + }, + "up": { + "uv": [8, 48, 12, 52], + "texture": 0 + }, + "down": { + "uv": [4, 52, 8, 48], + "texture": 0 + } + }, + "type": "cube", + "uuid": "da1792fe-8974-f1bb-88bd-262e759f1175" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-1, 10, -16], + "to": [1, 12, 22], + "autouv": 0, + "color": 3, + "origin": [0, 10, -3], + "faces": { + "north": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "east": { + "uv": [4, 4, 42, 6], + "texture": 2 + }, + "south": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "west": { + "uv": [42, 2, 4, 0], + "texture": 2 + }, + "up": { + "uv": [42, 4, 4, 2], + "rotation": 90, + "texture": 2 + }, + "down": { + "uv": [4, 6, 42, 8], + "rotation": 90, + "texture": 2 + } + }, + "type": "cube", + "uuid": "63947e2c-8407-1963-bf31-8eee08aee500" + }, + { + "name": "cube", + "box_uv": true, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-3.5, 7.5, 22], + "to": [3.5, 14.5, 32], + "autouv": 0, + "color": 3, + "origin": [-0.5, 10.5, 37], + "uv_offset": [28, 16], + "faces": { + "north": { + "uv": [38, 26, 45, 33], + "texture": 2 + }, + "east": { + "uv": [28, 26, 38, 33], + "texture": 2 + }, + "south": { + "uv": [55, 26, 62, 33], + "texture": 2 + }, + "west": { + "uv": [45, 26, 55, 33], + "texture": 2 + }, + "up": { + "uv": [45, 26, 38, 16], + "texture": 2 + }, + "down": { + "uv": [52, 16, 45, 26], + "texture": 2 + } + }, + "type": "cube", + "uuid": "53f25d61-a8ce-e2c9-4ccb-32f0b688f827" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [5, 13, -8.05], + "to": [6, 14, 3.95], + "autouv": 0, + "color": 1, + "origin": [5, 12, -2.05], + "faces": { + "north": { + "uv": [0, 0, 1, 1], + "texture": 2 + }, + "east": { + "uv": [0, 0, 1, 12], + "rotation": 90, + "texture": 2 + }, + "south": { + "uv": [0, 0, 1, 1], + "texture": 2 + }, + "west": { + "uv": [0, 12, 1, 0], + "rotation": 90, + "texture": 2 + }, + "up": { + "uv": [0, 0, 1, 12], + "texture": 2 + }, + "down": { + "uv": [0, 12, 1, 0], + "texture": 2 + } + }, + "type": "cube", + "uuid": "164667fe-1cad-e25a-efd1-1a3716dfbbf9" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [5.474, 14.95148, -12.73926], + "to": [5.524, 15.95148, -7.73926], + "autouv": 0, + "color": 1, + "rotation": [-22.5, 0, 0], + "origin": [5.5, 14.95148, -7.73926], + "faces": { + "north": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "east": { + "uv": [0, 4, 20, 8], + "texture": 1 + }, + "south": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "west": { + "uv": [20, 4, 0, 8], + "texture": 1 + }, + "up": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "texture": null + } + }, + "type": "cube", + "uuid": "9b9e03f6-1324-ab71-11bc-b08061b7712a" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [5.399, 13, -12.55], + "to": [5.599, 14, -7.55], + "autouv": 0, + "color": 1, + "rotation": [22.5, 0, 0], + "origin": [5.5, 13.5, -12.55], + "faces": { + "north": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "east": { + "uv": [36, 4, 16, 8], + "texture": 1 + }, + "south": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "west": { + "uv": [16, 4, 36, 8], + "texture": 1 + }, + "up": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "texture": null + } + }, + "type": "cube", + "uuid": "e39f2736-2736-e6fb-c569-4a6f55c55aaa" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [5.449, 11.12464, -8.12194], + "to": [5.549, 17.12464, -7.12194], + "autouv": 0, + "color": 1, + "rotation": [-22.5, 0, 0], + "origin": [5.5, 11.12464, -8.12194], + "faces": { + "north": { + "uv": [0, 0, 0, 0], + "rotation": 180, + "texture": null + }, + "east": { + "uv": [32, 4, 56, 8], + "rotation": 270, + "texture": 1 + }, + "south": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "west": { + "uv": [32, 4, 56, 8], + "rotation": 270, + "texture": 1 + }, + "up": { + "uv": [0, 0, 0, 0], + "rotation": 180, + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "texture": null + } + }, + "type": "cube", + "uuid": "c7c670d3-c3e7-f1c1-a857-0bfeed6be33d" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [5.424, 9.87536, -8.12194], + "to": [5.574, 15.87536, -7.12194], + "autouv": 0, + "color": 1, + "rotation": [22.5, 0, 0], + "origin": [5.5, 15.87536, -8.12194], + "faces": { + "north": { + "uv": [0, 0, 0, 0], + "rotation": 180, + "texture": null + }, + "east": { + "uv": [48, 0, 24, 4], + "rotation": 90, + "texture": 1 + }, + "south": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "west": { + "uv": [48, 0, 24, 4], + "rotation": 90, + "texture": 1 + }, + "up": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "rotation": 180, + "texture": null + } + }, + "type": "cube", + "uuid": "935a8c82-6b9e-cf70-7360-5ad0197622f7" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [5.499, 13.0506, -10.49417], + "to": [5.499, 17.0506, -9.49417], + "autouv": 0, + "color": 1, + "origin": [5.5, 20.5506, -9.49417], + "faces": { + "north": { + "uv": [0, 0, 0, 0], + "rotation": 180, + "texture": null + }, + "east": { + "uv": [16, 0, 0, 4], + "rotation": 270, + "texture": 1 + }, + "south": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "west": { + "uv": [16, 0, 0, 4], + "rotation": 270, + "texture": 1 + }, + "up": { + "uv": [0, 0, 0, 0], + "rotation": 180, + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "texture": null + } + }, + "type": "cube", + "uuid": "43115d9e-1e6c-7684-030b-05e980fb6498" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [6, 10, -6.05], + "to": [6, 13, 3.95], + "autouv": 0, + "color": 1, + "origin": [5, 11, -0.05], + "faces": { + "north": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "east": { + "uv": [1, 2, 4, 12], + "rotation": 90, + "texture": 2 + }, + "south": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "west": { + "uv": [1, 12, 4, 2], + "rotation": 90, + "texture": 2 + }, + "up": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "texture": null + } + }, + "type": "cube", + "uuid": "94f914ad-eb20-d7bf-0e51-4253cf38d09a" + }, + { + "name": "cube", + "box_uv": true, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-1.5, 9.5, -19.25], + "to": [1.5, 12.5, -16.25], + "autouv": 0, + "color": 0, + "origin": [-0.5, 9.5, -17.25], + "uv_offset": [42, 0], + "faces": { + "north": { + "uv": [45, 3, 48, 6], + "texture": 2 + }, + "east": { + "uv": [42, 3, 45, 6], + "texture": 2 + }, + "south": { + "uv": [51, 3, 54, 6], + "texture": 2 + }, + "west": { + "uv": [48, 3, 51, 6], + "texture": 2 + }, + "up": { + "uv": [48, 3, 45, 0], + "texture": 2 + }, + "down": { + "uv": [51, 0, 48, 3], + "texture": 2 + } + }, + "type": "cube", + "uuid": "0bb3b56e-f47f-5c47-14fe-f6dd3de3a639" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-1, 6, -16], + "to": [-1, 10, 22], + "autouv": 0, + "color": 3, + "origin": [0, 10, -3], + "faces": { + "north": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "east": { + "uv": [4, 8, 42, 12], + "texture": 2 + }, + "south": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "west": { + "uv": [42, 8, 4, 12], + "texture": 2 + }, + "up": { + "uv": [0, 0, 0, 0], + "rotation": 90, + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "rotation": 90, + "texture": null + } + }, + "type": "cube", + "uuid": "c0c36880-9cd7-a3e3-749b-2ef00dbd1051" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [1, 6, -16], + "to": [1, 10, 22], + "autouv": 0, + "color": 3, + "origin": [2, 10, -3], + "faces": { + "north": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "east": { + "uv": [4, 12, 42, 16], + "texture": 2 + }, + "south": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "west": { + "uv": [42, 12, 4, 16], + "texture": 2 + }, + "up": { + "uv": [0, 0, 0, 0], + "rotation": 90, + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "rotation": 90, + "texture": null + } + }, + "type": "cube", + "uuid": "0cb22105-c1b9-086d-f0d9-e087c1a1139f" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [1.5, 12.5, -16.25], + "to": [-1.5, 9.5, -19.25], + "autouv": 0, + "color": 0, + "inflate": -0.25, + "origin": [2.5, 12.5, -14.25], + "uv_offset": [54, 6], + "faces": { + "north": { + "uv": [54, 0, 57, 3], + "texture": 2 + }, + "east": { + "uv": [54, 0, 57, 3], + "texture": 2 + }, + "south": { + "uv": [54, 0, 57, 3], + "texture": 2 + }, + "west": { + "uv": [54, 0, 57, 3], + "texture": 2 + }, + "up": { + "uv": [54, 0, 57, 3], + "texture": 2 + }, + "down": { + "uv": [54, 0, 57, 3], + "texture": 2 + } + }, + "type": "cube", + "uuid": "7bee31f4-0f08-299a-aaa0-8177d8078dff" + }, + { + "name": "cube", + "box_uv": true, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [0, 11, 11], + "to": [2, 13, 13], + "autouv": 0, + "color": 7, + "origin": [1, 12, 12], + "uv_offset": [12, 19], + "faces": { + "north": { + "uv": [14, 21, 16, 23], + "texture": 2 + }, + "east": { + "uv": [12, 21, 14, 23], + "texture": 2 + }, + "south": { + "uv": [18, 21, 20, 23], + "texture": 2 + }, + "west": { + "uv": [16, 21, 18, 23], + "texture": 2 + }, + "up": { + "uv": [16, 21, 14, 19], + "texture": 2 + }, + "down": { + "uv": [18, 19, 16, 21], + "texture": 2 + } + }, + "type": "cube", + "uuid": "6fef4f90-1eea-a2f3-84ac-19fa1edeba34" + }, + { + "name": "cube", + "box_uv": true, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-2.5, 12, 12], + "to": [2.5, 16, 17], + "autouv": 0, + "color": 7, + "origin": [0.5, 12, 13], + "uv_offset": [0, 30], + "faces": { + "north": { + "uv": [5, 35, 10, 39], + "texture": 2 + }, + "east": { + "uv": [0, 35, 5, 39], + "texture": 2 + }, + "south": { + "uv": [15, 35, 20, 39], + "texture": 2 + }, + "west": { + "uv": [10, 35, 15, 39], + "texture": 2 + }, + "up": { + "uv": [10, 35, 5, 30], + "texture": 2 + }, + "down": { + "uv": [15, 30, 10, 35], + "texture": 2 + } + }, + "type": "cube", + "uuid": "ea6d3eea-4586-0816-0a8a-bfc509ba028f" + }, + { + "name": "cube", + "box_uv": true, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-2, 15, 11], + "to": [2, 18, 15], + "autouv": 0, + "color": 7, + "origin": [1, 14, 11], + "uv_offset": [0, 23], + "faces": { + "north": { + "uv": [4, 27, 8, 30], + "texture": 2 + }, + "east": { + "uv": [0, 27, 4, 30], + "texture": 2 + }, + "south": { + "uv": [12, 27, 16, 30], + "texture": 2 + }, + "west": { + "uv": [8, 27, 12, 30], + "texture": 2 + }, + "up": { + "uv": [8, 27, 4, 23], + "texture": 2 + }, + "down": { + "uv": [12, 23, 8, 27], + "texture": 2 + } + }, + "type": "cube", + "uuid": "f9cc9927-9caa-17b1-7172-3391bc9967c5" + }, + { + "name": "cube", + "box_uv": true, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-1.5, 18, 10], + "to": [1.5, 20, 13], + "autouv": 0, + "color": 7, + "origin": [0.5, 18, 9], + "uv_offset": [0, 16], + "faces": { + "north": { + "uv": [3, 19, 6, 21], + "texture": 2 + }, + "east": { + "uv": [0, 19, 3, 21], + "texture": 2 + }, + "south": { + "uv": [9, 19, 12, 21], + "texture": 2 + }, + "west": { + "uv": [6, 19, 9, 21], + "texture": 2 + }, + "up": { + "uv": [6, 19, 3, 16], + "texture": 2 + }, + "down": { + "uv": [9, 16, 6, 19], + "texture": 2 + } + }, + "type": "cube", + "uuid": "938e8b16-7a21-e402-d481-6035bb73cd17" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-3.5, 19, 12], + "to": [-0.5, 22, 12], + "autouv": 0, + "color": 7, + "origin": [-1.5, 20, 9], + "faces": { + "north": { + "uv": [17, 16, 20, 19], + "texture": 2 + }, + "east": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "south": { + "uv": [20, 16, 23, 19], + "texture": 2 + }, + "west": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "up": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "texture": null + } + }, + "type": "cube", + "uuid": "dd3cb301-f072-0447-26bb-aa239d5864ba" + }, + { + "name": "cube", + "box_uv": true, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-1.5, 18, 9], + "to": [1.5, 19, 10], + "autouv": 0, + "color": 7, + "origin": [0.5, 17, 6], + "uv_offset": [0, 21], + "faces": { + "north": { + "uv": [1, 22, 4, 23], + "texture": 2 + }, + "east": { + "uv": [0, 22, 1, 23], + "texture": 2 + }, + "south": { + "uv": [5, 22, 8, 23], + "texture": 2 + }, + "west": { + "uv": [4, 22, 5, 23], + "texture": 2 + }, + "up": { + "uv": [4, 22, 1, 21], + "texture": 2 + }, + "down": { + "uv": [7, 21, 4, 22], + "texture": 2 + } + }, + "type": "cube", + "uuid": "ade1c9ce-a3f2-b6ae-44fa-55a993b0749e" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-2.5, 17, 9], + "to": [2.5, 20, 9], + "autouv": 0, + "color": 7, + "origin": [1.5, 17, 6], + "uv_offset": [1, 22], + "faces": { + "north": { + "uv": [12, 16, 17, 19], + "texture": 2 + }, + "east": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "south": { + "uv": [12, 16, 17, 19], + "texture": 2 + }, + "west": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "up": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "texture": null + } + }, + "type": "cube", + "uuid": "bbbdefdc-5fb6-fa1f-4b13-39e8c045e0e3" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [0.5, 19, 12], + "to": [3.5, 22, 12], + "autouv": 0, + "color": 7, + "origin": [1.5, 20, 9], + "faces": { + "north": { + "uv": [20, 16, 17, 19], + "texture": 2 + }, + "east": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "south": { + "uv": [23, 16, 20, 19], + "texture": 2 + }, + "west": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "up": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "texture": null + } + }, + "type": "cube", + "uuid": "0947e07a-fbce-bd81-536a-514bb9ac87aa" + }, + { + "name": "cube", + "box_uv": true, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [-2, 11, 11], + "to": [0, 13, 13], + "autouv": 0, + "color": 7, + "mirror_uv": true, + "origin": [-1, 12, 12], + "uv_offset": [12, 19], + "faces": { + "north": { + "uv": [16, 21, 14, 23], + "texture": 2 + }, + "east": { + "uv": [18, 21, 16, 23], + "texture": 2 + }, + "south": { + "uv": [20, 21, 18, 23], + "texture": 2 + }, + "west": { + "uv": [14, 21, 12, 23], + "texture": 2 + }, + "up": { + "uv": [14, 21, 16, 19], + "texture": 2 + }, + "down": { + "uv": [16, 19, 18, 21], + "texture": 2 + } + }, + "type": "cube", + "uuid": "28d5f17e-1718-c16e-d620-2eae46e6ad48" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [0, 12, 16], + "to": [0, 24, 24], + "autouv": 0, + "color": 7, + "origin": [0.5, 13, 17], + "uv_offset": [20, 11], + "faces": { + "north": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "east": { + "uv": [28, 19, 20, 31], + "texture": 2 + }, + "south": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "west": { + "uv": [20, 19, 28, 31], + "texture": 2 + }, + "up": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "texture": null + } + }, + "type": "cube", + "uuid": "23229772-9322-7e23-686b-e5fda951e8f3" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [3.5, 14.5, 32], + "to": [-3.5, 7.5, 22], + "autouv": 0, + "color": 3, + "origin": [6.5, 17.5, 47], + "uv_offset": [28, 16], + "faces": { + "north": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "east": { + "uv": [45, 33, 55, 26], + "texture": 2 + }, + "south": { + "uv": [38, 33, 45, 26], + "texture": 2 + }, + "west": { + "uv": [28, 33, 38, 26], + "texture": 2 + }, + "up": { + "uv": [45, 16, 52, 26], + "texture": 2 + }, + "down": { + "uv": [38, 26, 45, 16], + "texture": 2 + } + }, + "type": "cube", + "uuid": "2175040c-9503-bcb8-9bcc-52cc5ec35660" + }, + { + "name": "cube", + "box_uv": false, + "rescale": false, + "locked": false, + "light_emission": 0, + "render_order": "default", + "allow_mirror_modeling": true, + "from": [5.374, 9.9506, -10.49417], + "to": [5.624, 13.7006, -9.49417], + "autouv": 0, + "color": 1, + "origin": [5.5, 17.0506, -9.49417], + "faces": { + "north": { + "uv": [0, 0, 0, 0], + "rotation": 180, + "texture": null + }, + "east": { + "uv": [28, 0, 13, 4], + "rotation": 270, + "texture": 1 + }, + "south": { + "uv": [0, 0, 0, 0], + "texture": null + }, + "west": { + "uv": [28, 0, 13, 4], + "rotation": 270, + "texture": 1 + }, + "up": { + "uv": [0, 0, 0, 0], + "rotation": 180, + "texture": null + }, + "down": { + "uv": [0, 0, 0, 0], + "texture": null + } + }, + "type": "cube", + "uuid": "9d9f4cc7-cb0a-1515-b9cb-28a8dcc176cb" + }, + { + "name": "wand_particles", + "position": [5.5, 13.5, -9.5], + "rotation": [0, 0, 0], + "ignore_inherited_scale": false, + "visibility": true, + "locked": false, + "config": null, + "uuid": "c7ae7054-1365-0f5b-e777-ff9284ac230e", + "type": "locator" + }, + { + "name": "broom_particles", + "position": [0, 11, 26], + "rotation": [0, 0, 0], + "ignore_inherited_scale": false, + "visibility": true, + "locked": false, + "config": null, + "uuid": "3857dee2-7a29-d026-bab3-73868390263b", + "type": "locator" + } + ], + "outliner": [ + { + "name": "broom", + "origin": [0, 11, 0], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "e24cb11a-42ef-7cb8-56d8-5eec84e57093", + "export": true, + "mirror_uv": false, + "isOpen": true, + "locked": false, + "visibility": true, + "autouv": 0, + "children": [ + "63947e2c-8407-1963-bf31-8eee08aee500", + "53f25d61-a8ce-e2c9-4ccb-32f0b688f827", + "0bb3b56e-f47f-5c47-14fe-f6dd3de3a639", + "c0c36880-9cd7-a3e3-749b-2ef00dbd1051", + "0cb22105-c1b9-086d-f0d9-e087c1a1139f", + "7bee31f4-0f08-299a-aaa0-8177d8078dff", + "2175040c-9503-bcb8-9bcc-52cc5ec35660", + { + "name": "witch", + "origin": [0, 12, 0], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "e54ffebf-c16f-05d6-6c9d-81e55a97dac8", + "export": true, + "mirror_uv": false, + "isOpen": true, + "locked": false, + "visibility": true, + "autouv": 0, + "children": [ + { + "name": "body", + "origin": [0, 12, 0], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "86662d66-4b1e-be0a-bbaa-6a6dec088fef", + "export": true, + "mirror_uv": false, + "isOpen": true, + "locked": false, + "visibility": true, + "autouv": 0, + "children": [ + "45d82418-2321-4f24-9a63-b5bc2057e800", + "37dca7a9-789b-3984-4d16-fdaa3b292048", + "53130d68-3a4f-7a65-51bc-882312407cb7", + { + "name": "rightarm", + "origin": [5, 22, -0.05], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "d8d52ffc-92a4-36dc-eadc-b32e43e95516", + "export": true, + "mirror_uv": false, + "isOpen": true, + "locked": false, + "visibility": true, + "autouv": 0, + "children": [ + { + "name": "rightarm_slim", + "origin": [5, 22, -0.05], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "3647609e-a900-8b00-b39e-8c8a909cc6bc", + "export": true, + "mirror_uv": false, + "isOpen": true, + "locked": false, + "visibility": true, + "autouv": 0, + "children": [ + "a22f9634-063d-97f7-86c5-24256821bb96", + "6b4537cd-19f5-52e2-fa6a-4b8cd831ff30", + "db64cc71-2153-401a-dd3c-b1cea98adebe", + { + "name": "wand", + "origin": [5.5, 13.5, -0.05], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "899dfa49-6f29-4fc0-db9a-b0a8e710d2ca", + "export": true, + "mirror_uv": false, + "isOpen": true, + "locked": false, + "visibility": true, + "autouv": 0, + "children": [ + "164667fe-1cad-e25a-efd1-1a3716dfbbf9", + "94f914ad-eb20-d7bf-0e51-4253cf38d09a", + "9b9e03f6-1324-ab71-11bc-b08061b7712a", + "935a8c82-6b9e-cf70-7360-5ad0197622f7", + "e39f2736-2736-e6fb-c569-4a6f55c55aaa", + "9d9f4cc7-cb0a-1515-b9cb-28a8dcc176cb", + "43115d9e-1e6c-7684-030b-05e980fb6498", + "c7c670d3-c3e7-f1c1-a857-0bfeed6be33d", + "c7ae7054-1365-0f5b-e777-ff9284ac230e" + ] + } + ] + } + ] + }, + { + "name": "leftarm", + "origin": [-5, 22, -0.05], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "519e38af-3987-5abc-fc4b-35258cf082d1", + "export": true, + "mirror_uv": false, + "isOpen": true, + "locked": false, + "visibility": true, + "autouv": 0, + "children": [ + { + "name": "leftarm_slim", + "origin": [-5, 22, -0.05], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "2e329e12-5f7f-dfe2-5977-83fbbc53cf25", + "export": true, + "mirror_uv": false, + "isOpen": false, + "locked": false, + "visibility": true, + "autouv": 0, + "children": ["7ff42713-1443-789a-5165-dbef83209ad8", "693f4ac0-3774-4a83-c93b-2a2951987a65", "55a3b67f-8f28-db5a-8b77-62ce1e10fcc4"] + } + ] + }, + { + "name": "head", + "origin": [0, 24, 0], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "b8bb5ce4-8554-85f7-8a9a-74a944beacda", + "export": true, + "mirror_uv": false, + "isOpen": false, + "locked": false, + "visibility": true, + "autouv": 0, + "children": ["9a20434d-4a80-a43d-b8f4-c747f469e12b", "f9c88722-d723-f7de-ce1d-40d630c00049", "55fb5425-1275-3a16-70a7-4b6276ac5999"] + } + ] + }, + { + "name": "rightleg", + "origin": [1.9, 12, 0], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "16a71e7b-efea-4d7e-2197-b83f1c54966e", + "export": true, + "mirror_uv": false, + "isOpen": false, + "locked": false, + "visibility": true, + "autouv": 0, + "children": ["73b9fdbc-c2f9-e43c-ef6d-bc159d183193", "ac495b61-fa9f-44f0-7d4c-30799a96a4c8", "426f5735-a6d5-8fdd-78de-06675b178e88"] + }, + { + "name": "leftleg", + "origin": [-1.9, 12, -0.05], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "c71134bb-9430-596b-6372-4eefaf8083f5", + "export": true, + "mirror_uv": false, + "isOpen": false, + "locked": false, + "visibility": true, + "autouv": 0, + "children": ["de1c2115-133b-e2de-0275-6d784aee8ecc", "0185a3b1-67bf-38b5-373f-6a6facb044bc", "da1792fe-8974-f1bb-88bd-262e759f1175"] + } + ] + }, + { + "name": "cat", + "origin": [0, 12, 14.5], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "600a0134-73f2-0ef4-f7f1-6ba4007e0acf", + "export": true, + "mirror_uv": false, + "isOpen": true, + "locked": false, + "visibility": true, + "autouv": 0, + "children": [ + "28d5f17e-1718-c16e-d620-2eae46e6ad48", + "6fef4f90-1eea-a2f3-84ac-19fa1edeba34", + "ea6d3eea-4586-0816-0a8a-bfc509ba028f", + { + "name": "upper_body", + "origin": [0, 16, 14], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "53ae45ad-72b3-918c-5af2-1ac9b48a7ef8", + "export": true, + "mirror_uv": false, + "isOpen": true, + "locked": false, + "visibility": true, + "autouv": 0, + "children": [ + "f9cc9927-9caa-17b1-7172-3391bc9967c5", + { + "name": "cat_head", + "origin": [0, 18, 12], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "5b9afb46-cbe4-e283-eeae-50b4b9dc488e", + "export": true, + "mirror_uv": false, + "isOpen": true, + "locked": false, + "visibility": true, + "autouv": 0, + "children": [ + "938e8b16-7a21-e402-d481-6035bb73cd17", + "dd3cb301-f072-0447-26bb-aa239d5864ba", + "bbbdefdc-5fb6-fa1f-4b13-39e8c045e0e3", + "0947e07a-fbce-bd81-536a-514bb9ac87aa", + "ade1c9ce-a3f2-b6ae-44fa-55a993b0749e" + ] + } + ] + }, + { + "name": "tail", + "origin": [0, 14, 17], + "color": 0, + "configs": { + "variants": {} + }, + "uuid": "09c04eec-1969-9dda-61c6-e7ef781985e1", + "export": true, + "mirror_uv": false, + "isOpen": true, + "locked": false, + "visibility": true, + "autouv": 0, + "children": ["23229772-9322-7e23-686b-e5fda951e8f3"] + } + ] + }, + "3857dee2-7a29-d026-bab3-73868390263b" + ] + } + ], + "textures": [ + { + "path": "C:\\Users\\SnaveSutit\\AppData\\Roaming\\.modrinth\\profiles\\Animated Java Dev\\resourcepacks\\animated_java_booth_rp\\assets\\animated_java_booth\\textures\\item\\witch_skin.png", + "name": "witch_skin.png", + "folder": "", + "namespace": "", + "id": "0", + "group": "", + "width": 64, + "height": 64, + "uv_width": 64, + "uv_height": 64, + "particle": false, + "use_as_default": false, + "layers_enabled": false, + "sync_to_project": "", + "render_mode": "default", + "render_sides": "auto", + "frame_time": 2, + "frame_order_type": "loop", + "frame_order": "", + "frame_interpolate": false, + "visible": true, + "internal": true, + "saved": false, + "uuid": "ce16ff1e-f58a-dbf7-24bb-22dbd43317ec", + "source": "data:image/png;base64,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", + "image_data": "data:image/png;base64,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", + "mode": "bitmap" + }, + { + "path": "C:\\Users\\SnaveSutit\\AppData\\Roaming\\.modrinth\\profiles\\Animated Java Dev\\resourcepacks\\animated_java_booth_rp\\assets\\animated_java_booth\\textures\\item\\witch_animation.png", + "name": "witch_animation.png", + "folder": "", + "namespace": "", + "id": "1", + "group": "", + "width": 16, + "height": 96, + "uv_width": 64, + "uv_height": 64, + "particle": false, + "use_as_default": false, + "layers_enabled": false, + "sync_to_project": "", + "render_mode": "default", + "render_sides": "auto", + "frame_time": 4, + "frame_order_type": "loop", + "frame_order": "", + "frame_interpolate": false, + "visible": true, + "internal": true, + "saved": false, + "uuid": "c3e57243-93f3-dfd7-c4d5-aaa585e74dc6", + "source": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAABgCAYAAAAU0fKgAAAAAXNSR0IArs4c6QAAATtJREFUWEftmDFLxEAQhV/ATrARbEYQS7HSnzaWetVp6fw0rcRSBKew8qorbEaSzZ3JcnfJsSlEXiBsYJch7O775s1U/qIBB5r3A8DXIQABcNqM3zjpTd+YVOg81aN6eL02rU/jwWcbLUU+xrKZWk0fLQC5tCZQL1o38thvBuAm8iIltZRr4cE1cqnu4oPYVZ8Hrs+RQ2MMH26FPFghr/wYx8Jz2zr+wRRi+genoP4UyRhsT+VdPsgsyXh9lX2uMWQqNvHB5Jr+oN1FqpFqnCa9FxNJzWMfq3/RpvU1D15do/b/+xQdNR9MU+FBLXAPeA+msvvFPHiry/9O+2DI6pvc9/2B+l1s6g8M8eG8bUSQB+QBefBneOA6i139w5wPdpb1E/XdY0z/MOeD2Jz+gPXCb+FZnNoYoNxs/wB+FYpheqpQPwAAAABJRU5ErkJggg==", + "image_data": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAABgCAYAAAAU0fKgAAAAAXNSR0IArs4c6QAAATtJREFUWEftmDFLxEAQhV/ATrARbEYQS7HSnzaWetVp6fw0rcRSBKew8qorbEaSzZ3JcnfJsSlEXiBsYJch7O775s1U/qIBB5r3A8DXIQABcNqM3zjpTd+YVOg81aN6eL02rU/jwWcbLUU+xrKZWk0fLQC5tCZQL1o38thvBuAm8iIltZRr4cE1cqnu4oPYVZ8Hrs+RQ2MMH26FPFghr/wYx8Jz2zr+wRRi+genoP4UyRhsT+VdPsgsyXh9lX2uMWQqNvHB5Jr+oN1FqpFqnCa9FxNJzWMfq3/RpvU1D15do/b/+xQdNR9MU+FBLXAPeA+msvvFPHiry/9O+2DI6pvc9/2B+l1s6g8M8eG8bUSQB+QBefBneOA6i139w5wPdpb1E/XdY0z/MOeD2Jz+gPXCb+FZnNoYoNxs/wB+FYpheqpQPwAAAABJRU5ErkJggg==", + "mode": "bitmap" + }, + { + "path": "C:\\Users\\SnaveSutit\\AppData\\Roaming\\.modrinth\\profiles\\Animated Java Dev\\resourcepacks\\animated_java_booth_rp\\assets\\animated_java_booth\\textures\\item\\witch_assets.png", + "name": "witch_assets.png", + "folder": "", + "namespace": "", + "id": "2", + "group": "", + "width": 64, + "height": 64, + "uv_width": 64, + "uv_height": 64, + "particle": false, + "use_as_default": false, + "layers_enabled": false, + "sync_to_project": "", + "render_mode": "default", + "render_sides": "auto", + "frame_time": 1, + "frame_order_type": "loop", + "frame_order": "", + "frame_interpolate": false, + "visible": true, + "internal": true, + "saved": false, + "uuid": "05e98464-7aec-b7f7-3e91-b36b122bef63", + "source": "data:image/png;base64,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", + "image_data": "data:image/png;base64,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", + "mode": "bitmap" + } + ], + "variants": { + "default": { + "name": "default", + "display_name": "Default", + "uuid": "ceca2b6f-acbe-23b5-4e39-b2f2148ed716", + "texture_map": {}, + "excluded_nodes": [], + "is_default": true + }, + "list": [] + }, + "animations": [ + { + "uuid": "55cac467-ea1e-c70f-63e8-6a496a57fbe4", + "name": "pose", + "loop": "loop", + "override": false, + "length": 4, + "snapping": 20, + "selected": true, + "saved": false, + "path": "", + "anim_time_update": "", + "blend_weight": "", + "start_delay": "", + "loop_delay": "0", + "excluded_nodes": [], + "animators": { + "86662d66-4b1e-be0a-bbaa-6a6dec088fef": { + "name": "body", + "type": "bone", + "keyframes": [ + { + "channel": "rotation", + "data_points": [ + { + "x": "21.5326 + math.cos(q.life_time * 180 - 22.5) * 12.25", + "y": 6.94082, + "z": -10.14915 + } + ], + "uuid": "7375b3e2-8bb8-96fe-7d0a-995799b9b124", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + }, + { + "channel": "position", + "data_points": [ + { + "x": "0", + "y": "0", + "z": 1 + } + ], + "uuid": "9bcbb128-fa90-a43c-6715-ca4b3d1287b8", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "3647609e-a900-8b00-b39e-8c8a909cc6bc": { + "name": "rightarm_slim", + "type": "bone", + "keyframes": [ + { + "channel": "rotation", + "data_points": [ + { + "x": "50.6959 - math.cos(q.life_time * 180 + 45) * 22.5 - 12.25", + "y": "15.6806", + "z": "55.0931 - math.cos(q.life_time * 180 - 45) * 22.5" + } + ], + "uuid": "43a3a5bf-eb57-71a6-38f8-a6908ec75014", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "2e329e12-5f7f-dfe2-5977-83fbbc53cf25": { + "name": "leftarm_slim", + "type": "bone", + "keyframes": [ + { + "channel": "rotation", + "data_points": [ + { + "x": "-53.8268 - math.cos(q.life_time * 180 - 22.5) * 12.25", + "y": 23.61535, + "z": 7.1579 + } + ], + "uuid": "6b045717-0fac-aceb-f4a2-8421cea86682", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + }, + { + "channel": "position", + "data_points": [ + { + "x": "0", + "y": "-1 + math.cos(q.life_time * 180 - 22.5)", + "z": "math.cos(q.life_time * 180 - 22.5) * 2" + } + ], + "uuid": "153aa669-4c98-c128-e66f-c02e04c24f6b", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "b8bb5ce4-8554-85f7-8a9a-74a944beacda": { + "name": "head", + "type": "bone", + "keyframes": [ + { + "channel": "rotation", + "data_points": [ + { + "x": "-14.4966 - math.cos(q.life_time * 180 - 22.5) * 12.25", + "y": -6.6848, + "z": 9.10914 + } + ], + "uuid": "2f449be4-da35-4144-e82b-3626a040cda0", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "16a71e7b-efea-4d7e-2197-b83f1c54966e": { + "name": "rightleg", + "type": "bone", + "keyframes": [ + { + "channel": "rotation", + "data_points": [ + { + "x": "-33.735 + math.cos(q.life_time * 180 + 45) * 12.25", + "y": 9.93191, + "z": "14.4817 - math.cos(q.life_time * 180 - 45) * 12.25" + } + ], + "uuid": "2242ad81-4ea6-c374-29ce-7dd39ea7732d", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "c71134bb-9430-596b-6372-4eefaf8083f5": { + "name": "leftleg", + "type": "bone", + "keyframes": [ + { + "channel": "rotation", + "data_points": [ + { + "x": "-27.3779 + math.cos(q.life_time * 180 - 45) * 12.25", + "y": -1.9293, + "z": -9.74852 + } + ], + "uuid": "0e06f514-d90a-8e60-eff7-54f12916d179", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "09c04eec-1969-9dda-61c6-e7ef781985e1": { + "name": "tail", + "type": "bone", + "keyframes": [ + { + "channel": "rotation", + "data_points": [ + { + "x": 14.21301, + "y": -65.79957, + "z": 237.13131 + } + ], + "uuid": "8e858d72-fc56-9bca-b792-6903609981f6", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "600a0134-73f2-0ef4-f7f1-6ba4007e0acf": { + "name": "cat", + "type": "bone", + "keyframes": [ + { + "channel": "rotation", + "data_points": [ + { + "x": 0, + "y": 12.5, + "z": -12.5 + } + ], + "uuid": "e994ff64-e40d-173a-16f4-1eb77fdb6512", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + }, + { + "channel": "scale", + "data_points": [ + { + "x": "1 + math.cos(q.life_time * 180 - 22.5) * 0.1", + "y": "1 - math.cos(q.life_time * 180 - 22.5) * 0.1", + "z": "1 + math.cos(q.life_time * 180 - 22.5) * 0.1" + } + ], + "uuid": "1d7b63da-2172-2b07-33c0-8d587ccdf851", + "time": 0, + "color": -1, + "uniform": false, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "5b9afb46-cbe4-e283-eeae-50b4b9dc488e": { + "name": "cat_head", + "type": "bone", + "keyframes": [ + { + "channel": "rotation", + "data_points": [ + { + "x": "14.8737 + math.cos(q.life_time * 180 - 22.5) * 12.25", + "y": 9.53055, + "z": 12.3725 + } + ], + "uuid": "28f38076-27d5-ec21-7fae-bfab14b87a42", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + }, + { + "channel": "position", + "data_points": [ + { + "x": -1.25, + "y": -0.75, + "z": "0" + } + ], + "uuid": "3129fa1a-35d1-1d11-6b11-7c6a33595618", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "53ae45ad-72b3-918c-5af2-1ac9b48a7ef8": { + "name": "upper_body", + "type": "bone", + "keyframes": [ + { + "channel": "rotation", + "data_points": [ + { + "x": 0, + "y": -6, + "z": -6.5 + } + ], + "uuid": "dbcda364-7b28-fe3f-4265-c8b1825ab332", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + }, + { + "channel": "position", + "data_points": [ + { + "x": -1.25, + "y": "-0.75 - math.cos(q.life_time * 180 - 45) * 1", + "z": "0" + } + ], + "uuid": "0285b4b5-9258-832f-ac2c-6616e28c7090", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "e24cb11a-42ef-7cb8-56d8-5eec84e57093": { + "name": "broom", + "type": "bone", + "keyframes": [ + { + "channel": "rotation", + "data_points": [ + { + "x": "7.5283 - math.cos(q.life_time * 180) * 12.25", + "y": 4.95712, + "z": 0.65426 + } + ], + "uuid": "39c88ccc-2963-635b-7765-4220f69c5931", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + }, + { + "channel": "position", + "data_points": [ + { + "x": "0", + "y": "5 + math.sin(q.life_time * 180) * 4", + "z": "0" + } + ], + "uuid": "1aaa4431-a52a-28b5-eedb-b98102928609", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "e54ffebf-c16f-05d6-6c9d-81e55a97dac8": { + "name": "witch", + "type": "bone", + "keyframes": [ + { + "channel": "rotation", + "data_points": [ + { + "x": "math.cos(q.life_time * 180) * 8", + "y": "0", + "z": "0" + } + ], + "uuid": "3bc3480f-7f1f-6893-006e-d969bfbb5af8", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "c7ae7054-1365-0f5b-e777-ff9284ac230e": { + "name": "wand_particles", + "type": "locator", + "keyframes": [ + { + "channel": "commands", + "data_points": [ + { + "x": 0, + "y": 0, + "z": 0, + "commands": "particle minecraft:cherry_leaves ~ ~ ~ 0 0 0 1 0 normal @a[distance=..10]\nparticle minecraft:entity_effect{color:[1f,0f,1f,0.25f]} ~ ~ ~ 0 0 0 1 0 normal @a[distance=..10]", + "execute_condition": "", + "repeat": true, + "repeat_frequency": 2 + } + ], + "uuid": "acd88c7c-47c3-27c4-0af5-61030286ea23", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + }, + "3857dee2-7a29-d026-bab3-73868390263b": { + "name": "broom_particles", + "type": "locator", + "keyframes": [ + { + "channel": "commands", + "data_points": [ + { + "x": 0, + "y": 0, + "z": 0, + "commands": "particle minecraft:soul_fire_flame ~ ~ ~ 1 \\\n<%-Math.cos(Math.degToRad(animation.frames.indexOf(frame) / 20 * 180 + 45)) * 0.4 + 0.2%> \\\n0.25 0.3 0 normal @a[distance=..10]", + "execute_condition": "", + "repeat": true, + "repeat_frequency": 1 + } + ], + "uuid": "53cfec98-056d-b748-ea88-9e69b40792b5", + "time": 0, + "color": -1, + "interpolation": "linear", + "easing": "linear", + "easingArgs": [] + } + ] + } + } + } + ], + "animation_controllers": [] +} \ No newline at end of file diff --git a/test_blueprints/armor_stand.ajblueprint b/test-blueprints/armor_stand.ajblueprint similarity index 100% rename from test_blueprints/armor_stand.ajblueprint rename to test-blueprints/armor_stand.ajblueprint diff --git a/test-blueprints/block_display.ajblueprint b/test-blueprints/block_display.ajblueprint new file mode 100644 index 00000000..db56e916 --- /dev/null +++ b/test-blueprints/block_display.ajblueprint @@ -0,0 +1,108 @@ +{ + "meta": { + "format": "animated_java_blueprint", + "format_version": "1.5.2", + "uuid": "14bbe7e9-9624-4742-51d2-3520485edd25", + "save_location": "D:\\github-repos\\animated-java\\animated-java\\test_blueprints\\block_display.ajblueprint", + "last_used_export_namespace": "blueprint" + }, + "blueprint_settings": { + "export_namespace": "blueprint", + "show_bounding_box": false, + "auto_bounding_box": true, + "bounding_box": [48, 48], + "enable_plugin_mode": false, + "resource_pack_export_mode": "none", + "data_pack_export_mode": "raw", + "target_minecraft_version": "1.21.2", + "display_item": "minecraft:white_dye", + "custom_model_data_offset": 0, + "enable_advanced_resource_pack_settings": false, + "enable_advanced_resource_pack_folders": false, + "resource_pack": "", + "display_item_path": "", + "model_folder": "", + "texture_folder": "", + "enable_advanced_data_pack_settings": false, + "data_pack": "C:\\Users\\SnaveSutit\\AppData\\Roaming\\.modrinth\\profiles\\Animated Java Dev\\saves\\Animated Java Dev\\datapacks\\datapack", + "summon_commands": "", + "ticking_commands": "", + "interpolation_duration": 1, + "teleportation_duration": 1, + "use_storage_for_animation": false, + "show_function_errors": true, + "show_outdated_warning": true, + "baked_animations": true, + "json_file": "" + }, + "resolution": { + "width": 16, + "height": 16 + }, + "elements": [ + { + "name": "block_display1", + "position": [0, 0, 0], + "rotation": [0, 0, 0], + "scale": [1, 1, 1], + "visibility": true, + "block": "minecraft:cobblestone_wall", + "config": {}, + "item": "minecraft:diamond", + "item_display": "none", + "text": "\"Hello World!\"", + "lineWidth": 200, + "backgroundColor": "#000000", + "backgroundAlpha": 0.25, + "align": "center", + "shadow": false, + "seeThrough": false, + "uuid": "31d45ef8-ad50-c3aa-10fd-184027b767da", + "type": "animated_java:vanilla_block_display" + } + ], + "outliner": ["31d45ef8-ad50-c3aa-10fd-184027b767da"], + "textures": [ + { + "path": "D:\\Dropbox\\Pictures\\memes\\images.png", + "name": "images.png", + "folder": "", + "namespace": "", + "id": "0", + "group": "", + "width": 236, + "height": 213, + "uv_width": 16, + "uv_height": 16, + "particle": false, + "use_as_default": false, + "layers_enabled": false, + "sync_to_project": "", + "render_mode": "default", + "render_sides": "auto", + "frame_time": 1, + "frame_order_type": "loop", + "frame_order": "", + "frame_interpolate": false, + "visible": true, + "internal": false, + "saved": true, + "uuid": "8bb135af-3265-763d-5a6b-a1c27ea65590", + "source": "data:image/png;base64,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", + "mode": "bitmap" + } + ], + "variants": { + "default": { + "name": "default", + "display_name": "Default", + "uuid": "291e925e-0d30-297a-dd08-40e0dd69ec24", + "texture_map": {}, + "excluded_nodes": [], + "is_default": true + }, + "list": [] + }, + "animations": [], + "animation_controllers": [] +} \ No newline at end of file diff --git a/test_blueprints/blockstates.ajblueprint b/test-blueprints/blockstates.ajblueprint similarity index 100% rename from test_blueprints/blockstates.ajblueprint rename to test-blueprints/blockstates.ajblueprint diff --git a/test_blueprints/item_display.ajblueprint b/test-blueprints/item_display.ajblueprint similarity index 100% rename from test_blueprints/item_display.ajblueprint rename to test-blueprints/item_display.ajblueprint diff --git a/test_blueprints/player.ajblueprint b/test-blueprints/player.ajblueprint similarity index 100% rename from test_blueprints/player.ajblueprint rename to test-blueprints/player.ajblueprint diff --git a/test_blueprints/test_blueprint.ajblueprint b/test-blueprints/test_blueprint.ajblueprint similarity index 100% rename from test_blueprints/test_blueprint.ajblueprint rename to test-blueprints/test_blueprint.ajblueprint diff --git a/test_blueprints/text_display.ajblueprint b/test-blueprints/text_display.ajblueprint similarity index 100% rename from test_blueprints/text_display.ajblueprint rename to test-blueprints/text_display.ajblueprint diff --git a/tests/serializableConfig.test.ts b/tests/serializableConfig.test.ts new file mode 100644 index 00000000..fe399cfc --- /dev/null +++ b/tests/serializableConfig.test.ts @@ -0,0 +1,135 @@ +import { describe, expect, it } from 'vitest' +import { SerializableConfig } from '../src/systems/node-configs/serializableConfig' + +@SerializableConfig.decorate +export class TestConfig extends SerializableConfig { + foo? = 'string' + bar? = 42 + baz? = false +} + +describe('SerializableConfig', () => { + it('assumes default values if local values are undefined', () => { + const config = new TestConfig() + expect(config.foo).toBe('string') + expect(config.bar).toBe(42) + expect(config.baz).toBe(false) + }) + + it('allows setting local values', () => { + const config = new TestConfig() + config.foo = 'baz' + config.bar = 123 + config.baz = true + expect(config.foo).toBe('baz') + expect(config.bar).toBe(123) + expect(config.baz).toBe(true) + }) + + it('does not include default values when serialized unless explicitly set', () => { + const config = new TestConfig() + expect(config.toJSON()).toEqual({}) + config.makeDefault('foo') + config.makeDefault('bar') + config.makeDefault('baz') + expect(config.toJSON()).toEqual({ foo: 'string', bar: 42, baz: false }) + }) + + it('includes explicitly set values when serialized', () => { + const config = new TestConfig() + config.foo = 'baz' + config.makeDefault('bar') + expect(config.toJSON()).toEqual({ foo: 'baz', bar: 42 }) + }) + + it('correctly inherits values from parent configs', () => { + const parent = new TestConfig() + parent.foo = 'parent' + + const child = new TestConfig() + child.setParent(parent) + child.setKeyInheritance('foo') + + expect(child.foo).toBe('parent') + expect(child.toJSON()).toEqual({ __inheritedKeys__: ['foo'], foo: 'parent' }) + + child.foo = 'child' + expect(child.foo).toBe('child') + expect(child.toJSON()).toEqual({ __inheritedKeys__: ['foo'], foo: 'child' }) + + child.foo = undefined + child.setKeyInheritance('foo', false) + expect(child.foo).toBe('string') + expect(child.toJSON()).toEqual({}) + }) + + it('inherits values from parent configs recursively', () => { + const grandparent = new TestConfig() + grandparent.foo = 'grandparent' + grandparent.bar = 69 // This should not be inherited + + const parent = new TestConfig() + parent.setParent(grandparent) + parent.setKeyInheritance('foo') + + const child = new TestConfig() + child.setParent(parent) + child.setKeyInheritance('foo') + child.setKeyInheritance('bar') + + expect(child.foo).toBe('grandparent') + expect(child.toJSON()).toEqual({ __inheritedKeys__: ['foo', 'bar'], foo: 'grandparent' }) + parent.foo = 'parent' + parent.bar = 420 + expect(child.foo).toBe('parent') + expect(child.toJSON()).toEqual({ + __inheritedKeys__: ['foo', 'bar'], + foo: 'parent', + bar: 420, + }) + child.foo = 'child' + expect(child.foo).toBe('child') + expect(child.toJSON()).toEqual({ + __inheritedKeys__: ['foo', 'bar'], + foo: 'child', + bar: 420, + }) + parent.foo = undefined + parent.bar = undefined + expect(child.foo).toBe('child') + expect(child.toJSON()).toEqual({ __inheritedKeys__: ['foo', 'bar'], foo: 'child' }) + }) + + it('parses JSON', () => { + // Set values + const config = new TestConfig().fromJSON({ foo: 'baz', bar: 123, baz: true }) + expect(config.foo).toBe('baz') + expect(config.bar).toBe(123) + expect(config.baz).toBe(true) + // Clear values if not in JSON + config.fromJSON({ foo: 'baz' }) + expect(config.foo).toBe('baz') + expect(config.bar).toBe(42) + expect(config.baz).toBe(false) + // Partial JSON + config.fromJSON({ foo: 'baz', bar: 123, baz: true }).fromJSON({}, true) + expect(config.foo).toBe('baz') + expect(config.bar).toBe(123) + expect(config.baz).toBe(true) + }) + + it('parses JSON correctly with inheritance', () => { + const parent = new TestConfig() + parent.foo = 'parent' + parent.bar = 69 // This should not be inherited + + const child = new TestConfig() + .setParent(parent) + .fromJSON({ __inheritedKeys__: ['foo'], foo: 'child' }) + expect(child.foo).toBe('child') + expect(child.bar).toBe(42) + expect(child.toJSON()).toEqual({ __inheritedKeys__: ['foo'], foo: 'child' }) + // Exclude metadata + expect(child.toJSON(false)).toEqual({ foo: 'child' }) + }) +}) diff --git a/tools/cleanupDist.cjs b/tools/cleanupDist.cjs deleted file mode 100644 index 6685c4d3..00000000 --- a/tools/cleanupDist.cjs +++ /dev/null @@ -1,2 +0,0 @@ -const fs = require('fs') -fs.rmSync('dist', { recursive: true, force: true }) diff --git a/tools/plugins/assetOverridePlugin.ts b/tools/esbuild-plugins/assetOverride.ts similarity index 95% rename from tools/plugins/assetOverridePlugin.ts rename to tools/esbuild-plugins/assetOverride.ts index 20fe6997..2aacd005 100644 --- a/tools/plugins/assetOverridePlugin.ts +++ b/tools/esbuild-plugins/assetOverride.ts @@ -1,4 +1,4 @@ -import { Plugin } from 'esbuild' +import { type Plugin } from 'esbuild' import * as fs from 'fs/promises' import * as pathjs from 'path' @@ -20,7 +20,6 @@ function plugin(): Plugin { if (path.endsWith('.json') || path.endsWith('.png')) { const key = pathjs .join('assets', dir, path) - // @ts-expect-error .replaceAll(pathjs.sep, '/') .replace(ASSET_OVERRIDES_PATH, '') if (path.endsWith('.json')) { diff --git a/tools/plugins/mcbCompressionPlugin.ts b/tools/esbuild-plugins/mcbCompression.ts similarity index 74% rename from tools/plugins/mcbCompressionPlugin.ts rename to tools/esbuild-plugins/mcbCompression.ts index 6effe73d..2dbd1d44 100644 --- a/tools/plugins/mcbCompressionPlugin.ts +++ b/tools/esbuild-plugins/mcbCompression.ts @@ -1,7 +1,7 @@ -import { Plugin } from 'esbuild' +import { type Plugin } from 'esbuild' +import * as fflate from 'fflate' import * as fs from 'fs/promises' import * as pathjs from 'path' -import * as fflate from 'fflate' function zip(data: fflate.AsyncZippable): Promise { return new Promise((resolve, reject) => { @@ -25,9 +25,9 @@ export default function plugin(): Plugin { return { contents: ` -import getZipFile from '__MCB_ZIP_DATA' -export default getZipFile('${localPath}') -`, + import getZipFile from '__MCB_ZIP_DATA' + export default getZipFile('${localPath}') + `, loader: 'js', } }) @@ -39,17 +39,17 @@ export default getZipFile('${localPath}') } }) - build.onLoad({ filter: /.*/, namespace: 'mcbZipData' }, async ({ path }) => { + build.onLoad({ filter: /.*/, namespace: 'mcbZipData' }, async () => { const zipped = await zip(Object.fromEntries(mcbFiles.entries())) const data = Buffer.from(zipped).toString('base64') return { contents: ` -import * as fflate from 'fflate' -const unzipped = fflate.unzipSync(Uint8Array.from(atob('${data}'), c => c.charCodeAt(0))) -export default function getFile(path) { - return Buffer.from(unzipped[path]).toString('utf-8') -} -`, + import * as fflate from 'fflate' + const unzipped = fflate.unzipSync(Uint8Array.from(atob('${data}'), c => c.charCodeAt(0))) + export default function getFile(path) { + return Buffer.from(unzipped[path]).toString('utf-8') + } + `, resolveDir: process.cwd(), loader: 'js', } diff --git a/tools/esbuild-plugins/pluginPackager.ts b/tools/esbuild-plugins/pluginPackager.ts new file mode 100644 index 00000000..71d0f0ac --- /dev/null +++ b/tools/esbuild-plugins/pluginPackager.ts @@ -0,0 +1,122 @@ +import { type Plugin } from 'esbuild' +import * as fs from 'fs' +import { readFileSync, writeFileSync } from 'fs' +import * as pathjs from 'path' +import * as prettier from 'prettier' +import * as c from 'svelte/compiler' +import * as svelteInternal from 'svelte/internal' +import type PackageType from '../../package.json' +import type ChangelogType from '../../src/plugin/package/changelog.json' + +const SRC = './src/' +const SRC_PACKAGE = pathjs.join(SRC, 'plugin/package/') +const SRC_ABOUT = pathjs.join(SRC_PACKAGE, 'about.svelte') +const SRC_CHANGELOG = pathjs.join(SRC_PACKAGE, 'changelog.json') + +const DIST = './dist/' +const DIST_PACKAGE = pathjs.join(DIST, 'package/') +const DIST_README = pathjs.join(DIST_PACKAGE, 'about.md') + +const PLUGIN_REPO_PATH = 'D:/github-repos/snavesutit/blockbench-plugins/plugins/animated_java' +const PLUGIN_MANIFEST_PATH = 'D:/github-repos/snavesutit/blockbench-plugins/plugins.json' +const RELEASE_NOTES_TEMPLATES = './tools/esbuild-plugins/release-note-templates/' + +function replaceTemplateVars(str: string, items: Record) { + return str.replace(/\{(.+?)\}/g, str => items[str.replace(/[\{\}]/g, '')] ?? str) +} + +type Changelog = typeof ChangelogType + +function plugin(): Plugin { + return { + name: 'packagerPlugin', + setup(build) { + build.onEnd(async () => { + const packageJSON: typeof PackageType = JSON.parse( + fs.readFileSync('./package.json', 'utf-8') + ) + fs.rmSync(DIST_PACKAGE, { recursive: true, force: true }) + fs.cpSync(SRC_PACKAGE, DIST_PACKAGE, { recursive: true }) + const pluginBuildPath = `./dist/${packageJSON.name}.js` + if (!fs.existsSync(pluginBuildPath)) { + console.error('❌ Plugin build not found while packaging!') + return + } + fs.copyFileSync( + pluginBuildPath, + pathjs.join(DIST_PACKAGE, packageJSON.name + '.js') + ) + const svelteResult = c.compile(readFileSync(SRC_ABOUT, 'utf-8'), { + generate: 'ssr', + cssHash({ hash, css }) { + return `animated-java-plugin-page-${hash(css)}` + }, + }) + const component = new Function( + 'svelteInternal', + svelteResult.js.code + .replace(/from "svelte\/internal"/g, ' = svelteInternal') + .replace('export default', 'return') + .replace('import', 'const') + ) + const result = component(svelteInternal).render() + const html = `${result.html}\n` + writeFileSync(DIST_README, html) + if (fs.existsSync(pathjs.join(DIST_PACKAGE, 'about.svelte'))) + fs.unlinkSync(pathjs.join(DIST_PACKAGE, 'about.svelte')) + + console.log('📦 Packaged') + + if (process.env.NODE_ENV === 'production') { + console.log('📝 Creating changelogs...') + const changelog: Changelog = JSON.parse(fs.readFileSync(SRC_CHANGELOG, 'utf-8')) + for (const file of fs.readdirSync(RELEASE_NOTES_TEMPLATES)) { + let content = fs.readFileSync( + pathjs.join(RELEASE_NOTES_TEMPLATES, file), + 'utf-8' + ) + const version = packageJSON.version as keyof Changelog + content = replaceTemplateVars(content, { + version: packageJSON.version, + changes: changelog[version].categories + .find(c => c.title === 'Changes') + ?.list.map(v => '- ' + v) + .join('\n'), + fixes: changelog[version].categories + .find(c => c.title === 'Fixes') + ?.list.map(v => '- ' + v) + .join('\n'), + }) + fs.writeFileSync(pathjs.join(DIST, file), content) + } + + if (fs.existsSync(PLUGIN_REPO_PATH)) { + fs.rmSync(PLUGIN_REPO_PATH, { recursive: true, force: true }) + fs.cpSync(DIST_PACKAGE, PLUGIN_REPO_PATH, { recursive: true }) + const manifest = JSON.parse(fs.readFileSync(PLUGIN_MANIFEST_PATH, 'utf-8')) + manifest.animated_java.title = packageJSON.title + manifest.animated_java.author = packageJSON.author.name + manifest.animated_java.icon = packageJSON.icon + manifest.animated_java.description = packageJSON.description + manifest.animated_java.version = packageJSON.version + manifest.animated_java.min_version = packageJSON.min_blockbench_version + manifest.animated_java.variant = packageJSON.variant + manifest.animated_java.tags = packageJSON.tags + manifest.animated_java.has_changelog = true + + fs.writeFileSync( + PLUGIN_MANIFEST_PATH, + await prettier.format(JSON.stringify(manifest), { + useTabs: true, + parser: 'json', + }) + ) + console.log('📋 Copied to Plugin Repo!') + } + } + }) + }, + } +} + +export default plugin diff --git a/tools/plugins/releaseNoteTemplates/discord_release_notes_template b/tools/esbuild-plugins/release-note-templates/discord_release_notes_template similarity index 100% rename from tools/plugins/releaseNoteTemplates/discord_release_notes_template rename to tools/esbuild-plugins/release-note-templates/discord_release_notes_template diff --git a/tools/plugins/releaseNoteTemplates/github_release_notes_template b/tools/esbuild-plugins/release-note-templates/github_release_notes_template similarity index 100% rename from tools/plugins/releaseNoteTemplates/github_release_notes_template rename to tools/esbuild-plugins/release-note-templates/github_release_notes_template diff --git a/tools/plugins/sveltePlugin.ts b/tools/esbuild-plugins/svelte.ts similarity index 67% rename from tools/plugins/sveltePlugin.ts rename to tools/esbuild-plugins/svelte.ts index 79068aaa..ca94b1ef 100644 --- a/tools/plugins/sveltePlugin.ts +++ b/tools/esbuild-plugins/svelte.ts @@ -1,15 +1,16 @@ // A MODIFIED VERSION OF THE SVELTE PLUGIN FOR ESBUILD (esbuild-plugin-svelte) // CHANGELOG: - // made it so that css can be emmitted directly as js instead of as an import 'use strict' Object.defineProperty(exports, '__esModule', { value: true }) +import type { Plugin } from 'esbuild' import { readFile } from 'fs/promises' -import { preprocess, compile } from 'svelte/compiler' import { relative } from 'path' -import { Plugin } from 'esbuild' +import type { PreprocessorGroup } from 'svelte-preprocess/dist/types' +import { compile, preprocess } from 'svelte/compiler' +import type { CompileOptions } from 'svelte/types/compiler' /** * Convert a warning or error emitted from the svelte compiler for esbuild. */ @@ -28,11 +29,23 @@ function convertWarning(source: any, { message, filename, start, end }: any) { } return { text: message, location } } -function esbuildPluginSvelte( - opts: any = { - transformCssToJs: (css: string) => css, - } -): Plugin { + +export interface ISvelteESBuildPluginOptions { + /** + * The preprocessors to run on the Svelte files. + */ + preprocess?: PreprocessorGroup[] + /** + * A function that transforms CSS into JS. + */ + transformCssToJs: (css: string) => string + /** + * The compiler options to use when compiling the Svelte files. + */ + compilerOptions: CompileOptions +} + +function esbuildPluginSvelte(opts: ISvelteESBuildPluginOptions): Plugin { return { name: 'esbuild-plugin-svelte', setup(build) { @@ -50,34 +63,27 @@ function esbuildPluginSvelte( let source = await readFile(path, 'utf-8') const filename = relative(process.cwd(), path) if (opts.preprocess) { - const processed = await preprocess(source, opts.preprocess, { - filename, - }) + const processed = await preprocess(source, opts.preprocess, { filename }) source = processed.code } - const compilerOptions = { - css: false, - ...opts.compilerOptions, - } + const compilerOptions = { css: false, ...opts.compilerOptions } let res try { res = compile(source, { ...compilerOptions, filename }) - } catch (err) { - return { errors: [convertWarning(source, err as any)] } + } catch (err: any) { + return { errors: [convertWarning(source, err)] } } const { js, css, warnings } = res - let code = `${js.code as string}\n//# sourceMappingURL=${js.map.toUrl() as string}` + let code = `${js.code}\n//# sourceMappingURL=${js.map.toUrl()}` // Emit CSS, otherwise it will be included in the JS and injected at runtime. if (css.code && opts.transformCssToJs) { - code = `${code}\n${opts.transformCssToJs(css.code) as string}` + code = `${code}\n${opts.transformCssToJs(css.code)}` } else if (css.code && !compilerOptions.css) { const cssPath = `${path}.css` - cache.set( - cssPath, - `${css.code as string}/*# sourceMappingURL=${css.map.toUrl() as string}*/` - ) + cache.set(cssPath, `${css.code}/*# sourceMappingURL=${css.map.toUrl()}*/`) code = `${code}\nimport ${JSON.stringify(cssPath)}` } + return { contents: code, warnings: warnings.map(w => convertWarning(source, w)), diff --git a/tools/plugins/workerPlugin.ts b/tools/esbuild-plugins/worker.ts similarity index 60% rename from tools/plugins/workerPlugin.ts rename to tools/esbuild-plugins/worker.ts index a5cd59b9..180dbc82 100644 --- a/tools/plugins/workerPlugin.ts +++ b/tools/esbuild-plugins/worker.ts @@ -4,9 +4,11 @@ import findCacheDir from 'find-cache-dir' import * as fs from 'fs' import * as path from 'path' -export { inlineWorkerPlugin as default } +type InlineWorkerPluginConfig = esbuild.BuildOptions & { + workerName?: string +} -function inlineWorkerPlugin(extraConfig) { +export default function inlineWorkerPlugin(extraConfig: InlineWorkerPluginConfig): esbuild.Plugin { return { name: 'esbuild-plugin-inline-worker', @@ -16,13 +18,13 @@ function inlineWorkerPlugin(extraConfig) { // encoding: 'utf-8', // }); - let workerCode = await buildWorker(workerPath, extraConfig) + const workerCode = await buildWorker(workerPath, extraConfig) return { contents: `import inlineWorker from '__inline-worker' -export default function Worker() { - return inlineWorker(${JSON.stringify(workerCode)}); -} -`, + export default function Worker() { + return inlineWorker(${JSON.stringify(workerCode)}); + } + `, loader: 'js', } }) @@ -30,15 +32,14 @@ export default function Worker() { const name = extraConfig.workerName ? { name: extraConfig.workerName } : {} const inlineWorkerFunctionCode = ` -export default function inlineWorker(scriptText) { - let blob = new Blob([scriptText], {type: 'text/javascript'}); - let url = URL.createObjectURL(blob); - let worker = new Worker(url, ${JSON.stringify(name)}); - URL.revokeObjectURL(url); - return worker; -} -` - + export default function inlineWorker(scriptText) { + let blob = new Blob([scriptText], {type: 'text/javascript'}); + let url = URL.createObjectURL(blob); + let worker = new Worker(url, ${JSON.stringify(name)}); + URL.revokeObjectURL(url); + return worker; + } + ` build.onResolve({ filter: /^__inline-worker$/ }, ({ path }) => { return { path, namespace: 'inline-worker' } }) @@ -49,17 +50,17 @@ export default function inlineWorker(scriptText) { } } -let cacheDir = findCacheDir({ +const CACHE_DIR = findCacheDir({ name: 'esbuild-plugin-inline-worker', create: true, -}) +})! -async function buildWorker(workerPath, extraConfig) { - let scriptNameParts = path.basename(workerPath).split('.') +async function buildWorker(workerPath: string, extraConfig: any) { + const scriptNameParts = path.basename(workerPath).split('.') scriptNameParts.pop() scriptNameParts.push('js') - let scriptName = scriptNameParts.join('.') - let bundlePath = path.resolve(cacheDir, scriptName) + const scriptName = scriptNameParts.join('.') + const bundlePath = path.resolve(CACHE_DIR, scriptName) if (extraConfig) { delete extraConfig.entryPoints diff --git a/tools/esbuild.ts b/tools/esbuild.ts index 34d7728d..11dfb8ea 100644 --- a/tools/esbuild.ts +++ b/tools/esbuild.ts @@ -11,16 +11,18 @@ import ImportGlobPlugin from 'esbuild-plugin-import-glob' import inlineImage from 'esbuild-plugin-inline-image' import * as fs from 'fs' import { load } from 'js-yaml' -import * as path from 'path' -import { isAbsolute, join } from 'path' +import vsCodeProblemsPatchPlugin from 'node-modules-vscode-problems-patch' +import path, { isAbsolute, join } from 'path' import { TextDecoder } from 'util' import svelteConfig from '../svelte.config.js' -import assetOverridePlugin from './plugins/assetOverridePlugin' -import mcbCompressionPlugin from './plugins/mcbCompressionPlugin' -import packagerPlugin from './plugins/packagerPlugin' -import sveltePlugin from './plugins/sveltePlugin' -import inlineWorkerPlugin from './plugins/workerPlugin' +import assetOverridePlugin from './esbuild-plugins/assetOverride.js' +import mcbCompressionPlugin from './esbuild-plugins/mcbCompression.js' +import pluginPackagerPlugin from './esbuild-plugins/pluginPackager.js' +import sveltePlugin from './esbuild-plugins/svelte.js' +import inlineWorkerPlugin from './esbuild-plugins/worker.js' + const PACKAGE = JSON.parse(fs.readFileSync('./package.json', 'utf-8')) +console.log(vsCodeProblemsPatchPlugin) const INFO_PLUGIN: esbuild.Plugin = { name: 'infoPlugin', @@ -58,7 +60,7 @@ const DEPENDENCY_QUARKS: esbuild.Plugin = { // esbuild respects the package.json "exports" field // but the version of typescript we're using doesn't // so we need to resolve the path manually - const file_path = path.resolve( + const filePath = path.resolve( process.cwd(), path.dirname(require.resolve('deepslate')), '..', @@ -66,7 +68,7 @@ const DEPENDENCY_QUARKS: esbuild.Plugin = { 'index.js' ) return { - path: file_path, + path: filePath, } }) }, @@ -76,7 +78,7 @@ function createBanner() { return s.replace(new RegExp(`(?![^\\n]{1,${width}}$)([^\\n]{1,${width}})\\s`, 'g'), '$1\n') } - const LICENSE = fs.readFileSync('./LICENSE').toString() + const license = fs.readFileSync('./LICENSE').toString() const fetchbot = PACKAGE.contributors[0] const dominexis = PACKAGE.contributors[1] let lines: string[] = [ @@ -107,7 +109,7 @@ function createBanner() { `${PACKAGE.repository.url as string}`, ``, `[ LICENSE ]`, - ...LICENSE.split('\n').map(v => v.trim()), + ...license.split('\n').map(v => v.trim()), ] const maxLength = Math.max(...lines.map(line => line.length)) @@ -143,7 +145,7 @@ function createBanner() { const DEFINES: Record = {} Object.entries(process.env).forEach(([key, value]) => { - if (key.match(/[^A-Za-z0-9_]/i)) return + if (/[^A-Za-z0-9_]/i.exec(key)) return DEFINES[`process.env.${key}`] = JSON.stringify(value) }) @@ -166,15 +168,15 @@ const yamlPlugin: (opts: { if (options?.transform && options.transform(parsed, args.path) !== void 0) parsed = options.transform(parsed, args.path) return { - contents: JSON.stringify(parsed), - loader: 'json', + contents: `export default ${JSON.stringify(parsed)}`, + loader: 'js', watchFiles: [args.path], } }) }, }) -const devWorkerConfig: esbuild.BuildOptions = { +const DEV_WORKER_CONFIG: esbuild.BuildOptions = { bundle: true, minify: false, platform: 'node', @@ -195,7 +197,7 @@ const devWorkerConfig: esbuild.BuildOptions = { // format: 'iife', // define: DEFINES, } -const devConfig: esbuild.BuildOptions = { +const DEV_CONFIG: esbuild.BuildOptions = { banner: createBanner(), entryPoints: ['./src/index.ts'], outfile: `./dist/${PACKAGE.name as string}.js`, @@ -206,16 +208,16 @@ const devConfig: esbuild.BuildOptions = { sourceRoot: 'http://animated-java/', loader: { '.svg': 'dataurl', '.ttf': 'binary', '.mcb': 'text' }, plugins: [ - // @ts-ignore - ImportGlobPlugin.default(), + ImportGlobPlugin(), + vsCodeProblemsPatchPlugin(), inlineImage({ limit: -1, }), INFO_PLUGIN, yamlPlugin({}), sveltePlugin(svelteConfig), - packagerPlugin(), - inlineWorkerPlugin(devWorkerConfig), + pluginPackagerPlugin(), + inlineWorkerPlugin(DEV_WORKER_CONFIG), assetOverridePlugin(), mcbCompressionPlugin(), DEPENDENCY_QUARKS, @@ -226,7 +228,7 @@ const devConfig: esbuild.BuildOptions = { treeShaking: true, } -const prodConfig: esbuild.BuildOptions = { +const PROD_CONFIG: esbuild.BuildOptions = { entryPoints: ['./src/index.ts'], outfile: `./dist/${PACKAGE.name as string}.js`, bundle: true, @@ -234,8 +236,7 @@ const prodConfig: esbuild.BuildOptions = { platform: 'node', loader: { '.svg': 'dataurl', '.ttf': 'binary', '.mcb': 'text' }, plugins: [ - // @ts-ignore - ImportGlobPlugin.default(), + ImportGlobPlugin(), inlineImage({ limit: -1, }), @@ -243,7 +244,7 @@ const prodConfig: esbuild.BuildOptions = { inlineWorkerPlugin({}), yamlPlugin({}), sveltePlugin(svelteConfig), - packagerPlugin(), + pluginPackagerPlugin(), inlineWorkerPlugin({}), assetOverridePlugin(), mcbCompressionPlugin(), @@ -260,12 +261,12 @@ const prodConfig: esbuild.BuildOptions = { } async function buildDev() { - const ctx = await esbuild.context(devConfig) + const ctx = await esbuild.context(DEV_CONFIG) await ctx.watch() } async function buildProd() { - const result = await esbuild.build(prodConfig).catch(() => process.exit(1)) + const result = await esbuild.build(PROD_CONFIG).catch(() => process.exit(1)) if (result.errors.length > 0) { console.error(result.errors) process.exit(1) @@ -277,6 +278,8 @@ async function buildProd() { } async function main() { + // Clean the dist folder + fs.rmSync('dist', { recursive: true, force: true }) if (process.env.NODE_ENV === 'development') { await buildDev() return diff --git a/tools/package.json b/tools/package.json new file mode 100644 index 00000000..a0df0c86 --- /dev/null +++ b/tools/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/tools/plugins/packagerPlugin.ts b/tools/plugins/packagerPlugin.ts deleted file mode 100644 index e6922460..00000000 --- a/tools/plugins/packagerPlugin.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { Plugin } from 'esbuild' -import * as fs from 'fs' -import * as pathjs from 'path' -import * as c from 'svelte/compiler' -import { readFileSync, writeFileSync } from 'fs' -import * as svelteInternal from 'svelte/internal' -import * as prettier from 'prettier' - -const PACKAGE = JSON.parse(fs.readFileSync('./package.json', 'utf-8')) -const PLUGIN_PACKAGE_PATH = './src/pluginPackage/' -const SVELTE_FILE = './src/pluginPackage/about.svelte' -const README_DIST_PATH = './dist/pluginPackage/about.md' -const DIST_PATH = './dist/' -const DIST_PACKAGE_PATH = './dist/pluginPackage/' -const PLUGIN_REPO_PATH = 'D:/github-repos/snavesutit/blockbench-plugins/plugins/animated_java' -const PLUGIN_MANIFEST_PATH = 'D:/github-repos/snavesutit/blockbench-plugins/plugins.json' -const CHANGELOG_PATH = './src/pluginPackage/changelog.json' -const RELEASE_NOTES_TEMPLATES = './tools/plugins/releaseNoteTemplates/' - -function replaceTemplateVars(str: string, items: Record) { - return str.replace(/\{(.+?)\}/g, str => items[str.replace(/[\{\}]/g, '')] || str) -} - -function plugin(): Plugin { - return { - name: 'packagerPlugin', - setup(build) { - build.onEnd(() => { - console.log('📦 Packaging...') - fs.rmSync(DIST_PACKAGE_PATH, { recursive: true, force: true }) - fs.cpSync(PLUGIN_PACKAGE_PATH, DIST_PACKAGE_PATH, { recursive: true }) - fs.copyFileSync( - `./dist/${PACKAGE.name}.js`, - pathjs.join(DIST_PACKAGE_PATH, PACKAGE.name + '.js') - ) - const svelteResult = c.compile(readFileSync(SVELTE_FILE, 'utf-8'), { - generate: 'ssr', - cssHash({ name, filename, hash, css }) { - return `animated-java-plugin-page-${hash(css)}` - }, - }) - const component = new Function( - 'svelteInternal', - svelteResult.js.code - .replace(/from "svelte\/internal"/g, ' = svelteInternal') - .replace('export default', 'return') - .replace('import', 'const') - ) - const result = component(svelteInternal).render() - const html = `${result.html}\n` - writeFileSync(README_DIST_PATH, html) - if (fs.existsSync(pathjs.join(DIST_PACKAGE_PATH, 'about.svelte'))) - fs.unlinkSync(pathjs.join(DIST_PACKAGE_PATH, 'about.svelte')) - - if (process.env.NODE_ENV === 'production') { - console.log('📝 Creating changelogs...') - const changelog = JSON.parse(fs.readFileSync(CHANGELOG_PATH, 'utf-8')) - for (const file of fs.readdirSync(RELEASE_NOTES_TEMPLATES)) { - let content = fs.readFileSync( - pathjs.join(RELEASE_NOTES_TEMPLATES, file), - 'utf-8' - ) - content = replaceTemplateVars(content, { - version: PACKAGE.version, - changes: changelog[PACKAGE.version].categories - .find(c => c.title === 'Changes') - ?.list.map(v => '- ' + v) - .join('\n'), - fixes: changelog[PACKAGE.version].categories - .find(c => c.title === 'Fixes') - ?.list.map(v => '- ' + v) - .join('\n'), - }) - fs.writeFileSync(pathjs.join(DIST_PATH, file), content) - } - - if (fs.existsSync(PLUGIN_REPO_PATH)) { - fs.rmSync(PLUGIN_REPO_PATH, { recursive: true, force: true }) - fs.cpSync(DIST_PACKAGE_PATH, PLUGIN_REPO_PATH, { recursive: true }) - const manifest = JSON.parse(fs.readFileSync(PLUGIN_MANIFEST_PATH, 'utf-8')) - manifest.animated_java.title = PACKAGE.title - manifest.animated_java.author = PACKAGE.author.name - manifest.animated_java.icon = PACKAGE.icon - manifest.animated_java.description = PACKAGE.description - manifest.animated_java.version = PACKAGE.version - manifest.animated_java.min_version = PACKAGE.min_blockbench_version - manifest.animated_java.variant = PACKAGE.variant - manifest.animated_java.tags = PACKAGE.tags - manifest.animated_java.has_changelog = true - - fs.writeFileSync( - PLUGIN_MANIFEST_PATH, - prettier.format(JSON.stringify(manifest, null, '\t'), { - useTabs: true, - parser: 'json', - }) - ) - console.log('📋 Copied to Plugin Repo!') - } - } - }) - }, - } -} - -export default plugin diff --git a/tools/tslintNamingConventionRule.d.ts b/tools/tslintNamingConventionRule.d.ts new file mode 100644 index 00000000..321ac053 --- /dev/null +++ b/tools/tslintNamingConventionRule.d.ts @@ -0,0 +1,185 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +declare namespace SharedConfig { + export type Severity = 0 | 1 | 2 + export type SeverityString = 'error' | 'off' | 'warn' + export type RuleLevel = Severity | SeverityString + + export type RuleLevelAndOptions = [RuleLevel, ...unknown[]] + + export type RuleEntry = RuleLevel | RuleLevelAndOptions + export type RulesRecord = Partial> + + export type GlobalVariableOptionBase = + | 'off' + | /** @deprecated use `'readonly'` */ 'readable' + | 'readonly' + | 'writable' + | /** @deprecated use `'writable'` */ 'writeable' + export type GlobalVariableOptionBoolean = + | /** @deprecated use `'readonly'` */ false + | /** @deprecated use `'writable'` */ true + export type GlobalVariableOption = GlobalVariableOptionBase | GlobalVariableOptionBoolean + + export type GlobalsConfig = Record + export type EnvironmentConfig = Record + + export interface PluginMeta { + /** + * The meta.name property should match the npm package name for your plugin. + */ + name: string + /** + * The meta.version property should match the npm package version for your plugin. + */ + version: string + } +} + +declare enum PredefinedFormats { + camelCase = 1, + strictCamelCase, + PascalCase, + StrictPascalCase, + snake_case, + UPPER_CASE, +} +declare type PredefinedFormatsString = keyof typeof PredefinedFormats + +declare enum UnderscoreOptions { + forbid = 1, + allow, + require, + + // special cases as it's common practice to use double underscore + requireDouble, + allowDouble, + allowSingleOrDouble, +} +declare type UnderscoreOptionsString = keyof typeof UnderscoreOptions + +declare enum Selectors { + // variableLike + variable = 1 << 0, + function = 1 << 1, + parameter = 1 << 2, + + // memberLike + parameterProperty = 1 << 3, + classicAccessor = 1 << 4, + enumMember = 1 << 5, + classMethod = 1 << 6, + objectLiteralMethod = 1 << 7, + typeMethod = 1 << 8, + classProperty = 1 << 9, + objectLiteralProperty = 1 << 10, + typeProperty = 1 << 11, + autoAccessor = 1 << 12, + + // typeLike + class = 1 << 13, + interface = 1 << 14, + typeAlias = 1 << 15, + enum = 1 << 16, + typeParameter = 1 << 17, + + // other + import = 1 << 18, +} +declare type SelectorsString = keyof typeof Selectors + +declare enum MetaSelectors { + default = -1, + variableLike = 0 | Selectors.variable | Selectors.function | Selectors.parameter, + memberLike = 0 | + Selectors.classProperty | + Selectors.objectLiteralProperty | + Selectors.typeProperty | + Selectors.parameterProperty | + Selectors.enumMember | + Selectors.classMethod | + Selectors.objectLiteralMethod | + Selectors.typeMethod | + Selectors.classicAccessor | + Selectors.autoAccessor, + typeLike = 0 | + Selectors.class | + Selectors.interface | + Selectors.typeAlias | + Selectors.enum | + Selectors.typeParameter, + method = 0 | Selectors.classMethod | Selectors.objectLiteralMethod | Selectors.typeMethod, + property = 0 | + Selectors.classProperty | + Selectors.objectLiteralProperty | + Selectors.typeProperty, + accessor = 0 | Selectors.classicAccessor | Selectors.autoAccessor, +} +declare type MetaSelectorsString = keyof typeof MetaSelectors +declare type IndividualAndMetaSelectorsString = MetaSelectorsString | SelectorsString + +declare enum Modifiers { + // const variable + const = 1 << 0, + // readonly members + readonly = 1 << 1, + // static members + static = 1 << 2, + // member accessibility + public = 1 << 3, + protected = 1 << 4, + private = 1 << 5, + '#private' = 1 << 6, + abstract = 1 << 7, + // destructured variable + destructured = 1 << 8, + // variables declared in the top-level scope + global = 1 << 9, + // things that are exported + exported = 1 << 10, + // things that are unused + unused = 1 << 11, + // properties that require quoting + requiresQuotes = 1 << 12, + // class members that are overridden + override = 1 << 13, + // class methods, object function properties, or functions that are async via the `async` keyword + async = 1 << 14, + // default imports + default = 1 << 15, + // namespace imports + namespace = 1 << 16, + + // make sure TypeModifiers starts at Modifiers + 1 or else sorting won't work +} +declare type ModifiersString = keyof typeof Modifiers + +declare enum TypeModifiers { + boolean = 1 << 17, + string = 1 << 18, + number = 1 << 19, + function = 1 << 20, + array = 1 << 21, +} +declare type TypeModifiersString = keyof typeof TypeModifiers + +interface MatchRegex { + match: boolean + regex: string +} + +declare interface Selector { + custom?: MatchRegex + filter?: string | MatchRegex + // format options + format: PredefinedFormatsString[] | null + leadingUnderscore?: UnderscoreOptionsString + modifiers?: ModifiersString[] + prefix?: string[] + // selector options + selector: IndividualAndMetaSelectorsString | IndividualAndMetaSelectorsString[] + suffix?: string[] + trailingUnderscore?: UnderscoreOptionsString + types?: TypeModifiersString[] +} + +export type NamingConventionRule = [SharedConfig.RuleEntry, ...Selector[]] diff --git a/tsconfig.json b/tsconfig.json index 4ea32954..297566c4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,12 @@ { - "include": ["./src/**/*"], + "include": [ + "./src/**/*", + "./tools/esbuild.ts", + "./eslint.config.ts", + "./vitest.config.ts", + "./tests/**/*" + ], + "exclude": ["**/node_modules/**"], "compilerOptions": { "outDir": "./dist/", "noImplicitAny": true, @@ -7,9 +14,22 @@ "target": "ES2022", "moduleResolution": "node", "strict": true, - "types": ["node", "./types/blockbench-types", "svelte"], + "types": ["node"], "resolveJsonModule": true, "allowSyntheticDefaultImports": true, - "allowUmdGlobalAccess": true + "allowUmdGlobalAccess": true, + "allowUnreachableCode": true, + "esModuleInterop": true, + "noEmit": true, + "verbatimModuleSyntax": true, + "isolatedModules": true, + "alwaysStrict": true, + "experimentalDecorators": true, + "paths": { + "@aj/*": ["./src/*"], + "@events": ["./src/util/events.ts"], + "@svelte-components/*": ["./src/svelte-components/*"], + "@assets/*": ["./src/assets/*"] + } } } diff --git a/types/blockbench-types.d.ts b/types/blockbench-types.d.ts deleted file mode 100644 index 13f5aebe..00000000 --- a/types/blockbench-types.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -//// -/// diff --git a/yarn.lock b/yarn.lock index 0a1dddaf..3ae6feb9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,4415 +1,6183 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.2.1": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/helper-string-parser@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" - integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== - -"@babel/helper-validator-identifier@^7.24.5": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz#918b1a7fa23056603506370089bd990d8720db62" - integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA== - -"@babel/parser@^7.24.4": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.5.tgz#4a4d5ab4315579e5398a82dcf636ca80c3392790" - integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== - -"@babel/types@^7.20.7": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.5.tgz#7661930afc638a5383eb0c4aee59b74f38db84d7" - integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== - dependencies: - "@babel/helper-string-parser" "^7.24.1" - "@babel/helper-validator-identifier" "^7.24.5" - to-fast-properties "^2.0.0" - -"@electron/get@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960" - integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ== - dependencies: - debug "^4.1.1" - env-paths "^2.2.0" - fs-extra "^8.1.0" - got "^11.8.5" - progress "^2.0.3" - semver "^6.2.0" - sumchecker "^3.0.1" - optionalDependencies: - global-agent "^3.0.0" - -"@esbuild/aix-ppc64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.3.tgz#78d3e6dcd19c1cb91f3940143e86dad1094aee81" - integrity sha512-yTgnwQpFVYfvvo4SvRFB0SwrW8YjOxEoT7wfMT7Ol5v7v5LDNvSGo67aExmxOb87nQNeWPVvaGBNfQ7BXcrZ9w== - -"@esbuild/aix-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" - integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== - -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== - -"@esbuild/android-arm64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.3.tgz#5eea56c21d61734942e050840d881eb7bedc3993" - integrity sha512-c+ty9necz3zB1Y+d/N+mC6KVVkGUUOcm4ZmT5i/Fk5arOaY3i6CA3P5wo/7+XzV8cb4GrI/Zjp8NuOQ9Lfsosw== - -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== - -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== - -"@esbuild/android-arm@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.3.tgz#7fda92e3231043c071ea6aa76c92accea86439fd" - integrity sha512-bviJOLMgurLJtF1/mAoJLxDZDL6oU5/ztMHnJQRejbJrSc9FFu0QoUoFhvi6qSKJEw9y5oGyvr9fuDtzJ30rNQ== - -"@esbuild/android-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" - integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== - -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== - -"@esbuild/android-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.3.tgz#625d139bde81b81f54ff493b1381ca0f540200f3" - integrity sha512-JReHfYCRK3FVX4Ra+y5EBH1b9e16TV2OxrPAvzMsGeES0X2Ndm9ImQRI4Ket757vhc5XBOuGperw63upesclRw== - -"@esbuild/android-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" - integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== - -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== - -"@esbuild/darwin-arm64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.3.tgz#fa25f38a43ff4c469589d1dc93448d534d7f313b" - integrity sha512-U3fuQ0xNiAkXOmQ6w5dKpEvXQRSpHOnbw7gEfHCRXPeTKW9sBzVck6C5Yneb8LfJm0l6le4NQfkNPnWMSlTFUQ== - -"@esbuild/darwin-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== - -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== - -"@esbuild/darwin-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.3.tgz#2e450b8214f179a56b4559b2f107060e2b792c7e" - integrity sha512-3m1CEB7F07s19wmaMNI2KANLcnaqryJxO1fXHUV5j1rWn+wMxdUYoPyO2TnAbfRZdi7ADRwJClmOwgT13qlP3Q== - -"@esbuild/darwin-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" - integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== - -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== - -"@esbuild/freebsd-arm64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.3.tgz#f6b29e07bce25c545f6f7bb031d3be6a6ea1dc50" - integrity sha512-fsNAAl5pU6wmKHq91cHWQT0Fz0vtyE1JauMzKotrwqIKAswwP5cpHUCxZNSTuA/JlqtScq20/5KZ+TxQdovU/g== - -"@esbuild/freebsd-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" - integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== - -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== - -"@esbuild/freebsd-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.3.tgz#1a5da2bf89f8d67102820d893d271a270ae55751" - integrity sha512-tci+UJ4zP5EGF4rp8XlZIdq1q1a/1h9XuronfxTMCNBslpCtmk97Q/5qqy1Mu4zIc0yswN/yP/BLX+NTUC1bXA== - -"@esbuild/freebsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" - integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== - -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== - -"@esbuild/linux-arm64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.3.tgz#355f6624c1ac6f5f68841a327ac90b98c679626c" - integrity sha512-vvG6R5g5ieB4eCJBQevyDMb31LMHthLpXTc2IGkFnPWS/GzIFDnaYFp558O+XybTmYrVjxnryru7QRleJvmZ6Q== - -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== - -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== - -"@esbuild/linux-arm@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.3.tgz#872a476ca18a962a98700024c447a79279db1d45" - integrity sha512-f6kz2QpSuyHHg01cDawj0vkyMwuIvN62UAguQfnNVzbge2uWLhA7TCXOn83DT0ZvyJmBI943MItgTovUob36SQ== - -"@esbuild/linux-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" - integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== - -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== - -"@esbuild/linux-ia32@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.3.tgz#da713eb80ff6c011ed01aa4deebb5fc758906046" - integrity sha512-HjCWhH7K96Na+66TacDLJmOI9R8iDWDDiqe17C7znGvvE4sW1ECt9ly0AJ3dJH62jHyVqW9xpxZEU1jKdt+29A== - -"@esbuild/linux-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" - integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== - -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== - -"@esbuild/linux-loong64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.3.tgz#a7c5dc9e961009018d23ec53a43baa8c03c5a1d5" - integrity sha512-BGpimEccmHBZRcAhdlRIxMp7x9PyJxUtj7apL2IuoG9VxvU/l/v1z015nFs7Si7tXUwEsvjc1rOJdZCn4QTU+Q== - -"@esbuild/linux-loong64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" - integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== - -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== - -"@esbuild/linux-mips64el@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.3.tgz#b97543f3d8655365729f3702ed07f6e41be5e48e" - integrity sha512-5rMOWkp7FQGtAH3QJddP4w3s47iT20hwftqdm7b+loe95o8JU8ro3qZbhgMRy0VuFU0DizymF1pBKkn3YHWtsw== - -"@esbuild/linux-mips64el@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" - integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== - -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== - -"@esbuild/linux-ppc64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.3.tgz#23b9064d5bc0bf28a115a2f9cf69f3b01cdfe01c" - integrity sha512-h0zj1ldel89V5sjPLo5H1SyMzp4VrgN1tPkN29TmjvO1/r0MuMRwJxL8QY05SmfsZRs6TF0c/IDH3u7XYYmbAg== - -"@esbuild/linux-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" - integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== - -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== - -"@esbuild/linux-riscv64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.3.tgz#4f2536327f6d444c0573bd35bbd3a67897dbd5da" - integrity sha512-dkAKcTsTJ+CRX6bnO17qDJbLoW37npd5gSNtSzjYQr0svghLJYGYB0NF1SNcU1vDcjXLYS5pO4qOW4YbFama4A== - -"@esbuild/linux-riscv64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" - integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== - -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== - -"@esbuild/linux-s390x@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.3.tgz#05e6f3a12a0dcd60672f25e8789a83cd3affa487" - integrity sha512-vnD1YUkovEdnZWEuMmy2X2JmzsHQqPpZElXx6dxENcIwTu+Cu5ERax6+Ke1QsE814Zf3c6rxCfwQdCTQ7tPuXA== - -"@esbuild/linux-s390x@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" - integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== - -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== - -"@esbuild/linux-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.3.tgz#994d347e7f530c33628e35e48ccde8f299adbcb6" - integrity sha512-IOXOIm9WaK7plL2gMhsWJd+l2bfrhfilv0uPTptoRoSb2p09RghhQQp9YY6ZJhk/kqmeRt6siRdMSLLwzuT0KQ== - -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== - -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== - -"@esbuild/netbsd-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.3.tgz#309d8c323632e9c70ee92cf5414fa65b5eb7e00e" - integrity sha512-uTgCwsvQ5+vCQnqM//EfDSuomo2LhdWhFPS8VL8xKf+PKTCrcT/2kPPoWMTs22aB63MLdGMJiE3f1PHvCDmUOw== - -"@esbuild/netbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" - integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== - -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== - -"@esbuild/openbsd-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.3.tgz#28820f9431fe00f2b04aac57511754213ff060eb" - integrity sha512-vNAkR17Ub2MgEud2Wag/OE4HTSI6zlb291UYzHez/psiKarp0J8PKGDnAhMBcHFoOHMXHfExzmjMojJNbAStrQ== - -"@esbuild/openbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" - integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== - -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== - -"@esbuild/sunos-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.3.tgz#a1f7f98b85bd221fe0f545d01abc0e6123ae60dc" - integrity sha512-W8H9jlGiSBomkgmouaRoTXo49j4w4Kfbl6I1bIdO/vT0+0u4f20ko3ELzV3hPI6XV6JNBVX+8BC+ajHkvffIJA== - -"@esbuild/sunos-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" - integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== - -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== - -"@esbuild/win32-arm64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.3.tgz#c6c3c0b1a1dfc6327ef4db6aa4fb6efd9df531f7" - integrity sha512-EjEomwyLSCg8Ag3LDILIqYCZAq/y3diJ04PnqGRgq8/4O3VNlXyMd54j/saShaN4h5o5mivOjAzmU6C3X4v0xw== - -"@esbuild/win32-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" - integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== - -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== - -"@esbuild/win32-ia32@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.3.tgz#471b8d2cad1bd6479eee5acf04bba2c0e4d37e24" - integrity sha512-WGiE/GgbsEwR33++5rzjiYsKyHywE8QSZPF7Rfx9EBfK3Qn3xyR6IjyCr5Uk38Kg8fG4/2phN7sXp4NPWd3fcw== - -"@esbuild/win32-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" - integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== - -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== - -"@esbuild/win32-x64@0.21.3": - version "0.21.3" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.3.tgz#899c03576c4c28c83228f0e64dfa10edae99c9a2" - integrity sha512-xRxC0jaJWDLYvcUvjQmHCJSfMrgmUuvsoXgDeU/wTorQ1ngDdUBuFtgY3W1Pc5sprGAvZBtWdJX7RPg/iZZUqA== - -"@esbuild/win32-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" - integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== - -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== - -"@firebase/analytics-compat@0.2.6": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@firebase/analytics-compat/-/analytics-compat-0.2.6.tgz#50063978c42f13eb800e037e96ac4b17236841f4" - integrity sha512-4MqpVLFkGK7NJf/5wPEEP7ePBJatwYpyjgJ+wQHQGHfzaCDgntOnl9rL2vbVGGKCnRqWtZDIWhctB86UWXaX2Q== - dependencies: - "@firebase/analytics" "0.10.0" - "@firebase/analytics-types" "0.8.0" - "@firebase/component" "0.6.4" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/analytics-types@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.8.0.tgz#551e744a29adbc07f557306530a2ec86add6d410" - integrity sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw== - -"@firebase/analytics@0.10.0": - version "0.10.0" - resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.10.0.tgz#9c6986acd573c6c6189ffb52d0fd63c775db26d7" - integrity sha512-Locv8gAqx0e+GX/0SI3dzmBY5e9kjVDtD+3zCFLJ0tH2hJwuCAiL+5WkHuxKj92rqQj/rvkBUCfA1ewlX2hehg== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/installations" "0.6.4" - "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/app-check-compat@0.3.7": - version "0.3.7" - resolved "https://registry.yarnpkg.com/@firebase/app-check-compat/-/app-check-compat-0.3.7.tgz#e150f61d653a0f2043a34dcb995616a717161839" - integrity sha512-cW682AxsyP1G+Z0/P7pO/WT2CzYlNxoNe5QejVarW2o5ZxeWSSPAiVEwpEpQR/bUlUmdeWThYTMvBWaopdBsqw== - dependencies: - "@firebase/app-check" "0.8.0" - "@firebase/app-check-types" "0.5.0" - "@firebase/component" "0.6.4" - "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/app-check-interop-types@0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.0.tgz#b27ea1397cb80427f729e4bbf3a562f2052955c4" - integrity sha512-xAxHPZPIgFXnI+vb4sbBjZcde7ZluzPPaSK7Lx3/nmuVk4TjZvnL8ONnkd4ERQKL8WePQySU+pRcWkh8rDf5Sg== - -"@firebase/app-check-types@0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@firebase/app-check-types/-/app-check-types-0.5.0.tgz#1b02826213d7ce6a1cf773c329b46ea1c67064f4" - integrity sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ== - -"@firebase/app-check@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@firebase/app-check/-/app-check-0.8.0.tgz#b531ec40900af9c3cf1ec63de9094a0ddd733d6a" - integrity sha512-dRDnhkcaC2FspMiRK/Vbp+PfsOAEP6ZElGm9iGFJ9fDqHoPs0HOPn7dwpJ51lCFi1+2/7n5pRPGhqF/F03I97g== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/app-compat@0.2.13": - version "0.2.13" - resolved "https://registry.yarnpkg.com/@firebase/app-compat/-/app-compat-0.2.13.tgz#c42d392f45f2c9fef1631cb3ae36d53296aa6407" - integrity sha512-j6ANZaWjeVy5zg6X7uiqh6lM6o3n3LD1+/SJFNs9V781xyryyZWXe+tmnWNWPkP086QfJoNkWN9pMQRqSG4vMg== - dependencies: - "@firebase/app" "0.9.13" - "@firebase/component" "0.6.4" - "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/app-types@0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.9.0.tgz#35b5c568341e9e263b29b3d2ba0e9cfc9ec7f01e" - integrity sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q== - -"@firebase/app@0.9.13": - version "0.9.13" - resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.9.13.tgz#b1d3ad63d52f235a0d70a9b4261cabb3a24690d7" - integrity sha512-GfiI1JxJ7ecluEmDjPzseRXk/PX31hS7+tjgBopL7XjB2hLUdR+0FTMXy2Q3/hXezypDvU6or7gVFizDESrkXw== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" - idb "7.1.1" - tslib "^2.1.0" - -"@firebase/auth-compat@0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@firebase/auth-compat/-/auth-compat-0.4.2.tgz#cb65edc2fbd5f72fff32310409f2fd702b5145e7" - integrity sha512-Q30e77DWXFmXEt5dg5JbqEDpjw9y3/PcP9LslDPR7fARmAOTIY9MM6HXzm9KC+dlrKH/+p6l8g9ifJiam9mc4A== - dependencies: - "@firebase/auth" "0.23.2" - "@firebase/auth-types" "0.12.0" - "@firebase/component" "0.6.4" - "@firebase/util" "1.9.3" - node-fetch "2.6.7" - tslib "^2.1.0" - -"@firebase/auth-interop-types@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz#78884f24fa539e34a06c03612c75f222fcc33742" - integrity sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg== - -"@firebase/auth-types@0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.12.0.tgz#f28e1b68ac3b208ad02a15854c585be6da3e8e79" - integrity sha512-pPwaZt+SPOshK8xNoiQlK5XIrS97kFYc3Rc7xmy373QsOJ9MmqXxLaYssP5Kcds4wd2qK//amx/c+A8O2fVeZA== - -"@firebase/auth@0.23.2": - version "0.23.2" - resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.23.2.tgz#9e6d8dd550a28053c1825fb98c7dc9b37119254d" - integrity sha512-dM9iJ0R6tI1JczuGSxXmQbXAgtYie0K4WvKcuyuSTCu9V8eEDiz4tfa1sO3txsfvwg7nOY3AjoCyMYEdqZ8hdg== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" - node-fetch "2.6.7" - tslib "^2.1.0" - -"@firebase/component@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.6.4.tgz#8981a6818bd730a7554aa5e0516ffc9b1ae3f33d" - integrity sha512-rLMyrXuO9jcAUCaQXCMjCMUsWrba5fzHlNK24xz5j2W6A/SRmK8mZJ/hn7V0fViLbxC0lPMtrK1eYzk6Fg03jA== - dependencies: - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/database-compat@0.3.4": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@firebase/database-compat/-/database-compat-0.3.4.tgz#4e57932f7a5ba761cd5ac946ab6b6ab3f660522c" - integrity sha512-kuAW+l+sLMUKBThnvxvUZ+Q1ZrF/vFJ58iUY9kAcbX48U03nVzIF6Tmkf0p3WVQwMqiXguSgtOPIB6ZCeF+5Gg== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/database" "0.14.4" - "@firebase/database-types" "0.10.4" - "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/database-types@0.10.4": - version "0.10.4" - resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.10.4.tgz#47ba81113512dab637abace61cfb65f63d645ca7" - integrity sha512-dPySn0vJ/89ZeBac70T+2tWWPiJXWbmRygYv0smT5TfE3hDrQ09eKMF3Y+vMlTdrMWq7mUdYW5REWPSGH4kAZQ== - dependencies: - "@firebase/app-types" "0.9.0" - "@firebase/util" "1.9.3" - -"@firebase/database@0.14.4": - version "0.14.4" - resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.14.4.tgz#9e7435a16a540ddfdeb5d99d45618e6ede179aa6" - integrity sha512-+Ea/IKGwh42jwdjCyzTmeZeLM3oy1h0mFPsTy6OqCWzcu/KFqRAr5Tt1HRCOBlNOdbh84JPZC47WLU18n2VbxQ== - dependencies: - "@firebase/auth-interop-types" "0.2.1" - "@firebase/component" "0.6.4" - "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" - faye-websocket "0.11.4" - tslib "^2.1.0" - -"@firebase/firestore-compat@0.3.12": - version "0.3.12" - resolved "https://registry.yarnpkg.com/@firebase/firestore-compat/-/firestore-compat-0.3.12.tgz#c08b24c76da7af75598f3c28432b6eb22f959b56" - integrity sha512-mazuNGAx5Kt9Nph0pm6ULJFp/+j7GSsx+Ncw1GrnKl+ft1CQ4q2LcUssXnjqkX2Ry0fNGqUzC1mfIUrk9bYtjQ== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/firestore" "3.13.0" - "@firebase/firestore-types" "2.5.1" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/firestore-types@2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-2.5.1.tgz#464b2ee057956599ca34de50eae957c30fdbabb7" - integrity sha512-xG0CA6EMfYo8YeUxC8FeDzf6W3FX1cLlcAGBYV6Cku12sZRI81oWcu61RSKM66K6kUENP+78Qm8mvroBcm1whw== - -"@firebase/firestore@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-3.13.0.tgz#f924a3bb462bc3ac666dc5d375f3f8c4e1a72345" - integrity sha512-NwcnU+madJXQ4fbLkGx1bWvL612IJN/qO6bZ6dlPmyf7QRyu5azUosijdAN675r+bOOJxMtP1Bv981bHBXAbUg== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" - "@firebase/webchannel-wrapper" "0.10.1" - "@grpc/grpc-js" "~1.7.0" - "@grpc/proto-loader" "^0.6.13" - node-fetch "2.6.7" - tslib "^2.1.0" - -"@firebase/functions-compat@0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@firebase/functions-compat/-/functions-compat-0.3.5.tgz#7a532d3a9764c6d5fbc1ec5541a989a704326647" - integrity sha512-uD4jwgwVqdWf6uc3NRKF8cSZ0JwGqSlyhPgackyUPe+GAtnERpS4+Vr66g0b3Gge0ezG4iyHo/EXW/Hjx7QhHw== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/functions" "0.10.0" - "@firebase/functions-types" "0.6.0" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/functions-types@0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.6.0.tgz#ccd7000dc6fc668f5acb4e6a6a042a877a555ef2" - integrity sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw== - -"@firebase/functions@0.10.0": - version "0.10.0" - resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.10.0.tgz#c630ddf12cdf941c25bc8d554e30c3226cd560f6" - integrity sha512-2U+fMNxTYhtwSpkkR6WbBcuNMOVaI7MaH3cZ6UAeNfj7AgEwHwMIFLPpC13YNZhno219F0lfxzTAA0N62ndWzA== - dependencies: - "@firebase/app-check-interop-types" "0.3.0" - "@firebase/auth-interop-types" "0.2.1" - "@firebase/component" "0.6.4" - "@firebase/messaging-interop-types" "0.2.0" - "@firebase/util" "1.9.3" - node-fetch "2.6.7" - tslib "^2.1.0" - -"@firebase/installations-compat@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@firebase/installations-compat/-/installations-compat-0.2.4.tgz#b5557c897b4cd3635a59887a8bf69c3731aaa952" - integrity sha512-LI9dYjp0aT9Njkn9U4JRrDqQ6KXeAmFbRC0E7jI7+hxl5YmRWysq5qgQl22hcWpTk+cm3es66d/apoDU/A9n6Q== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/installations" "0.6.4" - "@firebase/installations-types" "0.5.0" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/installations-types@0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@firebase/installations-types/-/installations-types-0.5.0.tgz#2adad64755cd33648519b573ec7ec30f21fb5354" - integrity sha512-9DP+RGfzoI2jH7gY4SlzqvZ+hr7gYzPODrbzVD82Y12kScZ6ZpRg/i3j6rleto8vTFC8n6Len4560FnV1w2IRg== - -"@firebase/installations@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.6.4.tgz#20382e33e6062ac5eff4bede8e468ed4c367609e" - integrity sha512-u5y88rtsp7NYkCHC3ElbFBrPtieUybZluXyzl7+4BsIz4sqb4vSAuwHEUgCgCeaQhvsnxDEU6icly8U9zsJigA== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/util" "1.9.3" - idb "7.0.1" - tslib "^2.1.0" - -"@firebase/logger@0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.4.0.tgz#15ecc03c452525f9d47318ad9491b81d1810f113" - integrity sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA== - dependencies: - tslib "^2.1.0" - -"@firebase/messaging-compat@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@firebase/messaging-compat/-/messaging-compat-0.2.4.tgz#323ca48deef77065b4fcda3cfd662c4337dffcfd" - integrity sha512-lyFjeUhIsPRYDPNIkYX1LcZMpoVbBWXX4rPl7c/rqc7G+EUea7IEtSt4MxTvh6fDfPuzLn7+FZADfscC+tNMfg== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/messaging" "0.12.4" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/messaging-interop-types@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.0.tgz#6056f8904a696bf0f7fdcf5f2ca8f008e8f6b064" - integrity sha512-ujA8dcRuVeBixGR9CtegfpU4YmZf3Lt7QYkcj693FFannwNuZgfAYaTmbJ40dtjB81SAu6tbFPL9YLNT15KmOQ== - -"@firebase/messaging@0.12.4": - version "0.12.4" - resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.12.4.tgz#ccb49df5ab97d5650c9cf5b8c77ddc34daafcfe0" - integrity sha512-6JLZct6zUaex4g7HI3QbzeUrg9xcnmDAPTWpkoMpd/GoSVWH98zDoWXMGrcvHeCAIsLpFMe4MPoZkJbrPhaASw== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/installations" "0.6.4" - "@firebase/messaging-interop-types" "0.2.0" - "@firebase/util" "1.9.3" - idb "7.0.1" - tslib "^2.1.0" - -"@firebase/performance-compat@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@firebase/performance-compat/-/performance-compat-0.2.4.tgz#95cbf32057b5d9f0c75d804bc50e6ed3ba486274" - integrity sha512-nnHUb8uP9G8islzcld/k6Bg5RhX62VpbAb/Anj7IXs/hp32Eb2LqFPZK4sy3pKkBUO5wcrlRWQa6wKOxqlUqsg== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/logger" "0.4.0" - "@firebase/performance" "0.6.4" - "@firebase/performance-types" "0.2.0" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/performance-types@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.2.0.tgz#400685f7a3455970817136d9b48ce07a4b9562ff" - integrity sha512-kYrbr8e/CYr1KLrLYZZt2noNnf+pRwDq2KK9Au9jHrBMnb0/C9X9yWSXmZkFt4UIdsQknBq8uBB7fsybZdOBTA== - -"@firebase/performance@0.6.4": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.6.4.tgz#0ad766bfcfab4f386f4fe0bef43bbcf505015069" - integrity sha512-HfTn/bd8mfy/61vEqaBelNiNnvAbUtME2S25A67Nb34zVuCSCRIX4SseXY6zBnOFj3oLisaEqhVcJmVPAej67g== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/installations" "0.6.4" - "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/remote-config-compat@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@firebase/remote-config-compat/-/remote-config-compat-0.2.4.tgz#1f494c81a6c9560b1f9ca1b4fbd4bbbe47cf4776" - integrity sha512-FKiki53jZirrDFkBHglB3C07j5wBpitAaj8kLME6g8Mx+aq7u9P7qfmuSRytiOItADhWUj7O1JIv7n9q87SuwA== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/logger" "0.4.0" - "@firebase/remote-config" "0.4.4" - "@firebase/remote-config-types" "0.3.0" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/remote-config-types@0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.3.0.tgz#689900dcdb3e5c059e8499b29db393e4e51314b4" - integrity sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA== - -"@firebase/remote-config@0.4.4": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.4.4.tgz#6a496117054de58744bc9f382d2a6d1e14060c65" - integrity sha512-x1ioTHGX8ZwDSTOVp8PBLv2/wfwKzb4pxi0gFezS5GCJwbLlloUH4YYZHHS83IPxnua8b6l0IXUaWd0RgbWwzQ== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/installations" "0.6.4" - "@firebase/logger" "0.4.0" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/storage-compat@0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@firebase/storage-compat/-/storage-compat-0.3.2.tgz#51a97170fd652a516f729f82b97af369e5a2f8d7" - integrity sha512-wvsXlLa9DVOMQJckbDNhXKKxRNNewyUhhbXev3t8kSgoCotd1v3MmqhKKz93ePhDnhHnDs7bYHy+Qa8dRY6BXw== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/storage" "0.11.2" - "@firebase/storage-types" "0.8.0" - "@firebase/util" "1.9.3" - tslib "^2.1.0" - -"@firebase/storage-types@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.8.0.tgz#f1e40a5361d59240b6e84fac7fbbbb622bfaf707" - integrity sha512-isRHcGrTs9kITJC0AVehHfpraWFui39MPaU7Eo8QfWlqW7YPymBmRgjDrlOgFdURh6Cdeg07zmkLP5tzTKRSpg== - -"@firebase/storage@0.11.2": - version "0.11.2" - resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.11.2.tgz#c5e0316543fe1c4026b8e3910f85ad73f5b77571" - integrity sha512-CtvoFaBI4hGXlXbaCHf8humajkbXhs39Nbh6MbNxtwJiCqxPy9iH3D3CCfXAvP0QvAAwmJUTK3+z9a++Kc4nkA== - dependencies: - "@firebase/component" "0.6.4" - "@firebase/util" "1.9.3" - node-fetch "2.6.7" - tslib "^2.1.0" - -"@firebase/util@1.9.3": - version "1.9.3" - resolved "https://registry.yarnpkg.com/@firebase/util/-/util-1.9.3.tgz#45458dd5cd02d90e55c656e84adf6f3decf4b7ed" - integrity sha512-DY02CRhOZwpzO36fHpuVysz6JZrscPiBXD0fXp6qSrL9oNOx5KWICKdR95C0lSITzxp0TZosVyHqzatE8JbcjA== - dependencies: - tslib "^2.1.0" - -"@firebase/webchannel-wrapper@0.10.1": - version "0.10.1" - resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.1.tgz#60bb2aaf129f9e00621f8d698722ddba6ee1f8ac" - integrity sha512-Dq5rYfEpdeel0bLVN+nfD1VWmzCkK+pJbSjIawGE+RY4+NIJqhbUDDQjvV0NUK84fMfwxvtFoCtEe70HfZjFcw== - -"@grpc/grpc-js@~1.7.0": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.7.3.tgz#f2ea79f65e31622d7f86d4b4c9ae38f13ccab99a" - integrity sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog== - dependencies: - "@grpc/proto-loader" "^0.7.0" - "@types/node" ">=12.12.47" - -"@grpc/proto-loader@^0.6.13": - version "0.6.13" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.6.13.tgz#008f989b72a40c60c96cd4088522f09b05ac66bc" - integrity sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g== - dependencies: - "@types/long" "^4.0.1" - lodash.camelcase "^4.3.0" - long "^4.0.0" - protobufjs "^6.11.3" - yargs "^16.2.0" - -"@grpc/proto-loader@^0.7.0": - version "0.7.13" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf" - integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw== - dependencies: - lodash.camelcase "^4.3.0" - long "^5.0.0" - protobufjs "^7.2.5" - yargs "^17.7.2" - -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== - dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" - integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@novacbn/svelte-codejar@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@novacbn/svelte-codejar/-/svelte-codejar-0.1.2.tgz#cda42d542cb7c44c3a296178bfc6097300abf2d4" - integrity sha512-lZd6r+dbdU+zN8d4QW005QEmTT6WDKjpTXvbPIcqIWGSnbWBVoEMFPOwJ0C3PYM4hHAjb2GHF4DBywlWQogNLw== - dependencies: - codejar "^3.5.0" - svelte "^3.42.3" - -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.25" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.25.tgz#f077fdc0b5d0078d30893396ff4827a13f99e817" - integrity sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ== - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@rollup/rollup-android-arm-eabi@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz#7f4c4d8cd5ccab6e95d6750dbe00321c1f30791e" - integrity sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ== - -"@rollup/rollup-android-arm64@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz#17ea71695fb1518c2c324badbe431a0bd1879f2d" - integrity sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA== - -"@rollup/rollup-darwin-arm64@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz#dac0f0d0cfa73e7d5225ae6d303c13c8979e7999" - integrity sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ== - -"@rollup/rollup-darwin-x64@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz#8f63baa1d31784904a380d2e293fa1ddf53dd4a2" - integrity sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ== - -"@rollup/rollup-freebsd-arm64@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz#30ed247e0df6e8858cdc6ae4090e12dbeb8ce946" - integrity sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA== - -"@rollup/rollup-freebsd-x64@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz#57846f382fddbb508412ae07855b8a04c8f56282" - integrity sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ== - -"@rollup/rollup-linux-arm-gnueabihf@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz#378ca666c9dae5e6f94d1d351e7497c176e9b6df" - integrity sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA== - -"@rollup/rollup-linux-arm-musleabihf@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz#a692eff3bab330d5c33a5d5813a090c15374cddb" - integrity sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg== - -"@rollup/rollup-linux-arm64-gnu@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz#6b1719b76088da5ac1ae1feccf48c5926b9e3db9" - integrity sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA== - -"@rollup/rollup-linux-arm64-musl@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz#865baf5b6f5ff67acb32e5a359508828e8dc5788" - integrity sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A== - -"@rollup/rollup-linux-loongarch64-gnu@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz#23c6609ba0f7fa7a7f2038b6b6a08555a5055a87" - integrity sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA== - -"@rollup/rollup-linux-powerpc64le-gnu@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz#652ef0d9334a9f25b9daf85731242801cb0fc41c" - integrity sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A== - -"@rollup/rollup-linux-riscv64-gnu@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz#1eb6651839ee6ebca64d6cc64febbd299e95e6bd" - integrity sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA== - -"@rollup/rollup-linux-s390x-gnu@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz#015c52293afb3ff2a293cf0936b1d43975c1e9cd" - integrity sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg== - -"@rollup/rollup-linux-x64-gnu@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz#b83001b5abed2bcb5e2dbeec6a7e69b194235c1e" - integrity sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw== - -"@rollup/rollup-linux-x64-musl@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz#6cc7c84cd4563737f8593e66f33b57d8e228805b" - integrity sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g== - -"@rollup/rollup-win32-arm64-msvc@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz#631ffeee094d71279fcd1fe8072bdcf25311bc11" - integrity sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A== - -"@rollup/rollup-win32-ia32-msvc@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz#06d1d60d5b9f718e8a6c4a43f82e3f9e3254587f" - integrity sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA== - -"@rollup/rollup-win32-x64-msvc@4.28.1": - version "4.28.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz#4dff5c4259ebe6c5b4a8f2c5bc3829b7a8447ff0" - integrity sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA== - -"@sindresorhus/is@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" - integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/decompress@*": - version "4.2.7" - resolved "https://registry.yarnpkg.com/@types/decompress/-/decompress-4.2.7.tgz#604f69b69d519ecb74dea1ea0829f159b85e1332" - integrity sha512-9z+8yjKr5Wn73Pt17/ldnmQToaFHZxK0N1GHysuk/JIPT8RIdQeoInM01wWPgypRcvb6VH1drjuFpQ4zmY437g== - dependencies: - "@types/node" "*" - -"@types/dompurify@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-3.0.5.tgz#02069a2fcb89a163bacf1a788f73cb415dd75cb7" - integrity sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg== - dependencies: - "@types/trusted-types" "*" - -"@types/download@^8.0.5": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@types/download/-/download-8.0.5.tgz#5d800d1268343b43189f5cd0c92cc914a7786ed3" - integrity sha512-Ad68goc/BsL3atP3OP/lWKAKhiC6FduN1mC5yg9lZuGYmUY7vyoWBcXgt8GE9OzVWRq5IBXwm4o/QiE+gipZAg== - dependencies: - "@types/decompress" "*" - "@types/got" "^9" - "@types/node" "*" - -"@types/eslint@^8.21.1": - version "8.56.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" - integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/estree@1.0.6", "@types/estree@^1.0.0", "@types/estree@^1.0.1", "@types/estree@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== - -"@types/got@^9": - version "9.6.12" - resolved "https://registry.yarnpkg.com/@types/got/-/got-9.6.12.tgz#fd42a6e1f5f64cd6bb422279b08c30bb5a15a56f" - integrity sha512-X4pj/HGHbXVLqTpKjA2ahI4rV/nNBc9mGO2I/0CgAra+F2dKgMXnENv2SRpemScBzBAI4vMelIVYViQxlSE6xA== - dependencies: - "@types/node" "*" - "@types/tough-cookie" "*" - form-data "^2.5.0" - -"@types/http-cache-semantics@*": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - -"@types/jquery@^3.5.4": - version "3.5.30" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.30.tgz#888d584cbf844d3df56834b69925085038fd80f7" - integrity sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A== - dependencies: - "@types/sizzle" "*" - -"@types/js-yaml@^4.0.5": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2" - integrity sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg== - -"@types/json-schema@*", "@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/long@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" - integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== - -"@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@^20.9.0": - version "20.12.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.12.tgz#7cbecdf902085cec634fdb362172dfe12b8f2050" - integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw== - dependencies: - undici-types "~5.26.4" - -"@types/node@^17.0.21": - version "17.0.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== - -"@types/prismjs@^1.26.0": - version "1.26.4" - resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.26.4.tgz#1a9e1074619ce1d7322669e5b46fbe823925103a" - integrity sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg== - -"@types/pug@^2.0.6": - version "2.0.10" - resolved "https://registry.yarnpkg.com/@types/pug/-/pug-2.0.10.tgz#52f8dbd6113517aef901db20b4f3fca543b88c1f" - integrity sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA== - -"@types/responselike@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" - integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== - dependencies: - "@types/node" "*" - -"@types/semver@^7.3.12": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/sizzle@*": - version "2.3.8" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" - integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== - -"@types/three@^0.129.2": - version "0.129.2" - resolved "https://registry.yarnpkg.com/@types/three/-/three-0.129.2.tgz#26d9e4ecffc8e31becfb119c494123f343f31f8f" - integrity sha512-fZDNRtUFnq3baNjDiAzi4QoHYcczWtEdsduH/tpiwk91fbVk8COJiT/iLoN3tIOjLKMySoYsjUfP0VTmUfZKLw== - -"@types/tinycolor2@^1.4.6": - version "1.4.6" - resolved "https://registry.yarnpkg.com/@types/tinycolor2/-/tinycolor2-1.4.6.tgz#670cbc0caf4e58dd61d1e3a6f26386e473087f06" - integrity sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw== - -"@types/tough-cookie@*": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" - integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== - -"@types/trusted-types@*": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" - integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== - -"@types/websocket@^1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.10.tgz#804b1a02780da522f5742bc184a6d16a2eb78c7c" - integrity sha512-svjGZvPB7EzuYS94cI7a+qhwgGU1y89wUgjT6E2wVUfmAGIvRfT7obBvRtnhXCSsoMdlG4gBFGE7MfkIXZLoww== - dependencies: - "@types/node" "*" - -"@types/yauzl@^2.9.1": - version "2.10.3" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" - integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== - dependencies: - "@types/node" "*" - -"@typescript-eslint/eslint-plugin@^5.54.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.54.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -"@vitest/expect@2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-2.1.8.tgz#13fad0e8d5a0bf0feb675dcf1d1f1a36a1773bc1" - integrity sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw== - dependencies: - "@vitest/spy" "2.1.8" - "@vitest/utils" "2.1.8" - chai "^5.1.2" - tinyrainbow "^1.2.0" - -"@vitest/mocker@2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-2.1.8.tgz#51dec42ac244e949d20009249e033e274e323f73" - integrity sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA== - dependencies: - "@vitest/spy" "2.1.8" - estree-walker "^3.0.3" - magic-string "^0.30.12" - -"@vitest/pretty-format@2.1.8", "@vitest/pretty-format@^2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.1.8.tgz#88f47726e5d0cf4ba873d50c135b02e4395e2bca" - integrity sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ== - dependencies: - tinyrainbow "^1.2.0" - -"@vitest/runner@2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-2.1.8.tgz#b0e2dd29ca49c25e9323ea2a45a5125d8729759f" - integrity sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg== - dependencies: - "@vitest/utils" "2.1.8" - pathe "^1.1.2" - -"@vitest/snapshot@2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-2.1.8.tgz#d5dc204f4b95dc8b5e468b455dfc99000047d2de" - integrity sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg== - dependencies: - "@vitest/pretty-format" "2.1.8" - magic-string "^0.30.12" - pathe "^1.1.2" - -"@vitest/spy@2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-2.1.8.tgz#bc41af3e1e6a41ae3b67e51f09724136b88fa447" - integrity sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg== - dependencies: - tinyspy "^3.0.2" - -"@vitest/utils@2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.1.8.tgz#f8ef85525f3362ebd37fd25d268745108d6ae388" - integrity sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA== - dependencies: - "@vitest/pretty-format" "2.1.8" - loupe "^3.1.2" - tinyrainbow "^1.2.0" - -"@vue/compiler-core@3.4.27": - version "3.4.27" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.4.27.tgz#e69060f4b61429fe57976aa5872cfa21389e4d91" - integrity sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg== - dependencies: - "@babel/parser" "^7.24.4" - "@vue/shared" "3.4.27" - entities "^4.5.0" - estree-walker "^2.0.2" - source-map-js "^1.2.0" - -"@vue/compiler-dom@3.4.27": - version "3.4.27" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz#d51d35f40d00ce235d7afc6ad8b09dfd92b1cc1c" - integrity sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw== - dependencies: - "@vue/compiler-core" "3.4.27" - "@vue/shared" "3.4.27" - -"@vue/compiler-sfc@3.4.27": - version "3.4.27" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz#399cac1b75c6737bf5440dc9cf3c385bb2959701" - integrity sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA== - dependencies: - "@babel/parser" "^7.24.4" - "@vue/compiler-core" "3.4.27" - "@vue/compiler-dom" "3.4.27" - "@vue/compiler-ssr" "3.4.27" - "@vue/shared" "3.4.27" - estree-walker "^2.0.2" - magic-string "^0.30.10" - postcss "^8.4.38" - source-map-js "^1.2.0" - -"@vue/compiler-ssr@3.4.27": - version "3.4.27" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz#2a8ecfef1cf448b09be633901a9c020360472e3d" - integrity sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw== - dependencies: - "@vue/compiler-dom" "3.4.27" - "@vue/shared" "3.4.27" - -"@vue/reactivity@3.4.27": - version "3.4.27" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.4.27.tgz#6ece72331bf719953f5eaa95ec60b2b8d49e3791" - integrity sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA== - dependencies: - "@vue/shared" "3.4.27" - -"@vue/runtime-core@3.4.27": - version "3.4.27" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.4.27.tgz#1b6e1d71e4604ba7442dd25ed22e4a1fc6adbbda" - integrity sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA== - dependencies: - "@vue/reactivity" "3.4.27" - "@vue/shared" "3.4.27" - -"@vue/runtime-dom@3.4.27": - version "3.4.27" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz#fe8d1ce9bbe8921d5dd0ad5c10df0e04ef7a5ee7" - integrity sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q== - dependencies: - "@vue/runtime-core" "3.4.27" - "@vue/shared" "3.4.27" - csstype "^3.1.3" - -"@vue/server-renderer@3.4.27": - version "3.4.27" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.4.27.tgz#3306176f37e648ba665f97dda3ce705687be63d2" - integrity sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA== - dependencies: - "@vue/compiler-ssr" "3.4.27" - "@vue/shared" "3.4.27" - -"@vue/shared@3.4.27": - version "3.4.27" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.4.27.tgz#f05e3cd107d157354bb4ae7a7b5fc9cf73c63b50" - integrity sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA== - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.10.0: - version "8.14.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" - integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== - -acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -archive-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" - integrity sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA== - dependencies: - file-type "^4.2.0" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -aria-query@^5.3.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" - integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -assertion-error@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" - integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -axobject-query@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" - integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bl@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" - integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-identifier@npm:7.27.1" + checksum: 10c0/c558f11c4871d526498e49d07a84752d1800bf72ac0d3dad100309a2eaba24efbf56ea59af5137ff15e3a00280ebe588560534b0e894a4750f8b1411d8f78b84 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.18.4": + version: 7.28.0 + resolution: "@babel/parser@npm:7.28.0" + dependencies: + "@babel/types": "npm:^7.28.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/c2ef81d598990fa949d1d388429df327420357cb5200271d0d0a2784f1e6d54afc8301eb8bdf96d8f6c77781e402da93c7dc07980fcc136ac5b9d5f1fce701b5 + languageName: node + linkType: hard + +"@babel/types@npm:^7.20.7, @babel/types@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/types@npm:7.28.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/7ca8521bf5e2d2ed4db31176efaaf94463a6b7a4d16dcc60e34e963b3596c2ecadb85457bebed13a9ee9a5829ef5f515d05b55a991b6a8f3b835451843482e39 + languageName: node + linkType: hard + +"@cronvel/get-pixels@npm:^3.4.1": + version: 3.4.1 + resolution: "@cronvel/get-pixels@npm:3.4.1" + dependencies: + jpeg-js: "npm:^0.4.4" + ndarray: "npm:^1.0.19" + ndarray-pack: "npm:^1.1.1" + node-bitmap: "npm:0.0.1" + omggif: "npm:^1.0.10" + pngjs: "npm:^6.0.0" + checksum: 10c0/a813b8c514bdb6d0151d1523d6a55893b347d0d054d1cca7bc6b2064bb1baad912e176a25a950f51c67b38d7101d1b8192d3f097a37cc1b049dd3b9fe6428f3c + languageName: node + linkType: hard + +"@electron/get@npm:^2.0.0": + version: 2.0.3 + resolution: "@electron/get@npm:2.0.3" + dependencies: + debug: "npm:^4.1.1" + env-paths: "npm:^2.2.0" + fs-extra: "npm:^8.1.0" + global-agent: "npm:^3.0.0" + got: "npm:^11.8.5" + progress: "npm:^2.0.3" + semver: "npm:^6.2.0" + sumchecker: "npm:^3.0.1" + dependenciesMeta: + global-agent: + optional: true + checksum: 10c0/148957d531bac50c29541515f2483c3e5c9c6ba9f0269a5d536540d2b8d849188a89588f18901f3a84c2b4fd376d1e0c5ea2159eb2d17bda68558f57df19015e + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/aix-ppc64@npm:0.25.6" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/android-arm64@npm:0.25.6" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/android-arm@npm:0.25.6" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/android-x64@npm:0.25.6" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/darwin-arm64@npm:0.25.6" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/darwin-x64@npm:0.25.6" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/freebsd-arm64@npm:0.25.6" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/freebsd-x64@npm:0.25.6" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/linux-arm64@npm:0.25.6" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/linux-arm@npm:0.25.6" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/linux-ia32@npm:0.25.6" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/linux-loong64@npm:0.25.6" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/linux-mips64el@npm:0.25.6" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/linux-ppc64@npm:0.25.6" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/linux-riscv64@npm:0.25.6" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/linux-s390x@npm:0.25.6" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/linux-x64@npm:0.25.6" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/netbsd-arm64@npm:0.25.6" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/netbsd-x64@npm:0.25.6" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/openbsd-arm64@npm:0.25.6" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/openbsd-x64@npm:0.25.6" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/openharmony-arm64@npm:0.25.6" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/sunos-x64@npm:0.25.6" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/win32-arm64@npm:0.25.6" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/win32-ia32@npm:0.25.6" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.25.6": + version: 0.25.6 + resolution: "@esbuild/win32-x64@npm:0.25.6" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0, @eslint-community/eslint-utils@npm:^4.7.0": + version: 4.7.0 + resolution: "@eslint-community/eslint-utils@npm:4.7.0" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/c0f4f2bd73b7b7a9de74b716a664873d08ab71ab439e51befe77d61915af41a81ecec93b408778b3a7856185244c34c2c8ee28912072ec14def84ba2dec70adf + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.21.0": + version: 0.21.0 + resolution: "@eslint/config-array@npm:0.21.0" + dependencies: + "@eslint/object-schema": "npm:^2.1.6" + debug: "npm:^4.3.1" + minimatch: "npm:^3.1.2" + checksum: 10c0/0ea801139166c4aa56465b309af512ef9b2d3c68f9198751bbc3e21894fe70f25fbf26e1b0e9fffff41857bc21bfddeee58649ae6d79aadcd747db0c5dca771f + languageName: node + linkType: hard + +"@eslint/config-helpers@npm:^0.3.0": + version: 0.3.0 + resolution: "@eslint/config-helpers@npm:0.3.0" + checksum: 10c0/013ae7b189eeae8b30cc2ee87bc5c9c091a9cd615579003290eb28bebad5d78806a478e74ba10b3fe08ed66975b52af7d2cd4b4b43990376412b14e5664878c8 + languageName: node + linkType: hard + +"@eslint/core@npm:^0.14.0": + version: 0.14.0 + resolution: "@eslint/core@npm:0.14.0" + dependencies: + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/259f279445834ba2d2cbcc18e9d43202a4011fde22f29d5fb802181d66e0f6f0bd1f6b4b4b46663451f545d35134498231bd5e656e18d9034a457824b92b7741 + languageName: node + linkType: hard + +"@eslint/core@npm:^0.15.1": + version: 0.15.1 + resolution: "@eslint/core@npm:0.15.1" + dependencies: + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/abaf641940776638b8c15a38d99ce0dac551a8939310ec81b9acd15836a574cf362588eaab03ab11919bc2a0f9648b19ea8dee33bf12675eb5b6fd38bda6f25e + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^3.3.1": + version: 3.3.1 + resolution: "@eslint/eslintrc@npm:3.3.1" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^10.0.1" + globals: "npm:^14.0.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/b0e63f3bc5cce4555f791a4e487bf999173fcf27c65e1ab6e7d63634d8a43b33c3693e79f192cbff486d7df1be8ebb2bd2edc6e70ddd486cbfa84a359a3e3b41 + languageName: node + linkType: hard + +"@eslint/js@npm:9.30.1": + version: 9.30.1 + resolution: "@eslint/js@npm:9.30.1" + checksum: 10c0/17fc382a0deafdb1cadac1269d9c2f2464f025bde6e4d12fc4f4775eb9886b41340d4650b72e85a53423644fdc89bf59c987a852f27379ad25feecf2c5bbc1c9 + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^2.1.6": + version: 2.1.6 + resolution: "@eslint/object-schema@npm:2.1.6" + checksum: 10c0/b8cdb7edea5bc5f6a96173f8d768d3554a628327af536da2fc6967a93b040f2557114d98dbcdbf389d5a7b290985ad6a9ce5babc547f36fc1fde42e674d11a56 + languageName: node + linkType: hard + +"@eslint/plugin-kit@npm:^0.3.1": + version: 0.3.3 + resolution: "@eslint/plugin-kit@npm:0.3.3" + dependencies: + "@eslint/core": "npm:^0.15.1" + levn: "npm:^0.4.1" + checksum: 10c0/c61888eb8757abc0d25a53c1832f85521c2f347126c475eb32d3596be3505e8619e0ceddee7346d195089a2eb1633b61e6127a5772b8965a85eb9f55b8b1cebe + languageName: node + linkType: hard + +"@firebase/analytics-compat@npm:0.2.6": + version: 0.2.6 + resolution: "@firebase/analytics-compat@npm:0.2.6" + dependencies: + "@firebase/analytics": "npm:0.10.0" + "@firebase/analytics-types": "npm:0.8.0" + "@firebase/component": "npm:0.6.4" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/28bfce0f8dee85e44953a2a07caf009b0208c897d9d260b778ff06c7876c6e0b474d64501dd77cfcf2323eef5582b2a8cdd7246a9b5c05362adb98dd0b7a332f + languageName: node + linkType: hard + +"@firebase/analytics-types@npm:0.8.0": + version: 0.8.0 + resolution: "@firebase/analytics-types@npm:0.8.0" + checksum: 10c0/ba74a2b35bf4e7aa62ea79d5ee938f0e7fa3cb0d4161eb8fcbd8230a3d8944d928f4dfc8ca4c3c65a1704b1d71c1d6a85af5401a575090a0f90fea7d8313f3a9 + languageName: node + linkType: hard + +"@firebase/analytics@npm:0.10.0": + version: 0.10.0 + resolution: "@firebase/analytics@npm:0.10.0" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/installations": "npm:0.6.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/07a23cfbc6a2f52bc07a0a4248495337509f5e2e6276456d97a9725d6a843b1cbf917b7dc5702a0c788ecb025ea4920ca44a7f24f07ced7e25a5014a28947619 + languageName: node + linkType: hard + +"@firebase/app-check-compat@npm:0.3.7": + version: 0.3.7 + resolution: "@firebase/app-check-compat@npm:0.3.7" + dependencies: + "@firebase/app-check": "npm:0.8.0" + "@firebase/app-check-types": "npm:0.5.0" + "@firebase/component": "npm:0.6.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/339a532f6487bffb50820b02cfdea764de74f064e8f9879a716cd84b1f34e3f82ce6c55e9ed7f90258f357c5bca58f85e95afa85b0a3d28b1268b9a81f724f96 + languageName: node + linkType: hard + +"@firebase/app-check-interop-types@npm:0.3.0": + version: 0.3.0 + resolution: "@firebase/app-check-interop-types@npm:0.3.0" + checksum: 10c0/248342f09af8737c1765ad55c8930b7939a18299993ea2d57df70fa706933a68a754e275aedb877e57059ab89a2764a64e9cc1c595c34e138507f5ef415ef59a + languageName: node + linkType: hard + +"@firebase/app-check-types@npm:0.5.0": + version: 0.5.0 + resolution: "@firebase/app-check-types@npm:0.5.0" + checksum: 10c0/fdbabd150aa58dff226bd83a63de37a1eb5212c0afdbb6f5d4360166a0c1f52aa24ea5dccffb130c25f5297291bdbc415a086763dca502189dd9006319ebd1b9 + languageName: node + linkType: hard + +"@firebase/app-check@npm:0.8.0": + version: 0.8.0 + resolution: "@firebase/app-check@npm:0.8.0" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/e4d0672f9b99be1f7d2fc570d393d3f139f9cb4dc46b92da2eae54891e03bb7c298a5574bc414c7fdb6800dd910c90c9ee5dd78cb211f784b54053de24917457 + languageName: node + linkType: hard + +"@firebase/app-compat@npm:0.2.13": + version: 0.2.13 + resolution: "@firebase/app-compat@npm:0.2.13" + dependencies: + "@firebase/app": "npm:0.9.13" + "@firebase/component": "npm:0.6.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + checksum: 10c0/4e7a7b09f5dc85883178dde07f4562370943a315c6cf085e4dcfe72fe0b97804d5e2647a1a0c9c522edbf60ced2a0019acc569edb77cd7f617ca9a41c2188d71 + languageName: node + linkType: hard + +"@firebase/app-types@npm:0.9.0": + version: 0.9.0 + resolution: "@firebase/app-types@npm:0.9.0" + checksum: 10c0/361b0e1e0cd5cf1a79f220e9b1624a90ec399f9623272a7d650a8bc48d76bb85e9645d20e7e521d5e7fce80abac270c4c22776caea84ef418274abb0bfc3dbac + languageName: node + linkType: hard + +"@firebase/app@npm:0.9.13": + version: 0.9.13 + resolution: "@firebase/app@npm:0.9.13" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/util": "npm:1.9.3" + idb: "npm:7.1.1" + tslib: "npm:^2.1.0" + checksum: 10c0/4b7087e05d25a2832c581dee6581a822e8da92873f18b0f6c8f3ff699dbf0c58d4ddc9813dd12fce6e376d9ce054472150f19c717ff03ef9cac784b926acac40 + languageName: node + linkType: hard + +"@firebase/auth-compat@npm:0.4.2": + version: 0.4.2 + resolution: "@firebase/auth-compat@npm:0.4.2" + dependencies: + "@firebase/auth": "npm:0.23.2" + "@firebase/auth-types": "npm:0.12.0" + "@firebase/component": "npm:0.6.4" + "@firebase/util": "npm:1.9.3" + node-fetch: "npm:2.6.7" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/7a5b4545629fc8530ba4ddd8a16295b67e357137eae473bec762fbc4c0c83544f1c5974dd555d86481c30bb5fec1bd8c5b0802a9573403d1fc6450878cc4452d + languageName: node + linkType: hard + +"@firebase/auth-interop-types@npm:0.2.1": + version: 0.2.1 + resolution: "@firebase/auth-interop-types@npm:0.2.1" + checksum: 10c0/832836afcd62c6ecacc07c412d7696bb29c1a21e7ebd3e8ea77af70df97999354370fc478bb78dee7c05c84f98becae56062a2e26ec0c9ebfa98036734cf343d + languageName: node + linkType: hard + +"@firebase/auth-types@npm:0.12.0": + version: 0.12.0 + resolution: "@firebase/auth-types@npm:0.12.0" + peerDependencies: + "@firebase/app-types": 0.x + "@firebase/util": 1.x + checksum: 10c0/5a56fc80b9a745af0af2397e3808692e04cd74eeb1edfa6f89da8c98756630b67380b10af57d13f80726f68c9de25cfa7e1eb3de152ce6bc1218f8f2b07d0cd9 + languageName: node + linkType: hard + +"@firebase/auth@npm:0.23.2": + version: 0.23.2 + resolution: "@firebase/auth@npm:0.23.2" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/util": "npm:1.9.3" + node-fetch: "npm:2.6.7" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/e15becbbbbf356eebfdb90bf9bf6d95b6444ce49258a4a8deb1d317dddae9a2fdc76dc5b0d0eb40a0bfedbf159eff370a7e019f828762510666cf5b3b139e6b7 + languageName: node + linkType: hard + +"@firebase/component@npm:0.6.4": + version: 0.6.4 + resolution: "@firebase/component@npm:0.6.4" + dependencies: + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + checksum: 10c0/35480c2b6e87c56f593535154c0cc92e7224d1533611a2bc2fe9f0975a44eb7a0400e0de0454a1888bb1ac21f0b17ec03a0d937581735ea229baf9b243bd1b39 + languageName: node + linkType: hard + +"@firebase/database-compat@npm:0.3.4": + version: 0.3.4 + resolution: "@firebase/database-compat@npm:0.3.4" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/database": "npm:0.14.4" + "@firebase/database-types": "npm:0.10.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + checksum: 10c0/eccfe6be28d46e5caacdcf98ce79debf3c5f61f0398254ee01fcea8118c86cab33a70b878c562b74a4708883c4856176d8774a334810c28515177c80ec247321 + languageName: node + linkType: hard + +"@firebase/database-types@npm:0.10.4": + version: 0.10.4 + resolution: "@firebase/database-types@npm:0.10.4" + dependencies: + "@firebase/app-types": "npm:0.9.0" + "@firebase/util": "npm:1.9.3" + checksum: 10c0/f1e07d43aca7e865c0ae865583d727461a76146e5d68b3e90e988499e2d2ea9a330fac65b1ac31081f097363b9bd8ef342d0a6f1e3d58361068be434ec0cef79 + languageName: node + linkType: hard + +"@firebase/database@npm:0.14.4": + version: 0.14.4 + resolution: "@firebase/database@npm:0.14.4" + dependencies: + "@firebase/auth-interop-types": "npm:0.2.1" + "@firebase/component": "npm:0.6.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/util": "npm:1.9.3" + faye-websocket: "npm:0.11.4" + tslib: "npm:^2.1.0" + checksum: 10c0/a67d4acf10256e7648f953325c9b25aade163d165a085d0c7cbc25a7c3b81954ead2b97a7c88706c5ef671cda6a97024fca1207283bbb9344bc92c24c895adea + languageName: node + linkType: hard + +"@firebase/firestore-compat@npm:0.3.12": + version: 0.3.12 + resolution: "@firebase/firestore-compat@npm:0.3.12" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/firestore": "npm:3.13.0" + "@firebase/firestore-types": "npm:2.5.1" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/69d35c088dbc8bd0a1bf85121fb0933c10fb76bf9249f404c4def4d83470bb5c347b70506638d1808c296121e3ab53eec52009a2843590da75d57144528eaf6f + languageName: node + linkType: hard + +"@firebase/firestore-types@npm:2.5.1": + version: 2.5.1 + resolution: "@firebase/firestore-types@npm:2.5.1" + peerDependencies: + "@firebase/app-types": 0.x + "@firebase/util": 1.x + checksum: 10c0/20d6b1e536ca2531836440817daddf85f1e129d0978958db114f65ea07aba8b7e345a2339539c36d4b347bd6a113352a22ecd30c2bced53498644e086f63da8b + languageName: node + linkType: hard + +"@firebase/firestore@npm:3.13.0": + version: 3.13.0 + resolution: "@firebase/firestore@npm:3.13.0" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/util": "npm:1.9.3" + "@firebase/webchannel-wrapper": "npm:0.10.1" + "@grpc/grpc-js": "npm:~1.7.0" + "@grpc/proto-loader": "npm:^0.6.13" + node-fetch: "npm:2.6.7" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/bcd2e2b4a44b1496387a2656f5f7f967bcbe65df5dfadde6ad1e0f796daeb207e3f03ceb98b232c8d8e464d8aa1e1a5ed179828b324ea88bec1d2af351b3d0cd + languageName: node + linkType: hard + +"@firebase/functions-compat@npm:0.3.5": + version: 0.3.5 + resolution: "@firebase/functions-compat@npm:0.3.5" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/functions": "npm:0.10.0" + "@firebase/functions-types": "npm:0.6.0" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/04c03008d803cac08a1d4a70f0c5cfcfb3098834f31e3f29de8d346f94cc24ca6d01d1be91136b35bd3470b56052aaf8810619e611c60e2ab154719f4fe50a92 + languageName: node + linkType: hard + +"@firebase/functions-types@npm:0.6.0": + version: 0.6.0 + resolution: "@firebase/functions-types@npm:0.6.0" + checksum: 10c0/e0c99aaf43a95b38c701eff7683d61dc43135d396ef41ddeb7bac5046d84b1b59c5f1e6e7d5db5adedba05b5580b47081851052bec705900aacfa417affd1bfe + languageName: node + linkType: hard + +"@firebase/functions@npm:0.10.0": + version: 0.10.0 + resolution: "@firebase/functions@npm:0.10.0" + dependencies: + "@firebase/app-check-interop-types": "npm:0.3.0" + "@firebase/auth-interop-types": "npm:0.2.1" + "@firebase/component": "npm:0.6.4" + "@firebase/messaging-interop-types": "npm:0.2.0" + "@firebase/util": "npm:1.9.3" + node-fetch: "npm:2.6.7" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/0574d98bbda912551969f4d0ff908aea68bbeedcd18d9942acf749e9dab6829c10ed0a449b43b7db79569b17062548d7324ce9d573822a51a76bb48075d19456 + languageName: node + linkType: hard + +"@firebase/installations-compat@npm:0.2.4": + version: 0.2.4 + resolution: "@firebase/installations-compat@npm:0.2.4" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/installations": "npm:0.6.4" + "@firebase/installations-types": "npm:0.5.0" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/2adf6a11958d3b9a4ca2f5232a35d41bff732da3079a1d4cc75a025e866456ab91f5a60d73d3d82ace1499aaa3f7d96f466aaaa62ba3aad925649e4cd1269005 + languageName: node + linkType: hard + +"@firebase/installations-types@npm:0.5.0": + version: 0.5.0 + resolution: "@firebase/installations-types@npm:0.5.0" + peerDependencies: + "@firebase/app-types": 0.x + checksum: 10c0/fcb4880792b42668482dd03c0d569f4563ae70772f5b0155907f261513ac7d3ce6cab683a77d6a75e499e3c600406bbd99b30e9b32c94ac0fb094c166b9a80b1 + languageName: node + linkType: hard + +"@firebase/installations@npm:0.6.4": + version: 0.6.4 + resolution: "@firebase/installations@npm:0.6.4" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/util": "npm:1.9.3" + idb: "npm:7.0.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/a5596ee5caa31bbfa081be93e4eb67ba81b638f245ccbfb44f860255e393a4a1f5ac2f319a7c08fdc6b0e7c2d1fff806c1d32ca86098b63ce02afd5c9cdd850c + languageName: node + linkType: hard + +"@firebase/logger@npm:0.4.0": + version: 0.4.0 + resolution: "@firebase/logger@npm:0.4.0" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/81c870e2d467bb351813e9e1e6afdcb373835fed6ccf967e43e3be4bb0fdaa50f9bf70332d3509fed435add3186bd064ef2915540b62e1213f0a5899e52ad95a + languageName: node + linkType: hard + +"@firebase/messaging-compat@npm:0.2.4": + version: 0.2.4 + resolution: "@firebase/messaging-compat@npm:0.2.4" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/messaging": "npm:0.12.4" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/df8c0da5da5ddfdaa9699a6db315c8a2adb0f79d72e9844c88fe08fe54628b05a95e514acec54edb755405aeab3ce72cc4485af02dd610a76f0aa199367f1c06 + languageName: node + linkType: hard + +"@firebase/messaging-interop-types@npm:0.2.0": + version: 0.2.0 + resolution: "@firebase/messaging-interop-types@npm:0.2.0" + checksum: 10c0/db5a92bae1ef0bd2844e7d6783b943d407499f2778260f84dfcb5bb476c4cd15130835a03ff3eeadb02b96c0c580bd9ed0ab862919a817da45493816c2ccd7f6 + languageName: node + linkType: hard + +"@firebase/messaging@npm:0.12.4": + version: 0.12.4 + resolution: "@firebase/messaging@npm:0.12.4" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/installations": "npm:0.6.4" + "@firebase/messaging-interop-types": "npm:0.2.0" + "@firebase/util": "npm:1.9.3" + idb: "npm:7.0.1" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/49256425926a4073ce731be26180d318d9c09641ebdf4b8eb3c46db89db5ce2e4dd4ca918940a78828ef6b35c710d798085787077966806fcb22ab0f0c0da104 + languageName: node + linkType: hard + +"@firebase/performance-compat@npm:0.2.4": + version: 0.2.4 + resolution: "@firebase/performance-compat@npm:0.2.4" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/performance": "npm:0.6.4" + "@firebase/performance-types": "npm:0.2.0" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/4ba3b914876fb67a337dfcdae87739dc9586124f4cc60a07ae33519de758c06c942251dc64c27960d2bcc3432bdaa937b2f4364ed952ab762926ba3799b50764 + languageName: node + linkType: hard + +"@firebase/performance-types@npm:0.2.0": + version: 0.2.0 + resolution: "@firebase/performance-types@npm:0.2.0" + checksum: 10c0/be1ed084c7b21eb73ec627e05a302cd45e9eace70bd094b2c952a714ebfdba97988cd01a91f7b791bf0d55ead0631152fa25f6cca216fb2a8ac716b69e478ab3 + languageName: node + linkType: hard + +"@firebase/performance@npm:0.6.4": + version: 0.6.4 + resolution: "@firebase/performance@npm:0.6.4" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/installations": "npm:0.6.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/7c54d358c73fbd422acd5b5b7fee6450cac4a701f97983950325f978e99c7d51cec1505573487ab92ba4efa423b33025e1c5830538e2302ed84bb732f32cbdad + languageName: node + linkType: hard + +"@firebase/remote-config-compat@npm:0.2.4": + version: 0.2.4 + resolution: "@firebase/remote-config-compat@npm:0.2.4" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/remote-config": "npm:0.4.4" + "@firebase/remote-config-types": "npm:0.3.0" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/2a01d49102e135e355380ad9d765a44a41b859850275f653a5c9dcbbe7293073c594842784e0345aac10f393887dadd6c5f0318fced01551cb4845fc01cc6cf7 + languageName: node + linkType: hard + +"@firebase/remote-config-types@npm:0.3.0": + version: 0.3.0 + resolution: "@firebase/remote-config-types@npm:0.3.0" + checksum: 10c0/06c86880db0e7ea6b75c98e582b215979b5e7ae77eae8347a44050d80f918df9010007b2f83eea4342f0c39b8867578e92ed467b36955623008d50b78bb6adee + languageName: node + linkType: hard + +"@firebase/remote-config@npm:0.4.4": + version: 0.4.4 + resolution: "@firebase/remote-config@npm:0.4.4" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/installations": "npm:0.6.4" + "@firebase/logger": "npm:0.4.0" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/1b0b3d46ba707407f4adba6494519446a11dc4358e04cdef741bfebf5a0579ef464a75ba90fcb2af9b51c691f3f7e94a9c3adc4cae4eb783823552a0201967b0 + languageName: node + linkType: hard + +"@firebase/storage-compat@npm:0.3.2": + version: 0.3.2 + resolution: "@firebase/storage-compat@npm:0.3.2" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/storage": "npm:0.11.2" + "@firebase/storage-types": "npm:0.8.0" + "@firebase/util": "npm:1.9.3" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app-compat": 0.x + checksum: 10c0/9b56b4eb914adbe65a4880a0000768703507357063f8268751fef0a6f58ecb58d31398cddd5cd83b0c1279397c7f0dcfda0dd07b4ace2f626fa3bbb679d839ac + languageName: node + linkType: hard + +"@firebase/storage-types@npm:0.8.0": + version: 0.8.0 + resolution: "@firebase/storage-types@npm:0.8.0" + peerDependencies: + "@firebase/app-types": 0.x + "@firebase/util": 1.x + checksum: 10c0/98c15f3eba81c8903b1a6256a07f77b4510636595c492d90a4fd992eae6c22f37b705a5782dc688e3a5afeb2c94197824991739796224cc1875d1d2b5109e849 + languageName: node + linkType: hard + +"@firebase/storage@npm:0.11.2": + version: 0.11.2 + resolution: "@firebase/storage@npm:0.11.2" + dependencies: + "@firebase/component": "npm:0.6.4" + "@firebase/util": "npm:1.9.3" + node-fetch: "npm:2.6.7" + tslib: "npm:^2.1.0" + peerDependencies: + "@firebase/app": 0.x + checksum: 10c0/9eedefa16eede113f56dd0100d52714539aa7ead23895ac14979ffa961440619ccb2b28090541cde430f0f20d084398e518eaf18378c6e88873e7b86b9247c63 + languageName: node + linkType: hard + +"@firebase/util@npm:1.9.3": + version: 1.9.3 + resolution: "@firebase/util@npm:1.9.3" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/ede5db85568869e08697e6b5646ac719ba50a196f9cd16ac4bbf619d6f9d6c4aa83d94f7a7b506644db590dbccf81fb14152c02afaca852b035aed10a890f5a5 + languageName: node + linkType: hard + +"@firebase/webchannel-wrapper@npm:0.10.1": + version: 0.10.1 + resolution: "@firebase/webchannel-wrapper@npm:0.10.1" + checksum: 10c0/d93e9de0c85e7fd1bc37e61b3b019adce846dc1922fdcec96c21a9b2436d15415ed46209e6c8b4ef4779a6b7584c23f610e96386f7cfb03b77d2b88ddcd2813e + languageName: node + linkType: hard + +"@grpc/grpc-js@npm:~1.7.0": + version: 1.7.3 + resolution: "@grpc/grpc-js@npm:1.7.3" + dependencies: + "@grpc/proto-loader": "npm:^0.7.0" + "@types/node": "npm:>=12.12.47" + checksum: 10c0/f9206fd4b7a4d46ed9e113125491fd5b7e103afc2e058e7b528406227496986c63099995030e29b12d928c89f67c39369a2fda450b13958e3957506cafb39fb4 + languageName: node + linkType: hard + +"@grpc/proto-loader@npm:^0.6.13": + version: 0.6.13 + resolution: "@grpc/proto-loader@npm:0.6.13" + dependencies: + "@types/long": "npm:^4.0.1" + lodash.camelcase: "npm:^4.3.0" + long: "npm:^4.0.0" + protobufjs: "npm:^6.11.3" + yargs: "npm:^16.2.0" + bin: + proto-loader-gen-types: build/bin/proto-loader-gen-types.js + checksum: 10c0/8c7d25ddff9587ad8963b7823fc57c253e83e76a4f4f663afb5c90a49f7d58512e8f6f65c0551577545025da1e92172913d61815dfa87eaf2de492d1bfe0e1d1 + languageName: node + linkType: hard + +"@grpc/proto-loader@npm:^0.7.0": + version: 0.7.15 + resolution: "@grpc/proto-loader@npm:0.7.15" + dependencies: + lodash.camelcase: "npm:^4.3.0" + long: "npm:^5.0.0" + protobufjs: "npm:^7.2.5" + yargs: "npm:^17.7.2" + bin: + proto-loader-gen-types: build/bin/proto-loader-gen-types.js + checksum: 10c0/514a134a724b56d73d0a202b7e02c84479da21e364547bacb2f4995ebc0d52412a1a21653add9f004ebd146c1e6eb4bcb0b8846fdfe1bfa8a98ed8f3d203da4a + languageName: node + linkType: hard + +"@humanfs/core@npm:^0.19.1": + version: 0.19.1 + resolution: "@humanfs/core@npm:0.19.1" + checksum: 10c0/aa4e0152171c07879b458d0e8a704b8c3a89a8c0541726c6b65b81e84fd8b7564b5d6c633feadc6598307d34564bd53294b533491424e8e313d7ab6c7bc5dc67 + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.6": + version: 0.16.6 + resolution: "@humanfs/node@npm:0.16.6" + dependencies: + "@humanfs/core": "npm:^0.19.1" + "@humanwhocodes/retry": "npm:^0.3.0" + checksum: 10c0/8356359c9f60108ec204cbd249ecd0356667359b2524886b357617c4a7c3b6aace0fd5a369f63747b926a762a88f8a25bc066fa1778508d110195ce7686243e1 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.3.0": + version: 0.3.1 + resolution: "@humanwhocodes/retry@npm:0.3.1" + checksum: 10c0/f0da1282dfb45e8120480b9e2e275e2ac9bbe1cf016d046fdad8e27cc1285c45bb9e711681237944445157b430093412b4446c1ab3fc4bb037861b5904101d3b + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.4.2": + version: 0.4.3 + resolution: "@humanwhocodes/retry@npm:0.4.3" + checksum: 10c0/3775bb30087d4440b3f7406d5a057777d90e4b9f435af488a4923ef249e93615fb78565a85f173a186a076c7706a81d0d57d563a2624e4de2c5c9c66c486ce42 + languageName: node + linkType: hard + +"@isaacs/balanced-match@npm:^4.0.1": + version: 4.0.1 + resolution: "@isaacs/balanced-match@npm:4.0.1" + checksum: 10c0/7da011805b259ec5c955f01cee903da72ad97c5e6f01ca96197267d3f33103d5b2f8a1af192140f3aa64526c593c8d098ae366c2b11f7f17645d12387c2fd420 + languageName: node + linkType: hard + +"@isaacs/brace-expansion@npm:^5.0.0": + version: 5.0.0 + resolution: "@isaacs/brace-expansion@npm:5.0.0" + dependencies: + "@isaacs/balanced-match": "npm:^4.0.1" + checksum: 10c0/b4d4812f4be53afc2c5b6c545001ff7a4659af68d4484804e9d514e183d20269bb81def8682c01a22b17c4d6aed14292c8494f7d2ac664e547101c1a905aa977 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.4 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.4" + checksum: 10c0/c5aab3e6362a8dd94ad80ab90845730c825fc4c8d9cf07ebca7a2eb8a832d155d62558800fc41d42785f989ddbb21db6df004d1786e8ecb65e428ab8dff71309 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@novacbn/svelte-codejar@npm:^0.1.2": + version: 0.1.2 + resolution: "@novacbn/svelte-codejar@npm:0.1.2" + dependencies: + codejar: "npm:^3.5.0" + svelte: "npm:^3.42.3" + checksum: 10c0/9fb3879a09bef33e46e8e6904cd9906f3289450c2a076d81bca32224d3d7a3c80e0ea9fedbfbe27f4bc760243b8672229c417af0fd08ad994fcda1fe82e5c93f + languageName: node + linkType: hard + +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@polka/url@npm:^1.0.0-next.20": + version: 1.0.0-next.29 + resolution: "@polka/url@npm:1.0.0-next.29" + checksum: 10c0/0d58e081844095cb029d3c19a659bfefd09d5d51a2f791bc61eba7ea826f13d6ee204a8a448c2f5a855c17df07b37517373ff916dd05801063c0568ae9937684 + languageName: node + linkType: hard + +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 10c0/a83343a468ff5b5ec6bff36fd788a64c839e48a07ff9f4f813564f58caf44d011cd6504ed2147bf34835bd7a7dd2107052af755961c6b098fd8902b4f6500d0f + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 10c0/eec925e681081af190b8ee231f9bad3101e189abbc182ff279da6b531e7dbd2a56f1f306f37a80b1be9e00aa2d271690d08dcc5f326f71c9eed8546675c8caf6 + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 10c0/26ae337c5659e41f091606d16465bbcc1df1f37cc1ed462438b1f67be0c1e28dfb2ca9f294f39100c52161aef82edf758c95d6d75650a1ddf31f7ddee1440b43 + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 10c0/1eb0a75180e5206d1033e4138212a8c7089a3d418c6dfa5a6ce42e593a4ae2e5892c4ef7421f38092badba4040ea6a45f0928869989411001d8c1018ea9a6e70 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.1" + "@protobufjs/inquire": "npm:^1.1.0" + checksum: 10c0/cda6a3dc2d50a182c5865b160f72077aac197046600091dbb005dd0a66db9cce3c5eaed6d470ac8ed49d7bcbeef6ee5f0bc288db5ff9a70cbd003e5909065233 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 10c0/18f2bdede76ffcf0170708af15c9c9db6259b771e6b84c51b06df34a9c339dbbeec267d14ce0bddd20acc142b1d980d983d31434398df7f98eb0c94a0eb79069 + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: 10c0/64372482efcba1fb4d166a2664a6395fa978b557803857c9c03500e0ac1013eb4b1aacc9ed851dd5fc22f81583670b4f4431bae186f3373fedcfde863ef5921a + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 10c0/cece0a938e7f5dfd2fa03f8c14f2f1cf8b0d6e13ac7326ff4c96ea311effd5fb7ae0bba754fbf505312af2e38500250c90e68506b97c02360a43793d88a0d8b4 + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: 10c0/eda2718b7f222ac6e6ad36f758a92ef90d26526026a19f4f17f668f45e0306a5bd734def3f48f51f8134ae0978b6262a5c517c08b115a551756d1a3aadfcf038 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: 10c0/a3fe31fe3fa29aa3349e2e04ee13dc170cc6af7c23d92ad49e3eeaf79b9766264544d3da824dba93b7855bd6a2982fb40032ef40693da98a136d835752beb487 + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.44.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-android-arm64@npm:4.44.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-darwin-arm64@npm:4.44.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-darwin-x64@npm:4.44.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.44.2" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-freebsd-x64@npm:4.44.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.44.2" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.44.2" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.44.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.44.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loongarch64-gnu@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.44.2" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.44.2" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.44.2" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.44.2" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.44.2" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.44.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.44.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.44.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.44.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.44.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@sindresorhus/is@npm:^4.0.0": + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 10c0/33b6fb1d0834ec8dd7689ddc0e2781c2bfd8b9c4e4bacbcb14111e0ae00621f2c264b8a7d36541799d74888b5dccdf422a891a5cb5a709ace26325eedc81e22e + languageName: node + linkType: hard + +"@szmarczak/http-timer@npm:^4.0.5": + version: 4.0.6 + resolution: "@szmarczak/http-timer@npm:4.0.6" + dependencies: + defer-to-connect: "npm:^2.0.0" + checksum: 10c0/73946918c025339db68b09abd91fa3001e87fc749c619d2e9c2003a663039d4c3cb89836c98a96598b3d47dec2481284ba85355392644911f5ecd2336536697f + languageName: node + linkType: hard + +"@types/cacheable-request@npm:^6.0.1": + version: 6.0.3 + resolution: "@types/cacheable-request@npm:6.0.3" + dependencies: + "@types/http-cache-semantics": "npm:*" + "@types/keyv": "npm:^3.1.4" + "@types/node": "npm:*" + "@types/responselike": "npm:^1.0.0" + checksum: 10c0/10816a88e4e5b144d43c1d15a81003f86d649776c7f410c9b5e6579d0ad9d4ca71c541962fb403077388b446e41af7ae38d313e46692144985f006ac5e11fa03 + languageName: node + linkType: hard + +"@types/decompress@npm:*": + version: 4.2.7 + resolution: "@types/decompress@npm:4.2.7" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/29f7d150c43a15a34f026fc04cd7e38c7717aeaecd8b3121a842560ac6f57f1df330b6401c326c9068e42c993c3bc23c1bb540aa3b89cc5f5323748634380967 + languageName: node + linkType: hard + +"@types/dompurify@npm:^3.0.5": + version: 3.0.5 + resolution: "@types/dompurify@npm:3.0.5" + dependencies: + "@types/trusted-types": "npm:*" + checksum: 10c0/a34dcc4498ca250815ccf9aecbe82df96ba5db247d0440cf266a876757d47c52519c240db3475e794d7deb0d6b1af23328e02879be368ad0e26b20c0f0865dba + languageName: node + linkType: hard + +"@types/download@npm:^8.0.5": + version: 8.0.5 + resolution: "@types/download@npm:8.0.5" + dependencies: + "@types/decompress": "npm:*" + "@types/got": "npm:^9" + "@types/node": "npm:*" + checksum: 10c0/d11255498231453fca6f53b2f938275f08a0adb4ab6c62b4da7f04ed873545d102e52ae04d21c536fd2d7d34adbcbfd038b1832b988d3f47066a66c2f906ab11 + languageName: node + linkType: hard + +"@types/eslint@npm:^9.6.1": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:1.0.8, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 + languageName: node + linkType: hard + +"@types/find-cache-dir@npm:^5.0.2": + version: 5.0.2 + resolution: "@types/find-cache-dir@npm:5.0.2" + dependencies: + find-cache-dir: "npm:*" + checksum: 10c0/684efb5961dcc5c8813a5ab14645c692ce036bebbc0258443dc4a154c63f9c87c0287ef32ca792110b82c2b96d590dfdf7d1bf59b61717a8109ee619e489f3b5 + languageName: node + linkType: hard + +"@types/got@npm:^9": + version: 9.6.12 + resolution: "@types/got@npm:9.6.12" + dependencies: + "@types/node": "npm:*" + "@types/tough-cookie": "npm:*" + form-data: "npm:^2.5.0" + checksum: 10c0/9ef721f1d37516c74caa91a1b1a40a51036d5607fc8f537d26f7b5fcea6335aba7de0d6f0e89f751e803a3035c569bf71767a7c5ae08c3e481f88e1f0fbc2e84 + languageName: node + linkType: hard + +"@types/http-cache-semantics@npm:*": + version: 4.0.4 + resolution: "@types/http-cache-semantics@npm:4.0.4" + checksum: 10c0/51b72568b4b2863e0fe8d6ce8aad72a784b7510d72dc866215642da51d84945a9459fa89f49ec48f1e9a1752e6a78e85a4cda0ded06b1c73e727610c925f9ce6 + languageName: node + linkType: hard + +"@types/jquery@npm:^3.5.32": + version: 3.5.32 + resolution: "@types/jquery@npm:3.5.32" + dependencies: + "@types/sizzle": "npm:*" + checksum: 10c0/4a17ad6819b89026c21323656ab01b0b263f9d470910a87c8740920ff98319d503c7352b85b50134a39724ecbfccabc73aa4c741dfdd460cf8bbe714f9259054 + languageName: node + linkType: hard + +"@types/js-yaml@npm:^4.0.5": + version: 4.0.9 + resolution: "@types/js-yaml@npm:4.0.9" + checksum: 10c0/24de857aa8d61526bbfbbaa383aa538283ad17363fcd5bb5148e2c7f604547db36646440e739d78241ed008702a8920665d1add5618687b6743858fae00da211 + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/keyv@npm:^3.1.4": + version: 3.1.4 + resolution: "@types/keyv@npm:3.1.4" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/ff8f54fc49621210291f815fe5b15d809fd7d032941b3180743440bd507ecdf08b9e844625fa346af568c84bf34114eb378dcdc3e921a08ba1e2a08d7e3c809c + languageName: node + linkType: hard + +"@types/long@npm:^4.0.1": + version: 4.0.2 + resolution: "@types/long@npm:4.0.2" + checksum: 10c0/42ec66ade1f72ff9d143c5a519a65efc7c1c77be7b1ac5455c530ae9acd87baba065542f8847522af2e3ace2cc999f3ad464ef86e6b7352eece34daf88f8c924 + languageName: node + linkType: hard + +"@types/nextgen-events@npm:*": + version: 1.1.4 + resolution: "@types/nextgen-events@npm:1.1.4" + checksum: 10c0/52319c56705640286e6270d1a00b0cc8df4bf6c2795343158a81fe5c1ae2ffb878cf2eee45798095cc7854779c214147e5f2c38bd329b193c00ef968f40ae6d1 + languageName: node + linkType: hard + +"@types/node@npm:*, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0": + version: 24.0.13 + resolution: "@types/node@npm:24.0.13" + dependencies: + undici-types: "npm:~7.8.0" + checksum: 10c0/e1f3d4ea8973b1f2f987814ac5343d05ad8b56bf7fa41755295dee0ce0f7b4e2de4f3daef5296429180228970cef0d70f2ad873c61dbafc6f5eeca9d023aba76 + languageName: node + linkType: hard + +"@types/node@npm:^20.9.0": + version: 20.19.7 + resolution: "@types/node@npm:20.19.7" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10c0/bd97ed8db9eaab0f66ff066944923bae3baf51c98b603be9f30ea53f2ceeb6ae6fb4bc5bda3d3cd54c90c2ddc146f2117287f42e64fdcac493790c28dd759763 + languageName: node + linkType: hard + +"@types/node@npm:^22.13.5": + version: 22.16.3 + resolution: "@types/node@npm:22.16.3" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10c0/ea6829d0691713e216c15a767f87e412fa0f45c7ed4d49419098d967467e20a5dcdf66fee024e314deab2779f7e5282e1839ee918e845be27f14179247ec947a + languageName: node + linkType: hard + +"@types/prismjs@npm:^1.26.0": + version: 1.26.5 + resolution: "@types/prismjs@npm:1.26.5" + checksum: 10c0/5619cb449e0d8df098c8759d6f47bf8fdd510abf5dbdfa999e55c6a2545efbd1e209cc85a33d8d9f4ff2898089a1a6d9a70737c9baffaae635c46852c40d384a + languageName: node + linkType: hard + +"@types/pug@npm:^2.0.6": + version: 2.0.10 + resolution: "@types/pug@npm:2.0.10" + checksum: 10c0/6fac37fd84ad4bcf755061caad274db70591699739070bc30c5c1b5f0aecf98646dc29ec8da11cfca82a2b7cc57d949a3ae50aba2f88bf098751ebdd25d9aaea + languageName: node + linkType: hard + +"@types/responselike@npm:^1.0.0": + version: 1.0.3 + resolution: "@types/responselike@npm:1.0.3" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/a58ba341cb9e7d74f71810a88862da7b2a6fa42e2a1fc0ce40498f6ea1d44382f0640117057da779f74c47039f7166bf48fad02dc876f94e005c7afa50f5e129 + languageName: node + linkType: hard + +"@types/sizzle@npm:*": + version: 2.3.9 + resolution: "@types/sizzle@npm:2.3.9" + checksum: 10c0/db0277ff62e8ebe6cdae2020fd045fd7fd19f29a3a2ce13c555b14fb00e105e79004883732118b9f2e8b943cb302645e9eddb4e7bdeef1a171da679cd4c32b72 + languageName: node + linkType: hard + +"@types/terminal-kit@npm:^2.5.6": + version: 2.5.7 + resolution: "@types/terminal-kit@npm:2.5.7" + dependencies: + "@types/nextgen-events": "npm:*" + checksum: 10c0/76c497e22da2bfd8038189fcc72124e6535b90e32c61fc55ec0e7a4f1498d26ea229bc65716e0037b4b49b865f94bf8aa343425cbff0c6a561aed267eb79357f + languageName: node + linkType: hard + +"@types/three@npm:^0.129.2": + version: 0.129.2 + resolution: "@types/three@npm:0.129.2" + checksum: 10c0/6afff14f72fcf4e576e6736e6d7bacb88f72603ec6ac69d7ca8204ea7be83f9f6f74e35c2ce068b797d461b12275263971878ba6926175c86ede97e9c31ce7bd + languageName: node + linkType: hard + +"@types/tinycolor2@npm:^1.4.6": + version: 1.4.6 + resolution: "@types/tinycolor2@npm:1.4.6" + checksum: 10c0/922020c3326460e9d8502c8a98f80db69f06fd14e07fe5a48e8ffe66175762298a9bd51263f2a0c9a40632886a74975a3ff79396defcdbeac0dc176e3e5056e8 + languageName: node + linkType: hard + +"@types/tough-cookie@npm:*": + version: 4.0.5 + resolution: "@types/tough-cookie@npm:4.0.5" + checksum: 10c0/68c6921721a3dcb40451543db2174a145ef915bc8bcbe7ad4e59194a0238e776e782b896c7a59f4b93ac6acefca9161fccb31d1ce3b3445cb6faa467297fb473 + languageName: node + linkType: hard + +"@types/trusted-types@npm:*, @types/trusted-types@npm:^2.0.7": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 10c0/4c4855f10de7c6c135e0d32ce462419d8abbbc33713b31d294596c0cc34ae1fa6112a2f9da729c8f7a20707782b0d69da3b1f8df6645b0366d08825ca1522e0c + languageName: node + linkType: hard + +"@types/websocket@npm:^1.0.10": + version: 1.0.10 + resolution: "@types/websocket@npm:1.0.10" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/5950b8d01d1178c67c049f482fcab182085c59c2f98edda5980721f6eb512439ff91534e50ca7262720d75fc42ea6c8f8e5e7739442feea8f3cc0e320ebe2c74 + languageName: node + linkType: hard + +"@types/yauzl@npm:^2.9.1": + version: 2.10.3 + resolution: "@types/yauzl@npm:2.10.3" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/f1b7c1b99fef9f2fe7f1985ef7426d0cebe48cd031f1780fcdc7451eec7e31ac97028f16f50121a59bcf53086a1fc8c856fd5b7d3e00970e43d92ae27d6b43dc + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:8.36.0, @typescript-eslint/eslint-plugin@npm:^8.24.0": + version: 8.36.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.36.0" + dependencies: + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:8.36.0" + "@typescript-eslint/type-utils": "npm:8.36.0" + "@typescript-eslint/utils": "npm:8.36.0" + "@typescript-eslint/visitor-keys": "npm:8.36.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^7.0.0" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^2.1.0" + peerDependencies: + "@typescript-eslint/parser": ^8.36.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/a9bb55b896717bea630f969d1c7ca15ddaf0d0f72df1d8a05696a7ca75e8b40dc9abdc8ad447a0a0130f1d81a4bb5befd66c7f5e10950c4b1a389542ac3e0298 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:8.36.0, @typescript-eslint/parser@npm:^8.24.0": + version: 8.36.0 + resolution: "@typescript-eslint/parser@npm:8.36.0" + dependencies: + "@typescript-eslint/scope-manager": "npm:8.36.0" + "@typescript-eslint/types": "npm:8.36.0" + "@typescript-eslint/typescript-estree": "npm:8.36.0" + "@typescript-eslint/visitor-keys": "npm:8.36.0" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/4cba651b9fb6a3662775dcb9391d7c65c0674442674fb46e19bc612cc284057e638b4c3410ba5985f78d4a6bf55f522d875e428bc334e26e91a58d3b0f55904f + languageName: node + linkType: hard + +"@typescript-eslint/project-service@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/project-service@npm:8.36.0" + dependencies: + "@typescript-eslint/tsconfig-utils": "npm:^8.36.0" + "@typescript-eslint/types": "npm:^8.36.0" + debug: "npm:^4.3.4" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/4199bb52118fa530f24709707e0ab7677ffbe2885412aea294a24befe6ffe2af19b05512913752ab08b8177b00784da23285a6b091066e28fe4449cddcf0ef7a + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/scope-manager@npm:8.36.0" + dependencies: + "@typescript-eslint/types": "npm:8.36.0" + "@typescript-eslint/visitor-keys": "npm:8.36.0" + checksum: 10c0/ee40ac6ac130c8656530eac5705f386b9e33ee6aa4bb285794b62023bc42e1004c871260b0accdff57275cf8c939981dc72c5a64043310375e9117734827e9bb + languageName: node + linkType: hard + +"@typescript-eslint/tsconfig-utils@npm:8.36.0, @typescript-eslint/tsconfig-utils@npm:^8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.36.0" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/e0e1bacd3f5bfddb90a90362dbedf793d98ee1ada203fc2d83531a61617d246b9e0d0bfac493680f635afb3cfd749da2008e06e4404660334a5f804392064006 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/type-utils@npm:8.36.0" + dependencies: + "@typescript-eslint/typescript-estree": "npm:8.36.0" + "@typescript-eslint/utils": "npm:8.36.0" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^2.1.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/9743b99d1ab5c98b96e9b43472c1c0c787256285fe4c5fe3e54bbf331cd3c9a3bfac1188a490f6e0de8eacea0940731478feef6b3e0266d701bb0686815532c6 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:8.36.0, @typescript-eslint/types@npm:^8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/types@npm:8.36.0" + checksum: 10c0/cacb941a0caad6ab556c416051b97ec33b364b7c8e0703e2729ae43f12daf02b42eef12011705329107752e3f1685ca82cfffe181d637f85907293cb634bee31 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.36.0" + dependencies: + "@typescript-eslint/project-service": "npm:8.36.0" + "@typescript-eslint/tsconfig-utils": "npm:8.36.0" + "@typescript-eslint/types": "npm:8.36.0" + "@typescript-eslint/visitor-keys": "npm:8.36.0" + debug: "npm:^4.3.4" + fast-glob: "npm:^3.3.2" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^2.1.0" + peerDependencies: + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/3581401620de27fbeb4ce5052211432eff839961b4430324b505429637e3d19270be1ab1575e29da0115817d32fb5b1fa5e774667b91d92da7f6b95fff5dbf74 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/utils@npm:8.36.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.7.0" + "@typescript-eslint/scope-manager": "npm:8.36.0" + "@typescript-eslint/types": "npm:8.36.0" + "@typescript-eslint/typescript-estree": "npm:8.36.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/b107018ae0ba1cca954c3e8c3280cf1844c81c1c8494f9967014eadf41fdc44a88d13accc935c5371c61df02a13decd4846f12e63d9b2b2c789e5007abce1050 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:8.36.0": + version: 8.36.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.36.0" + dependencies: + "@typescript-eslint/types": "npm:8.36.0" + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/cc5cc3ab8cf0a84c73c6aa025556e8c6ed04c1a114f6d03c4c4a05c0b197f2de4f02764d053760f2ba81b256234bb14be391a8601f294e3ac31baaa1dce44a63 + languageName: node + linkType: hard + +"@vitest/expect@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/expect@npm:2.1.9" + dependencies: + "@vitest/spy": "npm:2.1.9" + "@vitest/utils": "npm:2.1.9" + chai: "npm:^5.1.2" + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/98d1cf02917316bebef9e4720723e38298a1c12b3c8f3a81f259bb822de4288edf594e69ff64f0b88afbda6d04d7a4f0c2f720f3fec16b4c45f5e2669f09fdbb + languageName: node + linkType: hard + +"@vitest/mocker@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/mocker@npm:2.1.9" + dependencies: + "@vitest/spy": "npm:2.1.9" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.12" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/f734490d8d1206a7f44dfdfca459282f5921d73efa72935bb1dc45307578defd38a4131b14853316373ec364cbe910dbc74594ed4137e0da35aa4d9bb716f190 + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:2.1.9, @vitest/pretty-format@npm:^2.1.9": + version: 2.1.9 + resolution: "@vitest/pretty-format@npm:2.1.9" + dependencies: + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/155f9ede5090eabed2a73361094bb35ed4ec6769ae3546d2a2af139166569aec41bb80e031c25ff2da22b71dd4ed51e5468e66a05e6aeda5f14b32e30bc18f00 + languageName: node + linkType: hard + +"@vitest/runner@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/runner@npm:2.1.9" + dependencies: + "@vitest/utils": "npm:2.1.9" + pathe: "npm:^1.1.2" + checksum: 10c0/e81f176badb12a815cbbd9bd97e19f7437a0b64e8934d680024b0f768d8670d59cad698ef0e3dada5241b6731d77a7bb3cd2c7cb29f751fd4dd35eb11c42963a + languageName: node + linkType: hard + +"@vitest/snapshot@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/snapshot@npm:2.1.9" + dependencies: + "@vitest/pretty-format": "npm:2.1.9" + magic-string: "npm:^0.30.12" + pathe: "npm:^1.1.2" + checksum: 10c0/394974b3a1fe96186a3c87f933b2f7f1f7b7cc42f9c781d80271dbb4c987809bf035fecd7398b8a3a2d54169e3ecb49655e38a0131d0e7fea5ce88960613b526 + languageName: node + linkType: hard + +"@vitest/spy@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/spy@npm:2.1.9" + dependencies: + tinyspy: "npm:^3.0.2" + checksum: 10c0/12a59b5095e20188b819a1d797e0a513d991b4e6a57db679927c43b362a3eff52d823b34e855a6dd9e73c9fa138dcc5ef52210841a93db5cbf047957a60ca83c + languageName: node + linkType: hard + +"@vitest/utils@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/utils@npm:2.1.9" + dependencies: + "@vitest/pretty-format": "npm:2.1.9" + loupe: "npm:^3.1.2" + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/81a346cd72b47941f55411f5df4cc230e5f740d1e97e0d3f771b27f007266fc1f28d0438582f6409ea571bc0030ed37f684c64c58d1947d6298d770c21026fdf + languageName: node + linkType: hard + +"@vue/compiler-sfc@npm:2.7.14": + version: 2.7.14 + resolution: "@vue/compiler-sfc@npm:2.7.14" + dependencies: + "@babel/parser": "npm:^7.18.4" + postcss: "npm:^8.4.14" + source-map: "npm:^0.6.1" + checksum: 10c0/29fe06d8da1f8721488468653be671aaa48d63fcd03c47261164cb770b4ecbde1e1455e6affbc9ef062f2729da6988000ba470fc43a2f8a454a61d51af68725d + languageName: node + linkType: hard + +"abbrev@npm:^3.0.0": + version: 3.0.1 + resolution: "abbrev@npm:3.0.1" + checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn@npm:^8.15.0, acorn@npm:^8.9.0": + version: 8.15.0 + resolution: "acorn@npm:8.15.0" + bin: + acorn: bin/acorn + checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.4 + resolution: "agent-base@npm:7.1.4" + checksum: 10c0/c2c9ab7599692d594b6a161559ada307b7a624fa4c7b03e3afdb5a5e31cd0e53269115b620fcab024c5ac6a6f37fa5eb2e004f076ad30f5f7e6b8b671f7b35fe + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"animated_java@workspace:.": + version: 0.0.0-use.local + resolution: "animated_java@workspace:." + dependencies: + "@novacbn/svelte-codejar": "npm:^0.1.2" + "@types/download": "npm:^8.0.5" + "@types/eslint": "npm:^9.6.1" + "@types/find-cache-dir": "npm:^5.0.2" + "@types/js-yaml": "npm:^4.0.5" + "@types/node": "npm:^22.13.5" + "@types/websocket": "npm:^1.0.10" + "@typescript-eslint/eslint-plugin": "npm:^8.24.0" + "@typescript-eslint/parser": "npm:^8.24.0" + blockbench-types: "https://github.com/SnaveSutit/blockbench-types.git" + deepslate: "patch:deepslate@npm%3A0.19.2#~/.yarn/patches/deepslate-npm-0.19.2-f859599b0a.patch" + envbench: "npm:^3.0.2" + esbuild: "npm:^0.25.0" + esbuild-plugin-import-glob: "npm:^0.1.1" + esbuild-plugin-inline-image: "npm:^0.0.9" + esbuild-plugin-inline-worker: "npm:^0.1.1" + esbuild-plugin-svelte: "npm:^0.1.1" + eslint: "npm:^9.20.0" + eslint-plugin-check-file: "npm:^3.0.0" + eslint-plugin-svelte: "npm:^2.46.1" + fflate: "npm:^0.8.2" + find-cache-dir: "npm:^5.0.0" + firebase: "npm:^9.19.0" + generic-stream: "npm:^1.2.6" + jiti: "npm:^2.4.2" + js-yaml: "npm:^4.1.0" + marked: "npm:^4.3.0" + marked-gfm-heading-id: "npm:^3.0.0" + mc-build: "npm:^3.5.1" + node-modules-vscode-problems-patch: "npm:^1.0.8" + prettier: "npm:^3.5.0" + request-progress: "npm:^3.0.0" + svelte: "npm:3.59.2" + svelte-ace: "npm:^1.0.21" + svelte-awesome-color-picker: "npm:^3.0.0-beta.7" + svelte-dnd-action: "npm:^0.9.38" + svelte-eslint-parser: "npm:^0.43.0" + svelte-multiselect: "npm:^11.1.1" + svelte-preprocess: "npm:^5.0.1" + svelte-preprocess-esbuild: "npm:^3.0.1" + typescript: "npm:^5.7.3" + typescript-eslint: "npm:^8.24.0" + vitest: "npm:^2.1.8" + languageName: unknown + linkType: soft + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard "blockbench-types@https://github.com/SnaveSutit/blockbench-types.git": - version "4.10.0" - resolved "https://github.com/SnaveSutit/blockbench-types.git#364526ee701a41ef147ee5f1d6c9b9003e8135ef" - dependencies: - "@babel/types" "^7.20.7" - "@types/dompurify" "^3.0.5" - "@types/jquery" "^3.5.4" - "@types/prismjs" "^1.26.0" - "@types/three" "^0.129.2" - "@types/tinycolor2" "^1.4.6" - dompurify "^3.0.1" - electron "^30.0.2" - prismjs "^1.29.0" - tinycolor2 "^1.6.0" - typescript "^4.9.5" - vue "^3.2.45" - wintersky "^1.3.0" - -boolean@^3.0.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" - integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace@^0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/brace/-/brace-0.11.1.tgz#4896fcc9d544eef45f4bb7660db320d3b379fe58" - integrity sha512-Fc8Ne62jJlKHiG/ajlonC4Sd66Pq68fFwK4ihJGNZpGqboc324SQk+lRvMzpPRuJOmfrJefdG8/7JdWX4bzJ2Q== - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-crc32@^0.2.5, buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== - -buffer@^5.2.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" - integrity sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ== - dependencies: - clone-response "1.0.2" - get-stream "3.0.0" - http-cache-semantics "3.8.1" - keyv "3.0.0" - lowercase-keys "1.0.0" - normalize-url "2.0.1" - responselike "1.0.2" - -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -chai@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/chai/-/chai-5.1.2.tgz#3afbc340b994ae3610ca519a6c70ace77ad4378d" - integrity sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw== - dependencies: - assertion-error "^2.0.1" - check-error "^2.1.1" - deep-eql "^5.0.1" - loupe "^3.1.0" - pathval "^2.0.0" - -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -check-error@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" - integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-response@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== - dependencies: - mimic-response "^1.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -code-red@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/code-red/-/code-red-1.0.4.tgz#59ba5c9d1d320a4ef795bc10a28bd42bfebe3e35" - integrity sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - "@types/estree" "^1.0.1" - acorn "^8.10.0" - estree-walker "^3.0.3" - periscopic "^3.1.0" - -codejar@^3.5.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/codejar/-/codejar-3.7.0.tgz#135913e26957c0a0c6a3a99305cfe8492c7b5c2b" - integrity sha512-rqyDu2zNwfu1EhXI++LEMQDzhykS+V0BV52RemtCj5lczgTgWSufyEa+tS7RP7qCXH/WXOkU0eIthmFUzvG78Q== - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colord@^2.9.3: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -combined-stream@^1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.8.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -console-clear@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/console-clear/-/console-clear-1.1.1.tgz#995e20cbfbf14dd792b672cde387bd128d674bf7" - integrity sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ== - -content-disposition@^0.5.2: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -css-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -csstype@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^4.3.7: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== - dependencies: - ms "^2.1.3" - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" - integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== - dependencies: - file-type "^5.2.0" - is-stream "^1.1.0" - tar-stream "^1.5.2" - -decompress-tarbz2@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" - integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== - dependencies: - decompress-tar "^4.1.0" - file-type "^6.1.0" - is-stream "^1.1.0" - seek-bzip "^1.0.5" - unbzip2-stream "^1.0.9" - -decompress-targz@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" - integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== - dependencies: - decompress-tar "^4.1.1" - file-type "^5.2.0" - is-stream "^1.1.0" - -decompress-unzip@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" - integrity sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw== - dependencies: - file-type "^3.8.0" - get-stream "^2.2.0" - pify "^2.3.0" - yauzl "^2.4.2" - -decompress@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" - integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== - dependencies: - decompress-tar "^4.0.0" - decompress-tarbz2 "^4.0.0" - decompress-targz "^4.0.0" - decompress-unzip "^4.0.1" - graceful-fs "^4.1.10" - make-dir "^1.0.0" - pify "^2.3.0" - strip-dirs "^2.0.0" - -deep-eql@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" - integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepslate@^0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/deepslate/-/deepslate-0.19.2.tgz#858c44d0bbde0e172d9144bcb7b21b57f4224b3a" - integrity sha512-sDOjpBXv5WBMmtsquJGNhOoZJKm4ra7pzzQP7FjNJHbZwoL+qlzrsfId4OU3C9WtfC6e0+2mcH+kd3KL5mjrSg== - dependencies: - gl-matrix "^3.3.0" - md5 "^2.3.0" - pako "^2.0.3" - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-data-property@^1.0.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -detect-indent@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dompurify@^3.0.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.1.3.tgz#cfe3ce4232c216d923832f68f2aa18b2fb9bd223" - integrity sha512-5sOWYSNPaxz6o2MUPvtyxTTqR4D3L77pr5rUQoWgD5ROQtVIZQgJkXbo1DLlK3vj11YGw5+LnF4SYti4gZmwng== - -download@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/download/-/download-8.0.0.tgz#afc0b309730811731aae9f5371c9f46be73e51b1" - integrity sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA== - dependencies: - archive-type "^4.0.0" - content-disposition "^0.5.2" - decompress "^4.2.1" - ext-name "^5.0.0" - file-type "^11.1.0" - filenamify "^3.0.0" - get-stream "^4.1.0" - got "^8.3.1" - make-dir "^2.1.0" - p-event "^2.1.0" - pify "^4.0.1" - -duplexer3@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" - integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== - -electron@^30.0.2: - version "30.0.6" - resolved "https://registry.yarnpkg.com/electron/-/electron-30.0.6.tgz#9ddea5f68396ecca88ad7c2c466a30fc9c16144b" - integrity sha512-PkhEPFdpYcTzjAO3gMHZ+map7g2+xCrMDedo/L1i0ir2BRXvAB93IkTJX497U6Srb/09r2cFt+k20VPNVCdw3Q== - dependencies: - "@electron/get" "^2.0.0" - "@types/node" "^20.9.0" - extract-zip "^2.0.1" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -entities@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-module-lexer@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.4.tgz#a8efec3a3da991e60efa6b633a7cad6ab8d26b78" - integrity sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== - -es6-error@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -es6-promise@^3.1.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" - integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg== - -esbuild-plugin-import-glob@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/esbuild-plugin-import-glob/-/esbuild-plugin-import-glob-0.1.1.tgz#6ab5ad992aa67ba9b1aa80c0759d5617960cd5c3" - integrity sha512-yAFH+9AoIcsQkODSx0KUPRv1FeJUN6Tef8vkPQMcuVkc2vXYneYKsHhOiFS/yIsg5bQ70HHtAlXVA1uTjgoJXg== - dependencies: - fast-glob "^3.2.5" - -esbuild-plugin-inline-image@^0.0.9: - version "0.0.9" - resolved "https://registry.yarnpkg.com/esbuild-plugin-inline-image/-/esbuild-plugin-inline-image-0.0.9.tgz#b645ddd258c013e9f7c96fddf4e06e66f44618ae" - integrity sha512-pw3ZgN2phh32Z7BpKrhRDtmI+iVCl+Gc0BLOT9croXg1MnMjRuN7aXhIQirhLeK39erkIwfFlhy6xieroBGc1Q== - -esbuild-plugin-inline-worker@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/esbuild-plugin-inline-worker/-/esbuild-plugin-inline-worker-0.1.1.tgz#f21a610ad7410972a408272e0d254654381eac58" - integrity sha512-VmFqsQKxUlbM51C1y5bRiMeyc1x2yTdMXhKB6S//++g9aCBg8TfGsbKxl5ZDkCGquqLY+RmEk93TBNd0i35dPA== - dependencies: - esbuild latest - find-cache-dir "^3.3.1" - -esbuild-plugin-svelte@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/esbuild-plugin-svelte/-/esbuild-plugin-svelte-0.1.1.tgz#5f2765d250de3074c6994b9cf9233bfb884801d0" - integrity sha512-/52fCH5sbztdFI7lsp+jyiiI7HuXlOW+ebXmiwAlwYYCXJ4gbBtVOHP2c2bG0cgb65fGCa2HL0I0gInQy19jtw== - -esbuild@^0.17.10: - version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== - optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" - -esbuild@^0.21.3: - version "0.21.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" - -esbuild@latest: - version "0.21.3" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.3.tgz#cbb10b100c768b0cfb35d61d9e70324553437c38" - integrity sha512-Kgq0/ZsAPzKrbOjCQcjoSmPoWhlcVnGAUo7jvaLHoxW1Drto0KGkR1xBNg2Cp43b9ImvxmPEJZ9xkfcnqPsfBw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.21.3" - "@esbuild/android-arm" "0.21.3" - "@esbuild/android-arm64" "0.21.3" - "@esbuild/android-x64" "0.21.3" - "@esbuild/darwin-arm64" "0.21.3" - "@esbuild/darwin-x64" "0.21.3" - "@esbuild/freebsd-arm64" "0.21.3" - "@esbuild/freebsd-x64" "0.21.3" - "@esbuild/linux-arm" "0.21.3" - "@esbuild/linux-arm64" "0.21.3" - "@esbuild/linux-ia32" "0.21.3" - "@esbuild/linux-loong64" "0.21.3" - "@esbuild/linux-mips64el" "0.21.3" - "@esbuild/linux-ppc64" "0.21.3" - "@esbuild/linux-riscv64" "0.21.3" - "@esbuild/linux-s390x" "0.21.3" - "@esbuild/linux-x64" "0.21.3" - "@esbuild/netbsd-x64" "0.21.3" - "@esbuild/openbsd-x64" "0.21.3" - "@esbuild/sunos-x64" "0.21.3" - "@esbuild/win32-arm64" "0.21.3" - "@esbuild/win32-ia32" "0.21.3" - "@esbuild/win32-x64" "0.21.3" - -escalade@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-string-regexp@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.35.0: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - 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" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -estree-walker@^3.0.0, estree-walker@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -expect-type@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.1.0.tgz#a146e414250d13dfc49eafcfd1344a4060fa4c75" - integrity sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA== - -ext-list@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" - integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== - dependencies: - mime-db "^1.28.0" - -ext-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" - integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== - dependencies: - ext-list "^2.0.0" - sort-keys-length "^1.0.0" - -extract-zip@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.5, fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -faye-websocket@0.11.4: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -fflate@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" - integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -file-type@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-11.1.0.tgz#93780f3fed98b599755d846b99a1617a2ad063b8" - integrity sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g== - -file-type@^3.8.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" - integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== - -file-type@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" - integrity sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ== - -file-type@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" - integrity sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ== - -file-type@^6.1.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" - integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== - -filename-reserved-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" - integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== - -filenamify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-3.0.0.tgz#9603eb688179f8c5d40d828626dcbb92c3a4672c" - integrity sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g== - dependencies: - filename-reserved-regex "^2.0.0" - strip-outer "^1.0.0" - trim-repeated "^1.0.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -firebase@^9.19.0: - version "9.23.0" - resolved "https://registry.yarnpkg.com/firebase/-/firebase-9.23.0.tgz#71fea60d704bfed8e92162911544fd6564a04d0e" - integrity sha512-/4lUVY0lUvBDIaeY1q6dUYhS8Sd18Qb9CgWkPZICUo9IXpJNCEagfNZXBBFCkMTTN5L5gx2Hjr27y21a9NzUcA== - dependencies: - "@firebase/analytics" "0.10.0" - "@firebase/analytics-compat" "0.2.6" - "@firebase/app" "0.9.13" - "@firebase/app-check" "0.8.0" - "@firebase/app-check-compat" "0.3.7" - "@firebase/app-compat" "0.2.13" - "@firebase/app-types" "0.9.0" - "@firebase/auth" "0.23.2" - "@firebase/auth-compat" "0.4.2" - "@firebase/database" "0.14.4" - "@firebase/database-compat" "0.3.4" - "@firebase/firestore" "3.13.0" - "@firebase/firestore-compat" "0.3.12" - "@firebase/functions" "0.10.0" - "@firebase/functions-compat" "0.3.5" - "@firebase/installations" "0.6.4" - "@firebase/installations-compat" "0.2.4" - "@firebase/messaging" "0.12.4" - "@firebase/messaging-compat" "0.2.4" - "@firebase/performance" "0.6.4" - "@firebase/performance-compat" "0.2.4" - "@firebase/remote-config" "0.4.4" - "@firebase/remote-config-compat" "0.2.4" - "@firebase/storage" "0.11.2" - "@firebase/storage-compat" "0.3.2" - "@firebase/util" "1.9.3" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - -form-data@^2.5.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.2.tgz#dc653743d1de2fcc340ceea38079daf6e9069fd2" - integrity sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - safe-buffer "^5.2.1" - -from2@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -generic-stream@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/generic-stream/-/generic-stream-1.2.6.tgz#4af618e1fd3c3e46d2a7e513d23592c72d1b2ea3" - integrity sha512-HVdPtxina7pshOCmTkFqzu8p/XCx5/6J6jMQPRdoDKnWEvkQzROEZa7n202NLt431lJ8+dTYMCFjB6DiPpCYsQ== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-port@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" - integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== - -get-stream@3.0.0, get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== - -get-stream@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" - integrity sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA== - dependencies: - object-assign "^4.0.1" - pinkie-promise "^2.0.0" - -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -github-slugger@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-2.0.0.tgz#52cf2f9279a21eb6c59dd385b410f0c0adda8f1a" - integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== - -gl-matrix@^3.3.0: - version "3.4.3" - resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9" - integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA== - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-agent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" - integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== - dependencies: - boolean "^3.0.1" - es6-error "^4.1.1" - matcher "^3.0.0" - roarr "^2.15.3" - semver "^7.3.2" - serialize-error "^7.0.1" - -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@^11.8.5: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -got@^8.3.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" - integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== - dependencies: - "@sindresorhus/is" "^0.7.0" - cacheable-request "^2.1.1" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - into-stream "^3.1.0" - is-retry-allowed "^1.1.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - mimic-response "^1.0.0" - p-cancelable "^0.4.0" - p-timeout "^2.0.1" - pify "^3.0.0" - safe-buffer "^5.1.1" - timed-out "^4.0.1" - url-parse-lax "^3.0.0" - url-to-options "^1.0.1" - -graceful-fs@^4.1.10, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== - dependencies: - has-symbol-support-x "^1.4.1" - -hasown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -http-cache-semantics@3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== - -http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-parser-js@>=0.5.1: - version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -idb@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/idb/-/idb-7.0.1.tgz#d2875b3a2f205d854ee307f6d196f246fea590a7" - integrity sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg== - -idb@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.1.tgz#d910ded866d32c7ced9befc5bfdf36f572ced72b" - integrity sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ== - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -into-stream@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" - integrity sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ== - dependencies: - from2 "^2.1.1" - p-is-promise "^1.1.0" - -is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-natural-number@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" - integrity sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" - integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -is-reference@^3.0.0, is-reference@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.3.tgz#9ef7bf9029c70a67b2152da4adf57c23d718910f" - integrity sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw== - dependencies: - "@types/estree" "^1.0.6" - -is-retry-allowed@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -keyv@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" - integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== - dependencies: - json-buffer "3.0.0" - -keyv@^4.0.0, keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kleur@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -local-access@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/local-access/-/local-access-1.1.0.tgz#e007c76ba2ca83d5877ba1a125fc8dfe23ba4798" - integrity sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw== - -locate-character@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-character/-/locate-character-3.0.0.tgz#0305c5b8744f61028ef5d01f444009e00779f974" - integrity sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA== - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -long@^5.0.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - -loupe@^3.1.0, loupe@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.2.tgz#c86e0696804a02218f2206124c45d8b15291a240" - integrity sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg== - -lowercase-keys@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - integrity sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A== - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -magic-string@^0.30.10, magic-string@^0.30.5: - version "0.30.10" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.10.tgz#123d9c41a0cb5640c892b041d4cfb3bd0aa4b39e" - integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.15" - -magic-string@^0.30.12: - version "0.30.15" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.15.tgz#d5474a2c4c5f35f041349edaba8a5cb02733ed3c" - integrity sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" - -magic-string@^0.30.4: - version "0.30.17" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" - integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -marked-gfm-heading-id@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/marked-gfm-heading-id/-/marked-gfm-heading-id-3.1.3.tgz#7bcfea85901843baf214b96ccc4ff67581c972a9" - integrity sha512-A0cRU4PCueX/5m8VE4mT8uTQ36l3xMYRojz3Eqnk4BmUFZ0T+9Xhn2KvHcANP4qbhfOeuMrWJCTQbASIBR5xeg== - dependencies: - github-slugger "^2.0.0" - -marked@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== - -matcher@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" - integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== - dependencies: - escape-string-regexp "^4.0.0" - -mc-build@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/mc-build/-/mc-build-3.5.1.tgz#684bf069701d62b85c8d698be6679bb92f5d4044" - integrity sha512-bySCg9VA+V0++SqfJrBcPxU9t8UrifcecGpXAR/21kqV4uWItoo12MqBSN3bI6f51j3vbVIrdOAH+PiWBp5S7w== - -md5@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-db@^1.28.0: - version "1.53.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" - integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -molangjs@^1.6.3: - version "1.6.4" - resolved "https://registry.yarnpkg.com/molangjs/-/molangjs-1.6.4.tgz#3e538fb2f4f79b3b31bbf1cabd566a07e8772144" - integrity sha512-Evi2MbMcfDFwcG4HVjsX4MAj+jc7itlp1Ncd+sQ+4jel7N1pADUJpiWEdg3d9IIK+0RQwJw7EE3GrM+ERWbcQA== - -mri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -normalize-url@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" - integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== - dependencies: - prepend-http "^2.0.0" - query-string "^5.0.1" - sort-keys "^2.0.0" - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -optionator@^0.9.3: - version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" - -p-cancelable@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" - integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-event@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" - integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== - dependencies: - p-timeout "^2.0.1" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-is-promise@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - integrity sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg== - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-timeout@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" - integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== - dependencies: - p-finally "^1.0.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86" - integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathe@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" - integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== - -pathval@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" - integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -periscopic@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.1.0.tgz#7e9037bf51c5855bd33b48928828db4afa79d97a" - integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^3.0.0" - is-reference "^3.0.0" - -picocolors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== - -picocolors@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -postcss@^8.4.38: - version "8.4.38" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.2.0" - -postcss@^8.4.43: - version "8.4.49" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" - integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== - dependencies: - nanoid "^3.3.7" - picocolors "^1.1.1" - source-map-js "^1.2.1" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== - -prettier@^2.5.1: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -prismjs@^1.29.0: - version "1.29.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" - integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -protobufjs@^6.11.3: - version "6.11.4" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" - integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.1" - "@types/node" ">=13.7.0" - long "^4.0.0" - -protobufjs@^7.2.5: - version "7.3.0" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.0.tgz#a32ec0422c039798c41a0700306a6e305b9cb32c" - integrity sha512-YWD03n3shzV9ImZRX3ccbjqLxj7NokGN0V/ESiBV5xWqrommYHYiihuIyavq03pWSGqlyvYUFmfoMKd+1rPA/g== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.0.0" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -readable-stream@^2.0.0, readable-stream@^2.3.0, readable-stream@^2.3.5: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -request-progress@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" - integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== - dependencies: - throttleit "^1.0.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -responselike@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== - dependencies: - lowercase-keys "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.5.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -roarr@^2.15.3: - version "2.15.4" - resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" - integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== - dependencies: - boolean "^3.0.1" - detect-node "^2.0.4" - globalthis "^1.0.1" - json-stringify-safe "^5.0.1" - semver-compare "^1.0.0" - sprintf-js "^1.1.2" - -rollup@^4.20.0: - version "4.28.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.28.1.tgz#7718ba34d62b449dfc49adbfd2f312b4fe0df4de" - integrity sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg== - dependencies: - "@types/estree" "1.0.6" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.28.1" - "@rollup/rollup-android-arm64" "4.28.1" - "@rollup/rollup-darwin-arm64" "4.28.1" - "@rollup/rollup-darwin-x64" "4.28.1" - "@rollup/rollup-freebsd-arm64" "4.28.1" - "@rollup/rollup-freebsd-x64" "4.28.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.28.1" - "@rollup/rollup-linux-arm-musleabihf" "4.28.1" - "@rollup/rollup-linux-arm64-gnu" "4.28.1" - "@rollup/rollup-linux-arm64-musl" "4.28.1" - "@rollup/rollup-linux-loongarch64-gnu" "4.28.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.28.1" - "@rollup/rollup-linux-riscv64-gnu" "4.28.1" - "@rollup/rollup-linux-s390x-gnu" "4.28.1" - "@rollup/rollup-linux-x64-gnu" "4.28.1" - "@rollup/rollup-linux-x64-musl" "4.28.1" - "@rollup/rollup-win32-arm64-msvc" "4.28.1" - "@rollup/rollup-win32-ia32-msvc" "4.28.1" - "@rollup/rollup-win32-x64-msvc" "4.28.1" - fsevents "~2.3.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -sade@^1.6.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" - integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - dependencies: - mri "^1.1.0" - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -sander@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad" - integrity sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA== - dependencies: - es6-promise "^3.1.2" - graceful-fs "^4.1.3" - mkdirp "^0.5.1" - rimraf "^2.5.2" - -seek-bzip@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" - integrity sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ== - dependencies: - commander "^2.8.1" - -semiver@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semiver/-/semiver-1.1.0.tgz#9c97fb02c21c7ce4fcf1b73e2c7a24324bdddd5f" - integrity sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg== - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== - -semver@^5.6.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.0.0, semver@^6.2.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.2, semver@^7.3.7: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - -serialize-error@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" - integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== - dependencies: - type-fest "^0.13.1" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -siginfo@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" - integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== - -sirv-cli@^1.0.0: - version "1.0.14" - resolved "https://registry.yarnpkg.com/sirv-cli/-/sirv-cli-1.0.14.tgz#4bc60421b3de9caea80ccd292b5004aca4ce3c81" - integrity sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ== - dependencies: - console-clear "^1.1.0" - get-port "^3.2.0" - kleur "^3.0.0" - local-access "^1.0.1" - sade "^1.6.0" - semiver "^1.0.0" - sirv "^1.0.13" - tinydate "^1.0.0" - -sirv@^1.0.13: - version "1.0.19" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" - integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== - dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^1.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -sorcery@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.11.0.tgz#310c80ee993433854bb55bb9aa4003acd147fca8" - integrity sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.14" - buffer-crc32 "^0.2.5" - minimist "^1.2.0" - sander "^0.5.0" - -sort-keys-length@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" - integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== - dependencies: - sort-keys "^1.0.0" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== - dependencies: - is-plain-obj "^1.0.0" - -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - integrity sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg== - dependencies: - is-plain-obj "^1.0.0" - -source-map-js@^1.0.1, source-map-js@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== - -sprintf-js@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -stackback@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" - integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== - -std-env@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5" - integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-dirs@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" - integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== - dependencies: - is-natural-number "^4.0.1" - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-outer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== - dependencies: - escape-string-regexp "^1.0.2" - -sumchecker@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" - integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== - dependencies: - debug "^4.1.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -svelte-ace@^1.0.21: - version "1.0.21" - resolved "https://registry.yarnpkg.com/svelte-ace/-/svelte-ace-1.0.21.tgz#01039fdf2ffae76965cc46f616b55a329a7fb632" - integrity sha512-Ek86AiCNcBYH84P90NmQh4GLW9TB5jZP0zBhqPJ/dGRdOP+LOQ+gQIQ1JyTzYpMGQVlDUb9Ug4yo0hCGWNnjaw== - dependencies: - brace "^0.11.1" - sirv-cli "^1.0.0" - -svelte-awesome-color-picker@^3.0.0-beta.7: - version "3.1.0" - resolved "https://registry.yarnpkg.com/svelte-awesome-color-picker/-/svelte-awesome-color-picker-3.1.0.tgz#b0e2d0abaf4d273bd7812d9313e2bd9eb3744da6" - integrity sha512-na9B9qLaV8XQ6W6eyP6vFyDV2TBF4qvGad6799D4GzbazkiFtoO+lbaFFViAWanz/eECwe/WUAUdg6Jy7LIKFw== - dependencies: - colord "^2.9.3" - svelte-awesome-slider "^1.1.0" - -svelte-awesome-slider@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/svelte-awesome-slider/-/svelte-awesome-slider-1.1.0.tgz#34c46b1e04860f1a88dd12184f7d2c2dc4c9156d" - integrity sha512-MgY6ZdBON42HVZqNWNjq2HOgyDlC35q0TNbV/YO1l1/bcb5yhM8EE97h1AJ/7F6t6sLzXhQ3qPf5nGyCdDSnCg== - -svelte-dnd-action@^0.9.38: - version "0.9.47" - resolved "https://registry.yarnpkg.com/svelte-dnd-action/-/svelte-dnd-action-0.9.47.tgz#f275b042aa23ea82054f2d797c8fd1b2a15f8821" - integrity sha512-Z343HCJfrGHgK98LCrp0ziGUwwWOd8UrpXk7b7A61OQErrB8nUS2tLVRZlaGzhMfE1UCivuqTGFLqxJ14KehfQ== - -svelte-multiselect@^11.0.0-rc.1: - version "11.0.0-rc.1" - resolved "https://registry.yarnpkg.com/svelte-multiselect/-/svelte-multiselect-11.0.0-rc.1.tgz#1238a6b768902afbdde23165e6dc922555f27342" - integrity sha512-dyUzja9AJfDejfafDj6PKNk3F51HavArevkJxZ0upJKUlPnPx5pDKY24BQYQvUpitTqVtsEoHevKr93WebBtwA== - dependencies: - svelte "4.2.12" - -svelte-preprocess-esbuild@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/svelte-preprocess-esbuild/-/svelte-preprocess-esbuild-3.0.1.tgz#1f31c7a46f56d4c60dde3ec5fe72f2ddf40ad700" - integrity sha512-OV4P/onki7hfuzIpYOd92TT0JSm4y67PvkAAM7RigLd869VEvNh2f6J+ewrEqAgTnZzVQcOWzuaU4hPISNPFpA== - -svelte-preprocess@^5.0.1: - version "5.1.4" - resolved "https://registry.yarnpkg.com/svelte-preprocess/-/svelte-preprocess-5.1.4.tgz#14ada075c94bbd2b71c5ec70ff72f8ebe1c95b91" - integrity sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA== - dependencies: - "@types/pug" "^2.0.6" - detect-indent "^6.1.0" - magic-string "^0.30.5" - sorcery "^0.11.0" - strip-indent "^3.0.0" - -svelte@4.2.12: - version "4.2.12" - resolved "https://registry.yarnpkg.com/svelte/-/svelte-4.2.12.tgz#13d98d2274d24d3ad216c8fdc801511171c70bb1" - integrity sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug== - dependencies: - "@ampproject/remapping" "^2.2.1" - "@jridgewell/sourcemap-codec" "^1.4.15" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/estree" "^1.0.1" - acorn "^8.9.0" - aria-query "^5.3.0" - axobject-query "^4.0.0" - code-red "^1.0.3" - css-tree "^2.3.1" - estree-walker "^3.0.3" - is-reference "^3.0.1" - locate-character "^3.0.0" - magic-string "^0.30.4" - periscopic "^3.1.0" - -svelte@^3.42.3, svelte@^3.55.1: - version "3.59.2" - resolved "https://registry.yarnpkg.com/svelte/-/svelte-3.59.2.tgz#a137b28e025a181292b2ae2e3dca90bf8ec73aec" - integrity sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA== - -tar-stream@^1.5.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" - integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== - dependencies: - bl "^1.0.0" - buffer-alloc "^1.2.0" - end-of-stream "^1.0.0" - fs-constants "^1.0.0" - readable-stream "^2.3.0" - to-buffer "^1.1.1" - xtend "^4.0.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -three@^0.134.0: - version "0.134.0" - resolved "https://registry.yarnpkg.com/three/-/three-0.134.0.tgz#d7ad4d85d050da0861bf39749b06ddfb5f17157f" - integrity sha512-LbBerg7GaSPjYtTOnu41AMp7tV6efUNR3p4Wk5NzkSsNTBuA5mDGOfwwZL1jhhVMLx9V20HolIUo0+U3AXehbg== - -throttleit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" - integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== - -through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== - -tinybench@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" - integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== - -tinycolor2@^1.4.2, tinycolor2@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" - integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== - -tinydate@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tinydate/-/tinydate-1.3.0.tgz#e6ca8e5a22b51bb4ea1c3a2a4fd1352dbd4c57fb" - integrity sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w== - -tinyexec@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.1.tgz#0ab0daf93b43e2c211212396bdb836b468c97c98" - integrity sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ== - -tinypool@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.0.2.tgz#706193cc532f4c100f66aa00b01c42173d9051b2" - integrity sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA== - -tinyrainbow@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" - integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== - -tinyspy@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" - integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== - -to-buffer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" - integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -totalist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" - integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== - dependencies: - escape-string-regexp "^1.0.2" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -typescript@^4.5.5, typescript@^4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -unbzip2-stream@^1.0.9: - version "1.4.3" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" - integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== - dependencies: - buffer "^5.2.1" - through "^2.3.8" - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== - dependencies: - prepend-http "^2.0.0" - -url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - integrity sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A== - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -vite-node@2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-2.1.8.tgz#9495ca17652f6f7f95ca7c4b568a235e0c8dbac5" - integrity sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg== - dependencies: - cac "^6.7.14" - debug "^4.3.7" - es-module-lexer "^1.5.4" - pathe "^1.1.2" - vite "^5.0.0" - -vite@^5.0.0: - version "5.4.11" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.11.tgz#3b415cd4aed781a356c1de5a9ebafb837715f6e5" - integrity sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q== - dependencies: - esbuild "^0.21.3" - postcss "^8.4.43" - rollup "^4.20.0" - optionalDependencies: - fsevents "~2.3.3" - -vitest@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-2.1.8.tgz#2e6a00bc24833574d535c96d6602fb64163092fa" - integrity sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ== - dependencies: - "@vitest/expect" "2.1.8" - "@vitest/mocker" "2.1.8" - "@vitest/pretty-format" "^2.1.8" - "@vitest/runner" "2.1.8" - "@vitest/snapshot" "2.1.8" - "@vitest/spy" "2.1.8" - "@vitest/utils" "2.1.8" - chai "^5.1.2" - debug "^4.3.7" - expect-type "^1.1.0" - magic-string "^0.30.12" - pathe "^1.1.2" - std-env "^3.8.0" - tinybench "^2.9.0" - tinyexec "^0.3.1" - tinypool "^1.0.1" - tinyrainbow "^1.2.0" - vite "^5.0.0" - vite-node "2.1.8" - why-is-node-running "^2.3.0" - -vue@^3.2.45: - version "3.4.27" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.4.27.tgz#40b7d929d3e53f427f7f5945386234d2854cc2a1" - integrity sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA== - dependencies: - "@vue/compiler-dom" "3.4.27" - "@vue/compiler-sfc" "3.4.27" - "@vue/runtime-dom" "3.4.27" - "@vue/server-renderer" "3.4.27" - "@vue/shared" "3.4.27" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -why-is-node-running@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" - integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== - dependencies: - siginfo "^2.0.0" - stackback "0.0.2" - -wintersky@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/wintersky/-/wintersky-1.3.0.tgz#99af4b24bf1a93fdfbca91f3e3bf1c643c1432e4" - integrity sha512-ibeUF+sgoIrFAfgqcNsPlr8+4l0KOfhGw+JgjxKcgtbckSy3gAxqAeNX5LjuQK9y7jcBZDwUIXg9sZDGQ1W+hQ== - dependencies: - molangjs "^1.6.3" - three "^0.134.0" - tinycolor2 "^1.4.2" - -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yauzl@^2.10.0, yauzl@^2.4.2: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + version: 4.12.1 + resolution: "blockbench-types@https://github.com/SnaveSutit/blockbench-types.git#commit=8f72944b1dca432147a062e6a1c1ec9f17d839b5" + dependencies: + "@babel/types": "npm:^7.20.7" + "@types/dompurify": "npm:^3.0.5" + "@types/jquery": "npm:^3.5.32" + "@types/prismjs": "npm:^1.26.0" + "@types/three": "npm:^0.129.2" + "@types/tinycolor2": "npm:^1.4.6" + dompurify: "npm:^3.0.1" + electron: "npm:^33.3.1" + prismjs: "npm:^1.29.0" + tinycolor2: "npm:^1.6.0" + typescript: "npm:^4.9.5" + vue: "npm:2.7.14" + wintersky: "npm:^1.3.0" + checksum: 10c0/7daae3ee337e44b2aeff508eba0d3c8a71e8f6b8f0d2afff886dbd396f73150b00c5b2f3b34c087e54f32aed485ff3791cb403db28a40d82c3f18945f5b7fa8a + languageName: node + linkType: hard + +"boolean@npm:^3.0.1": + version: 3.2.0 + resolution: "boolean@npm:3.2.0" + checksum: 10c0/6a0dc9668f6f3dda42a53c181fcbdad223169c8d87b6c4011b87a8b14a21770efb2934a778f063d7ece17280f8c06d313c87f7b834bb1dd526a867ffcd00febf + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.12 + resolution: "brace-expansion@npm:1.1.12" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.2 + resolution: "brace-expansion@npm:2.0.2" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf + languageName: node + linkType: hard + +"brace@npm:^0.11.1": + version: 0.11.1 + resolution: "brace@npm:0.11.1" + checksum: 10c0/c29e09016edb9da0ddba21c6a956b62a5de06a6ac243bcfe25fbbea5b16304933f2105904aa823932e0595f87449b3b935761fb454a822175f1e5e1582a9544d + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"buffer-crc32@npm:^1.0.0": + version: 1.0.0 + resolution: "buffer-crc32@npm:1.0.0" + checksum: 10c0/8b86e161cee4bb48d5fa622cbae4c18f25e4857e5203b89e23de59e627ab26beb82d9d7999f2b8de02580165f61f83f997beaf02980cdf06affd175b651921ab + languageName: node + linkType: hard + +"buffer-crc32@npm:~0.2.3": + version: 0.2.13 + resolution: "buffer-crc32@npm:0.2.13" + checksum: 10c0/cb0a8ddf5cf4f766466db63279e47761eb825693eeba6a5a95ee4ec8cb8f81ede70aa7f9d8aeec083e781d47154290eb5d4d26b3f7a465ec57fb9e7d59c47150 + languageName: node + linkType: hard + +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c + languageName: node + linkType: hard + +"cacheable-lookup@npm:^5.0.3": + version: 5.0.4 + resolution: "cacheable-lookup@npm:5.0.4" + checksum: 10c0/a6547fb4954b318aa831cbdd2f7b376824bc784fb1fa67610e4147099e3074726072d9af89f12efb69121415a0e1f2918a8ddd4aafcbcf4e91fbeef4a59cd42c + languageName: node + linkType: hard + +"cacheable-request@npm:^7.0.2": + version: 7.0.4 + resolution: "cacheable-request@npm:7.0.4" + dependencies: + clone-response: "npm:^1.0.2" + get-stream: "npm:^5.1.0" + http-cache-semantics: "npm:^4.0.0" + keyv: "npm:^4.0.0" + lowercase-keys: "npm:^2.0.0" + normalize-url: "npm:^6.0.1" + responselike: "npm:^2.0.0" + checksum: 10c0/0834a7d17ae71a177bc34eab06de112a43f9b5ad05ebe929bec983d890a7d9f2bc5f1aa8bb67ea2b65e07a3bc74bea35fa62dd36dbac52876afe36fdcf83da41 + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"chai@npm:^5.1.2": + version: 5.2.1 + resolution: "chai@npm:5.2.1" + dependencies: + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: 10c0/58209c03ae9b2fd97cfa1cb0fbe372b1906e6091311b9ba1b0468cc4923b0766a50a1050a164df3ccefb9464944c9216b632f1477c9e429068013bdbb57220f6 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chalk@npm:^5.4.1": + version: 5.4.1 + resolution: "chalk@npm:5.4.1" + checksum: 10c0/b23e88132c702f4855ca6d25cb5538b1114343e41472d5263ee8a37cccfccd9c4216d111e1097c6a27830407a1dc81fecdf2a56f2c63033d4dbbd88c10b0dcef + languageName: node + linkType: hard + +"charenc@npm:0.0.2": + version: 0.0.2 + resolution: "charenc@npm:0.0.2" + checksum: 10c0/a45ec39363a16799d0f9365c8dd0c78e711415113c6f14787a22462ef451f5013efae8a28f1c058f81fc01f2a6a16955f7a5fd0cd56247ce94a45349c89877d8 + languageName: node + linkType: hard + +"check-error@npm:^2.1.1": + version: 2.1.1 + resolution: "check-error@npm:2.1.1" + checksum: 10c0/979f13eccab306cf1785fa10941a590b4e7ea9916ea2a4f8c87f0316fc3eab07eabefb6e587424ef0f88cbcd3805791f172ea739863ca3d7ce2afc54641c7f0e + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"chroma-js@npm:^2.4.2": + version: 2.6.0 + resolution: "chroma-js@npm:2.6.0" + checksum: 10c0/6e17f43246f9b3eba8a9db67f5ee9a2d0ef1360077211887da09ec1f0934bb98a358eefaf021003c0bd47cbab540f573a373f362d6b2ba04d0e80ab7677e1640 + languageName: node + linkType: hard + +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.0" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/6035f5daf7383470cef82b3d3db00bec70afb3423538c50394386ffbbab135e26c3689c41791f911fa71b62d13d3863c712fdd70f0fbdffd938a1e6fd09aac00 + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + +"clone-response@npm:^1.0.2": + version: 1.0.3 + resolution: "clone-response@npm:1.0.3" + dependencies: + mimic-response: "npm:^1.0.0" + checksum: 10c0/06a2b611824efb128810708baee3bd169ec9a1bf5976a5258cd7eb3f7db25f00166c6eee5961f075c7e38e194f373d4fdf86b8166ad5b9c7e82bbd2e333a6087 + languageName: node + linkType: hard + +"codejar@npm:^3.5.0": + version: 3.7.0 + resolution: "codejar@npm:3.7.0" + checksum: 10c0/5c22fcc0bf38d3d6c0167eb092fa203de9663b39f48856f751d08a4c59e16ca781126c1d36470bcfe633d9e021420fddffc2143b429a29b57e5fcd607cfcad59 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"colord@npm:^2.9.3": + version: 2.9.3 + resolution: "colord@npm:2.9.3" + checksum: 10c0/9699e956894d8996b28c686afe8988720785f476f59335c80ce852ded76ab3ebe252703aec53d9bef54f6219aea6b960fb3d9a8300058a1d0c0d4026460cd110 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"commander@npm:^13.1.0": + version: 13.1.0 + resolution: "commander@npm:13.1.0" + checksum: 10c0/7b8c5544bba704fbe84b7cab2e043df8586d5c114a4c5b607f83ae5060708940ed0b5bd5838cf8ce27539cde265c1cbd59ce3c8c6b017ed3eec8943e3a415164 + languageName: node + linkType: hard + +"common-path-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "common-path-prefix@npm:3.0.0" + checksum: 10c0/c4a74294e1b1570f4a8ab435285d185a03976c323caa16359053e749db4fde44e3e6586c29cd051100335e11895767cbbd27ea389108e327d62f38daf4548fdb + languageName: node + linkType: hard + +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 10c0/33a124960e471c25ee19280c9ce31ccc19574b566dc514fe4f4ca4c34fa8b0b57cf437671f5de380e11353ea9426213fca17687dd2ef03134fea2dbc53809fd6 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"console-clear@npm:^1.1.0": + version: 1.1.1 + resolution: "console-clear@npm:1.1.1" + checksum: 10c0/96516c6175648ab5b8afa7cc455d3e4a47f714e7f6712d17fffb2f8d3c815eb0f9330d823c5d35c91b51aa5e66b20cebf7bd9ca29fed591bb1cfd165f08fd7d7 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"crypt@npm:0.0.2": + version: 0.0.2 + resolution: "crypt@npm:0.0.2" + checksum: 10c0/adbf263441dd801665d5425f044647533f39f4612544071b1471962209d235042fb703c27eea2795c7c53e1dfc242405173003f83cf4f4761a633d11f9653f18 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 + languageName: node + linkType: hard + +"csstype@npm:^3.1.0": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 + languageName: node + linkType: hard + +"cwise-compiler@npm:^1.1.2": + version: 1.1.3 + resolution: "cwise-compiler@npm:1.1.3" + dependencies: + uniq: "npm:^1.0.0" + checksum: 10c0/91f38981c4c311cb55f2652d7f7cb31ab2d0bdcca556ac58d7085d43130713dfc19a1d4f5461a751e081ff112a4ada9ff01fa9566ad1c4461323ac7516e1f5cf + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.7": + version: 4.4.1 + resolution: "debug@npm:4.4.1" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 + languageName: node + linkType: hard + +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: 10c0/bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e + languageName: node + linkType: hard + +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"deepslate@npm:0.19.2": + version: 0.19.2 + resolution: "deepslate@npm:0.19.2" + dependencies: + gl-matrix: "npm:^3.3.0" + md5: "npm:^2.3.0" + pako: "npm:^2.0.3" + checksum: 10c0/e989829d1305037db596147c4e4e2a0e4119e5ac226f4e60db2fc24d9430f01c72501ffce9be2ca9c47a0afdd3878a5cf4156f07c847958126f960878412ae65 + languageName: node + linkType: hard + +"deepslate@patch:deepslate@npm%3A0.19.2#~/.yarn/patches/deepslate-npm-0.19.2-f859599b0a.patch": + version: 0.19.2 + resolution: "deepslate@patch:deepslate@npm%3A0.19.2#~/.yarn/patches/deepslate-npm-0.19.2-f859599b0a.patch::version=0.19.2&hash=34372f" + dependencies: + gl-matrix: "npm:^3.3.0" + md5: "npm:^2.3.0" + pako: "npm:^2.0.3" + checksum: 10c0/1f9aaba7804fc987f731e1de8bab7b53c6eb652de474781b2f4fc164c75538c2e809c9c4dfe0dd7031cf4599acbcc8fbebf0ae5d42a2d79ecb142dc9da68ca31 + languageName: node + linkType: hard + +"defer-to-connect@npm:^2.0.0": + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 10c0/625ce28e1b5ad10cf77057b9a6a727bf84780c17660f6644dab61dd34c23de3001f03cedc401f7d30a4ed9965c2e8a7336e220a329146f2cf85d4eddea429782 + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"detect-indent@npm:^6.1.0": + version: 6.1.0 + resolution: "detect-indent@npm:6.1.0" + checksum: 10c0/dd83cdeda9af219cf77f5e9a0dc31d828c045337386cfb55ce04fad94ba872ee7957336834154f7647b89b899c3c7acc977c57a79b7c776b506240993f97acc7 + languageName: node + linkType: hard + +"detect-node@npm:^2.0.4": + version: 2.1.0 + resolution: "detect-node@npm:2.1.0" + checksum: 10c0/f039f601790f2e9d4654e499913259a798b1f5246ae24f86ab5e8bd4aaf3bce50484234c494f11fb00aecb0c6e2733aa7b1cf3f530865640b65fbbd65b2c4e09 + languageName: node + linkType: hard + +"dompurify@npm:^3.0.1": + version: 3.2.6 + resolution: "dompurify@npm:3.2.6" + dependencies: + "@types/trusted-types": "npm:^2.0.7" + dependenciesMeta: + "@types/trusted-types": + optional: true + checksum: 10c0/c8f8e5b0879a0d93c84a2e5e78649a47d0c057ed0f7850ca3d573d2cca64b84fb1ff85bd4b20980ade69c4e5b80ae73011340f1c2ff375c7ef98bb8268e1d13a + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"electron@npm:^33.3.1": + version: 33.4.11 + resolution: "electron@npm:33.4.11" + dependencies: + "@electron/get": "npm:^2.0.0" + "@types/node": "npm:^20.9.0" + extract-zip: "npm:^2.0.1" + bin: + electron: cli.js + checksum: 10c0/fbc8104454eec5c4693792b236eda028ff4d0025654be972a055ae9314a8b9ac801f28bf9847233eeae584874f633fd7794627d01cd2367a304b133bfee879f5 + languageName: node + linkType: hard + +"emoji-regex@npm:^10.3.0": + version: 10.4.0 + resolution: "emoji-regex@npm:10.4.0" + checksum: 10c0/a3fcedfc58bfcce21a05a5f36a529d81e88d602100145fcca3dc6f795e3c8acc4fc18fe773fbf9b6d6e9371205edb3afa2668ec3473fa2aa7fd47d2a9d46482d + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0": + version: 1.4.5 + resolution: "end-of-stream@npm:1.4.5" + dependencies: + once: "npm:^1.4.0" + checksum: 10c0/b0701c92a10b89afb1cb45bf54a5292c6f008d744eb4382fa559d54775ff31617d1d7bc3ef617575f552e24fad2c7c1a1835948c66b3f3a4be0a6c1f35c883d8 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"envbench@npm:^3.0.2": + version: 3.0.2 + resolution: "envbench@npm:3.0.2" + dependencies: + "@types/terminal-kit": "npm:^2.5.6" + chalk: "npm:^5.4.1" + commander: "npm:^13.1.0" + strip-ansi: "npm:^7.1.0" + terminal-kit: "npm:^3.1.1" + wrap-ansi: "npm:^9.0.0" + bin: + envbench: dist/envbench.js + checksum: 10c0/72079e5d64125a552d3ccc400b5877601fd2ba990346cecb7b1d8d656e7ebbe43670d1168eba9d8da090902df2d31b35578d1e7e41d17b6c351af9e6f8f3f831 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.5.4": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af + languageName: node + linkType: hard + +"es6-error@npm:^4.1.1": + version: 4.1.1 + resolution: "es6-error@npm:4.1.1" + checksum: 10c0/357663fb1e845c047d548c3d30f86e005db71e122678f4184ced0693f634688c3f3ef2d7de7d4af732f734de01f528b05954e270f06aa7d133679fb9fe6600ef + languageName: node + linkType: hard + +"es6-promise@npm:^3.1.2": + version: 3.3.1 + resolution: "es6-promise@npm:3.3.1" + checksum: 10c0/b4fc87cb8509c001f62f860f97b05d1fd3f87220c8b832578e6a483c719ca272b73a77f2231cb26395fa865e1cab2fd4298ab67786b69e97b8d757b938f4fc1f + languageName: node + linkType: hard + +"esbuild-plugin-import-glob@npm:^0.1.1": + version: 0.1.1 + resolution: "esbuild-plugin-import-glob@npm:0.1.1" + dependencies: + fast-glob: "npm:^3.2.5" + checksum: 10c0/ae7e47630a78890309c273a055578644870b938f20bf276de39e5fe39be4f5b4b9d7b3edf27025bd8f5cfdaa5277c9a7735b2ed164c717f0dec211f64d591620 + languageName: node + linkType: hard + +"esbuild-plugin-inline-image@npm:^0.0.9": + version: 0.0.9 + resolution: "esbuild-plugin-inline-image@npm:0.0.9" + checksum: 10c0/05f012bfb94ed2aaf6b08f2885d165420359f34c674d4f0b3a26241c3923c0808651d8ec2cfaffe07c638556c511bbec147d1b2c18b9c06dc58a5f92dc7077db + languageName: node + linkType: hard + +"esbuild-plugin-inline-worker@npm:^0.1.1": + version: 0.1.1 + resolution: "esbuild-plugin-inline-worker@npm:0.1.1" + dependencies: + esbuild: "npm:latest" + find-cache-dir: "npm:^3.3.1" + checksum: 10c0/7d8f1828b0550b329be8e5c2e95b4dd90be41dbf6cc7e0a8971c53461182b0fc8b43499bd3bac55ca720b5d18d0f053de4ef10a085087d6ffdcfafde765de467 + languageName: node + linkType: hard + +"esbuild-plugin-svelte@npm:^0.1.1": + version: 0.1.1 + resolution: "esbuild-plugin-svelte@npm:0.1.1" + peerDependencies: + esbuild: ^0.8 + svelte: ^3.20 + checksum: 10c0/5f09a78395b43b75f6b34e9719f15cc55178f3ebc50e601d42383cfbe54674a7ec1b384e613fcf797b138ae02d10940223f554e7b2b5e1b6468fde808a291048 + languageName: node + linkType: hard + +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de + languageName: node + linkType: hard + +"esbuild@npm:^0.25.0, esbuild@npm:latest": + version: 0.25.6 + resolution: "esbuild@npm:0.25.6" + dependencies: + "@esbuild/aix-ppc64": "npm:0.25.6" + "@esbuild/android-arm": "npm:0.25.6" + "@esbuild/android-arm64": "npm:0.25.6" + "@esbuild/android-x64": "npm:0.25.6" + "@esbuild/darwin-arm64": "npm:0.25.6" + "@esbuild/darwin-x64": "npm:0.25.6" + "@esbuild/freebsd-arm64": "npm:0.25.6" + "@esbuild/freebsd-x64": "npm:0.25.6" + "@esbuild/linux-arm": "npm:0.25.6" + "@esbuild/linux-arm64": "npm:0.25.6" + "@esbuild/linux-ia32": "npm:0.25.6" + "@esbuild/linux-loong64": "npm:0.25.6" + "@esbuild/linux-mips64el": "npm:0.25.6" + "@esbuild/linux-ppc64": "npm:0.25.6" + "@esbuild/linux-riscv64": "npm:0.25.6" + "@esbuild/linux-s390x": "npm:0.25.6" + "@esbuild/linux-x64": "npm:0.25.6" + "@esbuild/netbsd-arm64": "npm:0.25.6" + "@esbuild/netbsd-x64": "npm:0.25.6" + "@esbuild/openbsd-arm64": "npm:0.25.6" + "@esbuild/openbsd-x64": "npm:0.25.6" + "@esbuild/openharmony-arm64": "npm:0.25.6" + "@esbuild/sunos-x64": "npm:0.25.6" + "@esbuild/win32-arm64": "npm:0.25.6" + "@esbuild/win32-ia32": "npm:0.25.6" + "@esbuild/win32-x64": "npm:0.25.6" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/6c2ddc66d8789d75bfa940fddf51a6a98b0fcb474f090669b47091f587e8c3e8e7da57d769b770fd8133268dd5bfc7055318aea0bca6f7c725220d7550437b42 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-compat-utils@npm:^0.5.1": + version: 0.5.1 + resolution: "eslint-compat-utils@npm:0.5.1" + dependencies: + semver: "npm:^7.5.4" + peerDependencies: + eslint: ">=6.0.0" + checksum: 10c0/325e815205fab70ebcd379f6d4b5d44c7d791bb8dfe0c9888233f30ebabd9418422595b53a781b946c768d9244d858540e5e6129a6b3dd6d606f467d599edc6c + languageName: node + linkType: hard + +"eslint-plugin-check-file@npm:^3.0.0": + version: 3.3.0 + resolution: "eslint-plugin-check-file@npm:3.3.0" + dependencies: + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.8" + peerDependencies: + eslint: ">=9.0.0" + checksum: 10c0/0a3d1ec546c81d671b58ef3b3c95c1abf7eaf21b15ee54482fb9edde473ba98f84f77d16de5c94b152ed8d73e678cba82bc5b636d863025c4ef6872f02468786 + languageName: node + linkType: hard + +"eslint-plugin-svelte@npm:^2.46.1": + version: 2.46.1 + resolution: "eslint-plugin-svelte@npm:2.46.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.15" + eslint-compat-utils: "npm:^0.5.1" + esutils: "npm:^2.0.3" + known-css-properties: "npm:^0.35.0" + postcss: "npm:^8.4.38" + postcss-load-config: "npm:^3.1.4" + postcss-safe-parser: "npm:^6.0.0" + postcss-selector-parser: "npm:^6.1.0" + semver: "npm:^7.6.2" + svelte-eslint-parser: "npm:^0.43.0" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + checksum: 10c0/48fd6c792615c534b505e5ef4616034da71af3892e5895de0b3802cdef03819e43716f36442137233a734726385a66ed8a01c08ff4c0496eaab1bb8bfbbc07c0 + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + languageName: node + linkType: hard + +"eslint-scope@npm:^8.4.0": + version: 8.4.0 + resolution: "eslint-scope@npm:8.4.0" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/407f6c600204d0f3705bd557f81bd0189e69cd7996f408f8971ab5779c0af733d1af2f1412066b40ee1588b085874fc37a2333986c6521669cdbdd36ca5058e0 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-visitor-keys@npm:4.2.1" + checksum: 10c0/fcd43999199d6740db26c58dbe0c2594623e31ca307e616ac05153c9272f12f1364f5a0b1917a8e962268fdecc6f3622c1c2908b4fcc2e047a106fe6de69dc43 + languageName: node + linkType: hard + +"eslint@npm:^9.20.0": + version: 9.30.1 + resolution: "eslint@npm:9.30.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.12.1" + "@eslint/config-array": "npm:^0.21.0" + "@eslint/config-helpers": "npm:^0.3.0" + "@eslint/core": "npm:^0.14.0" + "@eslint/eslintrc": "npm:^3.3.1" + "@eslint/js": "npm:9.30.1" + "@eslint/plugin-kit": "npm:^0.3.1" + "@humanfs/node": "npm:^0.16.6" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@humanwhocodes/retry": "npm:^0.4.2" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.6" + debug: "npm:^4.3.2" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^8.4.0" + eslint-visitor-keys: "npm:^4.2.1" + espree: "npm:^10.4.0" + esquery: "npm:^1.5.0" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^8.0.0" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true + bin: + eslint: bin/eslint.js + checksum: 10c0/5a5867078e03ea56a1b6d1ee1548659abc38a6d5136c7ef94e21c5dbeb28e3ed50b15d2e0da25fce85600f6cf7ea7715eae650c41e8ae826c34490e9ec73d5d6 + languageName: node + linkType: hard + +"espree@npm:^10.0.1, espree@npm:^10.4.0": + version: 10.4.0 + resolution: "espree@npm:10.4.0" + dependencies: + acorn: "npm:^8.15.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/c63fe06131c26c8157b4083313cb02a9a54720a08e21543300e55288c40e06c3fc284bdecf108d3a1372c5934a0a88644c98714f38b6ae8ed272b40d9ea08d6b + languageName: node + linkType: hard + +"espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 + languageName: node + linkType: hard + +"esquery@npm:^1.5.0": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d + languageName: node + linkType: hard + +"esutils@npm:^2.0.2, esutils@npm:^2.0.3": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"expect-type@npm:^1.1.0": + version: 1.2.2 + resolution: "expect-type@npm:1.2.2" + checksum: 10c0/6019019566063bbc7a690d9281d920b1a91284a4a093c2d55d71ffade5ac890cf37a51e1da4602546c4b56569d2ad2fc175a2ccee77d1ae06cb3af91ef84f44b + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.2 + resolution: "exponential-backoff@npm:3.1.2" + checksum: 10c0/d9d3e1eafa21b78464297df91f1776f7fbaa3d5e3f7f0995648ca5b89c069d17055033817348d9f4a43d1c20b0eab84f75af6991751e839df53e4dfd6f22e844 + languageName: node + linkType: hard + +"extract-zip@npm:^2.0.1": + version: 2.0.1 + resolution: "extract-zip@npm:2.0.1" + dependencies: + "@types/yauzl": "npm:^2.9.1" + debug: "npm:^4.1.1" + get-stream: "npm:^5.1.0" + yauzl: "npm:^2.10.0" + dependenciesMeta: + "@types/yauzl": + optional: true + bin: + extract-zip: cli.js + checksum: 10c0/9afbd46854aa15a857ae0341a63a92743a7b89c8779102c3b4ffc207516b2019337353962309f85c66ee3d9092202a83cdc26dbf449a11981272038443974aee + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.5, fast-glob@npm:^3.3.2": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.19.1 + resolution: "fastq@npm:1.19.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/ebc6e50ac7048daaeb8e64522a1ea7a26e92b3cee5cd1c7f2316cdca81ba543aa40a136b53891446ea5c3a67ec215fbaca87ad405f102dd97012f62916905630 + languageName: node + linkType: hard + +"faye-websocket@npm:0.11.4": + version: 0.11.4 + resolution: "faye-websocket@npm:0.11.4" + dependencies: + websocket-driver: "npm:>=0.5.1" + checksum: 10c0/c6052a0bb322778ce9f89af92890f6f4ce00d5ec92418a35e5f4c6864a4fe736fec0bcebd47eac7c0f0e979b01530746b1c85c83cb04bae789271abf19737420 + languageName: node + linkType: hard + +"fd-slicer@npm:~1.1.0": + version: 1.1.0 + resolution: "fd-slicer@npm:1.1.0" + dependencies: + pend: "npm:~1.2.0" + checksum: 10c0/304dd70270298e3ffe3bcc05e6f7ade2511acc278bc52d025f8918b48b6aa3b77f10361bddfadfe2a28163f7af7adbdce96f4d22c31b2f648ba2901f0c5fc20e + languageName: node + linkType: hard + +"fdir@npm:^6.4.4": + version: 6.4.6 + resolution: "fdir@npm:6.4.6" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/45b559cff889934ebb8bc498351e5acba40750ada7e7d6bde197768d2fa67c149be8ae7f8ff34d03f4e1eb20f2764116e56440aaa2f6689e9a4aa7ef06acafe9 + languageName: node + linkType: hard + +"fflate@npm:^0.8.2": + version: 0.8.2 + resolution: "fflate@npm:0.8.2" + checksum: 10c0/03448d630c0a583abea594835a9fdb2aaf7d67787055a761515bf4ed862913cfd693b4c4ffd5c3f3b355a70cf1e19033e9ae5aedcca103188aaff91b8bd6e293 + languageName: node + linkType: hard + +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" + dependencies: + flat-cache: "npm:^4.0.0" + checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-cache-dir@npm:*, find-cache-dir@npm:^5.0.0": + version: 5.0.0 + resolution: "find-cache-dir@npm:5.0.0" + dependencies: + common-path-prefix: "npm:^3.0.0" + pkg-dir: "npm:^7.0.0" + checksum: 10c0/e6403b35aaf862898aefadbe3ee27246583a69adcef21cd79b9262be407d1ac85b21a7e1c1d41712eae39c6d8a8ac297fd78123b5b7aea13f0f046744aa02453 + languageName: node + linkType: hard + +"find-cache-dir@npm:^3.3.1": + version: 3.3.2 + resolution: "find-cache-dir@npm:3.3.2" + dependencies: + commondir: "npm:^1.0.1" + make-dir: "npm:^3.0.2" + pkg-dir: "npm:^4.1.0" + checksum: 10c0/92747cda42bff47a0266b06014610981cfbb71f55d60f2c8216bc3108c83d9745507fb0b14ecf6ab71112bed29cd6fb1a137ee7436179ea36e11287e3159e587 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"find-up@npm:^6.3.0": + version: 6.3.0 + resolution: "find-up@npm:6.3.0" + dependencies: + locate-path: "npm:^7.1.0" + path-exists: "npm:^5.0.0" + checksum: 10c0/07e0314362d316b2b13f7f11ea4692d5191e718ca3f7264110127520f3347996349bf9e16805abae3e196805814bc66ef4bff2b8904dc4a6476085fc9b0eba07 + languageName: node + linkType: hard + +"firebase@npm:^9.19.0": + version: 9.23.0 + resolution: "firebase@npm:9.23.0" + dependencies: + "@firebase/analytics": "npm:0.10.0" + "@firebase/analytics-compat": "npm:0.2.6" + "@firebase/app": "npm:0.9.13" + "@firebase/app-check": "npm:0.8.0" + "@firebase/app-check-compat": "npm:0.3.7" + "@firebase/app-compat": "npm:0.2.13" + "@firebase/app-types": "npm:0.9.0" + "@firebase/auth": "npm:0.23.2" + "@firebase/auth-compat": "npm:0.4.2" + "@firebase/database": "npm:0.14.4" + "@firebase/database-compat": "npm:0.3.4" + "@firebase/firestore": "npm:3.13.0" + "@firebase/firestore-compat": "npm:0.3.12" + "@firebase/functions": "npm:0.10.0" + "@firebase/functions-compat": "npm:0.3.5" + "@firebase/installations": "npm:0.6.4" + "@firebase/installations-compat": "npm:0.2.4" + "@firebase/messaging": "npm:0.12.4" + "@firebase/messaging-compat": "npm:0.2.4" + "@firebase/performance": "npm:0.6.4" + "@firebase/performance-compat": "npm:0.2.4" + "@firebase/remote-config": "npm:0.4.4" + "@firebase/remote-config-compat": "npm:0.2.4" + "@firebase/storage": "npm:0.11.2" + "@firebase/storage-compat": "npm:0.3.2" + "@firebase/util": "npm:1.9.3" + checksum: 10c0/0808ee941fd2d4dbd15fb6017b50004ee06606380271f8b4e457e3bddef86f27211b5f82c43d2c3f9fd4f487b4a09a45144ed644ed8374141aebaec3c5f38200 + languageName: node + linkType: hard + +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.4" + checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.3 + resolution: "flatted@npm:3.3.3" + checksum: 10c0/e957a1c6b0254aa15b8cce8533e24165abd98fadc98575db082b786b5da1b7d72062b81bfdcd1da2f4d46b6ed93bec2434e62333e9b4261d79ef2e75a10dd538 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0, foreground-child@npm:^3.3.1": + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" + dependencies: + cross-spawn: "npm:^7.0.6" + signal-exit: "npm:^4.0.1" + checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 + languageName: node + linkType: hard + +"form-data@npm:^2.5.0": + version: 2.5.3 + resolution: "form-data@npm:2.5.3" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + es-set-tostringtag: "npm:^2.1.0" + mime-types: "npm:^2.1.35" + safe-buffer: "npm:^5.2.1" + checksum: 10c0/48b910745d4fcd403f3d6876e33082a334e712199b8c86c4eb82f6da330a59b859943999d793856758c5ff18ca5261ced4d1062235a14543022d986bd21faa7d + languageName: node + linkType: hard + +"fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^4.0.0" + universalify: "npm:^0.1.0" + checksum: 10c0/259f7b814d9e50d686899550c4f9ded85c46c643f7fe19be69504888e007fcbc08f306fae8ec495b8b998635e997c9e3e175ff2eeed230524ef1c1684cc96423 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"generic-stream@npm:^1.2.6": + version: 1.2.6 + resolution: "generic-stream@npm:1.2.6" + checksum: 10c0/33ef96b00b39e9b2a2f22c2266948fccd92b88127354bdd97bc40d6ab4d6d486ef1fedbf2e2d8bbfbec5a1c011b507a049f6ac162274800d57d576f785bbeac9 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-east-asian-width@npm:^1.0.0": + version: 1.3.0 + resolution: "get-east-asian-width@npm:1.3.0" + checksum: 10c0/1a049ba697e0f9a4d5514c4623781c5246982bdb61082da6b5ae6c33d838e52ce6726407df285cdbb27ec1908b333cf2820989bd3e986e37bb20979437fdf34b + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.6": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/52c81808af9a8130f581e6a6a83e1ba4a9f703359e7a438d1369a5267a25412322f03dcbd7c549edaef0b6214a0630a28511d7df0130c93cfd380f4fa0b5b66a + languageName: node + linkType: hard + +"get-port@npm:^3.2.0": + version: 3.2.0 + resolution: "get-port@npm:3.2.0" + checksum: 10c0/1b6c3fe89074be3753d9ddf3d67126ea351ab9890537fe53fefebc2912d1d66fdc112451bbc76d33ae5ceb6ca70be2a91017944e3ee8fb0814ac9b295bf2a5b8 + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + +"get-stream@npm:^5.1.0": + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" + dependencies: + pump: "npm:^3.0.0" + checksum: 10c0/43797ffd815fbb26685bf188c8cfebecb8af87b3925091dd7b9a9c915993293d78e3c9e1bce125928ff92f2d0796f3889b92b5ec6d58d1041b574682132e0a80 + languageName: node + linkType: hard + +"github-slugger@npm:^2.0.0": + version: 2.0.0 + resolution: "github-slugger@npm:2.0.0" + checksum: 10c0/21b912b6b1e48f1e5a50b2292b48df0ff6abeeb0691b161b3d93d84f4ae6b1acd6ae23702e914af7ea5d441c096453cf0f621b72d57893946618d21dd1a1c486 + languageName: node + linkType: hard + +"gl-matrix@npm:^3.3.0": + version: 3.4.3 + resolution: "gl-matrix@npm:3.4.3" + checksum: 10c0/c8ee6e2ce2d089b4ba4ae13ec9d4cb99bf2abe5f68f0cb08d94bbd8bafbec13aacc7230b86539ce5ca01b79226ea8c3194f971f5ca0c81838bc5e4e619dc398e + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"glob@npm:^11.0.1": + version: 11.0.3 + resolution: "glob@npm:11.0.3" + dependencies: + foreground-child: "npm:^3.3.1" + jackspeak: "npm:^4.1.1" + minimatch: "npm:^10.0.3" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^2.0.0" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/7d24457549ec2903920dfa3d8e76850e7c02aa709122f0164b240c712f5455c0b457e6f2a1eee39344c6148e39895be8094ae8cfef7ccc3296ed30bce250c661 + languageName: node + linkType: hard + +"glob@npm:^7.1.3": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"global-agent@npm:^3.0.0": + version: 3.0.0 + resolution: "global-agent@npm:3.0.0" + dependencies: + boolean: "npm:^3.0.1" + es6-error: "npm:^4.1.1" + matcher: "npm:^3.0.0" + roarr: "npm:^2.15.3" + semver: "npm:^7.3.2" + serialize-error: "npm:^7.0.1" + checksum: 10c0/bb8750d026b25da437072762fd739098bad92ff72f66483c3929db4579e072f5523960f7e7fd70ee0d75db48898067b5dc1c9c1d17888128cff008fcc34d1bd3 + languageName: node + linkType: hard + +"globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d + languageName: node + linkType: hard + +"globalthis@npm:^1.0.1": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"got@npm:^11.8.5": + version: 11.8.6 + resolution: "got@npm:11.8.6" + dependencies: + "@sindresorhus/is": "npm:^4.0.0" + "@szmarczak/http-timer": "npm:^4.0.5" + "@types/cacheable-request": "npm:^6.0.1" + "@types/responselike": "npm:^1.0.0" + cacheable-lookup: "npm:^5.0.3" + cacheable-request: "npm:^7.0.2" + decompress-response: "npm:^6.0.0" + http2-wrapper: "npm:^1.0.0-beta.5.2" + lowercase-keys: "npm:^2.0.0" + p-cancelable: "npm:^2.0.0" + responselike: "npm:^2.0.0" + checksum: 10c0/754dd44877e5cf6183f1e989ff01c648d9a4719e357457bd4c78943911168881f1cfb7b2cb15d885e2105b3ad313adb8f017a67265dd7ade771afdb261ee8cb1 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1": + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 + languageName: node + linkType: hard + +"http-parser-js@npm:>=0.5.1": + version: 0.5.10 + resolution: "http-parser-js@npm:0.5.10" + checksum: 10c0/8bbcf1832a8d70b2bd515270112116333add88738a2cc05bfb94ba6bde3be4b33efee5611584113818d2bcf654fdc335b652503be5a6b4c0b95e46f214187d93 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"http2-wrapper@npm:^1.0.0-beta.5.2": + version: 1.0.3 + resolution: "http2-wrapper@npm:1.0.3" + dependencies: + quick-lru: "npm:^5.1.1" + resolve-alpn: "npm:^1.0.0" + checksum: 10c0/6a9b72a033e9812e1476b9d776ce2f387bc94bc46c88aea0d5dab6bd47d0a539b8178830e77054dd26d1142c866d515a28a4dc7c3ff4232c88ff2ebe4f5d12d1 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"idb@npm:7.0.1": + version: 7.0.1 + resolution: "idb@npm:7.0.1" + checksum: 10c0/240f63358faefb1039a23e9af787005b7d6995f5e2ff4b8eab123a3052889b73483164e35bde1e8e6e04205b481bf1541f9330e91490a4b172608a87d229d742 + languageName: node + linkType: hard + +"idb@npm:7.1.1": + version: 7.1.1 + resolution: "idb@npm:7.1.1" + checksum: 10c0/72418e4397638797ee2089f97b45fc29f937b830bc0eb4126f4a9889ecf10320ceacf3a177fe5d7ffaf6b4fe38b20bbd210151549bfdc881db8081eed41c870d + languageName: node + linkType: hard + +"ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"ignore@npm:^7.0.0": + version: 7.0.5 + resolution: "ignore@npm:7.0.5" + checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1": + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/bf8cc494872fef783249709385ae883b447e3eb09db0ebd15dcead7d9afe7224dad7bd7591c6b73b0b19b3c0f9640eb8ee884f01cfaf2887ab995b0b36a0cbec + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"iota-array@npm:^1.0.0": + version: 1.0.0 + resolution: "iota-array@npm:1.0.0" + checksum: 10c0/a6bfc7d5bf0338ade227b302eda52cea3db44cc6dd5803154147cdcee28e9cb65ca76c5859ab2bfe21d91ecc945c57a0dd446bbc657581bbdf92cda9c24def56 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"is-buffer@npm:^1.0.2, is-buffer@npm:~1.1.6": + version: 1.1.6 + resolution: "is-buffer@npm:1.1.6" + checksum: 10c0/ae18aa0b6e113d6c490ad1db5e8df9bdb57758382b313f5a22c9c61084875c6396d50bbf49315f5b1926d142d74dfb8d31b40d993a383e0a158b15fea7a82234 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jackspeak@npm:^4.1.1": + version: 4.1.1 + resolution: "jackspeak@npm:4.1.1" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + checksum: 10c0/84ec4f8e21d6514db24737d9caf65361511f75e5e424980eebca4199f400874f45e562ac20fa8aeb1dd20ca2f3f81f0788b6e9c3e64d216a5794fd6f30e0e042 + languageName: node + linkType: hard + +"jiti@npm:^2.4.2": + version: 2.4.2 + resolution: "jiti@npm:2.4.2" + bin: + jiti: lib/jiti-cli.mjs + checksum: 10c0/4ceac133a08c8faff7eac84aabb917e85e8257f5ad659e843004ce76e981c457c390a220881748ac67ba1b940b9b729b30fb85cbaf6e7989f04b6002c94da331 + languageName: node + linkType: hard + +"jpeg-js@npm:^0.4.4": + version: 0.4.4 + resolution: "jpeg-js@npm:0.4.4" + checksum: 10c0/4d0d5097f8e55d8bbce6f1dc32ffaf3f43f321f6222e4e6490734fdc6d005322e3bd6fb992c2df7f5b587343b1441a1c333281dc3285bc9116e369fd2a2b43a7 + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 + languageName: node + linkType: hard + +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.6" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 + languageName: node + linkType: hard + +"keyv@npm:^4.0.0, keyv@npm:^4.5.4": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"kleur@npm:^3.0.0": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: 10c0/cd3a0b8878e7d6d3799e54340efe3591ca787d9f95f109f28129bdd2915e37807bf8918bb295ab86afb8c82196beec5a1adcaf29042ce3f2bd932b038fe3aa4b + languageName: node + linkType: hard + +"known-css-properties@npm:^0.35.0": + version: 0.35.0 + resolution: "known-css-properties@npm:0.35.0" + checksum: 10c0/04a4a2859d62670bb25b5b28091a1f03f6f0d3298a5ed3e7476397c5287b98c434f6dd9c004a0c67a53b7f21acc93f83c972e98c122f568d4d0bd21fd2b90fb6 + languageName: node + linkType: hard + +"lazyness@npm:^1.2.0": + version: 1.2.0 + resolution: "lazyness@npm:1.2.0" + checksum: 10c0/d54e88283788e3d73a9c5a9832dfcebf694308b2e7035561febbb9f20e14e347d543e9ecabf622f1a9d0595fa039d2d4fdff6e6565d7ae09cc0fd0eaef986d60 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"lilconfig@npm:^2.0.5": + version: 2.1.0 + resolution: "lilconfig@npm:2.1.0" + checksum: 10c0/64645641aa8d274c99338e130554abd6a0190533c0d9eb2ce7ebfaf2e05c7d9961f3ffe2bfa39efd3b60c521ba3dd24fa236fe2775fc38501bf82bf49d4678b8 + languageName: node + linkType: hard + +"local-access@npm:^1.0.1": + version: 1.1.0 + resolution: "local-access@npm:1.1.0" + checksum: 10c0/ce39716d1cc6a270382369ce7210caa9f6b4ba129a2c6d4f3196cbcf01b6f777da954bd112b67cd9f100f05073f91f8687f3aba872bb914cff70200ef9aec79e + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"locate-path@npm:^7.1.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 10c0/139e8a7fe11cfbd7f20db03923cacfa5db9e14fa14887ea121345597472b4a63c1a42a8a5187defeeff6acf98fd568da7382aa39682d38f0af27433953a97751 + languageName: node + linkType: hard + +"lodash.camelcase@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.camelcase@npm:4.3.0" + checksum: 10c0/fcba15d21a458076dd309fce6b1b4bf611d84a0ec252cb92447c948c533ac250b95d2e00955801ebc367e5af5ed288b996d75d37d2035260a937008e14eaf432 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + +"long@npm:^4.0.0": + version: 4.0.0 + resolution: "long@npm:4.0.0" + checksum: 10c0/50a6417d15b06104dbe4e3d4a667c39b137f130a9108ea8752b352a4cfae047531a3ac351c181792f3f8768fe17cca6b0f406674a541a86fb638aaac560d83ed + languageName: node + linkType: hard + +"long@npm:^5.0.0": + version: 5.3.2 + resolution: "long@npm:5.3.2" + checksum: 10c0/7130fe1cbce2dca06734b35b70d380ca3f70271c7f8852c922a7c62c86c4e35f0c39290565eca7133c625908d40e126ac57c02b1b1a4636b9457d77e1e60b981 + languageName: node + linkType: hard + +"loupe@npm:^3.1.0, loupe@npm:^3.1.2": + version: 3.1.4 + resolution: "loupe@npm:3.1.4" + checksum: 10c0/5c2e6aefaad25f812d361c750b8cf4ff91d68de289f141d7c85c2ce9bb79eeefa06a93c85f7b87cba940531ed8f15e492f32681d47eed23842ad1963eb3a154d + languageName: node + linkType: hard + +"lowercase-keys@npm:^2.0.0": + version: 2.0.0 + resolution: "lowercase-keys@npm:2.0.0" + checksum: 10c0/f82a2b3568910509da4b7906362efa40f5b54ea14c2584778ddb313226f9cbf21020a5db35f9b9a0e95847a9b781d548601f31793d736b22a2b8ae8eb9ab1082 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"lru-cache@npm:^11.0.0": + version: 11.1.0 + resolution: "lru-cache@npm:11.1.0" + checksum: 10c0/85c312f7113f65fae6a62de7985348649937eb34fb3d212811acbf6704dc322a421788aca253b62838f1f07049a84cc513d88f494e373d3756514ad263670a64 + languageName: node + linkType: hard + +"magic-string@npm:^0.30.12, magic-string@npm:^0.30.5": + version: 0.30.17 + resolution: "magic-string@npm:0.30.17" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10c0/16826e415d04b88378f200fe022b53e638e3838b9e496edda6c0e086d7753a44a6ed187adc72d19f3623810589bf139af1a315541cd6a26ae0771a0193eaf7b8 + languageName: node + linkType: hard + +"make-dir@npm:^3.0.2": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: "npm:^6.0.0" + checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 + languageName: node + linkType: hard + +"marked-gfm-heading-id@npm:^3.0.0": + version: 3.2.0 + resolution: "marked-gfm-heading-id@npm:3.2.0" + dependencies: + github-slugger: "npm:^2.0.0" + peerDependencies: + marked: ">=4 <13" + checksum: 10c0/aba170f042049248047db4c1202c9cf3434858ca8e15b1b0d42905a6086135e98ac5edc8437c48c1206402cdb1f0fd0fbdcad410792a7d7150bec6095108b365 + languageName: node + linkType: hard + +"marked@npm:^4.3.0": + version: 4.3.0 + resolution: "marked@npm:4.3.0" + bin: + marked: bin/marked.js + checksum: 10c0/0013463855e31b9c88d8bb2891a611d10ef1dc79f2e3cbff1bf71ba389e04c5971298c886af0be799d7fa9aa4593b086a136062d59f1210b0480b026a8c5dc47 + languageName: node + linkType: hard + +"matcher@npm:^3.0.0": + version: 3.0.0 + resolution: "matcher@npm:3.0.0" + dependencies: + escape-string-regexp: "npm:^4.0.0" + checksum: 10c0/2edf24194a2879690bcdb29985fc6bc0d003df44e04df21ebcac721fa6ce2f6201c579866bb92f9380bffe946f11ecd8cd31f34117fb67ebf8aca604918e127e + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"mc-build@npm:^3.5.1": + version: 3.6.7 + resolution: "mc-build@npm:3.6.7" + bin: + mc-build: dist/mcb.js + mcb: dist/mcb.js + mcb3: dist/mcb.js + checksum: 10c0/9cac3d87dc5728a9a4eb51ed739a885ee6db61afef89777cd50689827ebd1707185c7ca42228d93d80479ff9389998df6b069cf56017e17e4eca3638902e787e + languageName: node + linkType: hard + +"md5@npm:^2.3.0": + version: 2.3.0 + resolution: "md5@npm:2.3.0" + dependencies: + charenc: "npm:0.0.2" + crypt: "npm:0.0.2" + is-buffer: "npm:~1.1.6" + checksum: 10c0/14a21d597d92e5b738255fbe7fe379905b8cb97e0a49d44a20b58526a646ec5518c337b817ce0094ca94d3e81a3313879c4c7b510d250c282d53afbbdede9110 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.35": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mimic-response@npm:^1.0.0": + version: 1.0.1 + resolution: "mimic-response@npm:1.0.1" + checksum: 10c0/c5381a5eae997f1c3b5e90ca7f209ed58c3615caeee850e85329c598f0c000ae7bec40196580eef1781c60c709f47258131dab237cad8786f8f56750594f27fa + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 10c0/0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: 10c0/7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c + languageName: node + linkType: hard + +"minimatch@npm:^10.0.3": + version: 10.0.3 + resolution: "minimatch@npm:10.0.3" + dependencies: + "@isaacs/brace-expansion": "npm:^5.0.0" + checksum: 10c0/e43e4a905c5d70ac4cec8530ceaeccb9c544b1ba8ac45238e2a78121a01c17ff0c373346472d221872563204eabe929ad02669bb575cb1f0cc30facab369f70f + languageName: node + linkType: hard + +"minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.1 + resolution: "minipass-fetch@npm:4.0.1" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: "npm:^1.2.6" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d + languageName: node + linkType: hard + +"molangjs@npm:^1.6.3": + version: 1.6.5 + resolution: "molangjs@npm:1.6.5" + checksum: 10c0/46d5f052fd43b655b6ba455d2213ac184fdb18ddddd3778e6cb647c39f751266924d5515871f3fee230e8beadeb5d50866a57899ab2ab7f669df8233f3bf3031 + languageName: node + linkType: hard + +"mri@npm:^1.1.0": + version: 1.2.0 + resolution: "mri@npm:1.2.0" + checksum: 10c0/a3d32379c2554cf7351db6237ddc18dc9e54e4214953f3da105b97dc3babe0deb3ffe99cf409b38ea47cc29f9430561ba6b53b24ab8f9ce97a4b50409e4a50e7 + languageName: node + linkType: hard + +"mrmime@npm:^1.0.0": + version: 1.0.1 + resolution: "mrmime@npm:1.0.1" + checksum: 10c0/ab071441da76fd23b3b0d1823d77aacf8679d379a4a94cacd83e487d3d906763b277f3203a594c613602e31ab5209c26a8119b0477c4541ef8555b293a9db6d3 + languageName: node + linkType: hard + +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.11": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"ndarray-pack@npm:^1.1.1": + version: 1.2.1 + resolution: "ndarray-pack@npm:1.2.1" + dependencies: + cwise-compiler: "npm:^1.1.2" + ndarray: "npm:^1.0.13" + checksum: 10c0/1e312c4f00033f076c7b5702a7ec3a56135e25dd277409791b8b89d928561190600dd12749c698990acad3d6098031a0f22f9aba075933a750893cb531c48a6e + languageName: node + linkType: hard + +"ndarray@npm:^1.0.13, ndarray@npm:^1.0.19": + version: 1.0.19 + resolution: "ndarray@npm:1.0.19" + dependencies: + iota-array: "npm:^1.0.0" + is-buffer: "npm:^1.0.2" + checksum: 10c0/e5929a845dae326052ff024f4f624b5f81e0be750224495baa0c7a02afd4e1117198452465c052f0bd111358b05c15655a797ec959dbbbe042c6ae573de09046 + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"nextgen-events@npm:^1.5.3": + version: 1.5.3 + resolution: "nextgen-events@npm:1.5.3" + checksum: 10c0/bfc55a0c10e5342247f53f6044b786d721414e35b6d1f82d4562e3b316dd4f800106d31ca1359b05521c1da81b0acf8b18573c564e63ab079a42643526f383a5 + languageName: node + linkType: hard + +"node-bitmap@npm:0.0.1": + version: 0.0.1 + resolution: "node-bitmap@npm:0.0.1" + checksum: 10c0/b45dc6bf1b51209359165ac546d31e7f43fdec386839637aa15d66a2cf4fa8ccb7d0c9c7d0eb180747ef02e5612c04cfecbf61c2756ba4ba79a555a06a18ba6f + languageName: node + linkType: hard + +"node-fetch@npm:2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10c0/fcae80f5ac52fbf5012f5e19df2bd3915e67d3b3ad51cb5942943df2238d32ba15890fecabd0e166876a9f98a581ab50f3f10eb942b09405c49ef8da36b826c7 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.2.0 + resolution: "node-gyp@npm:11.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + tinyglobby: "npm:^0.2.12" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/bd8d8c76b06be761239b0c8680f655f6a6e90b48e44d43415b11c16f7e8c15be346fba0cbf71588c7cdfb52c419d928a7d3db353afc1d952d19756237d8f10b9 + languageName: node + linkType: hard + +"node-modules-vscode-problems-patch@npm:^1.0.8": + version: 1.0.9 + resolution: "node-modules-vscode-problems-patch@npm:1.0.9" + dependencies: + esbuild: "npm:^0.25.0" + glob: "npm:^11.0.1" + bin: + node-modules-vscode-problems-patch: dist/index.js + checksum: 10c0/1b064e4e33c3e93b87f13d8a76a34b14aa4d4d745b784ce00690bd2b5a5ba69b39032181e038de0321ff195abd67c626c2443f385d3c97a08ae3e410403249a3 + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" + dependencies: + abbrev: "npm:^3.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef + languageName: node + linkType: hard + +"normalize-url@npm:^6.0.1": + version: 6.1.0 + resolution: "normalize-url@npm:6.1.0" + checksum: 10c0/95d948f9bdd2cfde91aa786d1816ae40f8262946e13700bf6628105994fe0ff361662c20af3961161c38a119dc977adeb41fc0b41b1745eb77edaaf9cb22db23 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"omggif@npm:^1.0.10": + version: 1.0.10 + resolution: "omggif@npm:1.0.10" + checksum: 10c0/5ddb6959555bf16ac93ee8724a6f600b0e97e77855515af9df0f657c69ebe0eb7d769763fdc4765f888827e4e64ca71ebeaf7255c7f51058e4bba5cc7950fe8e + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + +"p-cancelable@npm:^2.0.0": + version: 2.1.1 + resolution: "p-cancelable@npm:2.1.1" + checksum: 10c0/8c6dc1f8dd4154fd8b96a10e55a3a832684c4365fb9108056d89e79fbf21a2465027c04a59d0d797b5ffe10b54a61a32043af287d5c4860f1e996cbdbc847f01 + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 10c0/a56af34a77f8df2ff61ddfb29431044557fcbcb7642d5a3233143ebba805fc7306ac1d448de724352861cb99de934bc9ab74f0d16fe6a5460bdbdf938de875ad + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: 10c0/d72fa2f41adce59c198270aa4d3c832536c87a1806e0f69dffb7c1a7ca998fb053915ca833d90f166a8c082d3859eabfed95f01698a3214c20df6bb8de046312 + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"pako@npm:^2.0.3": + version: 2.1.0 + resolution: "pako@npm:2.1.0" + checksum: 10c0/8e8646581410654b50eb22a5dfd71159cae98145bd5086c9a7a816ec0370b5f72b4648d08674624b3870a521e6a3daffd6c2f7bc00fdefc7063c9d8232ff5116 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 10c0/b170f3060b31604cde93eefdb7392b89d832dfbc1bed717c9718cbe0f230c1669b7e75f87e19901da2250b84d092989a0f9e44d2ef41deb09aa3ad28e691a40a + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-scurry@npm:^2.0.0": + version: 2.0.0 + resolution: "path-scurry@npm:2.0.0" + dependencies: + lru-cache: "npm:^11.0.0" + minipass: "npm:^7.1.2" + checksum: 10c0/3da4adedaa8e7ef8d6dc4f35a0ff8f05a9b4d8365f2b28047752b62d4c1ad73eec21e37b1579ef2d075920157856a3b52ae8309c480a6f1a8bbe06ff8e52b33c + languageName: node + linkType: hard + +"pathe@npm:^1.1.2": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: 10c0/64ee0a4e587fb0f208d9777a6c56e4f9050039268faaaaecd50e959ef01bf847b7872785c36483fa5cdcdbdfdb31fef2ff222684d4fc21c330ab60395c681897 + languageName: node + linkType: hard + +"pathval@npm:^2.0.0": + version: 2.0.1 + resolution: "pathval@npm:2.0.1" + checksum: 10c0/460f4709479fbf2c45903a65655fc8f0a5f6d808f989173aeef5fdea4ff4f303dc13f7870303999add60ec49d4c14733895c0a869392e9866f1091fa64fd7581 + languageName: node + linkType: hard + +"pend@npm:~1.2.0": + version: 1.2.0 + resolution: "pend@npm:1.2.0" + checksum: 10c0/8a87e63f7a4afcfb0f9f77b39bb92374afc723418b9cb716ee4257689224171002e07768eeade4ecd0e86f1fa3d8f022994219fb45634f2dbd78c6803e452458 + languageName: node + linkType: hard + +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pkg-dir@npm:^4.1.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 + languageName: node + linkType: hard + +"pkg-dir@npm:^7.0.0": + version: 7.0.0 + resolution: "pkg-dir@npm:7.0.0" + dependencies: + find-up: "npm:^6.3.0" + checksum: 10c0/1afb23d2efb1ec9d8b2c4a0c37bf146822ad2774f074cb05b853be5dca1b40815c5960dd126df30ab8908349262a266f31b771e877235870a3b8fd313beebec5 + languageName: node + linkType: hard + +"pngjs@npm:^6.0.0": + version: 6.0.0 + resolution: "pngjs@npm:6.0.0" + checksum: 10c0/ac23ea329b1881d1a10575aff58116dc27b894ec3f5b84ba15c7f527d21e609fbce7ba16d48f8ccb86c7ce45ceed622472765476ab2875949d4bec55e153f87a + languageName: node + linkType: hard + +"postcss-load-config@npm:^3.1.4": + version: 3.1.4 + resolution: "postcss-load-config@npm:3.1.4" + dependencies: + lilconfig: "npm:^2.0.5" + yaml: "npm:^1.10.2" + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + checksum: 10c0/7d2cc6695c2fc063e4538316d651a687fdb55e48db453ff699de916a6ee55ab68eac2b120c28a6b8ca7aa746a588888351b810a215b5cd090eabea62c5762ede + languageName: node + linkType: hard + +"postcss-safe-parser@npm:^6.0.0": + version: 6.0.0 + resolution: "postcss-safe-parser@npm:6.0.0" + peerDependencies: + postcss: ^8.3.3 + checksum: 10c0/5b0997b63de6ab4afb4b718a52dd7902e465c21d1f2e516762bcb59047787459b4dc5713132f6a19c9c8c483043b20b8a380a55fb61152ee66cbffcddf3b57f0 + languageName: node + linkType: hard + +"postcss-scss@npm:^4.0.9": + version: 4.0.9 + resolution: "postcss-scss@npm:4.0.9" + peerDependencies: + postcss: ^8.4.29 + checksum: 10c0/f917ecfd4b9113a6648e966a41f027ff7e14238393914978d44596e227a50f084667dc8818742348dc7d8b20130b30d4259aca1d4db86754a9c141202ae03714 + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.1.0": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e + languageName: node + linkType: hard + +"postcss@npm:^8.4.14, postcss@npm:^8.4.38, postcss@npm:^8.4.39, postcss@npm:^8.4.43": + version: 8.5.6 + resolution: "postcss@npm:8.5.6" + dependencies: + nanoid: "npm:^3.3.11" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/5127cc7c91ed7a133a1b7318012d8bfa112da9ef092dddf369ae699a1f10ebbd89b1b9f25f3228795b84585c72aabd5ced5fc11f2ba467eedf7b081a66fad024 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"prettier@npm:^3.5.0": + version: 3.6.2 + resolution: "prettier@npm:3.6.2" + bin: + prettier: bin/prettier.cjs + checksum: 10c0/488cb2f2b99ec13da1e50074912870217c11edaddedeadc649b1244c749d15ba94e846423d062e2c4c9ae683e2d65f754de28889ba06e697ac4f988d44f45812 + languageName: node + linkType: hard + +"prismjs@npm:^1.29.0": + version: 1.30.0 + resolution: "prismjs@npm:1.30.0" + checksum: 10c0/f56205bfd58ef71ccfcbcb691fd0eb84adc96c6ff21b0b69fc6fdcf02be42d6ef972ba4aed60466310de3d67733f6a746f89f2fb79c00bf217406d465b3e8f23 + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 + languageName: node + linkType: hard + +"progress@npm:^2.0.3": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: 10c0/1697e07cb1068055dbe9fe858d242368ff5d2073639e652b75a7eb1f2a1a8d4afd404d719de23c7b48481a6aa0040686310e2dac2f53d776daa2176d3f96369c + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"protobufjs@npm:^6.11.3": + version: 6.11.4 + resolution: "protobufjs@npm:6.11.4" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.2" + "@protobufjs/base64": "npm:^1.1.2" + "@protobufjs/codegen": "npm:^2.0.4" + "@protobufjs/eventemitter": "npm:^1.1.0" + "@protobufjs/fetch": "npm:^1.1.0" + "@protobufjs/float": "npm:^1.0.2" + "@protobufjs/inquire": "npm:^1.1.0" + "@protobufjs/path": "npm:^1.1.2" + "@protobufjs/pool": "npm:^1.1.0" + "@protobufjs/utf8": "npm:^1.1.0" + "@types/long": "npm:^4.0.1" + "@types/node": "npm:>=13.7.0" + long: "npm:^4.0.0" + bin: + pbjs: bin/pbjs + pbts: bin/pbts + checksum: 10c0/c244d7b9b6d3258193da5c0d1e558dfb47f208ae345e209f90ec45c9dca911b90fa17e937892a9a39a4136ab9886981aae9efdf6039f7baff4f7225f5eeb9812 + languageName: node + linkType: hard + +"protobufjs@npm:^7.2.5": + version: 7.5.3 + resolution: "protobufjs@npm:7.5.3" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.2" + "@protobufjs/base64": "npm:^1.1.2" + "@protobufjs/codegen": "npm:^2.0.4" + "@protobufjs/eventemitter": "npm:^1.1.0" + "@protobufjs/fetch": "npm:^1.1.0" + "@protobufjs/float": "npm:^1.0.2" + "@protobufjs/inquire": "npm:^1.1.0" + "@protobufjs/path": "npm:^1.1.2" + "@protobufjs/pool": "npm:^1.1.0" + "@protobufjs/utf8": "npm:^1.1.0" + "@types/node": "npm:>=13.7.0" + long: "npm:^5.0.0" + checksum: 10c0/9dc131a7e7a610b8291a0b0033b313f8754ef419b57c44d27874dd4edf1afc2a9a77d7a5bc2df9a744cba014de67c92756759c73200b702a11f13360e907b0dd + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.3 + resolution: "pump@npm:3.0.3" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10c0/ada5cdf1d813065bbc99aa2c393b8f6beee73b5de2890a8754c9f488d7323ffd2ca5f5a0943b48934e3fcbd97637d0337369c3c631aeb9614915db629f1c75c9 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: 10c0/a24cba5da8cec30d70d2484be37622580f64765fb6390a928b17f60cd69e8dbd32a954b3ff9176fa1b86d86ff2ba05252fae55dc4d40d0291c60412b0ad096da + languageName: node + linkType: hard + +"request-progress@npm:^3.0.0": + version: 3.0.0 + resolution: "request-progress@npm:3.0.0" + dependencies: + throttleit: "npm:^1.0.0" + checksum: 10c0/d5dcb7155a738572c8781436f6b418e866066a30eea0f99a9ab26b6f0ed6c13637462bba736357de3899b8d30431ee9202ac956a5f8ccdd0d9d1ed0962000d14 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"resolve-alpn@npm:^1.0.0": + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: 10c0/b70b29c1843bc39781ef946c8cd4482e6d425976599c0f9c138cec8209e4e0736161bf39319b01676a847000085dfdaf63583c6fb4427bf751a10635bd2aa0c4 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"responselike@npm:^2.0.0": + version: 2.0.1 + resolution: "responselike@npm:2.0.1" + dependencies: + lowercase-keys: "npm:^2.0.0" + checksum: 10c0/360b6deb5f101a9f8a4174f7837c523c3ec78b7ca8a7c1d45a1062b303659308a23757e318b1e91ed8684ad1205721142dd664d94771cd63499353fd4ee732b5 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa + languageName: node + linkType: hard + +"rimraf@npm:^2.5.2": + version: 2.7.1 + resolution: "rimraf@npm:2.7.1" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: ./bin.js + checksum: 10c0/4eef73d406c6940927479a3a9dee551e14a54faf54b31ef861250ac815172bade86cc6f7d64a4dc5e98b65e4b18a2e1c9ff3b68d296be0c748413f092bb0dd40 + languageName: node + linkType: hard + +"roarr@npm:^2.15.3": + version: 2.15.4 + resolution: "roarr@npm:2.15.4" + dependencies: + boolean: "npm:^3.0.1" + detect-node: "npm:^2.0.4" + globalthis: "npm:^1.0.1" + json-stringify-safe: "npm:^5.0.1" + semver-compare: "npm:^1.0.0" + sprintf-js: "npm:^1.1.2" + checksum: 10c0/7d01d4c14513c461778dd673a8f9e53255221f8d04173aafeb8e11b23d8b659bb83f1c90cfe81af7f9c213b8084b404b918108fd792bda76678f555340cc64ec + languageName: node + linkType: hard + +"rollup@npm:^4.20.0": + version: 4.44.2 + resolution: "rollup@npm:4.44.2" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.44.2" + "@rollup/rollup-android-arm64": "npm:4.44.2" + "@rollup/rollup-darwin-arm64": "npm:4.44.2" + "@rollup/rollup-darwin-x64": "npm:4.44.2" + "@rollup/rollup-freebsd-arm64": "npm:4.44.2" + "@rollup/rollup-freebsd-x64": "npm:4.44.2" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.44.2" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.44.2" + "@rollup/rollup-linux-arm64-gnu": "npm:4.44.2" + "@rollup/rollup-linux-arm64-musl": "npm:4.44.2" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.44.2" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.44.2" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.44.2" + "@rollup/rollup-linux-riscv64-musl": "npm:4.44.2" + "@rollup/rollup-linux-s390x-gnu": "npm:4.44.2" + "@rollup/rollup-linux-x64-gnu": "npm:4.44.2" + "@rollup/rollup-linux-x64-musl": "npm:4.44.2" + "@rollup/rollup-win32-arm64-msvc": "npm:4.44.2" + "@rollup/rollup-win32-ia32-msvc": "npm:4.44.2" + "@rollup/rollup-win32-x64-msvc": "npm:4.44.2" + "@types/estree": "npm:1.0.8" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loongarch64-gnu": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/5ada4fd03e8077888a065bb03f2425501b8402e7cc26f0ffbb454feb61e3a825c8260252a5f768c25481866e798c5ff910f5953c4638ae238d1a14befced02b8 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"sade@npm:^1.6.0": + version: 1.8.1 + resolution: "sade@npm:1.8.1" + dependencies: + mri: "npm:^1.1.0" + checksum: 10c0/da8a3a5d667ad5ce3bf6d4f054bbb9f711103e5df21003c5a5c1a8a77ce12b640ed4017dd423b13c2307ea7e645adee7c2ae3afe8051b9db16a6f6d3da3f90b1 + languageName: node + linkType: hard + +"safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.2.1": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"sander@npm:^0.5.0": + version: 0.5.1 + resolution: "sander@npm:0.5.1" + dependencies: + es6-promise: "npm:^3.1.2" + graceful-fs: "npm:^4.1.3" + mkdirp: "npm:^0.5.1" + rimraf: "npm:^2.5.2" + checksum: 10c0/ce1e423fe5b4e57926df7cc6bd24b70271adfbe7b8ff995784f98101878e037327ac31c7a4e317ac3e1579f410e41a477fef40c2376f0dfa4499c8864a26f499 + languageName: node + linkType: hard + +"semiver@npm:^1.0.0": + version: 1.1.0 + resolution: "semiver@npm:1.1.0" + checksum: 10c0/f208555fcdf8726d25a5d5acd5079b1f6a274a9be291da6981c70867cca9abd43721648b338bac914fbc7874e2594217a5943a2e91410ce24b5a80a641d4468b + languageName: node + linkType: hard + +"semver-compare@npm:^1.0.0": + version: 1.0.0 + resolution: "semver-compare@npm:1.0.0" + checksum: 10c0/9ef4d8b81847556f0865f46ddc4d276bace118c7cb46811867af82e837b7fc473911981d5a0abc561fa2db487065572217e5b06e18701c4281bcdd2a1affaff1 + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.2.0": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.2": + version: 7.7.2 + resolution: "semver@npm:7.7.2" + bin: + semver: bin/semver.js + checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea + languageName: node + linkType: hard + +"serialize-error@npm:^7.0.1": + version: 7.0.1 + resolution: "serialize-error@npm:7.0.1" + dependencies: + type-fest: "npm:^0.13.1" + checksum: 10c0/7982937d578cd901276c8ab3e2c6ed8a4c174137730f1fb0402d005af209a0e84d04acc874e317c936724c7b5b26c7a96ff7e4b8d11a469f4924a4b0ea814c05 + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: 10c0/5bae81bfdbfbd0ce992893286d49c9693c82b1bcc00dcaaf3a09c8f428fdeacf4190c013598b81875dfac2b08a572422db7df779a99332d0fce186d15a3e4d49 + languageName: node + linkType: hard + +"seventh@npm:^0.9.2": + version: 0.9.4 + resolution: "seventh@npm:0.9.4" + dependencies: + setimmediate: "npm:^1.0.5" + checksum: 10c0/bcdeab8e4515c9f0ccd6e9f4737086c875fd7e3533cde15761bde8a744dd48817acf1f9204ac61fe7ee84dba863b80ed946e24a0b6d07df2003e006495ef9e9d + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"sirv-cli@npm:^1.0.0": + version: 1.0.14 + resolution: "sirv-cli@npm:1.0.14" + dependencies: + console-clear: "npm:^1.1.0" + get-port: "npm:^3.2.0" + kleur: "npm:^3.0.0" + local-access: "npm:^1.0.1" + sade: "npm:^1.6.0" + semiver: "npm:^1.0.0" + sirv: "npm:^1.0.13" + tinydate: "npm:^1.0.0" + bin: + sirv: bin.js + checksum: 10c0/6d935ddf78aa70e368ee2c61be52fe6fa7f8beeb859c5497306f79d7ba20e072ffd9960aa9ed242c0f4095ee10d6492587738fc39dc9a478599fb3ce2ab96a4a + languageName: node + linkType: hard + +"sirv@npm:^1.0.13": + version: 1.0.19 + resolution: "sirv@npm:1.0.19" + dependencies: + "@polka/url": "npm:^1.0.0-next.20" + mrmime: "npm:^1.0.0" + totalist: "npm:^1.0.0" + checksum: 10c0/393cc0471e82d3e754a8c1b2b348a86249db1f686aeb11c17e4217326a8b1a96029d9f1b58362ebb3e511b7b98c47cd43c4305dde98322bb1259d07dec2d4908 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.6 + resolution: "socks@npm:2.8.6" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/15b95db4caa359c80bfa880ff3e58f3191b9ffa4313570e501a60ee7575f51e4be664a296f4ee5c2c40544da179db6140be53433ce41ec745f9d51f342557514 + languageName: node + linkType: hard + +"sorcery@npm:^0.11.0": + version: 0.11.1 + resolution: "sorcery@npm:0.11.1" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + buffer-crc32: "npm:^1.0.0" + minimist: "npm:^1.2.0" + sander: "npm:^0.5.0" + bin: + sorcery: bin/sorcery + checksum: 10c0/b111350df1c6412d5d71b0e72db630dcc90fc99dc9fc61dc4355a2de17f5a6951453d6430d908ee92b9da03628fd9f4361fe2e261c604dcb000e89152c134f1b + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map@npm:^0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.2, sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d + languageName: node + linkType: hard + +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + +"std-env@npm:^3.8.0": + version: 3.9.0 + resolution: "std-env@npm:3.9.0" + checksum: 10c0/4a6f9218aef3f41046c3c7ecf1f98df00b30a07f4f35c6d47b28329bc2531eef820828951c7d7b39a1c5eb19ad8a46e3ddfc7deb28f0a2f3ceebee11bab7ba50 + languageName: node + linkType: hard + +"string-kit@npm:^0.19.0": + version: 0.19.2 + resolution: "string-kit@npm:0.19.2" + checksum: 10c0/d4d1c7e245b7f672ff573282c52bfc7af7d37f8ca0b9e9a7b048d47c3451c786608ccc4734992bea2883574f5e8803c3e1c5ee7ca8ee1a6b8d7d55b0eb366e87 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string-width@npm:^7.0.0": + version: 7.2.0 + resolution: "string-width@npm:7.2.0" + dependencies: + emoji-regex: "npm:^10.3.0" + get-east-asian-width: "npm:^1.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/eb0430dd43f3199c7a46dcbf7a0b34539c76fe3aa62763d0b0655acdcbdf360b3f66f3d58ca25ba0205f42ea3491fa00f09426d3b7d3040e506878fc7664c9b9 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: "npm:^1.0.0" + checksum: 10c0/ae0deaf41c8d1001c5d4fbe16cb553865c1863da4fae036683b474fa926af9fc121e155cb3fc57a68262b2ae7d5b8420aa752c97a6428c315d00efe2a3875679 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"sumchecker@npm:^3.0.1": + version: 3.0.1 + resolution: "sumchecker@npm:3.0.1" + dependencies: + debug: "npm:^4.1.0" + checksum: 10c0/43c387be9dfe22dbeaf39dfa4ffb279847aeb37a42a8988c0b066f548bbd209aa8c65e03da29f2b29be1a66b577801bf89fff0007df4183db2f286263a9569e5 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"svelte-ace@npm:^1.0.21": + version: 1.0.21 + resolution: "svelte-ace@npm:1.0.21" + dependencies: + brace: "npm:^0.11.1" + sirv-cli: "npm:^1.0.0" + checksum: 10c0/cd42508c5ea21ec4d86f6df5d9276653e799c25a701ed40ab73fd3058ed16da85a205a72176a8e3367625816df9272c94a8da98ac7a348e980c6358bb391b873 + languageName: node + linkType: hard + +"svelte-awesome-color-picker@npm:^3.0.0-beta.7": + version: 3.1.4 + resolution: "svelte-awesome-color-picker@npm:3.1.4" + dependencies: + colord: "npm:^2.9.3" + svelte-awesome-slider: "npm:^1.1.2" + peerDependencies: + svelte: ^3.55.1 || ^4.0.0 || ^5.0.0 + checksum: 10c0/e5138c728c33b73fd37b2ed0d6c69c699b395e17b88a9806d29b47f49ce54e99a1fbe77e02eefd1ef767d240541733c831b286041ab011b7f87a2f79eb8fc552 + languageName: node + linkType: hard + +"svelte-awesome-slider@npm:^1.1.2": + version: 1.1.2 + resolution: "svelte-awesome-slider@npm:1.1.2" + peerDependencies: + svelte: ^3.54.0 || ^4.0.0 || ^5.0.0 + checksum: 10c0/99459492c68b35a6716255ba28e31222fee9099d5e6aa37e13a89ebe1a0674d1d5f1ceddc833092c4ab3543ab61eb0bd21ae84d5716ef4682ad1c2733fa8c26c + languageName: node + linkType: hard + +"svelte-dnd-action@npm:^0.9.38": + version: 0.9.63 + resolution: "svelte-dnd-action@npm:0.9.63" + peerDependencies: + svelte: ">=3.23.0 || ^5.0.0-next.0" + checksum: 10c0/b15427733a4ea757246de1af710a6bf1c270c5e9f160e5ace0cb754d813fa50c4307bec1495e3ea05a701bfeb813ce5649d9fb5fa07bb87ef9abc03e4bb60416 + languageName: node + linkType: hard + +"svelte-eslint-parser@npm:^0.43.0": + version: 0.43.0 + resolution: "svelte-eslint-parser@npm:0.43.0" + dependencies: + eslint-scope: "npm:^7.2.2" + eslint-visitor-keys: "npm:^3.4.3" + espree: "npm:^9.6.1" + postcss: "npm:^8.4.39" + postcss-scss: "npm:^4.0.9" + peerDependencies: + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + checksum: 10c0/52bbbf5d266fc36f64626e38d8de4354d78a5490fa60b61b1cd127c1c661d94f0c671a220e3ed7dd92b144a3c99f517d5205c218f78feea0603132f24eeb4c9d + languageName: node + linkType: hard + +"svelte-multiselect@npm:^11.1.1": + version: 11.1.1 + resolution: "svelte-multiselect@npm:11.1.1" + peerDependencies: + svelte: ^5.8.0 + checksum: 10c0/c29d67b098aea3eb1dfd82ecafb881199461f24f5e799dc55428751c177d524c161dd72674f53c72461447adcff31db78c37511948dc06580ce4322b10f9cb31 + languageName: node + linkType: hard + +"svelte-preprocess-esbuild@npm:^3.0.1": + version: 3.0.1 + resolution: "svelte-preprocess-esbuild@npm:3.0.1" + peerDependencies: + esbuild: ">=0.14.0" + svelte: ">=3.5.0" + checksum: 10c0/6017a2c99c9eaf00aed4058c5cea703c9bc698af90bc1d2b9c407a209818edc4296c9995d3659b81c07f7d157f8778c2795323c52a22f06135df056b4d4f90cc + languageName: node + linkType: hard + +"svelte-preprocess@npm:^5.0.1": + version: 5.1.4 + resolution: "svelte-preprocess@npm:5.1.4" + dependencies: + "@types/pug": "npm:^2.0.6" + detect-indent: "npm:^6.1.0" + magic-string: "npm:^0.30.5" + sorcery: "npm:^0.11.0" + strip-indent: "npm:^3.0.0" + peerDependencies: + "@babel/core": ^7.10.2 + coffeescript: ^2.5.1 + less: ^3.11.3 || ^4.0.0 + postcss: ^7 || ^8 + postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + pug: ^3.0.0 + sass: ^1.26.8 + stylus: ^0.55.0 + sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0 + svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 + typescript: ">=3.9.5 || ^4.0.0 || ^5.0.0" + peerDependenciesMeta: + "@babel/core": + optional: true + coffeescript: + optional: true + less: + optional: true + postcss: + optional: true + postcss-load-config: + optional: true + pug: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + typescript: + optional: true + checksum: 10c0/fe968ee1d599a2c59c5a695e23cd3c2d15c5c316ce76ae644908521476f2e81b69dcf0cd3492deeb0a06140af497f994e4baf524d3d2c93986fad1c9267524ae + languageName: node + linkType: hard + +"svelte@npm:3.59.2, svelte@npm:^3.42.3": + version: 3.59.2 + resolution: "svelte@npm:3.59.2" + checksum: 10c0/3482d020b291c6784e372315d63e3ab5530b8389adbd739a369d69ec995929276ebbc1cbdf8e5382c9dd887a55ec655702769de85836270e1a4a0ab3e0247b34 + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d + languageName: node + linkType: hard + +"terminal-kit@npm:^3.1.1": + version: 3.1.2 + resolution: "terminal-kit@npm:3.1.2" + dependencies: + "@cronvel/get-pixels": "npm:^3.4.1" + chroma-js: "npm:^2.4.2" + lazyness: "npm:^1.2.0" + ndarray: "npm:^1.0.19" + nextgen-events: "npm:^1.5.3" + seventh: "npm:^0.9.2" + string-kit: "npm:^0.19.0" + tree-kit: "npm:^0.8.7" + checksum: 10c0/ab7f4e136e958b8576a89bfbf7ba976992a9a445cac75b4fc18c8aeb8b027ea50f756daf78abf30895f3ccdb35c03677719b7a2c54af8e6214f84e0a7a90bd4e + languageName: node + linkType: hard + +"three@npm:^0.134.0": + version: 0.134.0 + resolution: "three@npm:0.134.0" + checksum: 10c0/a1f41ffbcfb90e16be9d187e06eb876b339f473fff528816379839ee332c12fa79c96298120e2df7a5b1fb81eb80727b4a2a8cdcce3c391e5eaede2dd93aecb4 + languageName: node + linkType: hard + +"throttleit@npm:^1.0.0": + version: 1.0.1 + resolution: "throttleit@npm:1.0.1" + checksum: 10c0/4d41a1bf467646b1aa7bec0123b78452a0e302d7344f6a67e43e68434f0a02ea3ba44df050a40c69adeb9cae3cbf6b36b38cfe94bcc3c4a8243c9b63e38e059b + languageName: node + linkType: hard + +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c + languageName: node + linkType: hard + +"tinycolor2@npm:^1.4.2, tinycolor2@npm:^1.6.0": + version: 1.6.0 + resolution: "tinycolor2@npm:1.6.0" + checksum: 10c0/9aa79a36ba2c2a87cb221453465cabacd04b9e35f9694373e846fdc78b1c768110f81e581ea41440106c0f24d9a023891d0887e8075885e790ac40eb0e74a5c1 + languageName: node + linkType: hard + +"tinydate@npm:^1.0.0": + version: 1.3.0 + resolution: "tinydate@npm:1.3.0" + checksum: 10c0/06e3f273f36d04f6195c8ff58ba3a69db27f5e077ca8b08b073a9b816669a54e477f0086f3af84d33d525cf8876fb0021be9d6fd928dc43bfe9ea3945927168e + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.1": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12": + version: 0.2.14 + resolution: "tinyglobby@npm:0.2.14" + dependencies: + fdir: "npm:^6.4.4" + picomatch: "npm:^4.0.2" + checksum: 10c0/f789ed6c924287a9b7d3612056ed0cda67306cd2c80c249fd280cf1504742b12583a2089b61f4abbd24605f390809017240e250241f09938054c9b363e51c0a6 + languageName: node + linkType: hard + +"tinypool@npm:^1.0.1": + version: 1.1.1 + resolution: "tinypool@npm:1.1.1" + checksum: 10c0/bf26727d01443061b04fa863f571016950888ea994ba0cd8cba3a1c51e2458d84574341ab8dbc3664f1c3ab20885c8cf9ff1cc4b18201f04c2cde7d317fff69b + languageName: node + linkType: hard + +"tinyrainbow@npm:^1.2.0": + version: 1.2.0 + resolution: "tinyrainbow@npm:1.2.0" + checksum: 10c0/7f78a4b997e5ba0f5ecb75e7ed786f30bab9063716e7dff24dd84013fb338802e43d176cb21ed12480561f5649a82184cf31efb296601a29d38145b1cdb4c192 + languageName: node + linkType: hard + +"tinyspy@npm:^3.0.2": + version: 3.0.2 + resolution: "tinyspy@npm:3.0.2" + checksum: 10c0/55ffad24e346622b59292e097c2ee30a63919d5acb7ceca87fc0d1c223090089890587b426e20054733f97a58f20af2c349fb7cc193697203868ab7ba00bcea0 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"totalist@npm:^1.0.0": + version: 1.1.0 + resolution: "totalist@npm:1.1.0" + checksum: 10c0/2adbd4501c8290c2a96617a83dc67dfdd02bcbd360032017e27ccf27bbb09649bbe8dad1c45d97be6874281178aca5b3f62ed059d1eeda77c479cfb8eb3a9266 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10c0/047cb209a6b60c742f05c9d3ace8fa510bff609995c129a37ace03476a9b12db4dbf975e74600830ef0796e18882b2381fb5fb1f6b4f96b832c374de3ab91a11 + languageName: node + linkType: hard + +"tree-kit@npm:^0.8.7": + version: 0.8.8 + resolution: "tree-kit@npm:0.8.8" + checksum: 10c0/751e4b0e72afdc656db6cafc9d46f037c992f72533152522e731fcbc2ff3f9c4b05c43f4617a1527406108eaef6e482dd1ab59e1a407e66404d1eb66aae087e0 + languageName: node + linkType: hard + +"ts-api-utils@npm:^2.1.0": + version: 2.1.0 + resolution: "ts-api-utils@npm:2.1.0" + peerDependencies: + typescript: ">=4.8.4" + checksum: 10c0/9806a38adea2db0f6aa217ccc6bc9c391ddba338a9fe3080676d0d50ed806d305bb90e8cef0276e793d28c8a929f400abb184ddd7ff83a416959c0f4d2ce754f + languageName: node + linkType: hard + +"tslib@npm:^2.1.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"type-fest@npm:^0.13.1": + version: 0.13.1 + resolution: "type-fest@npm:0.13.1" + checksum: 10c0/0c0fa07ae53d4e776cf4dac30d25ad799443e9eef9226f9fddbb69242db86b08584084a99885cfa5a9dfe4c063ebdc9aa7b69da348e735baede8d43f1aeae93b + languageName: node + linkType: hard + +"typescript-eslint@npm:^8.24.0": + version: 8.36.0 + resolution: "typescript-eslint@npm:8.36.0" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:8.36.0" + "@typescript-eslint/parser": "npm:8.36.0" + "@typescript-eslint/utils": "npm:8.36.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.9.0" + checksum: 10c0/ba6155b7a950e198400b656bca2ec9df5ed6e18283da276722aaeb4f7d2caf80b2a37d38003532ff1bfbd306201b3a69e56256cc76eb75db1128235a1be2c031 + languageName: node + linkType: hard + +"typescript@npm:^4.9.5": + version: 4.9.5 + resolution: "typescript@npm:4.9.5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/5f6cad2e728a8a063521328e612d7876e12f0d8a8390d3b3aaa452a6a65e24e9ac8ea22beb72a924fd96ea0a49ea63bb4e251fb922b12eedfb7f7a26475e5c56 + languageName: node + linkType: hard + +"typescript@npm:^5.7.3": + version: 5.8.3 + resolution: "typescript@npm:5.8.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/5f8bb01196e542e64d44db3d16ee0e4063ce4f3e3966df6005f2588e86d91c03e1fb131c2581baf0fb65ee79669eea6e161cd448178986587e9f6844446dbb48 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^4.9.5#optional!builtin": + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#optional!builtin::version=4.9.5&hash=289587" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/e3333f887c6829dfe0ab6c1dbe0dd1e3e2aeb56c66460cb85c5440c566f900c833d370ca34eb47558c0c69e78ced4bfe09b8f4f98b6de7afed9b84b8d1dd06a1 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.7.3#optional!builtin": + version: 5.8.3 + resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/39117e346ff8ebd87ae1510b3a77d5d92dae5a89bde588c747d25da5c146603a99c8ee588c7ef80faaf123d89ed46f6dbd918d534d641083177d5fac38b8a1cb + languageName: node + linkType: hard + +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 + languageName: node + linkType: hard + +"undici-types@npm:~7.8.0": + version: 7.8.0 + resolution: "undici-types@npm:7.8.0" + checksum: 10c0/9d9d246d1dc32f318d46116efe3cfca5a72d4f16828febc1918d94e58f6ffcf39c158aa28bf5b4fc52f410446bc7858f35151367bd7a49f21746cab6497b709b + languageName: node + linkType: hard + +"uniq@npm:^1.0.0": + version: 1.0.1 + resolution: "uniq@npm:1.0.1" + checksum: 10c0/369dca4a07fdd8de9e48378b9d4b6861722ca71d5f496e91687916bd4b48b8cf3d6db1677be1b40eea63bc6d4728efb4b4e0bd7a89c5fd2d23e7a2cff8009c7a + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 + languageName: node + linkType: hard + +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.2": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"vite-node@npm:2.1.9": + version: 2.1.9 + resolution: "vite-node@npm:2.1.9" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.3.7" + es-module-lexer: "npm:^1.5.4" + pathe: "npm:^1.1.2" + vite: "npm:^5.0.0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/0d3589f9f4e9cff696b5b49681fdb75d1638c75053728be52b4013f70792f38cb0120a9c15e3a4b22bdd6b795ad7c2da13bcaf47242d439f0906049e73bdd756 + languageName: node + linkType: hard + +"vite@npm:^5.0.0": + version: 5.4.19 + resolution: "vite@npm:5.4.19" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.43" + rollup: "npm:^4.20.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/c97601234dba482cea5290f2a2ea0fcd65e1fab3df06718ea48adc8ceb14bc3129508216c4989329c618f6a0470b42f439677a207aef62b0c76f445091c2d89e + languageName: node + linkType: hard + +"vitest@npm:^2.1.8": + version: 2.1.9 + resolution: "vitest@npm:2.1.9" + dependencies: + "@vitest/expect": "npm:2.1.9" + "@vitest/mocker": "npm:2.1.9" + "@vitest/pretty-format": "npm:^2.1.9" + "@vitest/runner": "npm:2.1.9" + "@vitest/snapshot": "npm:2.1.9" + "@vitest/spy": "npm:2.1.9" + "@vitest/utils": "npm:2.1.9" + chai: "npm:^5.1.2" + debug: "npm:^4.3.7" + expect-type: "npm:^1.1.0" + magic-string: "npm:^0.30.12" + pathe: "npm:^1.1.2" + std-env: "npm:^3.8.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.1" + tinypool: "npm:^1.0.1" + tinyrainbow: "npm:^1.2.0" + vite: "npm:^5.0.0" + vite-node: "npm:2.1.9" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/node": ^18.0.0 || >=20.0.0 + "@vitest/browser": 2.1.9 + "@vitest/ui": 2.1.9 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10c0/e339e16dccacf4589ff43cb1f38c7b4d14427956ae8ef48702af6820a9842347c2b6c77356aeddb040329759ca508a3cb2b104ddf78103ea5bc98ab8f2c3a54e + languageName: node + linkType: hard + +"vue@npm:2.7.14": + version: 2.7.14 + resolution: "vue@npm:2.7.14" + dependencies: + "@vue/compiler-sfc": "npm:2.7.14" + csstype: "npm:^3.1.0" + checksum: 10c0/8eb326718c445eb5900d08e2f5a2d86b493d475d3a79f49695066092afa3176d2aad4db98682b3c5432f6fffb92719a124b7e137264e71d5b9be14d5193222c6 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10c0/5612d5f3e54760a797052eb4927f0ddc01383550f542ccd33d5238cfd65aeed392a45ad38364970d0a0f4fea32e1f4d231b3d8dac4a3bdd385e5cf802ae097db + languageName: node + linkType: hard + +"websocket-driver@npm:>=0.5.1": + version: 0.7.4 + resolution: "websocket-driver@npm:0.7.4" + dependencies: + http-parser-js: "npm:>=0.5.1" + safe-buffer: "npm:>=5.1.0" + websocket-extensions: "npm:>=0.1.1" + checksum: 10c0/5f09547912b27bdc57bac17b7b6527d8993aa4ac8a2d10588bb74aebaf785fdcf64fea034aae0c359b7adff2044dd66f3d03866e4685571f81b13e548f9021f1 + languageName: node + linkType: hard + +"websocket-extensions@npm:>=0.1.1": + version: 0.1.4 + resolution: "websocket-extensions@npm:0.1.4" + checksum: 10c0/bbc8c233388a0eb8a40786ee2e30d35935cacbfe26ab188b3e020987e85d519c2009fe07cfc37b7f718b85afdba7e54654c9153e6697301f72561bfe429177e0 + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10c0/1588bed84d10b72d5eec1d0faa0722ba1962f1821e7539c535558fb5398d223b0c50d8acab950b8c488b4ba69043fd833cc2697056b167d8ad46fac3995a55d5 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b + languageName: node + linkType: hard + +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 + languageName: node + linkType: hard + +"wintersky@npm:^1.3.0": + version: 1.3.2 + resolution: "wintersky@npm:1.3.2" + dependencies: + molangjs: "npm:^1.6.3" + three: "npm:^0.134.0" + tinycolor2: "npm:^1.4.2" + checksum: 10c0/68f6c8d251f62aee39180b0e85c1983cd761f7cbd8235f2fe82640f14ad66f76e73e83e71dd753603fcd35ca5ebc6bb0c1a1edb59780adc203864bb4f36cf7d1 + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrap-ansi@npm:^9.0.0": + version: 9.0.0 + resolution: "wrap-ansi@npm:9.0.0" + dependencies: + ansi-styles: "npm:^6.2.1" + string-width: "npm:^7.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/a139b818da9573677548dd463bd626a5a5286271211eb6e4e82f34a4f643191d74e6d4a9bb0a3c26ec90e6f904f679e0569674ac099ea12378a8b98e20706066 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yaml@npm:^1.10.2": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.2": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 10c0/0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs@npm:^16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: "npm:^7.0.2" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.0" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^20.2.2" + checksum: 10c0/b1dbfefa679848442454b60053a6c95d62f2d2e21dd28def92b647587f415969173c6e99a0f3bab4f1b67ee8283bf735ebe3544013f09491186ba9e8a9a2b651 + languageName: node + linkType: hard + +"yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yauzl@npm:^2.10.0": + version: 2.10.0 + resolution: "yauzl@npm:2.10.0" + dependencies: + buffer-crc32: "npm:~0.2.3" + fd-slicer: "npm:~1.1.0" + checksum: 10c0/f265002af7541b9ec3589a27f5fb8f11cf348b53cc15e2751272e3c062cd73f3e715bc72d43257de71bbaecae446c3f1b14af7559e8ab0261625375541816422 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.2.1 + resolution: "yocto-queue@npm:1.2.1" + checksum: 10c0/5762caa3d0b421f4bdb7a1926b2ae2189fc6e4a14469258f183600028eb16db3e9e0306f46e8ebf5a52ff4b81a881f22637afefbef5399d6ad440824e9b27f9f + languageName: node + linkType: hard