diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..6bd56f7bf --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,122 @@ +module.exports = { + "env": { + "browser": true, + "es2021": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:import/errors", + "plugin:import/warnings", + "plugin:import/typescript" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "./tsconfig.json", + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "import/no-cycle": "error", + "import/no-unresolved": "warn", + "@typescript-eslint/switch-exhaustiveness-check": "error", + "@typescript-eslint/no-inferrable-types": "warn", + "@typescript-eslint/no-unused-vars": "warn", + "@typescript-eslint/no-explicit-any": "warn", + "eqeqeq": "error", + "no-restricted-syntax": [ + "error", + { + "selector": "TSEnumDeclaration:not([const=true])", + "message": "Don't declare non-const enums" + } + ], + "@typescript-eslint/naming-convention": [ + "error", + { + "selector": "enumMember", + "format": [ + "UPPER_CASE" + ] + }, + { + "selector": "memberLike", + "modifiers": [ + "public", + "static" + ], + "format": [ + "PascalCase", + "UPPER_CASE" + ], + "leadingUnderscore": "forbid" + }, + { + "selector": "memberLike", + "modifiers": [ + "private", + "static" + ], + "format": [ + "PascalCase", + "UPPER_CASE" + ], + "leadingUnderscore": "forbid" + }, + { + "selector": "typeLike", + "format": [ + "PascalCase" + ] + }, + { + "selector": "variable", + "modifiers": [ + "exported", + "const", + "global" + ], + "format": [ + "PascalCase" + ], + "leadingUnderscore": "forbid" + }, + { + "selector": "function", + "format": [ + "camelCase", + "snake_case" + ], + "leadingUnderscore": "forbid" + }, + { + "selector": "function", + "modifiers": [ + "exported", + "global" + ], + "format": [ + "camelCase" + ], + "leadingUnderscore": "forbid" + }, + { + "selector": "interface", + "format": [ + "PascalCase" + ], + "leadingUnderscore": "forbid" + }, + { + "selector": "class", + "format": [ + "PascalCase" + ], + "leadingUnderscore": "forbid" + } + ] + } +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 6cc7a9715..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true - }, - "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:import/errors", "plugin:import/warnings", "plugin:import/typescript"], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "./tsconfig.json", - "ecmaVersion": "latest", - "sourceType": "module" - }, - "plugins": ["@typescript-eslint"], - "rules": { - "import/no-cycle": "error", - "import/no-unresolved": "warn", - "@typescript-eslint/switch-exhaustiveness-check": "error", - "@typescript-eslint/no-inferrable-types": "warn", - "eqeqeq": "error", - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": "enumMember", - "format": ["UPPER_CASE"] - }, - { - "selector": "memberLike", - "modifiers": ["public", "static"], - "format": ["PascalCase", "UPPER_CASE"], - "leadingUnderscore": "forbid" - }, - { - "selector": "memberLike", - "modifiers": ["private", "static"], - "format": ["PascalCase", "UPPER_CASE"], - "leadingUnderscore": "forbid" - }, - { - "selector": "typeLike", - "format": ["PascalCase"] - }, - { - "selector": "variable", - "modifiers": ["exported", "const", "global"], - "format": ["PascalCase"], - "leadingUnderscore": "forbid" - }, - { - "selector": "function", - "format": ["camelCase", "snake_case"], - "leadingUnderscore": "forbid" - }, - { - "selector": "function", - "modifiers": ["exported", "global"], - "format": ["camelCase"], - "leadingUnderscore": "forbid" - }, - { - "selector": "interface", - "format": ["PascalCase"], - "leadingUnderscore": "forbid" - }, - { - "selector": "class", - "format": ["PascalCase"], - "leadingUnderscore": "forbid" - } - ] - } -} diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml index 3b2519956..4bef4bef6 100644 --- a/.github/workflows/eslint.yml +++ b/.github/workflows/eslint.yml @@ -3,7 +3,7 @@ on: push: branches: [ "main" ] pull_request: - branches: [ "main", "NextRelease", "PatchCurrentRelease" ] + branches: [ "main" ] jobs: eslint: runs-on: ubuntu-latest diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 621d1fad5..4e49e5aad 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -6,7 +6,7 @@ on: push: branches: [ "main" ] pull_request: - branches: [ "main", "NextRelease", "PatchCurrentRelease" ] + branches: [ "main" ] jobs: jest: runs-on: ubuntu-latest diff --git a/src/ts/architecture/Readme.md b/ARCHITECTURE.md similarity index 59% rename from src/ts/architecture/Readme.md rename to ARCHITECTURE.md index 30f585b2e..1dd5a942e 100644 --- a/src/ts/architecture/Readme.md +++ b/ARCHITECTURE.md @@ -1,12 +1,24 @@ -# Architecture of interface spanning from simple Transforms to complex Celestial bodies and Space stations: +# Cosmos Journeyer's Architecture -![img.png](img.png) +Cosmos Journeyer is designed with a clear separation of concerns in mind. If you are willing to contribute, this document will give you a good idea of where everything is and how it is organized. -This folder contains all the abstraction necessary to the architecture of the image. +## General architecture -This means all the node except the leaves (upper nodes) which are the actual concrete implementation of celestial bodies and space stations. +The following diagram is not an inheritance diagram, but a composition diagram. Each arrow represents an "is part of" relationship. -It all starts with simple `Transformable` and `BoundingSphere`: +For example, planets are part of the celestial bodies. + +![Cosmos Journeyer's Architecture Diagram](coverImages/architecture_diagram.png) + +## Orbital Object's interfaces relations + +Even though you could argue the existence of an "is a" relationship between `CelestialBody` and `OrbitalObject`, I chose to avoid class inheritance for flexibility. + +This means that in the previous diagram, in the `Orbital Objects` tree, are only classes the concrete types: `Star`, `BlackHole`, `NeutronStar`, `TelluricPlanet`, `GasPlanet`, and `SpaceStation`. The rest is only interfaces: + +![Orbital Object's interfaces relations](coverImages/orbitalObjectsInterfaces.png) + +It all starts with simple `Transformable` and `BoundingSphere`: those are simple objects that possess a BaylonJS `TransformNode` for their position, rotation, scaling and a bounding volume to make simple calculations for distances. An `OrbitalObject` builds on top of this by adding the notion of orbit. They possess `OrbitProperties` that describes their motion around their `parent` which can be null in the case of some objects (think like stars). @@ -17,7 +29,7 @@ To sum up, an `OrbitalObject` is an object that can rotate around another `Orbit `CelestialBody` builds up on top of `OrbitalObject` by adding the notion of `BODY_TYPE` and `radius` that is expected from spherical objects. -`CelestialBody` are spherical orbital objects that encompasses both planets and stellar objects. +`CelestialBody` are spherical orbital objects that encompasses both planets and stellar objects. They can have specific post-processes applied to them (like atmosphere, clouds, rings...), which is why they also implement `HasPostProcesses`. `StellarObject` builds on top of `CelestialBody` by adding a `PointLight` that is used to light up the scene. They also have a `STELLAR_TYPE` that describes their type (star, black hole, neutron star). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dff30e399..7f13ed9e5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,49 +16,49 @@ If you have an idea for a new feature, please open an issue on the [issue tracke Pull requests are welcome! If you want to contribute code, please follow these steps: -1. Fork the repository -2. Create a new branch -3. Make your changes -4. Commit your changes -5. Push your changes -6. Open a pull request +1. Get familiar with the project by reading the [architecture document](ARCHITECTURE.md) +2. Fork the repository +3. Create a new branch from the `main` branch: + ```sh + git checkout -b [name_of_your_new_branch] + ``` +4. Commit & push your changes +5. Open a pull request to the `main` branch You can open a draft pull request if you want to get feedback on your changes before they are ready to be merged. Pull request are tested against the linter and the unit tests, make sure you run them before opening a pull request. -Code that does not pass the linter or the unit tests will not be merged. +Code that does not pass the linter or the unit tests will not be merged, but I will help you fix it don't worry. -## Contribution ideas +## Translation + +Cosmos Journeyer is available in multiple languages, but you can add more or improve existing translations. -There is still plenty to do on Cosmos Journeyer. Here are some ideas of contributions you can make (with stars indicating the difficulty of the task): +### Modifying existing language -### Visuals +To make a change in an existing language, go to `src/locales` and find the language you want to modify by its code. +For example if you want to modify the American English translation, you will find the `en-us` folder. +Inside this folder are many JSON files containing the various words and sentences used throughout the project. -- Improve the visuals of Neutron Stars to make the cone of the matter jets less visible (⭐⭐) -- Improve the visuals of Gas Giants to make them look better from closer (⭐⭐) -- Improve the visuals of the ocean using a separate mesh and FFT for wave generation (⭐⭐⭐) -- Experiment with volumetric clouds (⭐⭐⭐) +Make the changes you want by editing the files and then open a pull request. If you don't have/don't want to create a GitHub account, you can email the files at +[barth.paleologue@cosmosjourneyer.com](mailto:barth.paleologue@cosmosjourneyer.com). In any case you will be credited for your work. -### On-foot exploration +### Adding a new language -- Add new character animations (using Mixamo for example) (⭐) -- Make the character animation system more scalable (⭐⭐⭐) -- Add conditions to asset scattering to avoid grass in desert and at the bottom of the ocean (⭐⭐) +Adding a new language altogether is quite straightforward as well. Simply go to the `src/locales` folder and create a new folder with the language code you want to create. +Then, paste inside the content of another language directory and translate the content inside the JSON files. -### Space gameplay +You don't need to code at all, the language will be automatically bundled and available inside Cosmos Journeyer. -- Add a cockpit view for spaceships (⭐⭐⭐) -- Add new spaceships and space stations (⭐⭐⭐) -- Add lasers to spaceships (⭐⭐) -- Add trade missions at space stations (⭐⭐⭐) +To test your changes, simply run the project using `npm run serve` and change the url in this format: -### Optimization +``` +http://localhost:8080/?lang=fr-FR +``` -- Optimize the volumetric atmosphere rendering (⭐⭐⭐) -- Optimize the lens flare rendering (⭐⭐) +You only need to replace `fr-FR` with the language code you want to test. -### Miscellaneous +## Contribution ideas -- Improve WebGPU support (⭐⭐⭐) -- Improve the documentation (⭐) +There is still plenty to do on Cosmos Journeyer. You can check the [issue tracker](https://github.com/BarthPaleologue/CosmosJourneyer/issues) for ideas on what to work on. \ No newline at end of file diff --git a/README.md b/README.md index 6f38bd63f..f91c15352 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ The main deployment of the procedural universe can be accessed https://barthpale The documentation is online at https://barthpaleologue.github.io/CosmosJourneyer/docs/ +Additionally, the [ARCHITECTURE.md](./ARCHITECTURE.md) file contains a big picture explanation of the architecture of the project. + To build it locally, run `npm run docs` and then `npm run serve:docs` to serve it at `localhost:8081`. ## Contributing @@ -28,6 +30,10 @@ If you want to contribute, you will find guidelines and ideas [here](./CONTRIBUT ## Sponsor +Developing Cosmos Journeyer is time-consuming and generates no revenue since it is free and open-source. + +If you like the project, please consider sponsoring it on [Patreon](https://www.patreon.com/barthpaleologue) or [GitHub Sponsors]( + The project has a ko-fi page at https://ko-fi.com/cosmosjourneyer if you feel like sponsoring the project! ## Features diff --git a/coverImages/architecture_diagram.png b/coverImages/architecture_diagram.png new file mode 100644 index 000000000..14312bd0a Binary files /dev/null and b/coverImages/architecture_diagram.png differ diff --git a/src/ts/architecture/img.png b/coverImages/orbitalObjectsInterfaces.png similarity index 100% rename from src/ts/architecture/img.png rename to coverImages/orbitalObjectsInterfaces.png diff --git a/coverImages/video.png b/coverImages/video.png index 5f4f8fb77..a6731d1aa 100644 Binary files a/coverImages/video.png and b/coverImages/video.png differ diff --git a/package.json b/package.json index d19a9f36a..ca3911501 100644 --- a/package.json +++ b/package.json @@ -1,56 +1,59 @@ { "devDependencies": { - "@babel/preset-env": "^7.23.9", - "@babel/preset-typescript": "^7.23.3", - "@babylonjs/core": "^6.43.0", - "@babylonjs/gui": "^6.43.0", - "@babylonjs/havok": "^1.3.1", - "@babylonjs/loaders": "^6.43.0", + "@babel/preset-env": "^7.24.4", + "@babel/preset-typescript": "^7.24.1", + "@babylonjs/core": "^7.1.0", + "@babylonjs/gui": "^7.1.0", + "@babylonjs/havok": "^1.3.3", + "@babylonjs/loaders": "^7.1.0", "@brianchirls/game-input": "^0.1.1", "@jest/types": "^29.6.3", - "@tauri-apps/cli": "^1.5.10", + "@tauri-apps/cli": "^1.5.11", "@types/jest": "^29.5.12", "@types/seedrandom": "^3.0.8", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@types/webpack": "^5.28.5", + "@types/webpack-env": "^1.18.4", + "@typescript-eslint/eslint-plugin": "^7.6.0", + "@typescript-eslint/parser": "^7.6.0", "@webpack-cli/generators": "^3.0.7", "babel": "^6.23.0", "babel-jest": "^29.7.0", - "css-loader": "^6.10.0", - "eslint": "^8.56.0", + "css-loader": "^7.1.0", + "eslint": "^8.57.0", "eslint-plugin-import": "^2.29.1", "extended-random": "^1.2.2", "fast-simplex-noise": "^4.0.0", "handle-sliderjs": "^1.3.1", - "html-loader": "^4.2.0", + "html-loader": "^5.0.0", "html-webpack-plugin": "^5.6.0", "http-server": "^14.1.1", + "i18next": "^23.11.1", "jest": "^29.7.0", "jest-transform-stub": "^2.0.0", - "mini-css-extract-plugin": "^2.8.0", + "mini-css-extract-plugin": "^2.8.1", "ml-matrix": "^6.11.0", - "prettier": "^2.8.8", + "prettier": "^3.2.5", "raw-loader": "^4.0.2", - "sass": "^1.71.0", - "sass-loader": "^13.3.3", + "sass": "^1.74.1", + "sass-loader": "^14.1.1", "squirrel-noise": "^1.0.0", - "style-loader": "^3.3.4", + "style-loader": "^4.0.0", "terrain-generation": "^1.8.0", "ts-jest": "^29.1.2", "ts-loader": "^9.5.1", "ts-node": "^10.9.2", "ts-shader-loader": "^2.0.2", - "typedoc": "^0.25.8", + "typedoc": "^0.25.13", "typedoc-material-theme": "^1.0.2", "typedoc-plugin-missing-exports": "^2.2.0", - "typescript": "^5.3.3", + "typescript": "^5.4.4", "typescript-plugin-css-modules": "^5.1.0", - "webpack": "^5.90.2", + "webpack": "^5.91.0", "webpack-cli": "^5.1.4", - "webpack-dev-server": "^4.15.1" + "webpack-dev-server": "^5.0.4" }, - "version": "1.8.0", - "description": "CosmosJourneyer", + "version": "1.9.0", + "description": "Cosmos Journeyer is a space exploration game featuring fully explorable planets, across millions of star systems. It is built using Babylon.JS, and a lot of passion.", "name": "cosmos-journeyer", "scripts": { "build": "webpack --mode=production --node-env=production", @@ -63,7 +66,7 @@ "test": "jest --coverage", "docs": "typedoc --options typedoc.json", "serve:docs": "http-server docs -p 8081", - "lint:check": "eslint 'src/ts/**/**/*.ts'", + "lint:check": "eslint --config .eslintrc.js 'src/ts/**/**/*.ts'", "lint:fix": "eslint src/ts/**/*.ts --fix" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04f150ea1..a5287afe4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,23 +6,23 @@ settings: devDependencies: '@babel/preset-env': - specifier: ^7.23.9 - version: 7.23.9(@babel/core@7.23.9) + specifier: ^7.24.4 + version: 7.24.4(@babel/core@7.24.4) '@babel/preset-typescript': - specifier: ^7.23.3 - version: 7.23.3(@babel/core@7.23.9) + specifier: ^7.24.1 + version: 7.24.1(@babel/core@7.24.4) '@babylonjs/core': - specifier: ^6.43.0 - version: 6.43.0 + specifier: ^7.1.0 + version: 7.1.0 '@babylonjs/gui': - specifier: ^6.43.0 - version: 6.43.0(@babylonjs/core@6.43.0) + specifier: ^7.1.0 + version: 7.1.0(@babylonjs/core@7.1.0) '@babylonjs/havok': - specifier: ^1.3.1 - version: 1.3.1 + specifier: ^1.3.3 + version: 1.3.3 '@babylonjs/loaders': - specifier: ^6.43.0 - version: 6.43.0(@babylonjs/core@6.43.0)(babylonjs-gltf2interface@6.43.0) + specifier: ^7.1.0 + version: 7.1.0(@babylonjs/core@7.1.0)(babylonjs-gltf2interface@7.1.0) '@brianchirls/game-input': specifier: ^0.1.1 version: 0.1.1 @@ -30,38 +30,44 @@ devDependencies: specifier: ^29.6.3 version: 29.6.3 '@tauri-apps/cli': - specifier: ^1.5.10 - version: 1.5.10 + specifier: ^1.5.11 + version: 1.5.11 '@types/jest': specifier: ^29.5.12 version: 29.5.12 '@types/seedrandom': specifier: ^3.0.8 version: 3.0.8 + '@types/webpack': + specifier: ^5.28.5 + version: 5.28.5(webpack-cli@5.1.4) + '@types/webpack-env': + specifier: ^1.18.4 + version: 1.18.4 '@typescript-eslint/eslint-plugin': - specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3) + specifier: ^7.6.0 + version: 7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.4) '@typescript-eslint/parser': - specifier: ^5.62.0 - version: 5.62.0(eslint@8.56.0)(typescript@5.3.3) + specifier: ^7.6.0 + version: 7.6.0(eslint@8.57.0)(typescript@5.4.4) '@webpack-cli/generators': specifier: ^3.0.7 - version: 3.0.7(prettier@2.8.8)(webpack-cli@5.1.4)(webpack@5.90.2) + version: 3.0.7(prettier@3.2.5)(webpack-cli@5.1.4)(webpack@5.91.0) babel: specifier: ^6.23.0 version: 6.23.0 babel-jest: specifier: ^29.7.0 - version: 29.7.0(@babel/core@7.23.9) + version: 29.7.0(@babel/core@7.24.4) css-loader: - specifier: ^6.10.0 - version: 6.10.0(webpack@5.90.2) + specifier: ^7.1.0 + version: 7.1.0(webpack@5.91.0) eslint: - specifier: ^8.56.0 - version: 8.56.0 + specifier: ^8.57.0 + version: 8.57.0 eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0) + version: 2.29.1(@typescript-eslint/parser@7.6.0)(eslint@8.57.0) extended-random: specifier: ^1.2.2 version: 1.2.2 @@ -72,83 +78,86 @@ devDependencies: specifier: ^1.3.1 version: 1.3.1 html-loader: - specifier: ^4.2.0 - version: 4.2.0(webpack@5.90.2) + specifier: ^5.0.0 + version: 5.0.0(webpack@5.91.0) html-webpack-plugin: specifier: ^5.6.0 - version: 5.6.0(webpack@5.90.2) + version: 5.6.0(webpack@5.91.0) http-server: specifier: ^14.1.1 version: 14.1.1 + i18next: + specifier: ^23.11.1 + version: 23.11.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2) + version: 29.7.0(@types/node@20.12.6)(ts-node@10.9.2) jest-transform-stub: specifier: ^2.0.0 version: 2.0.0 mini-css-extract-plugin: - specifier: ^2.8.0 - version: 2.8.0(webpack@5.90.2) + specifier: ^2.8.1 + version: 2.8.1(webpack@5.91.0) ml-matrix: specifier: ^6.11.0 version: 6.11.0 prettier: - specifier: ^2.8.8 - version: 2.8.8 + specifier: ^3.2.5 + version: 3.2.5 raw-loader: specifier: ^4.0.2 - version: 4.0.2(webpack@5.90.2) + version: 4.0.2(webpack@5.91.0) sass: - specifier: ^1.71.0 - version: 1.71.0 + specifier: ^1.74.1 + version: 1.74.1 sass-loader: - specifier: ^13.3.3 - version: 13.3.3(sass@1.71.0)(webpack@5.90.2) + specifier: ^14.1.1 + version: 14.1.1(sass@1.74.1)(webpack@5.91.0) squirrel-noise: specifier: ^1.0.0 version: 1.0.0 style-loader: - specifier: ^3.3.4 - version: 3.3.4(webpack@5.90.2) + specifier: ^4.0.0 + version: 4.0.0(webpack@5.91.0) terrain-generation: specifier: ^1.8.0 version: 1.8.0 ts-jest: specifier: ^29.1.2 - version: 29.1.2(@babel/core@7.23.9)(@jest/types@29.6.3)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.3.3) + version: 29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.4.4) ts-loader: specifier: ^9.5.1 - version: 9.5.1(typescript@5.3.3)(webpack@5.90.2) + version: 9.5.1(typescript@5.4.4)(webpack@5.91.0) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.11.19)(typescript@5.3.3) + version: 10.9.2(@types/node@20.12.6)(typescript@5.4.4) ts-shader-loader: specifier: ^2.0.2 version: 2.0.2 typedoc: - specifier: ^0.25.8 - version: 0.25.8(typescript@5.3.3) + specifier: ^0.25.13 + version: 0.25.13(typescript@5.4.4) typedoc-material-theme: specifier: ^1.0.2 - version: 1.0.2(typedoc@0.25.8) + version: 1.0.2(typedoc@0.25.13) typedoc-plugin-missing-exports: specifier: ^2.2.0 - version: 2.2.0(typedoc@0.25.8) + version: 2.2.0(typedoc@0.25.13) typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: ^5.4.4 + version: 5.4.4 typescript-plugin-css-modules: specifier: ^5.1.0 - version: 5.1.0(ts-node@10.9.2)(typescript@5.3.3) + version: 5.1.0(ts-node@10.9.2)(typescript@5.4.4) webpack: - specifier: ^5.90.2 - version: 5.90.2(webpack-cli@5.1.4) + specifier: ^5.91.0 + version: 5.91.0(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 - version: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@4.15.1)(webpack@5.90.2) + version: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@5.0.4)(webpack@5.91.0) webpack-dev-server: - specifier: ^4.15.1 - version: 4.15.1(webpack-cli@5.1.4)(webpack@5.90.2) + specifier: ^5.0.4 + version: 5.0.4(webpack-cli@5.1.4)(webpack@5.91.0) packages: @@ -161,41 +170,41 @@ packages: resolution: {integrity: sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==} dev: true - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + /@babel/code-frame@7.24.2: + resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 + '@babel/highlight': 7.24.2 + picocolors: 1.0.0 dev: true - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + /@babel/compat-data@7.24.4: + resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.9: - resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} + /@babel/core@7.24.4: + resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helpers': 7.23.9 - '@babel/parser': 7.23.9 - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helpers': 7.24.4 + '@babel/parser': 7.24.4 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -205,13 +214,13 @@ packages: - supports-color dev: true - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + /@babel/generator@7.24.4: + resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 dev: true @@ -219,65 +228,65 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.5 + '@babel/compat-data': 7.24.4 '@babel/helper-validator-option': 7.23.5 browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.23.10(@babel/core@7.23.9): - resolution: {integrity: sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==} + /@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.9): + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.4): resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.1 dev: true - /@babel/helper-define-polyfill-provider@0.5.0(@babel/core@7.23.9): - resolution: {integrity: sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==} + /@babel/helper-define-polyfill-provider@0.6.1(@babel/core@7.24.4): + resolution: {integrity: sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -294,40 +303,40 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true /@babel/helper-member-expression-to-functions@7.23.0: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + /@babel/helper-module-imports@7.24.3: + resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 + '@babel/helper-module-imports': 7.24.3 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 @@ -337,33 +346,33 @@ packages: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + /@babel/helper-plugin-utils@7.24.0: + resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.9): + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4): resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.9): - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + /@babel/helper-replace-supers@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 @@ -373,25 +382,25 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-string-parser@7.24.1: + resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} dev: true @@ -410,1012 +419,1024 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 dev: true - /@babel/helpers@7.23.9: - resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} + /@babel/helpers@7.24.4: + resolution: {integrity: sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.23.9 - '@babel/traverse': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.1 + '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/highlight@7.24.2: + resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.0 dev: true - /@babel/parser@7.23.9: - resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} + /@babel/parser@7.24.4: + resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 + dev: true + + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.24.4 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) + '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.9): - resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9): + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.9): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.4): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.9): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.9): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + /@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + /@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + /@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.9): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.9): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.9): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.9): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.4): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + /@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.9): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + /@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.23.9): - resolution: {integrity: sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==} + /@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.4): + resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + /@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@babel/helper-module-imports': 7.24.3 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + /@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + /@babel/plugin-transform-block-scoping@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + /@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + /@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.9): - resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} + /@babel/plugin-transform-classes@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: true - /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + /@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.23.9 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/template': 7.24.0 dev: true - /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + /@babel/plugin-transform-destructuring@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + /@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + /@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} + /@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + /@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} + /@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.9): - resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} + /@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + /@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} + /@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + /@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + /@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + /@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + /@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + /@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.23.9): - resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==} + /@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-identifier': 7.22.20 dev: true - /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + /@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.9): + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.4): resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + /@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + /@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + /@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + /@babel/plugin-transform-object-rest-spread@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + /@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + /@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + /@babel/plugin-transform-optional-chaining@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + /@babel/plugin-transform-parameters@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + /@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.9): - resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + /@babel/plugin-transform-private-property-in-object@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + /@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + /@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + /@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + /@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + /@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + /@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + /@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + /@babel/plugin-transform-typeof-symbol@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.9): - resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} + /@babel/plugin-transform-typescript@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) + '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) dev: true - /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + /@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} + /@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + /@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + /@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.9) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.4) + '@babel/helper-plugin-utils': 7.24.0 dev: true - /@babel/preset-env@7.23.9(@babel/core@7.23.9): - resolution: {integrity: sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==} + /@babel/preset-env@7.24.4(@babel/core@7.24.4): + resolution: {integrity: sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 + '@babel/compat-data': 7.24.4 + '@babel/core': 7.24.4 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.9) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.9) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-async-generator-functions': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.9) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.9) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.23.9) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.9) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.9) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.9) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.9) - babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.9) - babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.23.9) - babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.9) - core-js-compat: 3.36.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.4) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.4) + '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.4) + '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-block-scoping': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.4) + '@babel/plugin-transform-classes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-destructuring': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.4) + '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-object-rest-spread': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-optional-chaining': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-parameters': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-private-property-in-object': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-typeof-symbol': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.4) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.4) + babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.4) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.4) + babel-plugin-polyfill-regenerator: 0.6.1(@babel/core@7.24.4) + core-js-compat: 3.36.1 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.9): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.4): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.9 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/types': 7.24.0 esutils: 2.0.3 dev: true - /@babel/preset-typescript@7.23.3(@babel/core@7.23.9): - resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} + /@babel/preset-typescript@7.24.1(@babel/core@7.24.4): + resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.24.4 + '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.9) + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-transform-typescript': 7.24.4(@babel/core@7.24.4) dev: true /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.23.9: - resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} + /@babel/runtime@7.24.4: + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 dev: true - /@babel/template@7.23.9: - resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/code-frame': 7.24.2 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 dev: true - /@babel/traverse@7.23.9: - resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} + /@babel/traverse@7.24.1: + resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 + '@babel/code-frame': 7.24.2 + '@babel/generator': 7.24.4 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.23.9: - resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 + '@babel/helper-string-parser': 7.24.1 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 dev: true - /@babylonjs/core@6.43.0: - resolution: {integrity: sha512-pLFvvtC26TeICUcF0YjuuQqvCahJwPlATXnJkvBzMWXXxUE0Y5rI8L28iScu2WKy975605KdccJI5VL2NG7sUQ==} + /@babylonjs/core@7.1.0: + resolution: {integrity: sha512-nz1CmflajMPnjdnwYrj72s4D/Q8IkOW4DBbwMfUNLFSCondfFXS3sZBgHeCAHpimR5n4e27YwvJ66MkQJsSraQ==} dev: true - /@babylonjs/gui@6.43.0(@babylonjs/core@6.43.0): - resolution: {integrity: sha512-iYsB7uyC40w0QkFGcPw8jAzE26jsgTFvWHTVKPSZxjQ5cG2RQEeK3aD8l+GvWauSc2qPB0wMOsvkAtusdy1g7g==} + /@babylonjs/gui@7.1.0(@babylonjs/core@7.1.0): + resolution: {integrity: sha512-tY6MGtigjZwv+9rqtGTsyBZL9sHSPjgVq+JEWHUsACH0ffNkKsQxtKSDc5bryzNQpo1rzTMHqEeU+DnqNSVe1Q==} peerDependencies: - '@babylonjs/core': ^6.0.0 + '@babylonjs/core': ^7.0.0 dependencies: - '@babylonjs/core': 6.43.0 + '@babylonjs/core': 7.1.0 dev: true - /@babylonjs/havok@1.3.1: - resolution: {integrity: sha512-ctaAQ2RN7hzE2vukGiA27//08YE4RNqH4RN26fCd8q0q7Qn+pXg4P61ZgakWYox/YS4VqHrB3ovZUDtPt2Scxg==} + /@babylonjs/havok@1.3.3: + resolution: {integrity: sha512-UcZGPfiDY6KEUnpXbvlTypePJdBqCadw+iB/JSZIaH5lnji6Y+O80qT/HBg4i5ITS/O9PeOjnnV25XaUTR8GcQ==} dependencies: '@types/emscripten': 1.39.10 dev: true - /@babylonjs/loaders@6.43.0(@babylonjs/core@6.43.0)(babylonjs-gltf2interface@6.43.0): - resolution: {integrity: sha512-+cgw4NDchjc/5dZYGzOEhJU+9++ygYlA+ChybE5yvF+yUDWZ7fGXnEXMFImXeFELjk5RRK1NS3H3YvPe7A+Rug==} + /@babylonjs/loaders@7.1.0(@babylonjs/core@7.1.0)(babylonjs-gltf2interface@7.1.0): + resolution: {integrity: sha512-6gLbFiUsiqsQDRWLl4TL5pMKiemSAB/E61SHpp8xkBalxZUiKroSbZt3Irxc7CHIq8SE5CYfPUPYjs6BmpTgqw==} peerDependencies: - '@babylonjs/core': ^6.0.0 - babylonjs-gltf2interface: ^6.0.0 + '@babylonjs/core': ^7.0.0 + babylonjs-gltf2interface: ^7.0.0 dependencies: - '@babylonjs/core': 6.43.0 - babylonjs-gltf2interface: 6.43.0 + '@babylonjs/core': 7.1.0 + babylonjs-gltf2interface: 7.1.0 dev: true /@bcoe/v8-coverage@0.2.3: @@ -1440,13 +1461,13 @@ packages: engines: {node: '>=10.0.0'} dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.56.0 + eslint: 8.57.0 eslint-visitor-keys: 3.4.3 dev: true @@ -1472,8 +1493,8 @@ packages: - supports-color dev: true - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1485,7 +1506,7 @@ packages: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 2.0.2 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -1497,8 +1518,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} dev: true /@isaacs/cliui@8.0.2: @@ -1538,7 +1559,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.19 + '@types/node': 20.12.6 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1559,14 +1580,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.19 + '@types/node': 20.12.6 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.12.6)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1594,7 +1615,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.19 + '@types/node': 20.12.6 jest-mock: 29.7.0 dev: true @@ -1621,7 +1642,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.11.19 + '@types/node': 20.12.6 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1653,18 +1674,18 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.22 - '@types/node': 20.11.19 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.12.6 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.1 + istanbul-lib-instrument: 6.0.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 + istanbul-reports: 3.1.7 jest-message-util: 29.7.0 jest-util: 29.7.0 jest-worker: 29.7.0 @@ -1687,7 +1708,7 @@ packages: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -1716,9 +1737,9 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -1742,18 +1763,18 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.19 + '@types/node': 20.12.6 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.25 dev: true /@jridgewell/resolve-uri@3.1.2: @@ -1761,24 +1782,24 @@ packages: engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 @@ -1791,8 +1812,8 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /@leichtgewicht/ip-codec@2.0.4: - resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + /@leichtgewicht/ip-codec@2.0.5: + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} dev: true /@material/material-color-utilities@0.2.7: @@ -2195,8 +2216,8 @@ packages: '@sinonjs/commons': 3.0.1 dev: true - /@tauri-apps/cli-darwin-arm64@1.5.10: - resolution: {integrity: sha512-8dqHaGFKFUEMv3CfEyRP0Ebq28X4Oz74bdi393nBZVqbZM8SN6JdB7kXNb3o3W1TMNSu0M71e6x06YvXSNWvXQ==} + /@tauri-apps/cli-darwin-arm64@1.5.11: + resolution: {integrity: sha512-2NLSglDb5VfvTbMtmOKWyD+oaL/e8Z/ZZGovHtUFyUSFRabdXc6cZOlcD1BhFvYkHqm+TqGaz5qtPR5UbqDs8A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -2204,8 +2225,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-darwin-x64@1.5.10: - resolution: {integrity: sha512-qb/9H2FgGRAZPlPj5ingwgpI9B1BUWBUjJpjP+XzSkgjfSQVs3mbdCFz+knGIfrbpw/rBfdOt9BM7biWqIml3Q==} + /@tauri-apps/cli-darwin-x64@1.5.11: + resolution: {integrity: sha512-/RQllHiJRH2fJOCudtZlaUIjofkHzP3zZgxi71ZUm7Fy80smU5TDfwpwOvB0wSVh0g/ciDjMArCSTo0MRvL+ag==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -2213,8 +2234,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-arm-gnueabihf@1.5.10: - resolution: {integrity: sha512-iYwfKHGQU0Ezvj5OOhILDiv9VSNm3oouctsvUC4ygOLhpVKXDqQ6nQwJzUZey1KjpBPeM7spOOEYZYxNUgAdZA==} + /@tauri-apps/cli-linux-arm-gnueabihf@1.5.11: + resolution: {integrity: sha512-IlBuBPKmMm+a5LLUEK6a21UGr9ZYd6zKuKLq6IGM4tVweQa8Sf2kP2Nqs74dMGIUrLmMs0vuqdURpykQg+z4NQ==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -2222,8 +2243,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-arm64-gnu@1.5.10: - resolution: {integrity: sha512-kz4tI6Rr8wRuSVrDYpT6mAzHDW/rwPosb2wGatnhKRPb5v9LGPAZflUUUj+AAXnyl6XmD86Rbu7ekkm9BGm1Vw==} + /@tauri-apps/cli-linux-arm64-gnu@1.5.11: + resolution: {integrity: sha512-w+k1bNHCU/GbmXshtAhyTwqosThUDmCEFLU4Zkin1vl2fuAtQry2RN7thfcJFepblUGL/J7yh3Q/0+BCjtspKQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -2231,8 +2252,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-arm64-musl@1.5.10: - resolution: {integrity: sha512-HswFaeTplIVY6YSjx+awXfLqB4zwzW3D/8WpmxHY3kyxaE4VnXBhKT86YnlA+qX0qZxgsYr0L0EXxk940lHtKQ==} + /@tauri-apps/cli-linux-arm64-musl@1.5.11: + resolution: {integrity: sha512-PN6/dl+OfYQ/qrAy4HRAfksJ2AyWQYn2IA/2Wwpaa7SDRz2+hzwTQkvajuvy0sQ5L2WCG7ymFYRYMbpC6Hk9Pg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -2240,8 +2261,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-x64-gnu@1.5.10: - resolution: {integrity: sha512-sOh7slboFQxJCBH5QFNe1Iw3JF2GPWYsq2TlQ6T8GgFh/cb13bK/a1TJG/gOrsRA7/pkIweaSufjpKpPBzAoGQ==} + /@tauri-apps/cli-linux-x64-gnu@1.5.11: + resolution: {integrity: sha512-MTVXLi89Nj7Apcvjezw92m7ZqIDKT5SFKZtVPCg6RoLUBTzko/BQoXYIRWmdoz2pgkHDUHgO2OMJ8oKzzddXbw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -2249,8 +2270,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-x64-musl@1.5.10: - resolution: {integrity: sha512-fbTZa3Q01ttIKg6s9rhWGRfdOI23zIPa6loVz6YafHAzr3WLLEXSuG2fI/+01TdX9xdr6glttu8j3H5xE5oDgw==} + /@tauri-apps/cli-linux-x64-musl@1.5.11: + resolution: {integrity: sha512-kwzAjqFpz7rvTs7WGZLy/a5nS5t15QKr3E9FG95MNF0exTl3d29YoAUAe1Mn0mOSrTJ9Z+vYYAcI/QdcsGBP+w==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -2258,8 +2279,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-win32-arm64-msvc@1.5.10: - resolution: {integrity: sha512-Hntd66+Rrjn2dPPHqCVhZSXotNn5u7lfSff/1riIFbR4hZysB1OPlMOEjh51lBYhmcrvhseMfGfwH6D9i7WYKg==} + /@tauri-apps/cli-win32-arm64-msvc@1.5.11: + resolution: {integrity: sha512-L+5NZ/rHrSUrMxjj6YpFYCXp6wHnq8c8SfDTBOX8dO8x+5283/vftb4vvuGIsLS4UwUFXFnLt3XQr44n84E67Q==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -2267,8 +2288,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-win32-ia32-msvc@1.5.10: - resolution: {integrity: sha512-Kgd3qojNhH7qRsS2RKD1rKgUzk4y/v+SWW8Yr/xNo6FIYZzJChawW+WrYyBBtRoftrhLwm09LSnkR21KlGZxbA==} + /@tauri-apps/cli-win32-ia32-msvc@1.5.11: + resolution: {integrity: sha512-oVlD9IVewrY0lZzTdb71kNXkjdgMqFq+ohb67YsJb4Rf7o8A9DTlFds1XLCe3joqLMm4M+gvBKD7YnGIdxQ9vA==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -2276,8 +2297,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-win32-x64-msvc@1.5.10: - resolution: {integrity: sha512-pvuot24ZeLqQYD3rQHSzHJvUDX/kE18F98yl2mO9IHrHQyasdqlLhr/6kkmOWIvFDqyQNhpFXDzGNPm7yRbB1g==} + /@tauri-apps/cli-win32-x64-msvc@1.5.11: + resolution: {integrity: sha512-1CexcqUFCis5ypUIMOKllxUBrna09McbftWENgvVXMfA+SP+yPDPAVb8fIvUcdTIwR/yHJwcIucmTB4anww4vg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2285,21 +2306,21 @@ packages: dev: true optional: true - /@tauri-apps/cli@1.5.10: - resolution: {integrity: sha512-8+6NJgqSXqsFAEuUERDDRWrLh24TMT4aisn1qpADvKVX4KlBAKE17KTXHI54XQFR8qLbkUFNzprU4M9PV8ighw==} + /@tauri-apps/cli@1.5.11: + resolution: {integrity: sha512-B475D7phZrq5sZ3kDABH4g2mEoUIHtnIO+r4ZGAAfsjMbZCwXxR/jlMGTEL+VO3YzjpF7gQe38IzB4vLBbVppw==} engines: {node: '>= 10'} hasBin: true optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 1.5.10 - '@tauri-apps/cli-darwin-x64': 1.5.10 - '@tauri-apps/cli-linux-arm-gnueabihf': 1.5.10 - '@tauri-apps/cli-linux-arm64-gnu': 1.5.10 - '@tauri-apps/cli-linux-arm64-musl': 1.5.10 - '@tauri-apps/cli-linux-x64-gnu': 1.5.10 - '@tauri-apps/cli-linux-x64-musl': 1.5.10 - '@tauri-apps/cli-win32-arm64-msvc': 1.5.10 - '@tauri-apps/cli-win32-ia32-msvc': 1.5.10 - '@tauri-apps/cli-win32-x64-msvc': 1.5.10 + '@tauri-apps/cli-darwin-arm64': 1.5.11 + '@tauri-apps/cli-darwin-x64': 1.5.11 + '@tauri-apps/cli-linux-arm-gnueabihf': 1.5.11 + '@tauri-apps/cli-linux-arm64-gnu': 1.5.11 + '@tauri-apps/cli-linux-arm64-musl': 1.5.11 + '@tauri-apps/cli-linux-x64-gnu': 1.5.11 + '@tauri-apps/cli-linux-x64-musl': 1.5.11 + '@tauri-apps/cli-win32-arm64-msvc': 1.5.11 + '@tauri-apps/cli-win32-ia32-msvc': 1.5.11 + '@tauri-apps/cli-win32-x64-msvc': 1.5.11 dev: true /@tootallnate/once@1.1.2: @@ -2312,8 +2333,8 @@ packages: engines: {node: '>= 10'} dev: true - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} dev: true /@tsconfig/node12@1.0.11: @@ -2338,14 +2359,14 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@tufjs/canonical-json': 1.0.0 - minimatch: 9.0.3 + minimatch: 9.0.4 dev: true /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.5 @@ -2354,46 +2375,46 @@ packages: /@types/babel__generator@7.6.8: resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.23.9 - '@babel/types': 7.23.9 + '@babel/parser': 7.24.4 + '@babel/types': 7.24.0 dev: true /@types/babel__traverse@7.20.5: resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} dependencies: - '@babel/types': 7.23.9 + '@babel/types': 7.24.0 dev: true /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.11.19 + '@types/node': 20.12.6 dev: true /@types/bonjour@3.5.13: resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.12.6 dev: true /@types/connect-history-api-fallback@1.5.4: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: - '@types/express-serve-static-core': 4.17.43 - '@types/node': 20.11.19 + '@types/express-serve-static-core': 4.19.0 + '@types/node': 20.12.6 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.12.6 dev: true /@types/emscripten@1.39.10: @@ -2403,12 +2424,12 @@ packages: /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: - '@types/eslint': 8.56.2 + '@types/eslint': 8.56.7 '@types/estree': 1.0.5 dev: true - /@types/eslint@8.56.2: - resolution: {integrity: sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==} + /@types/eslint@8.56.7: + resolution: {integrity: sha512-SjDvI/x3zsZnOkYZ3lCt9lOZWZLB2jIlNKz+LBgCtDurK0JZcwucxYHn1w2BJkD34dgX9Tjnak0txtq4WTggEA==} dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -2422,11 +2443,11 @@ packages: resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==} dev: true - /@types/express-serve-static-core@4.17.43: - resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} + /@types/express-serve-static-core@4.19.0: + resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} dependencies: - '@types/node': 20.11.19 - '@types/qs': 6.9.11 + '@types/node': 20.12.6 + '@types/qs': 6.9.14 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 dev: true @@ -2435,15 +2456,15 @@ packages: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.17.43 - '@types/qs': 6.9.11 - '@types/serve-static': 1.15.5 + '@types/express-serve-static-core': 4.19.0 + '@types/qs': 6.9.14 + '@types/serve-static': 1.15.7 dev: true /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.12.6 dev: true /@types/html-minifier-terser@6.1.0: @@ -2457,7 +2478,7 @@ packages: /@types/http-proxy@1.17.14: resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.12.6 dev: true /@types/istanbul-lib-coverage@2.0.6: @@ -2495,10 +2516,6 @@ packages: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} dev: true - /@types/mime@3.0.4: - resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - dev: true - /@types/minimatch@3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} dev: true @@ -2506,15 +2523,15 @@ packages: /@types/node-forge@1.3.11: resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.12.6 dev: true /@types/node@15.14.9: resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==} dev: true - /@types/node@20.11.19: - resolution: {integrity: sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==} + /@types/node@20.12.6: + resolution: {integrity: sha512-3KurE8taB8GCvZBPngVbp0lk5CKi8M9f9k1rsADh0Evdz5SzJ+Q+Hx9uHoFGsLnLnd1xmkDQr2hVhlA0Mn0lKQ==} dependencies: undici-types: 5.26.5 dev: true @@ -2526,40 +2543,40 @@ packages: /@types/postcss-modules-local-by-default@4.0.2: resolution: {integrity: sha512-CtYCcD+L+trB3reJPny+bKWKMzPfxEyQpKIwit7kErnOexf5/faaGpkFy4I5AwbV4hp1sk7/aTg0tt0B67VkLQ==} dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true /@types/postcss-modules-scope@3.0.4: resolution: {integrity: sha512-//ygSisVq9kVI0sqx3UPLzWIMCmtSVrzdljtuaAEJtGoGnpjBikZ2sXO5MpH9SnWX9HRfXxHifDAXcQjupWnIQ==} dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /@types/qs@6.9.11: - resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} + /@types/qs@6.9.14: + resolution: {integrity: sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==} dev: true /@types/range-parser@1.2.7: resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} dev: true - /@types/retry@0.12.0: - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + /@types/retry@0.12.2: + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} dev: true /@types/seedrandom@3.0.8: resolution: {integrity: sha512-TY1eezMU2zH2ozQoAFAQFOPpvP15g+ZgSfTZt31AUUH/Rxtnz3H+A/Sv1Snw2/amp//omibc+AEkTaA8KUeOLQ==} dev: true - /@types/semver@7.5.7: - resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true /@types/send@0.17.4: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.11.19 + '@types/node': 20.12.6 dev: true /@types/serve-index@1.9.4: @@ -2568,18 +2585,18 @@ packages: '@types/express': 4.17.21 dev: true - /@types/serve-static@1.15.5: - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 - '@types/mime': 3.0.4 - '@types/node': 20.11.19 + '@types/node': 20.12.6 + '@types/send': 0.17.4 dev: true /@types/sockjs@0.3.36: resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.12.6 dev: true /@types/stack-utils@2.0.3: @@ -2593,10 +2610,27 @@ packages: '@types/node': 15.14.9 dev: true + /@types/webpack-env@1.18.4: + resolution: {integrity: sha512-I6e+9+HtWADAWeeJWDFQtdk4EVSAbj6Rtz4q8fJ7mSr1M0jzlFcs8/HZ+Xb5SHzVm1dxH7aUiI+A8kA8Gcrm0A==} + dev: true + + /@types/webpack@5.28.5(webpack-cli@5.1.4): + resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} + dependencies: + '@types/node': 20.12.6 + tapable: 2.2.1 + webpack: 5.91.0(webpack-cli@5.1.4) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + dev: true + /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.12.6 dev: true /@types/yargs-parser@21.0.3: @@ -2609,133 +2643,135 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/eslint-plugin@7.6.0(@typescript-eslint/parser@7.6.0)(eslint@8.57.0)(typescript@5.4.4): + resolution: {integrity: sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/scope-manager': 7.6.0 + '@typescript-eslint/type-utils': 7.6.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/visitor-keys': 7.6.0 debug: 4.3.4 - eslint: 8.56.0 + eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 - natural-compare-lite: 1.4.0 + natural-compare: 1.4.0 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.3.0(typescript@5.4.4) + typescript: 5.4.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser@7.6.0(eslint@8.57.0)(typescript@5.4.4): + resolution: {integrity: sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + '@typescript-eslint/scope-manager': 7.6.0 + '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4) + '@typescript-eslint/visitor-keys': 7.6.0 debug: 4.3.4 - eslint: 8.56.0 - typescript: 5.3.3 + eslint: 8.57.0 + typescript: 5.4.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/scope-manager@7.6.0: + resolution: {integrity: sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w==} + engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/visitor-keys': 7.6.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/type-utils@7.6.0(eslint@8.57.0)(typescript@5.4.4): + resolution: {integrity: sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: '*' + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4) + '@typescript-eslint/utils': 7.6.0(eslint@8.57.0)(typescript@5.4.4) debug: 4.3.4 - eslint: 8.56.0 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.4.4) + typescript: 5.4.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/types@7.6.0: + resolution: {integrity: sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ==} + engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/typescript-estree@7.6.0(typescript@5.4.4): + resolution: {integrity: sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/visitor-keys': 7.6.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 + minimatch: 9.0.4 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.3.0(typescript@5.4.4) + typescript: 5.4.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/utils@7.6.0(eslint@8.57.0)(typescript@5.4.4): + resolution: {integrity: sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.5.7 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - eslint: 8.56.0 - eslint-scope: 5.1.1 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.6.0 + '@typescript-eslint/types': 7.6.0 + '@typescript-eslint/typescript-estree': 7.6.0(typescript@5.4.4) + eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/visitor-keys@7.6.0: + resolution: {integrity: sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw==} + engines: {node: ^18.18.0 || >=20.0.0} dependencies: - '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/types': 7.6.0 eslint-visitor-keys: 3.4.3 dev: true @@ -2743,8 +2779,8 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@webassemblyjs/ast@1.11.6: - resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} + /@webassemblyjs/ast@1.12.1: + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 @@ -2758,8 +2794,8 @@ packages: resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} dev: true - /@webassemblyjs/helper-buffer@1.11.6: - resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==} + /@webassemblyjs/helper-buffer@1.12.1: + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} dev: true /@webassemblyjs/helper-numbers@1.11.6: @@ -2774,13 +2810,13 @@ packages: resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} dev: true - /@webassemblyjs/helper-wasm-section@1.11.6: - resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==} + /@webassemblyjs/helper-wasm-section@1.12.1: + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 dev: true /@webassemblyjs/ieee754@1.11.6: @@ -2799,42 +2835,42 @@ packages: resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} dev: true - /@webassemblyjs/wasm-edit@1.11.6: - resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==} + /@webassemblyjs/wasm-edit@1.12.1: + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-opt': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 - '@webassemblyjs/wast-printer': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 dev: true - /@webassemblyjs/wasm-gen@1.11.6: - resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==} + /@webassemblyjs/wasm-gen@1.12.1: + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wasm-opt@1.11.6: - resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==} + /@webassemblyjs/wasm-opt@1.12.1: + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} dependencies: - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/helper-buffer': 1.11.6 - '@webassemblyjs/wasm-gen': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 dev: true - /@webassemblyjs/wasm-parser@1.11.6: - resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==} + /@webassemblyjs/wasm-parser@1.12.1: + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/helper-api-error': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/ieee754': 1.11.6 @@ -2842,25 +2878,25 @@ packages: '@webassemblyjs/utf8': 1.11.6 dev: true - /@webassemblyjs/wast-printer@1.11.6: - resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==} + /@webassemblyjs/wast-printer@1.12.1: + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} dependencies: - '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 dev: true - /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.90.2): + /@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.91.0): resolution: {integrity: sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==} engines: {node: '>=14.15.0'} peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.90.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@4.15.1)(webpack@5.90.2) + webpack: 5.91.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@5.0.4)(webpack@5.91.0) dev: true - /@webpack-cli/generators@3.0.7(prettier@2.8.8)(webpack-cli@5.1.4)(webpack@5.90.2): + /@webpack-cli/generators@3.0.7(prettier@3.2.5)(webpack-cli@5.1.4)(webpack@5.91.0): resolution: {integrity: sha512-H4dlEX8CzO5EHBYYZQop9x4w6lG9FenSF/1spLRlvRAULDgTs0VfmwOuwp03tTLml9jpMsouuVw6vEN8KpwE/w==} engines: {node: '>=14.15.0'} peerDependencies: @@ -2871,9 +2907,9 @@ packages: prettier: optional: true dependencies: - prettier: 2.8.8 - webpack: 5.90.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@4.15.1)(webpack@5.90.2) + prettier: 3.2.5 + webpack: 5.91.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@5.0.4)(webpack@5.91.0) yeoman-environment: 3.19.3 yeoman-generator: 5.10.0(yeoman-environment@3.19.3) transitivePeerDependencies: @@ -2883,18 +2919,18 @@ packages: - supports-color dev: true - /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.90.2): + /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.91.0): resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} engines: {node: '>=14.15.0'} peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x dependencies: - webpack: 5.90.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@4.15.1)(webpack@5.90.2) + webpack: 5.91.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@5.0.4)(webpack@5.91.0) dev: true - /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.1)(webpack@5.90.2): + /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.0.4)(webpack@5.91.0): resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} engines: {node: '>=14.15.0'} peerDependencies: @@ -2905,9 +2941,9 @@ packages: webpack-dev-server: optional: true dependencies: - webpack: 5.90.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@4.15.1)(webpack@5.90.2) - webpack-dev-server: 4.15.1(webpack-cli@5.1.4)(webpack@5.90.2) + webpack: 5.91.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@5.0.4)(webpack@5.91.0) + webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.91.0) dev: true /@xtuc/ieee754@1.2.0: @@ -3144,13 +3180,14 @@ packages: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 dev: true @@ -3160,25 +3197,15 @@ packages: engines: {node: '>=8'} dev: true - /array.prototype.filter@1.0.3: - resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==} + /array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 - es-array-method-boxes-properly: 1.0.0 - is-string: 1.0.7 - dev: true - - /array.prototype.findlastindex@1.2.4: - resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 dev: true @@ -3188,7 +3215,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: true @@ -3198,7 +3225,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 dev: true @@ -3209,11 +3236,11 @@ packages: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 dev: true /arrify@2.0.1: @@ -3235,22 +3262,24 @@ packages: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: true - /available-typed-arrays@1.0.6: - resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 dev: true - /babel-jest@29.7.0(@babel/core@7.23.9): + /babel-jest@29.7.0(@babel/core@7.24.4): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.9) + babel-preset-jest: 29.6.3(@babel/core@7.24.4) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -3262,7 +3291,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.0 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -3275,77 +3304,77 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.23.9 - '@babel/types': 7.23.9 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.5 dev: true - /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.9): - resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} + /babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.4): + resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.23.5 - '@babel/core': 7.23.9 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) + '@babel/compat-data': 7.24.4 + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.9.0(@babel/core@7.23.9): - resolution: {integrity: sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==} + /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.4): + resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) - core-js-compat: 3.36.0 + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) + core-js-compat: 3.36.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.5(@babel/core@7.23.9): - resolution: {integrity: sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==} + /babel-plugin-polyfill-regenerator@0.6.1(@babel/core@7.24.4): + resolution: {integrity: sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.23.9) + '@babel/core': 7.24.4 + '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.4) transitivePeerDependencies: - supports-color dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.9): + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.4): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.9) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.9) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.23.9): + '@babel/core': 7.24.4 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.4) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.24.4): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) dev: true /babel@6.23.0: @@ -3354,8 +3383,8 @@ packages: hasBin: true dev: true - /babylonjs-gltf2interface@6.43.0: - resolution: {integrity: sha512-+orCb4giE41Ysl8d2ZOeYCRBsT6FnmDwkW9+sHcEACUEpdtFeTShZ+ckucDAB/Ia2e3ah9F2hADbGA/8TfFngg==} + /babylonjs-gltf2interface@7.1.0: + resolution: {integrity: sha512-44UnRGFj/kp6/MxB6SU5ThxYBjm9W0aYGkDbtSoPW2ZuWd4uTCjCKe8oS3fhsqXcZ5+K+rQVsHb785hxC4zRcw==} dev: true /balanced-match@1.0.2: @@ -3397,8 +3426,8 @@ packages: write-file-atomic: 4.0.2 dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} dev: true @@ -3415,8 +3444,8 @@ packages: readable-stream: 3.6.2 dev: true - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + /body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 @@ -3428,7 +3457,7 @@ packages: iconv-lite: 0.4.24 on-finished: 2.4.1 qs: 6.11.0 - raw-body: 2.5.1 + raw-body: 2.5.2 type-is: 1.6.18 unpipe: 1.0.0 transitivePeerDependencies: @@ -3471,8 +3500,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001588 - electron-to-chromium: 1.4.673 + caniuse-lite: 1.0.30001607 + electron-to-chromium: 1.4.730 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) dev: true @@ -3512,12 +3541,19 @@ packages: resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} dev: true - /builtins@5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + /builtins@5.1.0: + resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} dependencies: semver: 7.6.0 dev: true + /bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + dependencies: + run-applescript: 7.0.0 + dev: true + /bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -3548,7 +3584,7 @@ packages: promise-inflight: 1.0.1 rimraf: 3.0.2 ssri: 8.0.1 - tar: 6.2.0 + tar: 6.2.1 unique-filename: 1.1.1 transitivePeerDependencies: - bluebird @@ -3574,7 +3610,7 @@ packages: promise-inflight: 1.0.1 rimraf: 3.0.2 ssri: 9.0.1 - tar: 6.2.0 + tar: 6.2.1 unique-filename: 2.0.1 transitivePeerDependencies: - bluebird @@ -3586,7 +3622,7 @@ packages: dependencies: '@npmcli/fs': 3.1.0 fs-minipass: 3.0.3 - glob: 10.3.10 + glob: 10.3.12 lru-cache: 7.18.3 minipass: 7.0.4 minipass-collect: 1.0.2 @@ -3594,7 +3630,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.5 - tar: 6.2.0 + tar: 6.2.1 unique-filename: 3.0.0 dev: true @@ -3606,7 +3642,7 @@ packages: es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 - set-function-length: 1.2.1 + set-function-length: 1.2.2 dev: true /callsites@3.1.0: @@ -3631,8 +3667,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001588: - resolution: {integrity: sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==} + /caniuse-lite@1.0.30001607: + resolution: {integrity: sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==} dev: true /chalk@2.4.2: @@ -3909,8 +3945,8 @@ packages: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: true - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} dev: true @@ -3920,8 +3956,8 @@ packages: is-what: 3.14.1 dev: true - /core-js-compat@3.36.0: - resolution: {integrity: sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==} + /core-js-compat@3.36.1: + resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==} dependencies: browserslist: 4.23.0 dev: true @@ -3935,7 +3971,7 @@ packages: engines: {node: '>= 0.4.0'} dev: true - /create-jest@29.7.0(@types/node@20.11.19)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@20.12.6)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3944,7 +3980,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.12.6)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3967,27 +4003,27 @@ packages: which: 2.0.2 dev: true - /css-loader@6.10.0(webpack@5.90.2): - resolution: {integrity: sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==} - engines: {node: '>= 12.13.0'} + /css-loader@7.1.0(webpack@5.91.0): + resolution: {integrity: sha512-VFNj47MAG84MqYDdh9puJG0h98Xs7gEYaX0aeGkfjYqBLB0seOE325sVbqWwaNu3hMZwEP4bB+F4gvF+A63qMA==} + engines: {node: '>= 18.12.0'} peerDependencies: '@rspack/core': 0.x || 1.x - webpack: ^5.0.0 + webpack: ^5.27.0 peerDependenciesMeta: '@rspack/core': optional: true webpack: optional: true dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.35) - postcss-modules-local-by-default: 4.0.4(postcss@8.4.35) - postcss-modules-scope: 3.1.1(postcss@8.4.35) - postcss-modules-values: 4.0.0(postcss@8.4.35) + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) + postcss-modules-scope: 3.2.0(postcss@8.4.38) + postcss-modules-values: 4.0.0(postcss@8.4.38) postcss-value-parser: 4.2.0 semver: 7.6.0 - webpack: 5.90.2(webpack-cli@5.1.4) + webpack: 5.91.0(webpack-cli@5.1.4) dev: true /css-select@4.3.0: @@ -4016,6 +4052,33 @@ packages: engines: {node: '>=8'} dev: true + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + /dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} dev: true @@ -4082,6 +4145,19 @@ packages: engines: {node: '>=0.10.0'} dev: true + /default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + dev: true + + /default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + dev: true + /default-gateway@6.0.3: resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} engines: {node: '>= 10'} @@ -4104,9 +4180,9 @@ packages: gopd: 1.0.1 dev: true - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} + /define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} dev: true /define-properties@1.2.1: @@ -4183,7 +4259,7 @@ packages: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} dependencies: - '@leichtgewicht/ip-codec': 2.0.4 + '@leichtgewicht/ip-codec': 2.0.5 dev: true /doctrine@2.1.0: @@ -4240,8 +4316,8 @@ packages: tslib: 2.6.2 dev: true - /dotenv@16.4.4: - resolution: {integrity: sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==} + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} dev: true @@ -4261,8 +4337,8 @@ packages: jake: 10.8.7 dev: true - /electron-to-chromium@1.4.673: - resolution: {integrity: sha512-zjqzx4N7xGdl5468G+vcgzDhaHkaYgVcf9MqgexcTqsl2UHSCmOj/Bi3HAprg4BZCpC7HyD8a6nZl6QAZf72gw==} + /electron-to-chromium@1.4.730: + resolution: {integrity: sha512-oJRPo82XEqtQAobHpJIR3zW5YO3sSRRkPz2an4yxi1UvqhsGm54vR/wzTFV74a3soDOJ8CKW7ajOOX5ESzddwg==} dev: true /emittery@0.13.1: @@ -4296,8 +4372,8 @@ packages: dev: true optional: true - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + /enhanced-resolve@5.16.0: + resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 @@ -4318,8 +4394,8 @@ packages: engines: {node: '>=6'} dev: true - /envinfo@7.11.1: - resolution: {integrity: sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==} + /envinfo@7.12.0: + resolution: {integrity: sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==} engines: {node: '>=4'} hasBin: true dev: true @@ -4347,17 +4423,21 @@ packages: resolution: {integrity: sha512-YxIFEJuhgcICugOUvRx5th0UM+ActZ9sjY0QJmeVwsQdvosZ7kYzc9QqS0Da3R5iUmgU5meGIxh0xBeZpMVeLw==} dev: true - /es-abstract@1.22.4: - resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.6 + available-typed-arrays: 1.0.7 call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 es-define-property: 1.0.0 es-errors: 1.3.0 - es-set-tostringtag: 2.0.2 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 get-intrinsic: 1.2.4 @@ -4365,15 +4445,16 @@ packages: globalthis: 1.0.3 gopd: 1.0.1 has-property-descriptors: 1.0.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.1 + hasown: 2.0.2 internal-slot: 1.0.7 is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 @@ -4381,21 +4462,17 @@ packages: object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.0 + safe-array-concat: 1.1.2 safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.1 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.1 - typed-array-length: 1.0.4 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.14 - dev: true - - /es-array-method-boxes-properly@1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + which-typed-array: 1.1.15 dev: true /es-define-property@1.0.0: @@ -4410,23 +4487,30 @@ packages: engines: {node: '>= 0.4'} dev: true - /es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} + /es-module-lexer@1.5.0: + resolution: {integrity: sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==} + dev: true + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 dev: true - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 - hasown: 2.0.1 + hasown: 2.0.2 dev: true /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - hasown: 2.0.1 + hasown: 2.0.2 dev: true /es-to-primitive@1.2.1: @@ -4472,8 +4556,8 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -4493,15 +4577,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.4) debug: 3.2.7 - eslint: 8.56.0 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.56.0): + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.6.0)(eslint@8.57.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -4511,23 +4595,23 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.56.0)(typescript@5.3.3) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.4 + '@typescript-eslint/parser': 7.6.0(eslint@8.57.0)(typescript@5.4.4) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.56.0 + eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) - hasown: 2.0.1 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.6.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.2 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 transitivePeerDependencies: @@ -4557,15 +4641,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 + '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -4702,16 +4786,16 @@ packages: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} dev: true - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + /express@4.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1 + body-parser: 1.20.2 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.5.0 + cookie: 0.6.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 @@ -4881,7 +4965,7 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.9 + flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 dev: true @@ -4891,12 +4975,12 @@ packages: hasBin: true dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true - /follow-redirects@1.15.5: - resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + /follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -4943,10 +5027,6 @@ packages: minipass: 7.0.4 dev: true - /fs-monkey@1.0.5: - resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} - dev: true - /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -4969,7 +5049,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 functions-have-names: 1.2.3 dev: true @@ -5022,9 +5102,9 @@ packages: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.1 + hasown: 2.0.2 dev: true /get-package-type@0.1.0: @@ -5073,16 +5153,16 @@ packages: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} dev: true - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + /glob@10.3.12: + resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 - minimatch: 9.0.3 + minimatch: 9.0.4 minipass: 7.0.4 - path-scurry: 1.10.1 + path-scurry: 1.10.2 dev: true /glob@7.2.3: @@ -5185,8 +5265,8 @@ packages: es-define-property: 1.0.0 dev: true - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} dev: true @@ -5206,8 +5286,8 @@ packages: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} dev: true - /hasown@2.0.1: - resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -5252,23 +5332,23 @@ packages: whatwg-encoding: 2.0.0 dev: true - /html-entities@2.4.0: - resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==} + /html-entities@2.5.2: + resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} dev: true /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /html-loader@4.2.0(webpack@5.90.2): - resolution: {integrity: sha512-OxCHD3yt+qwqng2vvcaPApCEvbx+nXWu+v69TYHx1FO8bffHn/JjHtE3TTQZmHjwvnJe4xxzuecetDVBrQR1Zg==} - engines: {node: '>= 14.15.0'} + /html-loader@5.0.0(webpack@5.91.0): + resolution: {integrity: sha512-puaGKdjdVVIFRtgIC2n5dt5bt0N5j6heXlAQZ4Do1MLjHmOT1gCE1Ogg7XZNeJlnOVHHsrZKGs5dfh+XwZ3XPw==} + engines: {node: '>= 18.12.0'} peerDependencies: webpack: ^5.0.0 dependencies: html-minifier-terser: 7.2.0 parse5: 7.1.2 - webpack: 5.90.2(webpack-cli@5.1.4) + webpack: 5.91.0(webpack-cli@5.1.4) dev: true /html-minifier-terser@6.1.0: @@ -5282,7 +5362,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.27.1 + terser: 5.30.3 dev: true /html-minifier-terser@7.2.0: @@ -5296,10 +5376,10 @@ packages: entities: 4.5.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.27.1 + terser: 5.30.3 dev: true - /html-webpack-plugin@5.6.0(webpack@5.90.2): + /html-webpack-plugin@5.6.0(webpack@5.91.0): resolution: {integrity: sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==} engines: {node: '>=10.13.0'} peerDependencies: @@ -5316,7 +5396,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.90.2(webpack-cli@5.1.4) + webpack: 5.91.0(webpack-cli@5.1.4) dev: true /htmlparser2@6.1.0: @@ -5407,7 +5487,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.5 + follow-redirects: 1.15.6 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -5457,6 +5537,12 @@ packages: ms: 2.1.3 dev: true + /i18next@23.11.1: + resolution: {integrity: sha512-mXw4A24BiPZKRsbb9ewgSvjYd6fxFCNwJyfK6nYfSTIAX2GkCWcb598m3DFkDZmqADatvuASrKo6qwORz3VwTQ==} + dependencies: + '@babel/runtime': 7.24.4 + dev: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -5471,13 +5557,13 @@ packages: safer-buffer: 2.1.2 dev: true - /icss-utils@5.1.0(postcss@8.4.35): + /icss-utils@5.1.0(postcss@8.4.38): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true /ieee754@1.2.1: @@ -5495,7 +5581,7 @@ packages: resolution: {integrity: sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minimatch: 9.0.3 + minimatch: 9.0.4 dev: true /ignore@5.3.1: @@ -5587,8 +5673,8 @@ packages: engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 - hasown: 2.0.1 - side-channel: 1.0.5 + hasown: 2.0.2 + side-channel: 1.0.6 dev: true /interpret@1.4.0: @@ -5645,7 +5731,7 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 dev: true /is-boolean-object@1.1.2: @@ -5664,7 +5750,14 @@ packages: /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - hasown: 2.0.1 + hasown: 2.0.2 + dev: true + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 dev: true /is-date-object@1.0.5: @@ -5674,9 +5767,9 @@ packages: has-tostringtag: 1.0.2 dev: true - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} + /is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true dev: true @@ -5702,6 +5795,14 @@ packages: is-extglob: 2.1.1 dev: true + /is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + dependencies: + is-docker: 3.0.0 + dev: true + /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -5711,11 +5812,16 @@ packages: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} dev: true - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} dev: true + /is-network-error@1.1.0: + resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} + engines: {node: '>=16'} + dev: true + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -5770,8 +5876,9 @@ packages: scoped-regex: 2.1.0 dev: true - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 dev: true @@ -5799,7 +5906,7 @@ packages: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.14 + which-typed-array: 1.1.15 dev: true /is-unicode-supported@0.1.0: @@ -5821,11 +5928,11 @@ packages: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} dev: true - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + /is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} dependencies: - is-docker: 2.2.1 + is-inside-container: 1.0.0 dev: true /isarray@1.0.0: @@ -5864,8 +5971,8 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.9 - '@babel/parser': 7.23.9 + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -5873,12 +5980,12 @@ packages: - supports-color dev: true - /istanbul-lib-instrument@6.0.1: - resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} + /istanbul-lib-instrument@6.0.2: + resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.23.9 - '@babel/parser': 7.23.9 + '@babel/core': 7.24.4 + '@babel/parser': 7.24.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.0 @@ -5906,8 +6013,8 @@ packages: - supports-color dev: true - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 @@ -5951,7 +6058,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.19 + '@types/node': 20.12.6 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -5964,7 +6071,7 @@ packages: jest-util: 29.7.0 p-limit: 3.1.0 pretty-format: 29.7.0 - pure-rand: 6.0.4 + pure-rand: 6.1.0 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: @@ -5972,7 +6079,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.11.19)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@20.12.6)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5986,10 +6093,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@20.12.6)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.12.6)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -6000,7 +6107,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.11.19)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@20.12.6)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -6012,11 +6119,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.19 - babel-jest: 29.7.0(@babel/core@7.23.9) + '@types/node': 20.12.6 + babel-jest: 29.7.0(@babel/core@7.24.4) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -6035,7 +6142,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@20.12.6)(typescript@5.4.4) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -6076,7 +6183,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.19 + '@types/node': 20.12.6 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -6092,7 +6199,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.11.19 + '@types/node': 20.12.6 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -6127,7 +6234,7 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -6143,7 +6250,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.19 + '@types/node': 20.12.6 jest-util: 29.7.0 dev: true @@ -6198,7 +6305,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.19 + '@types/node': 20.12.6 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6229,7 +6336,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.19 + '@types/node': 20.12.6 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -6252,15 +6359,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.9 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) - '@babel/types': 7.23.9 + '@babel/core': 7.24.4 + '@babel/generator': 7.24.4 + '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.4) + '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.4) + '@babel/types': 7.24.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.9) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -6285,7 +6392,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.19 + '@types/node': 20.12.6 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6310,7 +6417,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.19 + '@types/node': 20.12.6 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6322,7 +6429,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.12.6 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -6331,13 +6438,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.11.19 + '@types/node': 20.12.6 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.11.19)(ts-node@10.9.2): + /jest@29.7.0(@types/node@20.12.6)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -6350,7 +6457,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@20.12.6)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6761,11 +6868,11 @@ packages: vinyl-file: 3.0.0 dev: true - /memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + /memfs@4.8.1: + resolution: {integrity: sha512-7q/AdPzf2WpwPlPL4v1kE2KsJsHl7EF4+hAeVzlyanr2+YnR21NVn9mDqo+7DEaKDRsQy8nvxPlKH4WqMtiO0w==} engines: {node: '>= 4.0.0'} dependencies: - fs-monkey: 1.0.5 + tslib: 2.6.2 dev: true /merge-descriptors@1.0.1: @@ -6817,15 +6924,15 @@ packages: engines: {node: '>=6'} dev: true - /mini-css-extract-plugin@2.8.0(webpack@5.90.2): - resolution: {integrity: sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg==} + /mini-css-extract-plugin@2.8.1(webpack@5.91.0): + resolution: {integrity: sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.90.2(webpack-cli@5.1.4) + webpack: 5.91.0(webpack-cli@5.1.4) dev: true /minimalistic-assert@1.0.1: @@ -6852,8 +6959,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + /minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -7050,10 +7157,6 @@ packages: hasBin: true dev: true - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -7115,7 +7218,7 @@ packages: npmlog: 6.0.2 rimraf: 3.0.2 semver: 7.6.0 - tar: 6.2.0 + tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: - bluebird @@ -7136,7 +7239,7 @@ packages: npmlog: 6.0.2 rimraf: 3.0.2 semver: 7.6.0 - tar: 6.2.0 + tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: - bluebird @@ -7374,32 +7477,32 @@ packages: object-keys: 1.1.1 dev: true - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /object.groupby@1.0.2: - resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==} + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} dependencies: - array.prototype.filter: 1.0.3 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 - es-errors: 1.3.0 + es-abstract: 1.23.3 dev: true - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-object-atoms: 1.0.0 dev: true /obuf@1.1.2: @@ -7431,13 +7534,14 @@ packages: mimic-fn: 2.1.0 dev: true - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + /open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 dev: true /opener@1.5.2: @@ -7525,11 +7629,12 @@ packages: p-timeout: 3.2.0 dev: true - /p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} + /p-retry@6.2.0: + resolution: {integrity: sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==} + engines: {node: '>=16.17'} dependencies: - '@types/retry': 0.12.0 + '@types/retry': 0.12.2 + is-network-error: 1.1.0 retry: 0.13.1 dev: true @@ -7578,7 +7683,7 @@ packages: read-package-json-fast: 2.0.3 rimraf: 3.0.2 ssri: 8.0.1 - tar: 6.2.0 + tar: 6.2.1 transitivePeerDependencies: - bluebird - supports-color @@ -7606,7 +7711,7 @@ packages: read-package-json-fast: 3.0.2 sigstore: 1.9.0 ssri: 10.0.5 - tar: 6.2.0 + tar: 6.2.1 transitivePeerDependencies: - bluebird - supports-color @@ -7639,7 +7744,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -7687,8 +7792,8 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + /path-scurry@1.10.2: + resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} dependencies: lru-cache: 10.2.0 @@ -7746,7 +7851,12 @@ packages: - supports-color dev: true - /postcss-load-config@3.1.4(postcss@8.4.35)(ts-node@10.9.2): + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + + /postcss-load-config@3.1.4(postcss@8.4.38)(ts-node@10.9.2): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -7759,54 +7869,54 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.35 - ts-node: 10.9.2(@types/node@20.11.19)(typescript@5.3.3) + postcss: 8.4.38 + ts-node: 10.9.2(@types/node@20.12.6)(typescript@5.4.4) yaml: 1.10.2 dev: true - /postcss-modules-extract-imports@3.0.0(postcss@8.4.35): - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.35 + postcss: 8.4.38 dev: true - /postcss-modules-local-by-default@4.0.4(postcss@8.4.35): - resolution: {integrity: sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==} + /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 postcss-value-parser: 4.2.0 dev: true - /postcss-modules-scope@3.1.1(postcss@8.4.35): - resolution: {integrity: sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==} + /postcss-modules-scope@3.2.0(postcss@8.4.38): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.38 + postcss-selector-parser: 6.0.16 dev: true - /postcss-modules-values@4.0.0(postcss@8.4.35): + /postcss-modules-values@4.0.0(postcss@8.4.38): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 dev: true - /postcss-selector-parser@6.0.15: - resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + /postcss-selector-parser@6.0.16: + resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -7817,17 +7927,17 @@ packages: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 picocolors: 1.0.0 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true - /preferred-pm@3.1.2: - resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} + /preferred-pm@3.1.3: + resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} engines: {node: '>=10'} dependencies: find-up: 5.0.0 @@ -7841,9 +7951,9 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} + /prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} + engines: {node: '>=14'} hasBin: true dev: true @@ -7937,22 +8047,22 @@ packages: engines: {node: '>=6'} dev: true - /pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + /pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} dev: true /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.5 + side-channel: 1.0.6 dev: true - /qs@6.11.2: - resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + /qs@6.12.0: + resolution: {integrity: sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.5 + side-channel: 1.0.6 dev: true /queue-microtask@1.2.3: @@ -7970,8 +8080,8 @@ packages: engines: {node: '>= 0.6'} dev: true - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} dependencies: bytes: 3.1.2 @@ -7980,7 +8090,7 @@ packages: unpipe: 1.0.0 dev: true - /raw-loader@4.0.2(webpack@5.90.2): + /raw-loader@4.0.2(webpack@5.91.0): resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -7988,7 +8098,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.90.2(webpack-cli@5.1.4) + webpack: 5.91.0(webpack-cli@5.1.4) dev: true /react-is@18.2.0: @@ -8020,7 +8130,7 @@ packages: resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - glob: 10.3.10 + glob: 10.3.12 json-parse-even-better-errors: 3.0.1 normalize-package-data: 5.0.0 npm-normalize-package-bin: 3.0.1 @@ -8126,7 +8236,7 @@ packages: /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.23.9 + '@babel/runtime': 7.24.4 dev: true /regexp.prototype.flags@1.5.2: @@ -8136,7 +8246,7 @@ packages: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 - set-function-name: 2.0.1 + set-function-name: 2.0.2 dev: true /regexpu-core@5.3.2: @@ -8261,6 +8371,19 @@ packages: glob: 7.2.3 dev: true + /rimraf@5.0.5: + resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} + engines: {node: '>=14'} + hasBin: true + dependencies: + glob: 10.3.12 + dev: true + + /run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + dev: true + /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -8278,8 +8401,8 @@ packages: tslib: 2.6.2 dev: true - /safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} dependencies: call-bind: 1.0.7 @@ -8309,17 +8432,17 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /sass-loader@13.3.3(sass@1.71.0)(webpack@5.90.2): - resolution: {integrity: sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==} - engines: {node: '>= 14.15.0'} + /sass-loader@14.1.1(sass@1.74.1)(webpack@5.91.0): + resolution: {integrity: sha512-QX8AasDg75monlybel38BZ49JP5Z+uSKfKwF2rO7S74BywaRmGQMUBw9dtkS+ekyM/QnP+NOrRYq8ABMZ9G8jw==} + engines: {node: '>= 18.12.0'} peerDependencies: - fibers: '>= 3.1.0' + '@rspack/core': 0.x || 1.x node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 sass: ^1.3.0 sass-embedded: '*' webpack: ^5.0.0 peerDependenciesMeta: - fibers: + '@rspack/core': optional: true node-sass: optional: true @@ -8327,20 +8450,22 @@ packages: optional: true sass-embedded: optional: true + webpack: + optional: true dependencies: neo-async: 2.6.2 - sass: 1.71.0 - webpack: 5.90.2(webpack-cli@5.1.4) + sass: 1.74.1 + webpack: 5.91.0(webpack-cli@5.1.4) dev: true - /sass@1.71.0: - resolution: {integrity: sha512-HKKIKf49Vkxlrav3F/w6qRuPcmImGVbIXJ2I3Kg0VMA+3Bav+8yE9G5XmP5lMj6nl4OlqbPftGAscNaNu28b8w==} + /sass@1.74.1: + resolution: {integrity: sha512-w0Z9p/rWZWelb88ISOLyvqTWGmtmu2QJICqDBGyNnfG4OUnPX9BBjjYIXUpXCMOOg5MQWNpqzt876la1fsTvUA==} engines: {node: '>=14.0.0'} hasBin: true dependencies: chokidar: 3.6.0 immutable: 4.3.5 - source-map-js: 1.0.2 + source-map-js: 1.2.0 dev: true /sax@1.3.0: @@ -8463,8 +8588,8 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-function-length@1.2.1: - resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 @@ -8475,11 +8600,12 @@ packages: has-property-descriptors: 1.0.2 dev: true - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 dev: true @@ -8534,8 +8660,8 @@ packages: vscode-textmate: 8.0.0 dev: true - /side-channel@1.0.5: - resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -8595,7 +8721,7 @@ packages: dependencies: agent-base: 6.0.2 debug: 4.3.4 - socks: 2.7.3 + socks: 2.8.2 transitivePeerDependencies: - supports-color dev: true @@ -8606,13 +8732,13 @@ packages: dependencies: agent-base: 6.0.2 debug: 4.3.4 - socks: 2.7.3 + socks: 2.8.2 transitivePeerDependencies: - supports-color dev: true - /socks@2.7.3: - resolution: {integrity: sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==} + /socks@2.8.2: + resolution: {integrity: sha512-5Hvyu6Md91ooZzdrN/bSn/zlulFaRHrk2/6IY6qQNa3oVHTiG+CKxBV5PynKCGf31ar+3/hyPvlHFAYaBEOa3A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} dependencies: ip-address: 9.0.5 @@ -8626,8 +8752,8 @@ packages: is-plain-obj: 2.1.0 dev: true - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + /source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} dev: true @@ -8779,29 +8905,31 @@ packages: strip-ansi: 7.1.0 dev: true - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-object-atoms: 1.0.0 dev: true - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-object-atoms: 1.0.0 dev: true /string_decoder@1.1.1: @@ -8872,13 +9000,13 @@ packages: engines: {node: '>=8'} dev: true - /style-loader@3.3.4(webpack@5.90.2): - resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} - engines: {node: '>= 12.13.0'} + /style-loader@4.0.0(webpack@5.91.0): + resolution: {integrity: sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==} + engines: {node: '>= 18.12.0'} peerDependencies: - webpack: ^5.0.0 + webpack: ^5.27.0 dependencies: - webpack: 5.90.2(webpack-cli@5.1.4) + webpack: 5.91.0(webpack-cli@5.1.4) dev: true /stylus@0.62.0: @@ -8925,8 +9053,8 @@ packages: engines: {node: '>=6'} dev: true - /tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + /tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} dependencies: chownr: 2.0.0 @@ -8941,7 +9069,7 @@ packages: resolution: {integrity: sha512-5YTRxvkxp//MERkp7ABzFfNViKXUoWxpVTGAI80d4sV2w5TDcLzh7ZkemXQGYvwQq4+yXdRwwJzrbPac4k0nrA==} dev: true - /terser-webpack-plugin@5.3.10(webpack@5.90.2): + /terser-webpack-plugin@5.3.10(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -8957,20 +9085,20 @@ packages: uglify-js: optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.27.1 - webpack: 5.90.2(webpack-cli@5.1.4) + terser: 5.30.3 + webpack: 5.91.0(webpack-cli@5.1.4) dev: true - /terser@5.27.1: - resolution: {integrity: sha512-29wAr6UU/oQpnTw5HoadwjUZnFQXGdOfj0LjZ4sVxzqwHh/QVkvr7m8y9WoR4iN3FRitVduTc6KdjcW38Npsug==} + /terser@5.30.3: + resolution: {integrity: sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==} engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.5 + '@jridgewell/source-map': 0.3.6 acorn: 8.11.3 commander: 2.20.3 source-map-support: 0.5.21 @@ -9038,7 +9166,16 @@ packages: resolution: {integrity: sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==} dev: true - /ts-jest@29.1.2(@babel/core@7.23.9)(@jest/types@29.6.3)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.3.3): + /ts-api-utils@1.3.0(typescript@5.4.4): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.4.4 + dev: true + + /ts-jest@29.1.2(@babel/core@7.24.4)(@jest/types@29.6.3)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.4.4): resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -9059,22 +9196,22 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.23.9 + '@babel/core': 7.24.4 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.23.9) + babel-jest: 29.7.0(@babel/core@7.24.4) bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.11.19)(ts-node@10.9.2) + jest: 29.7.0(@types/node@20.12.6)(ts-node@10.9.2) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.0 - typescript: 5.3.3 + typescript: 5.4.4 yargs-parser: 21.1.1 dev: true - /ts-loader@9.5.1(typescript@5.3.3)(webpack@5.90.2): + /ts-loader@9.5.1(typescript@5.4.4)(webpack@5.91.0): resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -9082,15 +9219,15 @@ packages: webpack: ^5.0.0 dependencies: chalk: 4.1.2 - enhanced-resolve: 5.15.0 + enhanced-resolve: 5.16.0 micromatch: 4.0.5 semver: 7.6.0 source-map: 0.7.4 - typescript: 5.3.3 - webpack: 5.90.2(webpack-cli@5.1.4) + typescript: 5.4.4 + webpack: 5.91.0(webpack-cli@5.1.4) dev: true - /ts-node@10.9.2(@types/node@20.11.19)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.12.6)(typescript@5.4.4): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -9105,18 +9242,18 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.11.19 + '@types/node': 20.12.6 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.3 + typescript: 5.4.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -9145,24 +9282,10 @@ packages: strip-bom: 3.0.0 dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true - /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: true - /tsutils@3.21.0(typescript@5.3.3): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 5.3.3 - dev: true - /tuf-js@1.1.7: resolution: {integrity: sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -9214,8 +9337,8 @@ packages: mime-types: 2.1.35 dev: true - /typed-array-buffer@1.0.1: - resolution: {integrity: sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==} + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 @@ -9223,97 +9346,102 @@ packages: is-typed-array: 1.1.13 dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 + gopd: 1.0.1 + has-proto: 1.0.3 is-typed-array: 1.1.13 dev: true - /typed-array-byte-offset@1.0.1: - resolution: {integrity: sha512-tcqKMrTRXjqvHN9S3553NPCaGL0VPgFI92lXszmrE8DMhiDPLBYLlvo8Uu4WZAAX/aGqp/T1sbA4ph8EWjDF9Q==} + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.6 + available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-proto: 1.0.1 + has-proto: 1.0.3 is-typed-array: 1.1.13 dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 dev: true - /typedoc-material-theme@1.0.2(typedoc@0.25.8): + /typedoc-material-theme@1.0.2(typedoc@0.25.13): resolution: {integrity: sha512-/nH/twYeHrnz5sZaaXzYJ85EOgKqnbl1ivzBKmuEAga1dBsARttwQUTPKAT7XrCPD+rRcoqxuCOdXZ6EGiqRQA==} engines: {node: '>=18.0.0', npm: '>=8.6.0'} peerDependencies: typedoc: ^0.25.3 dependencies: '@material/material-color-utilities': 0.2.7 - typedoc: 0.25.8(typescript@5.3.3) + typedoc: 0.25.13(typescript@5.4.4) dev: true - /typedoc-plugin-missing-exports@2.2.0(typedoc@0.25.8): + /typedoc-plugin-missing-exports@2.2.0(typedoc@0.25.13): resolution: {integrity: sha512-2+XR1IcyQ5UwXZVJe9NE6HrLmNufT9i5OwoIuuj79VxuA3eYq+Y6itS9rnNV1D7UeQnUSH8kISYD73gHE5zw+w==} peerDependencies: typedoc: 0.24.x || 0.25.x dependencies: - typedoc: 0.25.8(typescript@5.3.3) + typedoc: 0.25.13(typescript@5.4.4) dev: true - /typedoc@0.25.8(typescript@5.3.3): - resolution: {integrity: sha512-mh8oLW66nwmeB9uTa0Bdcjfis+48bAjSH3uqdzSuSawfduROQLlXw//WSNZLYDdhmMVB7YcYZicq6e8T0d271A==} + /typedoc@0.25.13(typescript@5.4.4): + resolution: {integrity: sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==} engines: {node: '>= 16'} hasBin: true peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 9.0.3 + minimatch: 9.0.4 shiki: 0.14.7 - typescript: 5.3.3 + typescript: 5.4.4 dev: true - /typescript-plugin-css-modules@5.1.0(ts-node@10.9.2)(typescript@5.3.3): + /typescript-plugin-css-modules@5.1.0(ts-node@10.9.2)(typescript@5.4.4): resolution: {integrity: sha512-6h+sLBa4l+XYSTn/31vZHd/1c3SvAbLpobY6FxDiUOHJQG1eD9Gh3eCs12+Eqc+TCOAdxcO+zAPvUq0jBfdciw==} peerDependencies: typescript: '>=4.0.0' dependencies: '@types/postcss-modules-local-by-default': 4.0.2 '@types/postcss-modules-scope': 3.0.4 - dotenv: 16.4.4 - icss-utils: 5.1.0(postcss@8.4.35) + dotenv: 16.4.5 + icss-utils: 5.1.0(postcss@8.4.38) less: 4.2.0 lodash.camelcase: 4.3.0 - postcss: 8.4.35 - postcss-load-config: 3.1.4(postcss@8.4.35)(ts-node@10.9.2) - postcss-modules-extract-imports: 3.0.0(postcss@8.4.35) - postcss-modules-local-by-default: 4.0.4(postcss@8.4.35) - postcss-modules-scope: 3.1.1(postcss@8.4.35) + postcss: 8.4.38 + postcss-load-config: 3.1.4(postcss@8.4.38)(ts-node@10.9.2) + postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) + postcss-modules-scope: 3.2.0(postcss@8.4.38) reserved-words: 0.1.2 - sass: 1.71.0 - source-map-js: 1.0.2 + sass: 1.74.1 + source-map-js: 1.2.0 stylus: 0.62.0 tsconfig-paths: 4.2.0 - typescript: 5.3.3 + typescript: 5.4.4 transitivePeerDependencies: - supports-color - ts-node dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /typescript@5.4.4: + resolution: {integrity: sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -9358,7 +9486,7 @@ packages: resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} engines: {node: '>= 0.8.0'} dependencies: - qs: 6.11.2 + qs: 6.12.0 dev: true /unique-filename@1.1.1: @@ -9462,7 +9590,7 @@ packages: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.22 + '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 dev: true @@ -9484,7 +9612,7 @@ packages: resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - builtins: 5.0.1 + builtins: 5.1.0 dev: true /vary@1.1.2: @@ -9533,8 +9661,8 @@ packages: makeerror: 1.0.12 dev: true - /watchpack@2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + /watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 @@ -9557,7 +9685,7 @@ packages: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true - /webpack-cli@5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@4.15.1)(webpack@5.90.2): + /webpack-cli@5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@5.0.4)(webpack@5.91.0): resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} engines: {node: '>=14.15.0'} hasBin: true @@ -9575,43 +9703,47 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.90.2) - '@webpack-cli/generators': 3.0.7(prettier@2.8.8)(webpack-cli@5.1.4)(webpack@5.90.2) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.90.2) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.1)(webpack@5.90.2) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.91.0) + '@webpack-cli/generators': 3.0.7(prettier@3.2.5)(webpack-cli@5.1.4)(webpack@5.91.0) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.91.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@5.0.4)(webpack@5.91.0) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.3 - envinfo: 7.11.1 + envinfo: 7.12.0 fastest-levenshtein: 1.0.16 import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.90.2(webpack-cli@5.1.4) - webpack-dev-server: 4.15.1(webpack-cli@5.1.4)(webpack@5.90.2) + webpack: 5.91.0(webpack-cli@5.1.4) + webpack-dev-server: 5.0.4(webpack-cli@5.1.4)(webpack@5.91.0) webpack-merge: 5.10.0 dev: true - /webpack-dev-middleware@5.3.3(webpack@5.90.2): - resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} - engines: {node: '>= 12.13.0'} + /webpack-dev-middleware@7.2.1(webpack@5.91.0): + resolution: {integrity: sha512-hRLz+jPQXo999Nx9fXVdKlg/aehsw1ajA9skAneGmT03xwmyuhvF93p6HUKKbWhXdcERtGTzUCtIQr+2IQegrA==} + engines: {node: '>= 18.12.0'} peerDependencies: - webpack: ^4.0.0 || ^5.0.0 + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true dependencies: colorette: 2.0.20 - memfs: 3.5.3 + memfs: 4.8.1 mime-types: 2.1.35 + on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.90.2(webpack-cli@5.1.4) + webpack: 5.91.0(webpack-cli@5.1.4) dev: true - /webpack-dev-server@4.15.1(webpack-cli@5.1.4)(webpack@5.90.2): - resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==} - engines: {node: '>= 12.13.0'} + /webpack-dev-server@5.0.4(webpack-cli@5.1.4)(webpack@5.91.0): + resolution: {integrity: sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==} + engines: {node: '>= 18.12.0'} hasBin: true peerDependencies: - webpack: ^4.37.0 || ^5.0.0 + webpack: ^5.0.0 webpack-cli: '*' peerDependenciesMeta: webpack: @@ -9623,7 +9755,7 @@ packages: '@types/connect-history-api-fallback': 1.5.4 '@types/express': 4.17.21 '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.5 + '@types/serve-static': 1.15.7 '@types/sockjs': 0.3.36 '@types/ws': 8.5.10 ansi-html-community: 0.0.8 @@ -9633,23 +9765,23 @@ packages: compression: 1.7.4 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 - express: 4.18.2 + express: 4.19.2 graceful-fs: 4.2.11 - html-entities: 2.4.0 + html-entities: 2.5.2 http-proxy-middleware: 2.0.6(@types/express@4.17.21) ipaddr.js: 2.1.0 launch-editor: 2.6.1 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 + open: 10.1.0 + p-retry: 6.2.0 + rimraf: 5.0.5 schema-utils: 4.2.0 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.90.2(webpack-cli@5.1.4) - webpack-cli: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@4.15.1)(webpack@5.90.2) - webpack-dev-middleware: 5.3.3(webpack@5.90.2) + webpack: 5.91.0(webpack-cli@5.1.4) + webpack-cli: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@5.0.4)(webpack@5.91.0) + webpack-dev-middleware: 7.2.1(webpack@5.91.0) ws: 8.16.0 transitivePeerDependencies: - bufferutil @@ -9672,8 +9804,8 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack@5.90.2(webpack-cli@5.1.4): - resolution: {integrity: sha512-ziXu8ABGr0InCMEYFnHrYweinHK2PWrMqnwdHk2oK3rRhv/1B+2FnfwYv5oD+RrknK/Pp/Hmyvu+eAsaMYhzCw==} + /webpack@5.91.0(webpack-cli@5.1.4): + resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -9684,15 +9816,15 @@ packages: dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.11.6 - '@webassemblyjs/wasm-edit': 1.11.6 - '@webassemblyjs/wasm-parser': 1.11.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 acorn: 8.11.3 acorn-import-assertions: 1.9.0(acorn@8.11.3) browserslist: 4.23.0 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.15.0 - es-module-lexer: 1.4.1 + enhanced-resolve: 5.16.0 + es-module-lexer: 1.5.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -9703,9 +9835,9 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.90.2) - watchpack: 2.4.0 - webpack-cli: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@4.15.1)(webpack@5.90.2) + terser-webpack-plugin: 5.3.10(webpack@5.91.0) + watchpack: 2.4.1 + webpack-cli: 5.1.4(@webpack-cli/generators@3.0.7)(webpack-dev-server@5.0.4)(webpack@5.91.0) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -9759,11 +9891,11 @@ packages: path-exists: 4.0.0 dev: true - /which-typed-array@1.1.14: - resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.6 + available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 @@ -9917,7 +10049,7 @@ packages: p-queue: 6.6.2 p-transform: 1.3.0 pacote: 12.0.3 - preferred-pm: 3.1.2 + preferred-pm: 3.1.3 pretty-bytes: 5.6.0 readable-stream: 4.5.2 semver: 7.6.0 diff --git a/src/html/index.html b/src/html/index.html index dc5e2e0c0..71a06a1de 100644 --- a/src/html/index.html +++ b/src/html/index.html @@ -19,49 +19,55 @@ -
+
-

Drop a save file here

+

Drop a save file here

-
-

Settings

+
+

Settings

-
-

Contribute

+
+

Contribute

-

Bug reports

+

Bug reports

-

If you experience any bug during your exploration, please add it to the If you experience any bug during your exploration, please add it to the issue tracker. You can also send an email at barth.paleologue@cosmosjourneyer.com. Sending screenshots and save files can help enormously with the debugging process.

-

Know how to code?

+

Translation

-

CosmosJourneyer is an open-source project which means anyone can help build it! Why not you?
You can +

Translating Cosmos Journeyer makes it accessible to more people around the world! + You don't need coding skills, only proficiency in a language not currently supported or that can be enhanced. You can access the translation guide here.

+ +

Know how to code?

+ +

Cosmos Journeyer is an open-source project which means anyone can help build it! Why not you?
You can check out the repository of the project for more details. - Please take a look at the contributing guidelines before starting to code for CosmosJourneyer. + Please take a look at the contributing guidelines before starting to code for Cosmos Journeyer.

-

Support financially

+

Support financially

-

Building CosmosJourneyer takes a lot of time and effort and yet is free for everyone. If you want to support the +

Building Cosmos Journeyer takes a lot of time and effort and yet is free for everyone. If you want to support the project financially, you can do so on Ko-fi. Any - amount is greatly appreciated and will help me keep working on CosmosJourneyer.

+ amount is greatly appreciated and will help me keep working on Cosmos Journeyer.

-
-

Credits

+
+

Credits

-

Programming

+

Programming

Created by Barthélemy Paléologue

Webpack configuration & Refactorings by Martin Molli @@ -77,15 +83,15 @@

Programming

implementation and Myro's implementation on shadertoy

-

Font

+

Font

Nasalization font by Typodermic Fonts

-

Music

+

Music

Wandering by Andrewkn

-

Sound effects

+

Sound effects

Menu screen mouse over by DrMinky

@@ -102,29 +108,29 @@

Sound effects

LimitSnap_Creations

-
-

About

+
+

About

-

- Hello fellow explorer!
- I am the creator of CosmosJourneyer, and I am glad you're interested in this project. +

+ Hello fellow explorer!\n + I am the creator of Cosmos Journeyer, and I am glad you're interested in this project. It was years in the making you see: back in 2016 already, when I was working on my 3D planetarium, I dreamed about - making the planets fully explorable. But then I was limited by how little I knew about computer graphics.
-
- I only started CosmosJourneyer years later as a way to escape from the stress of my studies in French "classes + making the planets fully explorable. But then I was limited by how little I knew about computer graphics.\n + \n + I only started Cosmos Journeyer years later as a way to escape from the stress of my studies in French "classes préparatoires". At first, it was only a small procedural planet generator, which was called PlanetEngine. But as ideas kept on coming, I continued working on it for years and the project grew way beyond what I had - imagined at first.
-
- As I understand now that such projects cannot be achieved alone, I decided to open-source CosmosJourneyer so + imagined at first.\n + \n + As I understand now that such projects cannot be achieved alone, I decided to open-source Cosmos Journeyer so that - anyone could freely use and modify it to their liking and even contribute to the project.
-
- I hope you will enjoy CosmosJourneyer as much as I enjoy making it! + anyone could freely use and modify it to their liking and even contribute to the project.\n + \n + I hope you will enjoy Cosmos Journeyer as much as I enjoy making it!

Barthélemy Paléologue

-

If you have any question about CosmosJourneyer, feel free to contact me at If you have any question about Cosmos Journeyer, feel free to contact me atbarth.paleologue@cosmosjourneyer.com

diff --git a/src/html/mainMenu.html b/src/html/mainMenu.html index 82af90db9..1c08c6ed8 100644 --- a/src/html/mainMenu.html +++ b/src/html/mainMenu.html @@ -4,11 +4,11 @@

Cosmos Journeyer

\ No newline at end of file diff --git a/src/locales/en-US/common.json b/src/locales/en-US/common.json new file mode 100644 index 000000000..d42c376db --- /dev/null +++ b/src/locales/en-US/common.json @@ -0,0 +1,4 @@ +{ + "loading": "Loading, please wait...", + "fullscreen": "Press F11 to enable fullscreen" +} \ No newline at end of file diff --git a/src/locales/en-US/mainMenu.json b/src/locales/en-US/mainMenu.json new file mode 100644 index 000000000..0c18b5e73 --- /dev/null +++ b/src/locales/en-US/mainMenu.json @@ -0,0 +1,8 @@ +{ + "newJourney": "New Journey", + "loadSave": "Load Save", + "settings": "Settings", + "contribute": "Contribute", + "credits": "Credits", + "about": "About" +} \ No newline at end of file diff --git a/src/locales/en-US/notifications.json b/src/locales/en-US/notifications.json new file mode 100644 index 000000000..363e09319 --- /dev/null +++ b/src/locales/en-US/notifications.json @@ -0,0 +1,8 @@ +{ + "howToFly": "Your pointer controls the pitch and roll of your spaceship. The neutral position is at the center of the screen.", + "landingSequenceEngaged": "Landing sequence engaged", + "landingComplete": "Landing complete! Use {{bindingsString}} to disembark.", + "copiedToClipboard": "Copied to clipboard", + "howToLiftOff": "Hold {{bindingsString}} to lift off.", + "howToHyperSpace": "Align your ship with the system target using the target helper on the bottom right of your screen then press {{bindingsString}} to make a hyperspace jump." +} \ No newline at end of file diff --git a/src/locales/en-US/objectTypes.json b/src/locales/en-US/objectTypes.json new file mode 100644 index 000000000..5346f7f28 --- /dev/null +++ b/src/locales/en-US/objectTypes.json @@ -0,0 +1,11 @@ +{ + "starSystem": "Star system", + "star": "{{stellarType}} Star", + "neutronStar": "Neutron Star", + "blackHole": "Black Hole", + "gasPlanet": "Gas planet", + "telluricPlanet": "Telluric Planet", + "telluricMoon": "Telluric Moon", + "spaceStation": "Space Station", + "anomaly": "Anomaly" +} \ No newline at end of file diff --git a/src/locales/en-US/pauseMenu.json b/src/locales/en-US/pauseMenu.json new file mode 100644 index 000000000..de113fb26 --- /dev/null +++ b/src/locales/en-US/pauseMenu.json @@ -0,0 +1,8 @@ +{ + "resume": "Resume", + "save": "Save Game", + "settings": "Settings", + "contribute": "Contribute", + "share": "Share Position", + "screenshot": "Take Screenshot" +} \ No newline at end of file diff --git a/src/locales/en-US/sidePanel.json b/src/locales/en-US/sidePanel.json new file mode 100644 index 000000000..4a8c44aae --- /dev/null +++ b/src/locales/en-US/sidePanel.json @@ -0,0 +1,21 @@ +{ + "dropASaveFileHere": "Drop a save file here", + "settings": "Settings", + "contribute": "Contribute", + "bugReports": "Bug Reports", + "bugReportsText": "If you experience any bug during your exploration, please add it to the issue tracker. You can also send an email at barth.paleologue@cosmosjourneyer.com. Sending screenshots and save files can help enormously with the debugging process.", + "translation": "Translation", + "translationText": "Translating Cosmos Journeyer makes it accessible to more people around the world! You don't need any coding skills, only proficiency in a language not currently supported or that can be enhanced. You can access the translation guide here.", + "knowHowToCode": "Know how to code?", + "knowHowToCodeText": "Cosmos Journeyer is an open-source project which means anyone can help build it! Why not you?\n You can check out the repository of the project for more details. Please take a look at the contributing guidelines before starting to contribute to Cosmos Journeyer.", + "supportFinancially": "Support financially", + "supportFinanciallyText": "Building Cosmos Journeyer takes a lot of time and effort while being free for everyone. Please consider sponsoring the project on Patreon or Ko-fi. Your support will help me dedicate more time to the project and make it even better!", + "credits": "Credits", + "programming": "Programming", + "font": "Font", + "music": "Music", + "soundEffects": "Sound Effects", + "about": "About", + "aboutText": "Hello fellow explorer!\nI am the creator of Cosmos Journeyer, and I am glad you're interested in this project. It was years in the making you see: back in 2016 already, when I was working on my 3D planetarium, I dreamed about making the planets fully explorable. But then I was limited by how little I knew about computer graphics.\n\nI only started Cosmos Journeyer years later as a way to escape from the stress of my studies in French \"classes préparatoires\". At first, it was only a small procedural planet generator, which was called PlanetEngine. But as ideas kept on coming, I continued working on it for years and the project grew way beyond what I had imagined at first.\n\nAs I understand now that such projects cannot be achieved alone, I decided to open-source Cosmos Journeyer so that anyone can freely use and modify it to their liking and even contribute to the project.\n\nI hope you will enjoy CosmosJourneyer as much as I enjoy making it!", + "emailContact": "If you have any question about Cosmos Journeyer, feel free to contact me at barth.paleologue@cosmosjourneyer.com" +} \ No newline at end of file diff --git a/src/locales/en-US/starMap.json b/src/locales/en-US/starMap.json new file mode 100644 index 000000000..5c3c6a898 --- /dev/null +++ b/src/locales/en-US/starMap.json @@ -0,0 +1,5 @@ +{ + "distance": "Distance", + "planets": "Planets", + "setAsDestination": "Set as Destination" +} \ No newline at end of file diff --git a/src/locales/en-US/units.json b/src/locales/en-US/units.json new file mode 100644 index 000000000..8b877bce7 --- /dev/null +++ b/src/locales/en-US/units.json @@ -0,0 +1,4 @@ +{ + "ly": "ly", + "ls": "ls" +} \ No newline at end of file diff --git a/src/locales/fr-FR/common.json b/src/locales/fr-FR/common.json new file mode 100644 index 000000000..3051e4081 --- /dev/null +++ b/src/locales/fr-FR/common.json @@ -0,0 +1,4 @@ +{ + "loading": "Chargement...", + "fullscreen": "Appuyez sur F11 pour entrer en plein écran !" +} \ No newline at end of file diff --git a/src/locales/fr-FR/mainMenu.json b/src/locales/fr-FR/mainMenu.json new file mode 100644 index 000000000..27a9bf7d7 --- /dev/null +++ b/src/locales/fr-FR/mainMenu.json @@ -0,0 +1,8 @@ +{ + "newJourney": "Nouveau Voyage", + "loadSave": "Charger une partie", + "settings": "Paramètres", + "contribute": "Contribuer", + "credits": "Crédits", + "about": "A propos" +} \ No newline at end of file diff --git a/src/locales/fr-FR/notifications.json b/src/locales/fr-FR/notifications.json new file mode 100644 index 000000000..4f1aa3520 --- /dev/null +++ b/src/locales/fr-FR/notifications.json @@ -0,0 +1,8 @@ +{ + "howToFly": "La souris contrôle le tangage et le roulis du vaisseau. La position neutre se trouve au centre de l'écran.", + "landingSequenceEngaged": "Début de la séquence d'atterrissage.", + "landingComplete": "Atterrissage réussi ! Utilisez {{bindingsString}} pour sortir du vaisseau.", + "copiedToClipboard": "Copié dans le presse-papiers.", + "howToLiftOff": "Maintenez {{bindingsString}} pour décoller.", + "howToHyperSpace": "Alignez votre vaisseau avec la cible du système de destination à l'aide du radar de cible en bas à droite de l'écran. Appuyez ensuite sur {{bindingsString}} pour enclencher le saut hyperspatial." +} \ No newline at end of file diff --git a/src/locales/fr-FR/objectTypes.json b/src/locales/fr-FR/objectTypes.json new file mode 100644 index 000000000..1542edad6 --- /dev/null +++ b/src/locales/fr-FR/objectTypes.json @@ -0,0 +1,11 @@ +{ + "starSystem": "Système Solaire", + "star": "Etoile de type {{stellarType}}", + "neutronStar": "Etoile à Neutrons", + "blackHole": "Trou Noir", + "gasPlanet": "Planète Gazeuse", + "telluricPlanet": "Planète Tellurique", + "telluricMoon": "Lune Tellurique", + "spaceStation": "Station Spatiale", + "anomaly": "Anomalie" +} \ No newline at end of file diff --git a/src/locales/fr-FR/pauseMenu.json b/src/locales/fr-FR/pauseMenu.json new file mode 100644 index 000000000..89f315243 --- /dev/null +++ b/src/locales/fr-FR/pauseMenu.json @@ -0,0 +1,8 @@ +{ + "resume": "Reprendre", + "save": "Sauvegarder", + "settings": "Paramètres", + "contribute": "Contribuer", + "share": "Partager la position", + "screenshot": "Capture d'écran" +} \ No newline at end of file diff --git a/src/locales/fr-FR/sidePanel.json b/src/locales/fr-FR/sidePanel.json new file mode 100644 index 000000000..53b674207 --- /dev/null +++ b/src/locales/fr-FR/sidePanel.json @@ -0,0 +1,21 @@ +{ + "dropASaveFileHere": "Déposez un fichier de sauvegarde ici", + "settings": "Paramètres", + "contribute": "Contribuer", + "bugReports": "Signaler un bug", + "bugReportsText": "Si vous rencontrez un bug lors de votre exploration, merci de l'ajouter au tracker de bugs. Vous pouvez aussi envoyer un email à barth.paleologue@cosmosjourneyer.com. Envoyer des captures d'écran et des fichiers de sauvegarde peut grandement aider le processus de débogage.", + "translation": "Traduction", + "translationText": "Traduire Cosmos Journeyer le rend accessible à plus de personnes à travers le monde ! Vous n'avez pas besoin de compétences en programmation, seulement d'une maîtrise d'une langue non supportée ou qui peut être améliorée. Vous pouvez accéder au guide de traduction ici.", + "knowHowToCode": "Vous savez coder ?", + "knowHowToCodeText": "Cosmos Journeyer est un projet open-source, ce qui signifie que n'importe qui peut aider à le construire ! Pourquoi pas vous ?\n Vous pouvez consulter le dépôt du projet pour plus de détails. Merci de lire les directives de contribution avant de commencer à contribuer à Cosmos Journeyer.", + "supportFinancially": "Soutenir financièrement", + "supportFinanciallyText": "Construire Cosmos Journeyer demande beaucoup de temps et d'efforts tout en étant gratuit pour tout le monde. Si le coeur vous en dit, vous pouvez sponsoriser le projet via Patreon ou Ko-fi. Votre soutien m'aidera à consacrer plus de temps au projet et à le rendre encore meilleur !", + "credits": "Crédits", + "programming": "Programmation", + "font": "Police", + "music": "Musique", + "soundEffects": "Effets sonores", + "about": "À propos", + "aboutText": "Bienvenue cher explorateur !\nJe suis le créateur de Cosmos Journeyer, et je suis ravi que vous soyez intéressé. Longtemps, j'ai rêvé de faire ce project. En 2016 déjà lorsque je travaillais sur mon Planétarium en 3D, j'imaginais rendre les planètes entièrement explorables. Mais mes connaissances en informatique graphique étaient alors trop limitées.\n\nJ'ai commencé Cosmos Journeyer bien des années plus tard, comme une façon d'échapper au stress des concours des classes préparatoires. Cela a commencé par un petit générateur de planètes, que j'appelais PlanetEngine (\"moteur à planète\"). Mais plus je travaillais dessus, et plus j'avais des nouvelles idées. Après plus de 3 années de travail, je peux dire que le projet est allé bien au delà de ce que j'imaginais pouvoir faire au début.\n\nIl serait illusoire de penser que je puisse seul terminer Cosmos Journeyer un jour. C'est pourquoi j'ai décidé de rendre le projet open-source, afin que chacun puisse l'utiliser et le modifier à sa guise, et même contribuer au projet dans les années à venir.\n\nJ'espère que vous aimerez Cosmos Journeyer autant que j'aime le créer !", + "emailContact": "Si vous avez des questions sur Cosmos Journeyer, n'hésitez pas à me contacter à barth.paleologue@cosmosjourneyer.com" +} \ No newline at end of file diff --git a/src/locales/fr-FR/starMap.json b/src/locales/fr-FR/starMap.json new file mode 100644 index 000000000..e07b86e2f --- /dev/null +++ b/src/locales/fr-FR/starMap.json @@ -0,0 +1,5 @@ +{ + "distance": "Distance", + "planets": "Planètes", + "setAsDestination": "Définir comme destination" +} \ No newline at end of file diff --git a/src/locales/fr-FR/units.json b/src/locales/fr-FR/units.json new file mode 100644 index 000000000..9d352fb54 --- /dev/null +++ b/src/locales/fr-FR/units.json @@ -0,0 +1,4 @@ +{ + "ly": "al", + "ls": "sl" +} \ No newline at end of file diff --git a/src/shaders/butterflyMaterial/butterflyFragment.glsl b/src/shaders/butterflyMaterial/butterflyFragment.glsl index a3dbc59b8..49d1feaf8 100644 --- a/src/shaders/butterflyMaterial/butterflyFragment.glsl +++ b/src/shaders/butterflyMaterial/butterflyFragment.glsl @@ -29,6 +29,12 @@ varying vec2 vUV; varying mat4 normalMatrix; varying vec3 vNormal; +// This is used to render the grass blade to the depth buffer properly +// (see https://forum.babylonjs.com/t/how-to-write-shadermaterial-to-depthrenderer/47227/3 and https://playground.babylonjs.com/#6GFJNR#161) +#ifdef FORDEPTH +varying float vDepthMetric; +#endif + varying vec3 vOriginalWorldPosition; // src: https://gist.github.com/mairod/a75e7b44f68110e1576d77419d608786 @@ -72,5 +78,9 @@ void main() { // ambient lighting ndl = clamp(ndl + 0.1, 0.0, 1.0); - gl_FragColor = vec4(finalColor.rgb * ndl, 1.0);// apply color and lighting + #ifdef FORDEPTH + gl_FragColor = vec4(vDepthMetric, 0.0, 0.0, 1.0); + #else + gl_FragColor = vec4(finalColor.rgb * ndl, 1.0); + #endif } \ No newline at end of file diff --git a/src/shaders/butterflyMaterial/butterflyVertex.glsl b/src/shaders/butterflyMaterial/butterflyVertex.glsl index 602f7cdcd..5d6a1c1e9 100644 --- a/src/shaders/butterflyMaterial/butterflyVertex.glsl +++ b/src/shaders/butterflyMaterial/butterflyVertex.glsl @@ -37,6 +37,13 @@ varying vec3 vNormal; varying vec3 vOriginalWorldPosition; +// This is used to render the grass blade to the depth buffer properly +// (see https://forum.babylonjs.com/t/how-to-write-shadermaterial-to-depthrenderer/47227/3 and https://playground.babylonjs.com/#6GFJNR#161) +#ifdef FORDEPTH +uniform vec2 depthValues; +varying float vDepthMetric; +#endif + #include "../utils/rotateAround.glsl"; float easeOut(float t, float a) { @@ -92,4 +99,8 @@ void main() { normalMatrix = transpose(inverse(finalWorld)); vNormal = normal; + + #ifdef FORDEPTH + vDepthMetric = (-gl_Position.z + depthValues.x) / (depthValues.y); + #endif } \ No newline at end of file diff --git a/src/shaders/grassMaterial/grassFragment.glsl b/src/shaders/grassMaterial/grassFragment.glsl index c9b190841..b2e595641 100644 --- a/src/shaders/grassMaterial/grassFragment.glsl +++ b/src/shaders/grassMaterial/grassFragment.glsl @@ -26,7 +26,16 @@ varying vec3 vPosition; varying mat4 normalMatrix; varying vec3 vNormal; +// This is used to render the grass blade to the depth buffer properly +// (see https://forum.babylonjs.com/t/how-to-write-shadermaterial-to-depthrenderer/47227/3 and https://playground.babylonjs.com/#6GFJNR#161) +#ifdef FORDEPTH +varying float vDepthMetric; +#endif + void main() { + #ifdef FORDEPTH + gl_FragColor = vec4(vDepthMetric, 0.0, 0.0, 1.0); + #else vec3 baseColor = vec3(0.05, 0.2, 0.01); vec3 tipColor = vec3(0.5, 0.5, 0.1); @@ -46,4 +55,5 @@ void main() { float ao = mix(aoForDensity, 1.0, pow(vPosition.y, 2.0)); gl_FragColor = vec4(finalColor * ndl * ao, 1.0);// apply color and lighting + #endif } \ No newline at end of file diff --git a/src/shaders/grassMaterial/grassVertex.glsl b/src/shaders/grassMaterial/grassVertex.glsl index 51c5b1404..5499d8214 100644 --- a/src/shaders/grassMaterial/grassVertex.glsl +++ b/src/shaders/grassMaterial/grassVertex.glsl @@ -35,6 +35,13 @@ varying vec3 vPosition; varying mat4 normalMatrix; varying vec3 vNormal; +// This is used to render the grass blade to the depth buffer properly +// (see https://forum.babylonjs.com/t/how-to-write-shadermaterial-to-depthrenderer/47227/3 and https://playground.babylonjs.com/#6GFJNR#161) +#ifdef FORDEPTH +uniform vec2 depthValues; +varying float vDepthMetric; +#endif + #include "../utils/rotateAround.glsl"; float easeOut(float t, float a) { @@ -101,4 +108,8 @@ void main() { normalMatrix = transpose(inverse(finalWorld)); vNormal = leaningNormal; + + #ifdef FORDEPTH + vDepthMetric = (-gl_Position.z + depthValues.x) / (depthValues.y); + #endif } \ No newline at end of file diff --git a/src/styles/index.scss b/src/styles/index.scss index 32ebedc49..4bd642955 100644 --- a/src/styles/index.scss +++ b/src/styles/index.scss @@ -60,7 +60,7 @@ body { width: fit-content; position: absolute; top: 65vh; - left: 5%; + left: 2.5vw; transform: translateY(-50%); transition: 0.2s ease-in-out; @@ -107,6 +107,8 @@ body { @import "inputs.scss"; + @import "loadingScreen.scss"; + #renderer { z-index: 1; float: left; diff --git a/src/styles/loadingScreen.scss b/src/styles/loadingScreen.scss new file mode 100644 index 000000000..4fdcc5746 --- /dev/null +++ b/src/styles/loadingScreen.scss @@ -0,0 +1,48 @@ +#babylonjsLoadingDiv { + opacity: 0; + transition: opacity 1.5s ease; + pointer-events: none; + display: grid; + grid-template-rows: 100%; + grid-template-columns: 100%; + justify-items: center; + align-items: center; +} + +.imageSpinnerContainer { + width: 300px; + grid-column: 1; + grid-row: 1; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + position: absolute; + + .loadingSpinner { + animation: spin1 0.75s infinite linear; + transform-origin: 50% 50%; + } +} + +.loadingText { + margin-top: 160px; + font-family: Nasalization, sans-serif; + font-size: 1.5em; + color: white; + z-index: 1; + text-align: center; + + position: absolute; + left: 0; + width: 100%; + top: 50%; +} + +@keyframes spin1 { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/src/styles/mainMenu.scss b/src/styles/mainMenu.scss index 549807582..f8b0c5ffe 100644 --- a/src/styles/mainMenu.scss +++ b/src/styles/mainMenu.scss @@ -53,7 +53,7 @@ } -.rightPanel { +.sidePanel { position: absolute; max-width: 1400px; width: 72%; @@ -131,6 +131,10 @@ font-size: 1.25em; padding: 0 20px; + &[data-i18n] { + white-space: pre-line; // necessary to use \n in the text + } + &.signature { text-align: right; font-style: italic; diff --git a/src/ts/alphaTestis.ts b/src/ts/alphaTestis.ts index 84ffe5f59..43a001cb5 100644 --- a/src/ts/alphaTestis.ts +++ b/src/ts/alphaTestis.ts @@ -81,11 +81,10 @@ const planet = StarSystemHelper.MakeTelluricPlanet(starSystem, planetModel); planet.model.ringsUniforms = new RingsUniforms(planet.model.rng); planet.postProcesses.push(PostProcessType.RING); -const spacestation = new SpaceStation(starSystemView.scene, planet); -starSystemView.getStarSystem().addSpaceStation(spacestation); +const [spaceStation] = StarSystemHelper.MakeSpaceStations(starSystem, planet, 1); -//physicsViewer.showBody(spacestation.aggregate.body); -/*for(const landingpad of spacestation.landingPads) { +//physicsViewer.showBody(spaceStation.aggregate.body); +/*for(const landingpad of spaceStation.landingPads) { physicsViewer.showBody(landingpad.aggregate.body); }*/ @@ -167,7 +166,7 @@ document.addEventListener("keydown", (e) => { if (engine.isPaused()) return; if (e.key === "o") { - const landingPad = spacestation.handleDockingRequest(); + const landingPad = spaceStation.handleDockingRequest(); if (landingPad !== null && starSystemView.scene.getActiveControls() === spaceshipController) { spaceshipController.spaceship.engageLandingOnPad(landingPad); } diff --git a/src/ts/architecture/orbitalObject.ts b/src/ts/architecture/orbitalObject.ts index 64f57d2e0..977ca1737 100644 --- a/src/ts/architecture/orbitalObject.ts +++ b/src/ts/architecture/orbitalObject.ts @@ -53,7 +53,7 @@ export interface OrbitalObject extends Transformable, BoundingSphere, TypedObjec parent: OrbitalObject | null; } -export class OrbitalObject { +export class OrbitalObjectUtils { /** * Returns the next position of the object on its orbit. This does not update the position of the object (see UpdateOrbitalPosition) * @param object The object we want to compute the next position of @@ -95,7 +95,7 @@ export class OrbitalObject { if (orbit.period === 0 || object.parent === null) return; const oldPosition = object.getTransform().getAbsolutePosition(); - const newPosition = OrbitalObject.GetNextOrbitalPosition(object, deltaTime); + const newPosition = OrbitalObjectUtils.GetNextOrbitalPosition(object, deltaTime); translate(object.getTransform(), newPosition.subtractInPlace(oldPosition)); } @@ -117,7 +117,7 @@ export class OrbitalObject { * @constructor */ static UpdateRotation(object: OrbitalObject, deltaTime: number): void { - const dtheta = OrbitalObject.GetRotationAngle(object, deltaTime); + const dtheta = OrbitalObjectUtils.GetRotationAngle(object, deltaTime); if (dtheta === 0) return; const elementaryRotationQuaternion = Quaternion.RotationAxis(object.getRotationAxis(), dtheta); diff --git a/src/ts/assets.ts b/src/ts/assets.ts index 2748b213d..fc342cd75 100644 --- a/src/ts/assets.ts +++ b/src/ts/assets.ts @@ -17,7 +17,6 @@ import "@babylonjs/loaders"; import "@babylonjs/core/Loading/Plugins/babylonFileLoader"; -import "@babylonjs/core/Loading/loadingScreen"; import "@babylonjs/core/Animations/animatable"; import rockNormalMap from "../asset/textures/rockn.png"; @@ -86,8 +85,11 @@ import { MeshBuilder } from "@babylonjs/core/Meshes/meshBuilder"; import { ProceduralTexture } from "@babylonjs/core/Materials/Textures/Procedurals/proceduralTexture"; import { createButterfly } from "./proceduralAssets/butterfly/butterfly"; import { createGrassBlade } from "./proceduralAssets/grass/grassBlade"; +import { ShaderMaterial } from "@babylonjs/core/Materials/shaderMaterial"; import { ButterflyMaterial } from "./proceduralAssets/butterfly/butterflyMaterial"; import { GrassMaterial } from "./proceduralAssets/grass/grassMaterial"; +import { LoadingScreen } from "./uberCore/loadingScreen"; +import i18next from "./i18n"; export class Assets { static IS_READY = false; @@ -132,7 +134,10 @@ export class Assets { public static GRASS_BLADE: Mesh; public static BUTTERFLY_MATERIAL: ButterflyMaterial; + public static BUTTERFLY_DEPTH_MATERIAL: ButterflyMaterial; + public static GRASS_MATERIAL: GrassMaterial; + public static GRASS_DEPTH_MATERIAL: GrassMaterial; public static OUCH_SOUND: Sound; public static ENGINE_RUNNING_SOUND: Sound; @@ -311,14 +316,18 @@ export class Assets { Assets.BUTTERFLY = createButterfly(scene); Assets.BUTTERFLY.isVisible = false; - Assets.BUTTERFLY_MATERIAL = new ButterflyMaterial(scene); + Assets.BUTTERFLY_MATERIAL = new ButterflyMaterial(scene, false); Assets.BUTTERFLY.material = Assets.BUTTERFLY_MATERIAL; + Assets.BUTTERFLY_DEPTH_MATERIAL = new ButterflyMaterial(scene, true); + Assets.GRASS_BLADE = createGrassBlade(scene, 3); Assets.GRASS_BLADE.isVisible = false; - Assets.GRASS_MATERIAL = new GrassMaterial(scene); + Assets.GRASS_MATERIAL = new GrassMaterial(scene, false); Assets.GRASS_BLADE.material = Assets.GRASS_MATERIAL; + Assets.GRASS_DEPTH_MATERIAL = new GrassMaterial(scene, true); + const ouchSoundTask = Assets.MANAGER.addBinaryFileTask("ouchSoundTask", ouchSound); ouchSoundTask.onSuccess = function (task) { Assets.OUCH_SOUND = new Sound("OuchSound", task.data, scene); @@ -471,7 +480,7 @@ export class Assets { }); Assets.MANAGER.onProgress = (remainingCount, totalCount) => { - scene.getEngine().loadingScreen.loadingUIText = `Loading assets... ${totalCount - remainingCount}/${totalCount}`; + (scene.getEngine().loadingScreen as LoadingScreen).setProgressPercentage(100 * (totalCount - remainingCount) / totalCount); }; Assets.SCATTER_CUBE = MeshBuilder.CreateBox("cube", { size: 1 }, scene); @@ -481,7 +490,7 @@ export class Assets { Assets.MANAGER.onFinish = () => { console.log("Assets loaded"); - scene.getEngine().loadingScreen.loadingUIText = "Press F11 to go fullscreen"; + scene.getEngine().loadingScreen.loadingUIText = i18next.t("common:fullscreen"); Assets.IS_READY = true; }; @@ -534,8 +543,8 @@ export class Assets { return Assets.LANDING_PAD.instantiateHierarchy(null, { doNotInstantiate: false }) as InstancedMesh; } - static DebugMaterial(name: string, diffuse = false, wireframe = false) { - const mat = new StandardMaterial(`${name}DebugMaterial`); + static DebugMaterial(name: string, diffuse: boolean, wireframe: boolean, scene: Scene) { + const mat = new StandardMaterial(`${name}DebugMaterial`, scene); if (!diffuse) { mat.emissiveColor = Color3.Random(); mat.disableLighting = true; diff --git a/src/ts/cosmosJourneyer.ts b/src/ts/cosmosJourneyer.ts index 2eccc2404..433542ec1 100644 --- a/src/ts/cosmosJourneyer.ts +++ b/src/ts/cosmosJourneyer.ts @@ -49,16 +49,17 @@ import { GeneralInputs } from "./inputs/generalInputs"; import { createNotification } from "./utils/notification"; import { StarSystemInputs } from "./inputs/starSystemInputs"; import { pressInteractionToStrings } from "./utils/inputControlsString"; -import { DefaultControlsInputs } from "./defaultController/defaultControlsInputs"; +import { LoadingScreen } from "./uberCore/loadingScreen"; +import i18n from "./i18n"; -enum EngineState { +const enum EngineState { UNINITIALIZED, RUNNING, PAUSED } /** - * Main class of CosmosJourneyer. It handles the underlying BabylonJS engine, and the communication between + * Main class of Cosmos Journeyer. It handles the underlying BabylonJS engine, and the communication between * the starmap view and the star system view. It also provides utility methods to take screenshots and record videos. * It also handles the pause menu. */ @@ -93,10 +94,7 @@ export class CosmosJourneyer { this.starSystemView.setSystemAsTarget(seed); const bindingsString = pressInteractionToStrings(StarSystemInputs.map.jumpToSystem).join(" or "); - createNotification( - `Align your ship with the system target using the target helper on the bottom right of your screen then press ${bindingsString} to make a hyperspace jump.`, - 20000 - ); + createNotification(i18n.t("notifications:howToHyperSpace", { bindingsString: bindingsString }), 20000); }); // Init the active scene @@ -107,7 +105,7 @@ export class CosmosJourneyer { this.mainMenu = new MainMenu(starSystemView); this.mainMenu.onStartObservable.add(() => { - createNotification("Your pointer controls the pitch and roll of your spaceship. The neutral position is at the center of the screen.", 20000); + createNotification(i18n.t("notifications:howToFly"), 20000); this.starMap.setCurrentStarSystem(this.starSystemView.getStarSystem().model.seed); this.starSystemView.switchToSpaceshipControls(); this.starSystemView.getSpaceshipControls().spaceship.enableWarpDrive(); @@ -135,7 +133,7 @@ export class CosmosJourneyer { const payload = `universeCoordinates=${urlData}`; const url = new URL(`https://barthpaleologue.github.io/CosmosJourneyer/?${payload}`); navigator.clipboard.writeText(url.toString()).then(() => { - createNotification("Copied to clipboard", 2000); + createNotification(i18n.t("notifications:copiedToClipboard"), 2000); }); }); this.pauseMenu.onSave.add(() => this.downloadSaveFile()); @@ -197,6 +195,7 @@ export class CosmosJourneyer { }); engine.useReverseDepthBuffer = true; + engine.loadingScreen = new LoadingScreen(canvas); engine.loadingScreen.displayLoadingUI(); window.addEventListener("resize", () => { engine.resize(true); @@ -419,6 +418,10 @@ export class CosmosJourneyer { // re-centers the star system this.starSystemView.getStarSystem().applyFloatingOrigin(); + + // set the ui target to the nearest orbital object + this.starSystemView.ui.setTarget(nearestOrbitalObject); + this.starSystemView.helmetOverlay.setTarget(nearestOrbitalObject.getTransform()); }); await this.starSystemView.loadStarSystem(new StarSystemController(seed, this.starSystemView.scene), true); diff --git a/src/ts/i18n.ts b/src/ts/i18n.ts new file mode 100644 index 000000000..c290536bb --- /dev/null +++ b/src/ts/i18n.ts @@ -0,0 +1,44 @@ +import i18next, { Resource, init, t } from "i18next"; + +/** + * Load all the resources from the locales folder and return them in the i18next format. + * This takes place at build time, so the resources are bundled with the application. + */ +function loadResources() { + const requireContext = require.context("../locales/", true, /\.json$/); + const resources: Resource = {}; // { "en-US": { "notifications": { ... } }, "es-ES": { "notifications": { ... } } } + + requireContext.keys().forEach((key: string) => { + const languageFolder = key.split("/")[1]; // (./en-US/notifications.json) => en-US + const nameSpace = key.split("/")[2].split(".")[0]; // (./en-US/notifications.json) => notifications + const fileContent = requireContext(key); + + resources[languageFolder] = resources[languageFolder] || {}; + resources[languageFolder][nameSpace] = fileContent; + }); + + return resources; +} + +// init language to url parameter if defined, otherwise use the browser language +const urlParams = new URLSearchParams(window.location.search); +const language = urlParams.get("lang") || navigator.language; + +await init({ + lng: language, // change this if you want to test a specific language + debug: process.env.NODE_ENV === 'development', + fallbackLng: "en-US", + resources: loadResources(), +}); + +// perform all static translations +document.querySelectorAll("*[data-i18n]").forEach((element) => { + const key = element.getAttribute("data-i18n"); + if (key === null) throw new Error("data-i18n attribute is null"); + + // this should be safe as we are not doing any interpolation + // (as long as the translation are reviewed before being merged of course) + element.innerHTML = t(key); +}); + +export default i18next; diff --git a/src/ts/landingSimulator.ts b/src/ts/landingSimulator.ts index 105f1a2bb..b56c004df 100644 --- a/src/ts/landingSimulator.ts +++ b/src/ts/landingSimulator.ts @@ -65,7 +65,7 @@ const physicsViewer = new PhysicsViewer(); /*physicsViewer.showBody(spaceship.aggregate.body); physicsViewer.showBody(landingPad.aggregate.body);*/ -const spacestation = new SpaceStation(scene); +const spacestation = new SpaceStation(scene, 42); setRotationQuaternion(spacestation.getTransform(), Quaternion.RotationAxis(Axis.X, Math.PI / 2)); translate(spacestation.getTransform(), new Vector3(0, -100, 0)); diff --git a/src/ts/mainMenu/mainMenu.ts b/src/ts/mainMenu/mainMenu.ts index 06bdc96c1..8019d5553 100644 --- a/src/ts/mainMenu/mainMenu.ts +++ b/src/ts/mainMenu/mainMenu.ts @@ -18,6 +18,7 @@ import { Assets } from "../assets"; import { Settings } from "../settings"; import { GasPlanet } from "../planets/gasPlanet/gasPlanet"; import { initSettingsPanel } from "./settingsPanel"; +import i18n from "../i18n"; export class MainMenu { readonly scene: UberScene; @@ -114,6 +115,13 @@ Math.trunc((Math.random() * 2 - 1) * 1000), }); }); + // Translate all main menu elements + document.querySelectorAll("#mainMenu *[data-i18n]").forEach((element) => { + const key = element.getAttribute("data-i18n"); + if (key === null) throw new Error("data-i18n attribute is null"); + element.textContent = i18n.t(key); + }); + const loadSavePanel = document.getElementById("loadSavePanel"); if (loadSavePanel === null) throw new Error("#loadSavePanel does not exist!"); this.loadSavePanel = loadSavePanel; @@ -132,7 +140,9 @@ Math.trunc((Math.random() * 2 - 1) * 1000), if (aboutPanel === null) throw new Error("#about does not exist!"); this.aboutPanel = aboutPanel; - document.getElementById("startButton")?.addEventListener("click", () => { + const startButton = document.getElementById("startButton"); + if (startButton === null) throw new Error("#startButton does not exist!"); + startButton.addEventListener("click", () => { this.startAnimation(() => this.onStartObservable.notifyObservers()); }); @@ -328,6 +338,8 @@ Math.trunc((Math.random() * 2 - 1) * 1000), this.htmlRoot.style.display = "none"; Assets.MAIN_MENU_BACKGROUND_MUSIC.stop(); onAnimationFinished(); + + return; } const currentProgress = translationAnimation.getProgress(); @@ -336,6 +348,7 @@ Math.trunc((Math.random() * 2 - 1) * 1000), this.controls.getActiveCamera().getViewMatrix(); this.starSystemController.applyFloatingOrigin(); + this.starSystemController.updateShaders(0.0, this.starSystemView.postProcessManager); }; this.scene.onBeforePhysicsObservable.add(animationCallback); diff --git a/src/ts/mandelbulb/mandelbulb.ts b/src/ts/mandelbulb/mandelbulb.ts index 04c89282e..da8f0eacb 100644 --- a/src/ts/mandelbulb/mandelbulb.ts +++ b/src/ts/mandelbulb/mandelbulb.ts @@ -27,6 +27,7 @@ import { RingsUniforms } from "../postProcesses/rings/ringsUniform"; import { Vector3 } from "@babylonjs/core/Maths/math.vector"; import { Cullable } from "../bodies/cullable"; import { OrbitalObjectPhysicalProperties } from "../architecture/physicalProperties"; +import i18n from "../i18n"; export class Mandelbulb implements CelestialBody, Cullable { readonly name: string; @@ -89,7 +90,7 @@ export class Mandelbulb implements CelestialBody, Cullable { } getTypeName(): string { - return "Anomaly"; + return i18n.t("objectTypes:anomaly"); } computeCulling(camera: Camera): void { diff --git a/src/ts/model/common.ts b/src/ts/model/common.ts index 84fdb7b13..66621c3aa 100644 --- a/src/ts/model/common.ts +++ b/src/ts/model/common.ts @@ -15,7 +15,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export enum GenerationSteps { +export const enum GenerationSteps { AXIAL_TILT = 100, ORBIT = 200, ORBITAL_PERIOD = 500, @@ -33,14 +33,14 @@ export enum GenerationSteps { TEMPERATURE = 1100, STELLAR_TYPE = 1900, - PRESSURE = 1100, - WATER_AMOUNT = 1200, + PRESSURE = 1800, + WATER_AMOUNT = 1700, TERRAIN = 1500, - SPACE_STATION = 2000 + SPACE_STATIONS = 2000 } -export enum BodyType { +export const enum BodyType { STAR, TELLURIC_PLANET, GAS_PLANET, diff --git a/src/ts/orbit/axisRenderer.ts b/src/ts/orbit/axisRenderer.ts index b2e63e225..07d399750 100644 --- a/src/ts/orbit/axisRenderer.ts +++ b/src/ts/orbit/axisRenderer.ts @@ -20,6 +20,7 @@ import { Color3, Vector3 } from "@babylonjs/core/Maths/math"; import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial"; import { BoundingSphere } from "../architecture/boundingSphere"; import { Transformable } from "../architecture/transformable"; +import { Scene } from "@babylonjs/core/scene"; /** * Visual helper designed to display the rotation axis of given objects @@ -34,10 +35,11 @@ export class AxisRenderer { /** * Disposes all previously created axis meshes by calling reset() and then creates new axis meshes for the given objects * @param objects + * @param scene */ - setObjects(objects: (Transformable & BoundingSphere)[]) { + setOrbitalObjects(objects: (Transformable & BoundingSphere)[], scene: Scene) { if (this.axisMaterial === null) { - this.axisMaterial = new StandardMaterial("axisMaterial"); + this.axisMaterial = new StandardMaterial("axisMaterial", scene); this.axisMaterial.emissiveColor = Color3.White(); this.axisMaterial.disableLighting = true; } diff --git a/src/ts/orbit/orbitRenderer.ts b/src/ts/orbit/orbitRenderer.ts index b4c39b3c5..478ea97e5 100644 --- a/src/ts/orbit/orbitRenderer.ts +++ b/src/ts/orbit/orbitRenderer.ts @@ -21,6 +21,7 @@ import { StandardMaterial } from "@babylonjs/core/Materials/standardMaterial"; import { setUpVector } from "../uberCore/transforms/basicTransform"; import { getPointOnOrbitLocal } from "./orbit"; import { OrbitalObject } from "../architecture/orbitalObject"; +import { Scene } from "@babylonjs/core/scene"; export class OrbitRenderer { private orbitMeshes: LinesMesh[] = []; @@ -31,7 +32,13 @@ export class OrbitRenderer { private _isVisible = false; - setOrbitalObjects(orbitalObjects: OrbitalObject[]) { + setOrbitalObjects(orbitalObjects: OrbitalObject[], scene: Scene) { + if (this.orbitMaterial === null) { + this.orbitMaterial = new StandardMaterial("orbitMaterial", scene); + this.orbitMaterial.emissiveColor = Color3.White(); + this.orbitMaterial.disableLighting = true; + } + this.reset(); this.orbitalObjects = orbitalObjects; @@ -89,11 +96,5 @@ export class OrbitRenderer { this.orbitMeshes.forEach((orbitMesh) => orbitMesh.dispose()); this.orbitMeshes = []; this.orbitalObjects = []; - - if (this.orbitMaterial === null) { - this.orbitMaterial = new StandardMaterial("orbitMaterial"); - this.orbitMaterial.emissiveColor = Color3.White(); - this.orbitMaterial.disableLighting = true; - } } } diff --git a/src/ts/physicSpaceship.ts b/src/ts/physicSpaceship.ts index 8c8e54ed0..07f107d05 100644 --- a/src/ts/physicSpaceship.ts +++ b/src/ts/physicSpaceship.ts @@ -84,13 +84,13 @@ const chunkForge = new ChunkForgeWorkers(Settings.VERTEX_RESOLUTION); const sphere = MeshBuilder.CreateSphere("sphere", { diameter: 2, segments: 32 }, scene); sphere.position.y = 4; sphere.position.x = 4; -sphere.material = Assets.DebugMaterial("sphere", true); +sphere.material = Assets.DebugMaterial("sphere", true, false, scene); shadowGenerator.addShadowCaster(sphere); const box = MeshBuilder.CreateBox("box", { size: 2 }, scene); box.position.y = 4; box.position.x = -4; -box.material = Assets.DebugMaterial("box", true); +box.material = Assets.DebugMaterial("box", true, false, scene); shadowGenerator.addShadowCaster(box); const spaceship = new Spaceship(scene); @@ -103,7 +103,7 @@ const capsule = MeshBuilder.CreateCapsule("capsule", { radius: 0.6, height: 2 }, capsule.position.y = 4; capsule.position.x = -4; capsule.position.z = 4; -capsule.material = Assets.DebugMaterial("capsule", true); +capsule.material = Assets.DebugMaterial("capsule", true, false, scene); capsule.visibility = 0.5; shadowGenerator.addShadowCaster(capsule); diff --git a/src/ts/planets/common.ts b/src/ts/planets/common.ts index 9df22be50..48c314435 100644 --- a/src/ts/planets/common.ts +++ b/src/ts/planets/common.ts @@ -19,8 +19,14 @@ import { centeredRand } from "extended-random"; import { GenerationSteps } from "../model/common"; import { Settings } from "../settings"; import { PlanetModel } from "../architecture/planet"; +import { CelestialBodyModel } from "../architecture/celestialBody"; export function getMoonSeed(model: PlanetModel, index: number) { if (index > model.nbMoons) throw new Error("Moon out of bound! " + index); return centeredRand(model.rng, GenerationSteps.MOONS + index) * Settings.SEED_HALF_RANGE; } + +export function getSpaceStationSeed(model: CelestialBodyModel, index: number) { + if (index > model.getNbSpaceStations()) throw new Error("Space station out of bound! " + index); + return centeredRand(model.rng, GenerationSteps.SPACE_STATIONS + index) * Settings.SEED_HALF_RANGE; +} diff --git a/src/ts/planets/gasPlanet/gasPlanet.ts b/src/ts/planets/gasPlanet/gasPlanet.ts index e7e3a5d51..4ac39c80d 100644 --- a/src/ts/planets/gasPlanet/gasPlanet.ts +++ b/src/ts/planets/gasPlanet/gasPlanet.ts @@ -37,6 +37,7 @@ import { Cullable } from "../../bodies/cullable"; import { RingsUniforms } from "../../postProcesses/rings/ringsUniform"; import { OrbitalObjectPhysicalProperties } from "../../architecture/physicalProperties"; import { Transformable } from "../../architecture/transformable"; +import i18n from "../../i18n"; export class GasPlanet implements Planet, Cullable { private readonly mesh: Mesh; @@ -116,7 +117,7 @@ export class GasPlanet implements Planet, Cullable { } getTypeName(): string { - return "Gas Planet"; + return i18n.t("objectTypes:gasPlanet"); } public computeCulling(camera: Camera): void { diff --git a/src/ts/planets/gasPlanet/gasPlanetMaterial.ts b/src/ts/planets/gasPlanet/gasPlanetMaterial.ts index 474730a72..b3ac2d1d9 100644 --- a/src/ts/planets/gasPlanet/gasPlanetMaterial.ts +++ b/src/ts/planets/gasPlanet/gasPlanetMaterial.ts @@ -35,6 +35,8 @@ export class GasPlanetMaterial extends ShaderMaterial { readonly colorSettings: GazColorSettings; private clock = 0; + private stellarObjects: Transformable[] = []; + constructor(planetName: string, planet: TransformNode, model: GasPlanetModel, scene: Scene) { const shaderName = "gasPlanetMaterial"; if (Effect.ShadersStore[`${shaderName}FragmentShader`] === undefined) { @@ -88,6 +90,20 @@ export class GasPlanetMaterial extends ShaderMaterial { this.setColor3("color3", this.colorSettings.color3); this.updateConstants(); + + this.onBindObservable.add(() => { + this.getEffect().setMatrix("normalMatrix", this.planet.getWorldMatrix().clone().invert().transpose()); + + const activeCamera = scene.activeCamera; + if(activeCamera === null) throw new Error("There is no active camera for GasPlanetMaterial!"); + this.getEffect().setVector3("playerPosition", activeCamera.globalPosition); + + this.getEffect().setArray3("star_positions", flattenVector3Array(this.stellarObjects.map((star) => star.getTransform().getAbsolutePosition()))); + this.getEffect().setArray3("star_colors", flattenColor3Array(this.stellarObjects.map((star) => (star instanceof Star ? star.model.color : Color3.White())))); + this.getEffect().setInt("nbStars", this.stellarObjects.length); + + this.getEffect().setFloat("time", this.clock % 100000); + }); } public updateConstants(): void { @@ -96,15 +112,6 @@ export class GasPlanetMaterial extends ShaderMaterial { public update(player: Camera, stellarObjects: Transformable[], deltaTime: number) { this.clock += deltaTime; - - this.setMatrix("normalMatrix", this.planet.getWorldMatrix().clone().invert().transpose()); - - this.setVector3("playerPosition", player.globalPosition); - - this.setArray3("star_positions", flattenVector3Array(stellarObjects.map((star) => star.getTransform().getAbsolutePosition()))); - this.setArray3("star_colors", flattenColor3Array(stellarObjects.map((star) => (star instanceof Star ? star.model.color : Color3.White())))); - this.setInt("nbStars", stellarObjects.length); - - this.setFloat("time", this.clock % 100000); + this.stellarObjects = stellarObjects; } } diff --git a/src/ts/planets/gasPlanet/gasPlanetModel.ts b/src/ts/planets/gasPlanet/gasPlanetModel.ts index 89dd2a84b..d8a45e29f 100644 --- a/src/ts/planets/gasPlanet/gasPlanetModel.ts +++ b/src/ts/planets/gasPlanet/gasPlanetModel.ts @@ -99,8 +99,8 @@ export class GasPlanetModel implements PlanetModel { } public getNbSpaceStations(): number { - if (uniformRandBool(0.2, this.rng, GenerationSteps.SPACE_STATION)) return 1; - if (uniformRandBool(0.1, this.rng, GenerationSteps.SPACE_STATION + 10)) return 2; + if (uniformRandBool(0.2, this.rng, GenerationSteps.SPACE_STATIONS)) return 1; + if (uniformRandBool(0.1, this.rng, GenerationSteps.SPACE_STATIONS + 10)) return 2; return 0; } } diff --git a/src/ts/planets/telluricPlanet/colorSettingsInterface.ts b/src/ts/planets/telluricPlanet/colorSettingsInterface.ts index f2ce3257e..d415aa83b 100644 --- a/src/ts/planets/telluricPlanet/colorSettingsInterface.ts +++ b/src/ts/planets/telluricPlanet/colorSettingsInterface.ts @@ -17,7 +17,7 @@ import { Color3 } from "@babylonjs/core/Maths/math.color"; -export enum ColorMode { +export const enum ColorMode { DEFAULT, MOISTURE, TEMPERATURE, diff --git a/src/ts/planets/telluricPlanet/telluricPlanet.ts b/src/ts/planets/telluricPlanet/telluricPlanet.ts index 18b1e28e3..91a4d3304 100644 --- a/src/ts/planets/telluricPlanet/telluricPlanet.ts +++ b/src/ts/planets/telluricPlanet/telluricPlanet.ts @@ -43,6 +43,7 @@ import { RingsUniforms } from "../../postProcesses/rings/ringsUniform"; import { OrbitalObjectPhysicalProperties } from "../../architecture/physicalProperties"; import { rotate } from "../../uberCore/transforms/basicTransform"; import { BodyType } from "../../model/common"; +import i18n from "../../i18n"; export class TelluricPlanet implements Planet, Cullable { readonly name: string; @@ -150,9 +151,9 @@ export class TelluricPlanet implements Planet, Cullable { getTypeName(): string { if (this.parent?.model.bodyType === BodyType.TELLURIC_PLANET || this.parent?.model.bodyType === BodyType.GAS_PLANET) { - return "Telluric Moon"; + return i18n.t("objectTypes:telluricMoon"); } - return "Telluric Planet"; + return i18n.t("objectTypes:telluricPlanet"); } /** diff --git a/src/ts/planets/telluricPlanet/telluricPlanetMaterial.ts b/src/ts/planets/telluricPlanet/telluricPlanetMaterial.ts index f395e829b..2213180fa 100644 --- a/src/ts/planets/telluricPlanet/telluricPlanetMaterial.ts +++ b/src/ts/planets/telluricPlanet/telluricPlanetMaterial.ts @@ -52,6 +52,8 @@ export class TelluricPlanetMaterial extends ShaderMaterial { */ private readonly planetModel: TelluricPlanetModel; + private stellarObjects: Transformable[] = []; + /** * Creates a new telluric planet material * @param planetName The name of the planet @@ -208,16 +210,24 @@ export class TelluricPlanetMaterial extends ShaderMaterial { } public update(cameraPosition: Vector3, stellarObjects: Transformable[]) { - const inversePlanetWorldMatrix = this.planetTransform.getWorldMatrix().clone().invert(); - this.setMatrix("normalMatrix", inversePlanetWorldMatrix.transpose()); - this.setMatrix("inversePlanetWorldMatrix", inversePlanetWorldMatrix); + this.stellarObjects = stellarObjects; - this.setVector3("playerPosition", cameraPosition); + // The add once is important because the material will be bound for every chunk of the planet + // we don't want to compute the same matrix inverse for every chunk + this.onBindObservable.addOnce(() => { + const inversePlanetWorldMatrix = this.planetTransform.getWorldMatrix().clone().invert(); + this.getEffect().setMatrix("normalMatrix", inversePlanetWorldMatrix.transpose()); + this.getEffect().setMatrix("inversePlanetWorldMatrix", inversePlanetWorldMatrix); - this.setArray3("star_positions", flattenVector3Array(stellarObjects.map((star) => star.getTransform().getAbsolutePosition()))); - this.setArray3("star_colors", flattenColor3Array(stellarObjects.map((star) => (star instanceof Star ? star.model.color : Color3.White())))); - this.setInt("nbStars", stellarObjects.length); + const activeCamera = this.getScene().activeCamera; + if (activeCamera === null) throw new Error("There is no active camera for TelluricPlanetMaterial!"); + this.getEffect().setVector3("playerPosition", activeCamera.globalPosition); - this.setVector3("planetPosition", this.planetTransform.getAbsolutePosition()); + this.getEffect().setArray3("star_positions", flattenVector3Array(this.stellarObjects.map((star) => star.getTransform().getAbsolutePosition()))); + this.getEffect().setArray3("star_colors", flattenColor3Array(this.stellarObjects.map((star) => (star instanceof Star ? star.model.color : Color3.White())))); + this.getEffect().setInt("nbStars", this.stellarObjects.length); + + this.getEffect().setVector3("planetPosition", this.planetTransform.getAbsolutePosition()); + }); } } diff --git a/src/ts/planets/telluricPlanet/telluricPlanetModel.ts b/src/ts/planets/telluricPlanet/telluricPlanetModel.ts index b72819447..993106983 100644 --- a/src/ts/planets/telluricPlanet/telluricPlanetModel.ts +++ b/src/ts/planets/telluricPlanet/telluricPlanetModel.ts @@ -160,8 +160,8 @@ export class TelluricPlanetModel implements PlanetModel { } public getNbSpaceStations(): number { - if (uniformRandBool(0.2, this.rng, GenerationSteps.SPACE_STATION)) return 1; - if (uniformRandBool(0.1, this.rng, GenerationSteps.SPACE_STATION + 10)) return 2; + if (uniformRandBool(0.2, this.rng, GenerationSteps.SPACE_STATIONS)) return 1; + if (uniformRandBool(0.1, this.rng, GenerationSteps.SPACE_STATIONS + 10)) return 2; return 0; } } diff --git a/src/ts/planets/telluricPlanet/terrain/chunks/chunkTree.ts b/src/ts/planets/telluricPlanet/terrain/chunks/chunkTree.ts index 64e9e67ba..c4c20124d 100644 --- a/src/ts/planets/telluricPlanet/terrain/chunks/chunkTree.ts +++ b/src/ts/planets/telluricPlanet/terrain/chunks/chunkTree.ts @@ -32,6 +32,7 @@ import { DeleteSemaphore } from "./deleteSemaphore"; import { UberScene } from "../../../../uberCore/uberScene"; import { getRotationQuaternion } from "../../../../uberCore/transforms/basicTransform"; import { ChunkForge } from "./chunkForge"; +import { clamp } from "../../../../utils/math"; /** * A quadTree is defined recursively @@ -138,6 +139,10 @@ export class ChunkTree { this.deleteSemaphores = this.deleteSemaphores.filter((mutex) => !mutex.isResolved()); this.tree = this.updateLODRecursively(observerPosition, chunkForge); + + this.executeOnEveryChunk((chunk) => { + chunk.updatePosition(); + }); } private getAverageHeight(tree: QuadTree): number { @@ -172,41 +177,35 @@ export class ChunkTree { if (walked.length === this.maxDepth) return tree; const nodeRelativePosition = getChunkSphereSpacePositionFromPath(walked, this.direction, this.rootChunkLength / 2, getRotationQuaternion(this.parent)); - const nodePositionW = nodeRelativePosition.add(this.parent.getAbsolutePosition()); - const direction = nodePositionW.subtract(this.parent.getAbsolutePosition()).normalize(); - const additionalHeight = this.getAverageHeight(tree); - const chunkApproxPosition = nodePositionW.add(direction.scale(additionalHeight)); - const distanceToNodeSquared = Vector3.DistanceSquared(chunkApproxPosition, observerPositionW); + const nodePositionSphere = nodeRelativePosition.normalizeToNew(); + const observerPositionSphere = observerPositionW.subtract(this.parent.getAbsolutePosition()).normalize(); - const subdivisionDistanceThreshold = Settings.CHUNK_RENDERING_DISTANCE_MULTIPLIER * (this.rootChunkLength / 2 ** walked.length); - const deletionDistanceThreshold = 15e3 + 1.1 * Settings.CHUNK_RENDERING_DISTANCE_MULTIPLIER * (this.rootChunkLength / 2 ** (walked.length - 1)); + const totalRadius = + this.planetModel.radius + + (this.planetModel.terrainSettings.max_mountain_height + + this.planetModel.terrainSettings.continent_base_height + + this.planetModel.terrainSettings.max_bump_height) * 0.5; - // the 1.5 is to avoid creation/deletion oscillations - if (distanceToNodeSquared > deletionDistanceThreshold ** 2 && walked.length >= this.minDepth && tree instanceof Array) { - const newChunk = this.createChunk(walked, chunkForge); - if (tree.length === 0 && walked.length === 0) { - return newChunk; - } - this.requestDeletion(tree, [newChunk]); - return newChunk; - } + const observerRelativePosition = observerPositionW.subtract(this.parent.getAbsolutePosition()); + const observerDistanceToCenter = observerRelativePosition.length(); - if (tree instanceof Array) { - return [ - this.updateLODRecursively(observerPositionW, chunkForge, tree[0], walked.concat([0])), - this.updateLODRecursively(observerPositionW, chunkForge, tree[1], walked.concat([1])), - this.updateLODRecursively(observerPositionW, chunkForge, tree[2], walked.concat([2])), - this.updateLODRecursively(observerPositionW, chunkForge, tree[3], walked.concat([3])) - ]; - } + const nodeGreatCircleDistance = Math.acos(Vector3.Dot(nodePositionSphere, observerPositionSphere)); + const nodeLength = this.rootChunkLength / 2 ** walked.length; - if (distanceToNodeSquared < subdivisionDistanceThreshold ** 2 || walked.length < this.minDepth) { - if (tree instanceof PlanetChunk) { - if (!tree.isReady()) return tree; - if (!tree.mesh.isVisible) return tree; - if (!tree.mesh.isEnabled()) return tree; - } + const chunkGreatDistanceFactor = Math.max(0.0, nodeGreatCircleDistance - 8 * nodeLength / (2 * Math.PI * this.planetModel.radius)); + const observerDistanceFactor = Math.max(0.0, observerDistanceToCenter - totalRadius) / this.planetModel.radius; + + let kernel = this.maxDepth; + kernel -= Math.log2(1.0 + chunkGreatDistanceFactor * 2 ** (this.maxDepth - this.minDepth)) * 0.8; + kernel -= Math.log2(1.0 + observerDistanceFactor * 2 ** (this.maxDepth - this.minDepth)) * 0.8; + + const targetLOD = clamp(Math.floor(kernel), this.minDepth, this.maxDepth); + + if (tree instanceof PlanetChunk && targetLOD > walked.length) { + if (!tree.isReady()) return tree; + if (!tree.mesh.isVisible) return tree; + if (!tree.mesh.isEnabled()) return tree; const newTree = [ this.createChunk(walked.concat([0]), chunkForge), @@ -218,9 +217,22 @@ export class ChunkTree { return newTree; } - if (tree instanceof PlanetChunk) return tree; + if (tree instanceof Array) { + if (targetLOD < walked.length - 1) { + const newChunk = this.createChunk(walked, chunkForge); + this.requestDeletion(tree, [newChunk]); + return newChunk; + } + + return [ + this.updateLODRecursively(observerPositionW, chunkForge, tree[0], walked.concat([0])), + this.updateLODRecursively(observerPositionW, chunkForge, tree[1], walked.concat([1])), + this.updateLODRecursively(observerPositionW, chunkForge, tree[2], walked.concat([2])), + this.updateLODRecursively(observerPositionW, chunkForge, tree[3], walked.concat([3])) + ]; + } - throw new Error("This should never happen"); + return tree; } /** @@ -232,7 +244,7 @@ export class ChunkTree { private createChunk(path: number[], chunkForge: ChunkForge): PlanetChunk { const chunk = new PlanetChunk(path, this.direction, this.parentAggregate, this.material, this.planetModel, this.rootChunkLength, this.scene); - chunk.onRecieveVertexDataObservable.add(() => { + chunk.onReceiveVertexDataObservable.add(() => { this.onChunkCreatedObservable.notifyObservers(chunk); }); diff --git a/src/ts/planets/telluricPlanet/terrain/chunks/deleteSemaphore.ts b/src/ts/planets/telluricPlanet/terrain/chunks/deleteSemaphore.ts index 57b4a6cba..e0f7cc023 100644 --- a/src/ts/planets/telluricPlanet/terrain/chunks/deleteSemaphore.ts +++ b/src/ts/planets/telluricPlanet/terrain/chunks/deleteSemaphore.ts @@ -32,7 +32,7 @@ export class DeleteSemaphore { this.chunksToDelete = chunksToDelete; for (const chunk of newChunks) { - chunk.onRecieveVertexDataObservable.add(() => this.countdown()); + chunk.onReceiveVertexDataObservable.add(() => this.countdown()); } } @@ -47,6 +47,9 @@ export class DeleteSemaphore { for (const chunk of this.chunksToDelete) { chunk.dispose(); } + + this.chunksToDelete.length = 0; + this.newChunks.length = 0; } /** diff --git a/src/ts/planets/telluricPlanet/terrain/chunks/planetChunk.ts b/src/ts/planets/telluricPlanet/terrain/chunks/planetChunk.ts index 96719f63a..e84e7c79c 100644 --- a/src/ts/planets/telluricPlanet/terrain/chunks/planetChunk.ts +++ b/src/ts/planets/telluricPlanet/terrain/chunks/planetChunk.ts @@ -34,19 +34,21 @@ import { IPatch } from "../instancePatch/iPatch"; import { TelluricPlanetModel } from "../../telluricPlanetModel"; import { BoundingSphere } from "../../../../architecture/boundingSphere"; import { PhysicsMotionType, PhysicsShapeType } from "@babylonjs/core/Physics/v2/IPhysicsEnginePlugin"; -import { LockConstraint } from "@babylonjs/core/Physics/v2/physicsConstraint"; import { Transformable } from "../../../../architecture/transformable"; import { CollisionMask } from "../../../../settings"; import { InstancePatch } from "../instancePatch/instancePatch"; +import { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh"; +import { UberScene } from "../../../../uberCore/uberScene"; export class PlanetChunk implements Transformable, BoundingSphere { public readonly mesh: Mesh; private readonly depth: number; public readonly cubePosition: Vector3; + private readonly planetLocalPosition: Vector3; - readonly planetModel: TelluricPlanetModel; + private readonly planetModel: TelluricPlanetModel; - readonly chunkSideLength: number; + private readonly chunkSideLength: number; private loaded = false; @@ -54,11 +56,10 @@ export class PlanetChunk implements Transformable, BoundingSphere { readonly instancePatches: IPatch[] = []; - readonly onRecieveVertexDataObservable = new Observable(); + readonly onReceiveVertexDataObservable = new Observable(); readonly onDisposeObservable = new Observable(); - aggregate: PhysicsAggregate | null = null; - readonly parentAggregate: PhysicsAggregate; + private aggregate: PhysicsAggregate | null = null; private averageHeight = 0; @@ -66,6 +67,8 @@ export class PlanetChunk implements Transformable, BoundingSphere { private disposed = false; + private readonly scene: Scene; + constructor(path: number[], direction: Direction, parentAggregate: PhysicsAggregate, material: Material, planetModel: TelluricPlanetModel, rootLength: number, scene: Scene) { const id = `D${direction}P${path.join("")}`; @@ -78,16 +81,17 @@ export class PlanetChunk implements Transformable, BoundingSphere { this.mesh = new Mesh(`Chunk${id}`, scene); this.mesh.setEnabled(false); + this.scene = scene; + this.mesh.material = material; - //this.mesh.material = Assets.DebugMaterial(id, false, false); + //this.mesh.material = Assets.DebugMaterial(id, false, false, scene); this.mesh.parent = parentAggregate.transformNode; - //this.mesh.occlusionQueryAlgorithmType = AbstractMesh.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE; - //this.mesh.occlusionType = AbstractMesh.OCCLUSION_TYPE_OPTIMISTIC; + this.mesh.occlusionQueryAlgorithmType = AbstractMesh.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE; + this.mesh.occlusionType = AbstractMesh.OCCLUSION_TYPE_OPTIMISTIC; this.parent = parentAggregate.transformNode; - this.parentAggregate = parentAggregate; // computing the position of the chunk on the side of the planet const position = getChunkPlaneSpacePositionFromPath(rootLength, path); @@ -100,6 +104,7 @@ export class PlanetChunk implements Transformable, BoundingSphere { position.normalize().scaleInPlace(rootLength / 2); + this.planetLocalPosition = position.clone(); this.getTransform().position = position; } @@ -139,8 +144,6 @@ export class PlanetChunk implements Transformable, BoundingSphere { this.aggregate.body.disablePreStep = false; this.aggregate.shape.filterMembershipMask = CollisionMask.ENVIRONMENT; this.aggregate.shape.filterCollideMask = CollisionMask.DYNAMIC_OBJECTS; - const constraint = new LockConstraint(Vector3.Zero(), this.getTransform().position.negate(), new Vector3(0, 1, 0), new Vector3(0, 1, 0), this.mesh.getScene()); - this.parentAggregate.body.addConstraint(this.aggregate.body, constraint); } this.mesh.setEnabled(true); @@ -148,7 +151,7 @@ export class PlanetChunk implements Transformable, BoundingSphere { this.averageHeight = averageHeight; - this.onRecieveVertexDataObservable.notifyObservers(); + this.onReceiveVertexDataObservable.notifyObservers(); if (instancesMatrixBuffer.length === 0) return; @@ -172,9 +175,23 @@ export class PlanetChunk implements Transformable, BoundingSphere { const grassPatch = new ThinInstancePatch(this.parent, instancesMatrixBuffer); grassPatch.createInstances(Assets.GRASS_BLADE); this.instancePatches.push(grassPatch); + + for(const depthRenderer of Object.values(this.scene._depthRenderer)) { + depthRenderer.setMaterialForRendering([butterflyPatch.getBaseMesh()], Assets.BUTTERFLY_DEPTH_MATERIAL); + depthRenderer.setMaterialForRendering([grassPatch.getBaseMesh()], Assets.GRASS_DEPTH_MATERIAL); + } } } + /** + * When the chunk has a Havok body, parenting is ignored so this method must be called to compensate. + * If the chunk has no Havok body, this method does nothing + */ + public updatePosition() { + if (this.aggregate === null) return; + this.getTransform().setAbsolutePosition(Vector3.TransformCoordinates(this.planetLocalPosition, this.parent.getWorldMatrix())); + } + public getAverageHeight(): number { return this.averageHeight; } @@ -202,7 +219,7 @@ export class PlanetChunk implements Transformable, BoundingSphere { this.helpers.forEach((helper) => helper.dispose()); this.instancePatches.forEach((patch) => patch.dispose()); this.mesh.dispose(); - this.onRecieveVertexDataObservable.clear(); + this.onReceiveVertexDataObservable.clear(); this.onDisposeObservable.clear(); this.disposed = true; diff --git a/src/ts/planets/telluricPlanet/terrain/chunks/taskTypes.ts b/src/ts/planets/telluricPlanet/terrain/chunks/taskTypes.ts index 60129c6b5..4a3c39f54 100644 --- a/src/ts/planets/telluricPlanet/terrain/chunks/taskTypes.ts +++ b/src/ts/planets/telluricPlanet/terrain/chunks/taskTypes.ts @@ -21,7 +21,7 @@ import { TerrainSettings } from "../terrainSettings"; import { Vector3 } from "@babylonjs/core/Maths/math.vector"; import { VertexData } from "@babylonjs/core/Meshes/mesh.vertexData"; -export enum TaskType { +export const enum TaskType { BUILD, APPLY } diff --git a/src/ts/planets/telluricPlanet/terrain/instancePatch/hierarchyInstancePatch.ts b/src/ts/planets/telluricPlanet/terrain/instancePatch/hierarchyInstancePatch.ts index 90aea05ad..b01193580 100644 --- a/src/ts/planets/telluricPlanet/terrain/instancePatch/hierarchyInstancePatch.ts +++ b/src/ts/planets/telluricPlanet/terrain/instancePatch/hierarchyInstancePatch.ts @@ -89,6 +89,11 @@ export class HierarchyInstancePatch implements IPatch { this.baseRoot.setEnabled(enabled); } + public getBaseMesh(): Mesh { + if (this.baseRoot === null) throw new Error("Tried to get base mesh but no base mesh was set."); + return this.baseRoot as Mesh; + } + public getNbInstances(): number { if (this.baseRoot === null) return 0; return this.instances.length; diff --git a/src/ts/planets/telluricPlanet/terrain/instancePatch/iPatch.ts b/src/ts/planets/telluricPlanet/terrain/instancePatch/iPatch.ts index b4a00b6e4..e0cfae8a0 100644 --- a/src/ts/planets/telluricPlanet/terrain/instancePatch/iPatch.ts +++ b/src/ts/planets/telluricPlanet/terrain/instancePatch/iPatch.ts @@ -16,6 +16,7 @@ // along with this program. If not, see . import { TransformNode } from "@babylonjs/core/Meshes/transformNode"; +import { Mesh } from "@babylonjs/core/Meshes/mesh"; export interface IPatch { /** @@ -38,6 +39,8 @@ export interface IPatch { */ getNbInstances(): number; + getBaseMesh(): Mesh; + setEnabled(enabled: boolean): void; /** diff --git a/src/ts/planets/telluricPlanet/terrain/instancePatch/instancePatch.ts b/src/ts/planets/telluricPlanet/terrain/instancePatch/instancePatch.ts index a60acace2..7a5a5e1c6 100644 --- a/src/ts/planets/telluricPlanet/terrain/instancePatch/instancePatch.ts +++ b/src/ts/planets/telluricPlanet/terrain/instancePatch/instancePatch.ts @@ -84,6 +84,11 @@ export class InstancePatch implements IPatch { } } + public getBaseMesh(): Mesh { + if (this.baseMesh === null) throw new Error("Tried to get base mesh but no base mesh was set."); + return this.baseMesh; + } + public getNbInstances(): number { return this.instances.length; } diff --git a/src/ts/planets/telluricPlanet/terrain/instancePatch/thinInstancePatch.ts b/src/ts/planets/telluricPlanet/terrain/instancePatch/thinInstancePatch.ts index 2f7ab758d..fcf178163 100644 --- a/src/ts/planets/telluricPlanet/terrain/instancePatch/thinInstancePatch.ts +++ b/src/ts/planets/telluricPlanet/terrain/instancePatch/thinInstancePatch.ts @@ -80,6 +80,11 @@ export class ThinInstancePatch implements IPatch { this.baseMesh.setEnabled(enabled); } + public getBaseMesh(): Mesh { + if (this.baseMesh === null) throw new Error("Tried to get base mesh but no base mesh was set."); + return this.baseMesh; + } + public dispose() { this.clearInstances(); if (this.baseMesh !== null) this.baseMesh.dispose(); diff --git a/src/ts/postProcesses/clouds/cloudsUniforms.ts b/src/ts/postProcesses/clouds/cloudsUniforms.ts index 8181a5026..008260f27 100644 --- a/src/ts/postProcesses/clouds/cloudsUniforms.ts +++ b/src/ts/postProcesses/clouds/cloudsUniforms.ts @@ -173,7 +173,7 @@ export class CloudsUniforms { this.lut = lut; } - return new Promise((resolve, reject) => { + return new Promise((resolve) => { if (this.lut === null) throw new Error("LUT is null when creating promise"); this.lut.executeWhenReady(() => { if (this.lut === null) throw new Error("LUT is null when executing when ready"); diff --git a/src/ts/postProcesses/postProcessManager.ts b/src/ts/postProcesses/postProcessManager.ts index fbdce40c9..fdc58402a 100644 --- a/src/ts/postProcesses/postProcessManager.ts +++ b/src/ts/postProcesses/postProcessManager.ts @@ -172,7 +172,7 @@ export class PostProcessManager { this.renderingPipelineManager = scene.postProcessRenderPipelineManager; - this.colorCorrection = new ColorCorrection("colorCorrection", scene.getEngine()); + this.colorCorrection = new ColorCorrection("colorCorrection", scene); this.colorCorrection.exposure = 1.5; this.colorCorrection.gamma = 1.0; this.colorCorrection.saturation = 1.2; diff --git a/src/ts/postProcesses/postProcessTypes.ts b/src/ts/postProcesses/postProcessTypes.ts index 1d714a395..e0ff2102f 100644 --- a/src/ts/postProcesses/postProcessTypes.ts +++ b/src/ts/postProcesses/postProcessTypes.ts @@ -15,7 +15,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export enum PostProcessType { +export const enum PostProcessType { VOLUMETRIC_LIGHT, OCEAN, CLOUDS, diff --git a/src/ts/postProcesses/rings/ringsUniform.ts b/src/ts/postProcesses/rings/ringsUniform.ts index 2ffb72aae..898049833 100644 --- a/src/ts/postProcesses/rings/ringsUniform.ts +++ b/src/ts/postProcesses/rings/ringsUniform.ts @@ -176,7 +176,7 @@ export class RingsUniforms { this.ringLut = lut; } - return new Promise((resolve, reject) => { + return new Promise((resolve) => { if (this.ringLut === null) throw new Error("Ring LUT was null when creating promise"); this.ringLut.executeWhenReady(() => { if (this.ringLut === null) throw new Error("Ring LUT was null when executing when ready"); diff --git a/src/ts/postProcesses/volumetricLight.ts b/src/ts/postProcesses/volumetricLight.ts index 1246c7a3b..bd6665bf2 100644 --- a/src/ts/postProcesses/volumetricLight.ts +++ b/src/ts/postProcesses/volumetricLight.ts @@ -31,6 +31,9 @@ export class VolumetricLight extends VolumetricLightScatteringPostProcess implem if (scene.activeCamera === null) throw new Error("no camera"); super(`${star.name}VolumetricLight`, 1, null, star.mesh, 100, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, scene); + // This is necessary because BabylonJS post process sets the scene using the camera. However, I don't pass a camera to the constructor as I use a PostProcessRenderPipeline. + this._scene = scene; + this.object = star; this.exposure = 0.26; diff --git a/src/ts/proceduralAssets/butterfly/butterflyMaterial.ts b/src/ts/proceduralAssets/butterfly/butterflyMaterial.ts index e25af3fd9..544a07190 100644 --- a/src/ts/proceduralAssets/butterfly/butterflyMaterial.ts +++ b/src/ts/proceduralAssets/butterfly/butterflyMaterial.ts @@ -28,15 +28,24 @@ import { Transformable } from "../../architecture/transformable"; export class ButterflyMaterial extends ShaderMaterial { private elapsedSeconds = 0; - constructor(scene: Scene) { + private stars: Transformable[] = []; + private playerPosition: Vector3 = Vector3.Zero(); + + constructor(scene: Scene, isDepthMaterial: boolean) { const shaderName = "butterflyMaterial"; Effect.ShadersStore[`${shaderName}FragmentShader`] = butterflyFragment; Effect.ShadersStore[`${shaderName}VertexShader`] = butterflyVertex; + const defines = ["#define INSTANCES"]; + if (isDepthMaterial) defines.push("#define FORDEPTH"); + + const uniforms = ["world", "worldView", "worldViewProjection", "view", "projection", "viewProjection", "time", "lightDirection", "playerPosition"]; + if(isDepthMaterial) uniforms.push("depthValues"); + super(shaderName, scene, shaderName, { attributes: ["position", "normal", "uv"], - uniforms: ["world", "worldView", "worldViewProjection", "view", "projection", "viewProjection", "time", "lightDirection", "playerPosition"], - defines: ["#define INSTANCES"], + uniforms: uniforms, + defines: defines, samplers: ["butterflyTexture"] }); @@ -45,18 +54,22 @@ export class ButterflyMaterial extends ShaderMaterial { this.setFloat("time", 0); this.setTexture("butterflyTexture", new Texture(butterflyTexture, scene)); this.backFaceCulling = false; + + this.onBindObservable.add(() => { + if (this.stars.length > 0) { + const star = this.stars[0]; + const lightDirection = star.getTransform().getAbsolutePosition().subtract(this.playerPosition).normalize(); + this.getEffect().setVector3("lightDirection", lightDirection); + } + + this.getEffect().setVector3("playerPosition", this.playerPosition); + this.getEffect().setFloat("time", this.elapsedSeconds); + }); } update(stars: Transformable[], playerPosition: Vector3, deltaSeconds: number) { this.elapsedSeconds += deltaSeconds; - - if (stars.length > 0) { - const star = stars[0]; - const lightDirection = star.getTransform().getAbsolutePosition().subtract(playerPosition).normalize(); - this.setVector3("lightDirection", lightDirection); - } - - this.setVector3("playerPosition", playerPosition); - this.setFloat("time", this.elapsedSeconds); + this.stars = stars; + this.playerPosition = playerPosition; } } diff --git a/src/ts/proceduralAssets/grass/grassMaterial.ts b/src/ts/proceduralAssets/grass/grassMaterial.ts index 2be220bb3..98ae0350c 100644 --- a/src/ts/proceduralAssets/grass/grassMaterial.ts +++ b/src/ts/proceduralAssets/grass/grassMaterial.ts @@ -28,15 +28,24 @@ import { Vector3 } from "@babylonjs/core/Maths/math.vector"; export class GrassMaterial extends ShaderMaterial { private elapsedSeconds = 0; - constructor(scene: Scene) { + private stars: Transformable[] = []; + private playerPosition: Vector3 = Vector3.Zero(); + + constructor(scene: Scene, isDepthMaterial: boolean) { const shaderName = "grassMaterial"; Effect.ShadersStore[`${shaderName}FragmentShader`] = grassFragment; Effect.ShadersStore[`${shaderName}VertexShader`] = grassVertex; + const defines = ["#define INSTANCES"]; + if (isDepthMaterial) defines.push("#define FORDEPTH"); + + const uniforms = ["world", "worldView", "worldViewProjection", "view", "projection", "viewProjection", "time", "lightDirection", "cameraPosition", "playerPosition"]; + if(isDepthMaterial) uniforms.push("depthValues"); + super(shaderName, scene, shaderName, { attributes: ["position", "normal"], - uniforms: ["world", "worldView", "worldViewProjection", "view", "projection", "viewProjection", "time", "lightDirection", "cameraPosition", "playerPosition"], - defines: ["#define INSTANCES"], + uniforms: uniforms, + defines: defines, samplers: ["perlinNoise"] }); @@ -44,18 +53,22 @@ export class GrassMaterial extends ShaderMaterial { this.backFaceCulling = false; this.setTexture("perlinNoise", perlinTexture); + + this.onBindObservable.add(() => { + if (this.stars.length > 0) { + const star = this.stars[0]; + const lightDirection = star.getTransform().getAbsolutePosition().subtract(this.playerPosition).normalize(); + this.getEffect().setVector3("lightDirection", lightDirection); + } + + this.getEffect().setVector3("playerPosition", this.playerPosition); + this.getEffect().setFloat("time", this.elapsedSeconds); + }); } update(stars: Transformable[], playerPosition: Vector3, deltaSeconds: number) { this.elapsedSeconds += deltaSeconds; - - if (stars.length > 0) { - const star = stars[0]; - const lightDirection = star.getTransform().getAbsolutePosition().subtract(playerPosition).normalize(); - this.setVector3("lightDirection", lightDirection); - } - - this.setVector3("playerPosition", playerPosition); - this.setFloat("time", this.elapsedSeconds); + this.stars = stars; + this.playerPosition = playerPosition; } } diff --git a/src/ts/spacelegs/characterControlsInputs.ts b/src/ts/spacelegs/characterControlsInputs.ts index ef13c689b..53d61cfc0 100644 --- a/src/ts/spacelegs/characterControlsInputs.ts +++ b/src/ts/spacelegs/characterControlsInputs.ts @@ -60,4 +60,4 @@ export const CharacterInputs = new InputMap<{ run: runAction }); -CharacterInputs.setEnabled(false); \ No newline at end of file +CharacterInputs.setEnabled(false); diff --git a/src/ts/spaceship/shipControls.ts b/src/ts/spaceship/shipControls.ts index 8995b3428..677a39a85 100644 --- a/src/ts/spaceship/shipControls.ts +++ b/src/ts/spaceship/shipControls.ts @@ -30,6 +30,7 @@ import { createNotification } from "../utils/notification"; import { StarSystemInputs } from "../inputs/starSystemInputs"; import { buttonInputToString, pressInteractionToStrings } from "../utils/inputControlsString"; import { ButtonInputControl } from "@brianchirls/game-input/browser"; +import i18n from "../i18n"; export class ShipControls implements Controls { readonly spaceship: Spaceship; @@ -90,11 +91,11 @@ export class ShipControls implements Controls { this.spaceship.onLandingObservable.add(() => { const bindingsString = pressInteractionToStrings(StarSystemInputs.map.toggleSpaceShipCharacter).join(", "); - createNotification(`Landing complete! Use ${bindingsString} to disembark.`, 5000); + createNotification(i18n.t("notifications:landingComplete", { bindingsString: bindingsString }), 5000); }); this.spaceship.onLandingEngaged.add(() => { - createNotification(`Landing sequence engaged.`, 5000); + createNotification(i18n.t("notifications:landingSequenceEngaged"), 5000); }); } diff --git a/src/ts/spaceship/spaceShipControlsInputs.ts b/src/ts/spaceship/spaceShipControlsInputs.ts index fc01904c7..846bd5cd8 100644 --- a/src/ts/spaceship/spaceShipControlsInputs.ts +++ b/src/ts/spaceship/spaceShipControlsInputs.ts @@ -95,4 +95,4 @@ export const SpaceShipControlsInputs = new InputMap<{ throttleToZero: throttleToZeroInteraction }); -SpaceShipControlsInputs.setEnabled(false); \ No newline at end of file +SpaceShipControlsInputs.setEnabled(false); diff --git a/src/ts/spaceship/spaceship.ts b/src/ts/spaceship/spaceship.ts index 214b250e4..1d001f8c8 100644 --- a/src/ts/spaceship/spaceship.ts +++ b/src/ts/spaceship/spaceship.ts @@ -43,7 +43,7 @@ import { AudioManager } from "../audio/audioManager"; import { MainThruster } from "./mainThruster"; import { AudioMasks } from "../audio/audioMasks"; -enum ShipState { +const enum ShipState { FLYING, LANDING, LANDED @@ -139,7 +139,7 @@ export class Spaceship implements Transformable { this.disableWarpDriveSound = new AudioInstance(Assets.DISABLE_WARP_DRIVE_SOUND, AudioMasks.STAR_SYSTEM_VIEW, 1, true, this.getTransform()); this.acceleratingWarpDriveSound = new AudioInstance(Assets.ACCELERATING_WARP_DRIVE_SOUND, AudioMasks.STAR_SYSTEM_VIEW, 0, false, this.getTransform()); this.deceleratingWarpDriveSound = new AudioInstance(Assets.DECELERATING_WARP_DRIVE_SOUND, AudioMasks.STAR_SYSTEM_VIEW, 0, false, this.getTransform()); - this.hyperSpaceSound = new AudioInstance(Assets.HYPER_SPACE_SOUND, AudioMasks.HYPER_SPACE, 0.0, false, this.getTransform()); + this.hyperSpaceSound = new AudioInstance(Assets.HYPER_SPACE_SOUND, AudioMasks.HYPER_SPACE, 0, false, this.getTransform()); this.thrusterSound = new AudioInstance(Assets.THRUSTER_SOUND, AudioMasks.STAR_SYSTEM_VIEW, 0, false, this.getTransform()); AudioManager.RegisterSound(this.enableWarpDriveSound); @@ -335,7 +335,7 @@ export class Spaceship implements Transformable { } public update(deltaTime: number) { - this.mainEngineTargetSpeed = this.mainEngineThrottle * 500; + this.mainEngineTargetSpeed = Math.sign(this.mainEngineThrottle) * this.mainEngineThrottle ** 2 * 500; const warpSpeed = getForwardDirection(this.aggregate.transformNode).scale(this.warpDrive.getWarpSpeed()); diff --git a/src/ts/spaceship/warpDrive.ts b/src/ts/spaceship/warpDrive.ts index 0dbcdc3b9..16e3c4fdd 100644 --- a/src/ts/spaceship/warpDrive.ts +++ b/src/ts/spaceship/warpDrive.ts @@ -19,7 +19,7 @@ import { Settings } from "../settings"; import { clamp } from "../utils/math"; import { moveTowards } from "../utils/moveTowards"; -enum WarpDriveState { +const enum WarpDriveState { /** * The warp drive is disabled. It can be enabled by the user. */ diff --git a/src/ts/spaceshipExtended/spaceship.ts b/src/ts/spaceshipExtended/spaceship.ts index 762481767..b4a03fb9c 100644 --- a/src/ts/spaceshipExtended/spaceship.ts +++ b/src/ts/spaceshipExtended/spaceship.ts @@ -81,7 +81,7 @@ this.centerOfMassHelper.material = Assets.DebugMaterial("centerOfMassHelper", tr scene ); helperLine.scaling.scaleInPlace(5); - helperLine.material = Assets.DebugMaterial(`helperLine${child.name}`, true); + helperLine.material = Assets.DebugMaterial(`helperLine${child.name}`, true, false, scene); helperLine.parent = child; } else if (child.name.includes("mainThruster")) { @@ -98,7 +98,7 @@ this.centerOfMassHelper.material = Assets.DebugMaterial("centerOfMassHelper", tr scene ); helperLine.scaling.scaleInPlace(5); - helperLine.material = Assets.DebugMaterial(`helperLine${child.name}`, true); + helperLine.material = Assets.DebugMaterial(`helperLine${child.name}`, true, false, scene); helperLine.parent = child; } else { @@ -217,7 +217,7 @@ targetTorqueLocal.addInPlace(targetTorque2Local).normalize();*/ }, this.instanceRoot.getScene() ); - this.targetThrustHelper.material = Assets.DebugMaterial("targetThrustHelper", true); + this.targetThrustHelper.material = Assets.DebugMaterial("targetThrustHelper", true, false, this.instanceRoot.getScene()); const thrusterConfiguration = getThrusterConfiguration(targetThrustLocal, targetTorqueLocal, this.inverseHoverThrusterMatrix); for (let i = 0; i < thrusterConfiguration.length; i++) { diff --git a/src/ts/spacestation/spaceStation.ts b/src/ts/spacestation/spaceStation.ts index 2eec86115..c8de0ffb0 100644 --- a/src/ts/spacestation/spaceStation.ts +++ b/src/ts/spacestation/spaceStation.ts @@ -32,10 +32,11 @@ import { PhysicsAggregate } from "@babylonjs/core/Physics/v2/physicsAggregate"; import { LandingPad } from "../landingPad/landingPad"; import { PhysicsShapeConvexHull, PhysicsShapeMesh } from "@babylonjs/core/Physics/v2/physicsShape"; import { Mesh } from "@babylonjs/core/Meshes/mesh"; -import { LockConstraint } from "@babylonjs/core/Physics/v2/physicsConstraint"; import { CollisionMask } from "../settings"; import { CelestialBody } from "../architecture/celestialBody"; import { PhysicsMotionType, PhysicsShapeType } from "@babylonjs/core/Physics/v2/IPhysicsEnginePlugin"; +import { generateSpaceStationName } from "../utils/spaceStationNameGenerator"; +import i18n from "../i18n"; export class SpaceStation implements OrbitalObject, Cullable { readonly name: string; @@ -50,23 +51,22 @@ export class SpaceStation implements OrbitalObject, Cullable { readonly ringInstances: InstancedMesh[] = []; readonly ringAggregates: PhysicsAggregate[] = []; + readonly ringsLocalPosition: Vector3[] = []; + readonly ringsRadius: number[] = []; readonly landingPads: LandingPad[] = []; readonly parent: OrbitalObject | null = null; - constructor(scene: Scene, parentBody: CelestialBody | null = null) { - //TODO: do not hardcode name - this.name = "Spacestation"; + constructor(scene: Scene, model: SpaceStationModel | number, parentBody: CelestialBody | null = null) { + this.model = model instanceof SpaceStationModel ? model : new SpaceStationModel(model, parentBody?.model); - //TODO: do not hardcode seed - const seed = 1; - - this.model = new SpaceStationModel(seed, parentBody?.model); + this.name = generateSpaceStationName(this.model.rng, 2756); this.parent = parentBody; this.instance = Assets.CreateSpaceStationInstance(); + this.instance.name = this.name; this.aggregate = new PhysicsAggregate( this.getTransform(), @@ -99,9 +99,6 @@ export class SpaceStation implements OrbitalObject, Cullable { const landingPad = new LandingPad(scene, mesh); this.landingPads.push(landingPad); - /*const constraint = new LockConstraint(Vector3.Zero(), landingPad.getTransform().position.negate(), new Vector3(0, 1, 0), new Vector3(0, 1, 0), scene); - this.aggregate.body.addConstraint(landingPad.aggregate.body, constraint);*/ - continue; } @@ -112,8 +109,9 @@ export class SpaceStation implements OrbitalObject, Cullable { ringAggregate.body.disablePreStep = false; this.ringAggregates.push(ringAggregate); - const constraint = new LockConstraint(Vector3.Zero(), mesh.position.negate(), new Vector3(0, 1, 0), new Vector3(0, 1, 0), scene); - this.aggregate.body.addConstraint(ringAggregate.body, constraint); + this.ringsRadius.push(mesh.getBoundingInfo().boundingSphere.radius); + + this.ringsLocalPosition.push(mesh.position.clone()); continue; } @@ -129,6 +127,24 @@ export class SpaceStation implements OrbitalObject, Cullable { console.log("found", this.landingPads.length, "landing pads"); } + updateRings(deltaSeconds: number): void { + for (let i = 0; i < this.ringInstances.length; i++) { + const ringAggregate = this.ringAggregates[i]; + const localPosition = this.ringsLocalPosition[i]; + const ringRadius = this.ringsRadius[i]; + + // g = v * v / r and T = 2 * pi * r / v => v = sqrt(g * r) and T = 2 * pi * r / sqrt(g * r) = 2 * pi * sqrt(r / g) + const rotationPeriod = 2 * Math.PI * Math.sqrt(ringRadius / 9.81); + + const clockwise = i % 2 === 0 ? 1 : -1; + + ringAggregate.transformNode.rotate(Vector3.Up(), deltaSeconds * clockwise * ((2 * Math.PI) / rotationPeriod)); + + // this is necessary because Havok ignores regular parenting + ringAggregate.transformNode.setAbsolutePosition(Vector3.TransformCoordinates(localPosition, this.getTransform().getWorldMatrix())); + } + } + handleDockingRequest(): LandingPad | null { const availableLandingPads = this.landingPads; const nbPads = availableLandingPads.length; @@ -159,7 +175,7 @@ export class SpaceStation implements OrbitalObject, Cullable { } getTypeName(): string { - return "Space Station"; + return i18n.t("objectTypes:spaceStation"); } public computeCulling(camera: Camera): void { diff --git a/src/ts/spacestation/spacestationModel.ts b/src/ts/spacestation/spacestationModel.ts index 316dcce51..87a3c0ddc 100644 --- a/src/ts/spacestation/spacestationModel.ts +++ b/src/ts/spacestation/spacestationModel.ts @@ -23,6 +23,8 @@ import { Vector3 } from "@babylonjs/core/Maths/math.vector"; import { OrbitalObjectModel } from "../architecture/orbitalObject"; import { OrbitalObjectPhysicalProperties } from "../architecture/physicalProperties"; import { CelestialBodyModel } from "../architecture/celestialBody"; +import { normalRandom } from "extended-random"; +import { clamp } from "../utils/math"; export class SpaceStationModel implements OrbitalObjectModel { readonly seed: number; @@ -39,7 +41,7 @@ export class SpaceStationModel implements OrbitalObjectModel { this.parentBody = parentBody ?? null; this.childrenBodies = []; - const orbitRadius = 3 * (parentBody?.radius ?? 0); + const orbitRadius = (2 + clamp(normalRandom(2, 1, this.rng, GenerationSteps.ORBIT), 0, 10)) * (parentBody?.radius ?? 0); this.orbit = { radius: orbitRadius, @@ -51,7 +53,7 @@ export class SpaceStationModel implements OrbitalObjectModel { this.physicalProperties = { mass: 1, - rotationPeriod: 60 * 2, + rotationPeriod: 0, axialTilt: 2 * this.rng(GenerationSteps.AXIAL_TILT) * Math.PI }; } diff --git a/src/ts/starSystem/starSystemController.ts b/src/ts/starSystem/starSystemController.ts index 4d2d439c8..4cc473827 100644 --- a/src/ts/starSystem/starSystemController.ts +++ b/src/ts/starSystem/starSystemController.ts @@ -33,7 +33,7 @@ import { BlackHole } from "../stellarObjects/blackHole/blackHole"; import { NeutronStar } from "../stellarObjects/neutronStar/neutronStar"; import { SystemSeed } from "../utils/systemSeed"; import { ChunkForge } from "../planets/telluricPlanet/terrain/chunks/chunkForge"; -import { OrbitalObject } from "../architecture/orbitalObject"; +import { OrbitalObject, OrbitalObjectUtils } from "../architecture/orbitalObject"; import { CelestialBody } from "../architecture/celestialBody"; import { StellarObject } from "../architecture/stellarObject"; import { Planet } from "../architecture/planet"; @@ -368,7 +368,7 @@ export class StarSystemController { // By doing so, their rotation axis on themselves except the fixed one must as well be rotated in the same way. // Last but not least, the background starfield must be rotated in the opposite direction to give the impression the moon is rotating. if (shouldCompensateRotation) { - const dthetaNearest = OrbitalObject.GetRotationAngle(nearestBody, deltaTime); + const dthetaNearest = OrbitalObjectUtils.GetRotationAngle(nearestBody, deltaTime); for (const object of this.orbitalObjects) { const orbit = object.getOrbitProperties(); @@ -392,7 +392,7 @@ export class StarSystemController { this.universeRotation.copyFrom(starfieldAdditionalRotation.multiply(this.universeRotation)); } else { // if we don't compensate the rotation of the nearest body, we must simply update its rotation - OrbitalObject.UpdateRotation(nearestBody, deltaTime); + OrbitalObjectUtils.UpdateRotation(nearestBody, deltaTime); } // TRANSLATION COMPENSATION @@ -400,7 +400,7 @@ export class StarSystemController { // compute what would be its next position if it were to move normally. // This gives us a translation vector that we can negate and apply to all other bodies. const initialPosition = nearestBody.getTransform().getAbsolutePosition().clone(); - const newPosition = OrbitalObject.GetNextOrbitalPosition(nearestBody, deltaTime); + const newPosition = OrbitalObjectUtils.GetNextOrbitalPosition(nearestBody, deltaTime); const nearestBodyDisplacement = newPosition.subtract(initialPosition); if (shouldCompensateTranslation) { const negatedDisplacement = nearestBodyDisplacement.negate(); @@ -423,8 +423,8 @@ export class StarSystemController { for (const object of this.orbitalObjects) { if (object === nearestBody) continue; - OrbitalObject.UpdateOrbitalPosition(object, deltaTime); - OrbitalObject.UpdateRotation(object, deltaTime); + OrbitalObjectUtils.UpdateOrbitalPosition(object, deltaTime); + OrbitalObjectUtils.UpdateRotation(object, deltaTime); } controller.update(deltaTime); @@ -432,10 +432,7 @@ export class StarSystemController { for (const body of this.telluricPlanets) { // Meshes with LOD are updated (surface quadtrees) body.updateLOD(controller.getTransform().getAbsolutePosition(), chunkForge); - } - - for (const object of this.telluricPlanets) { - object.computeCulling(controller.getActiveCamera()); + body.computeCulling(controller.getActiveCamera()); } for (const object of this.gasPlanets) { @@ -443,6 +440,7 @@ export class StarSystemController { } for (const object of this.spaceStations) { + object.updateRings(deltaTime); object.computeCulling(controller.getActiveCamera()); } diff --git a/src/ts/starSystem/starSystemHelper.ts b/src/ts/starSystem/starSystemHelper.ts index ba8ba1b97..a2d6845a1 100644 --- a/src/ts/starSystem/starSystemHelper.ts +++ b/src/ts/starSystem/starSystemHelper.ts @@ -21,7 +21,6 @@ import { Star } from "../stellarObjects/star/star"; import { starName } from "../utils/parseToStrings"; import { MandelbulbModel } from "../mandelbulb/mandelbulbModel"; import { Mandelbulb } from "../mandelbulb/mandelbulb"; -import { romanNumeral } from "../utils/nameGenerator"; import { BlackHoleModel } from "../stellarObjects/blackHole/blackHoleModel"; import { BlackHole } from "../stellarObjects/blackHole/blackHole"; import { NeutronStarModel } from "../stellarObjects/neutronStar/neutronStarModel"; @@ -30,12 +29,14 @@ import { TelluricPlanetModel } from "../planets/telluricPlanet/telluricPlanetMod import { TelluricPlanet } from "../planets/telluricPlanet/telluricPlanet"; import { GasPlanetModel } from "../planets/gasPlanet/gasPlanetModel"; import { GasPlanet } from "../planets/gasPlanet/gasPlanet"; -import { getMoonSeed } from "../planets/common"; +import { getMoonSeed, getSpaceStationSeed } from "../planets/common"; import { Planet } from "../architecture/planet"; import { StellarObject } from "../architecture/stellarObject"; import { BodyType } from "../model/common"; import { SpaceStation } from "../spacestation/spaceStation"; import { CelestialBody } from "../architecture/celestialBody"; +import { romanNumeral } from "../utils/romanNumerals"; +import { SpaceStationModel } from "../spacestation/spacestationModel"; export class StarSystemHelper { public static MakeStar(starsystem: StarSystemController, model?: number | StarModel): Star { @@ -171,8 +172,8 @@ export class StarSystemHelper { } } - public static MakeSpaceStation(starsystem: StarSystemController, body: CelestialBody): SpaceStation { - const spacestation = new SpaceStation(starsystem.scene, body); + public static MakeSpaceStation(starsystem: StarSystemController, model: SpaceStationModel | number, body: CelestialBody): SpaceStation { + const spacestation = new SpaceStation(starsystem.scene, model, body); starsystem.addSpaceStation(spacestation); return spacestation; } @@ -181,7 +182,8 @@ export class StarSystemHelper { console.assert(n >= 0, `Cannot make a negative amount of space stations : ${n}`); const spaceStations = []; for (let i = 0; i < n; i++) { - const spacestation = StarSystemHelper.MakeSpaceStation(starsystem, body); + const seed = getSpaceStationSeed(body.model, i); + const spacestation = StarSystemHelper.MakeSpaceStation(starsystem, seed, body); spaceStations.push(spacestation); } diff --git a/src/ts/starSystem/starSystemModel.ts b/src/ts/starSystem/starSystemModel.ts index d52aea2d5..55f7a447a 100644 --- a/src/ts/starSystem/starSystemModel.ts +++ b/src/ts/starSystem/starSystemModel.ts @@ -19,16 +19,16 @@ import { seededSquirrelNoise } from "squirrel-noise"; import { centeredRand, randRangeInt, uniformRandBool } from "extended-random"; import { Settings } from "../settings"; import { BodyType } from "../model/common"; -import { generateName } from "../utils/nameGenerator"; +import { generateStarName } from "../utils/starNameGenerator"; import { SystemSeed } from "../utils/systemSeed"; -enum GenerationSteps { +const enum GenerationSteps { NAME, NB_STARS = 20, GENERATE_STARS = 21, NB_PLANETS = 30, GENERATE_PLANETS = 200, - CHOOSE_PLANET_TYPE = 200 + CHOOSE_PLANET_TYPE = 400 } export class StarSystemModel { @@ -41,7 +41,7 @@ export class StarSystemModel { this.seed = seed; this.rng = seededSquirrelNoise(this.seed.hash); - this.name = generateName(this.rng, GenerationSteps.NAME); + this.name = generateStarName(this.rng, GenerationSteps.NAME); } setName(name: string) { diff --git a/src/ts/starSystem/starSystemView.ts b/src/ts/starSystem/starSystemView.ts index 3d17b588b..9e6f43f05 100644 --- a/src/ts/starSystem/starSystemView.ts +++ b/src/ts/starSystem/starSystemView.ts @@ -57,7 +57,7 @@ import { axisCompositeToString } from "../utils/inputControlsString"; import { SpaceShipControlsInputs } from "../spaceship/spaceShipControlsInputs"; import { AxisComposite } from "@brianchirls/game-input/browser"; import { BodyType } from "../model/common"; -import { getMoonSeed } from "../planets/common"; +import { getMoonSeed, getSpaceStationSeed } from "../planets/common"; import { Planet } from "../architecture/planet"; import { AudioManager } from "../audio/audioManager"; import { AudioMasks } from "../audio/audioMasks"; @@ -66,6 +66,7 @@ import { PostProcessManager } from "../postProcesses/postProcessManager"; import { wait } from "../utils/wait"; import { CharacterInputs } from "../spacelegs/characterControlsInputs"; import { DefaultControlsInputs } from "../defaultController/defaultControlsInputs"; +import i18n from "../i18n"; /** * The star system view is the part of Cosmos Journeyer responsible to display the current star system, along with the @@ -320,7 +321,7 @@ export class StarSystemView implements View { if (!(control instanceof AxisComposite)) { throw new Error("Up down is not an axis composite"); } - createNotification(`Hold ${axisCompositeToString(control)[1][1]} to lift off.`, 5000); + createNotification(i18n.t("notifications:howToLiftOff", { bindingsString: axisCompositeToString(control)[1][1] }), 5000); } } }); @@ -422,7 +423,8 @@ export class StarSystemView implements View { const planet = planets[i]; for (let j = 0; j < planet.model.getNbSpaceStations(); j++) { console.log("Space station:", j + 1, "of", planet.model.getNbSpaceStations()); - const spaceStation = StarSystemHelper.MakeSpaceStation(starSystem, planet); + const seed = getSpaceStationSeed(planet.model, j); + const spaceStation = StarSystemHelper.MakeSpaceStation(starSystem, seed, planet); spaceStation.getTransform().setAbsolutePosition(new Vector3(offset * ++objectIndex, 0, 0)); await wait(timeOut); @@ -439,8 +441,8 @@ export class StarSystemView implements View { starSystem.initPositions(2, this.chunkForge, this.postProcessManager); this.ui.createObjectOverlays(starSystem.getOrbitalObjects()); - this.orbitRenderer.setOrbitalObjects(starSystem.getOrbitalObjects()); - this.axisRenderer.setObjects(starSystem.getOrbitalObjects()); + this.orbitRenderer.setOrbitalObjects(starSystem.getOrbitalObjects(), this.scene); + this.axisRenderer.setOrbitalObjects(starSystem.getOrbitalObjects(), this.scene); this.helmetOverlay.setTarget(null); @@ -531,7 +533,9 @@ export class StarSystemView implements View { this.orbitRenderer.update(); Assets.BUTTERFLY_MATERIAL.update(starSystem.stellarObjects, this.scene.getActiveControls().getTransform().getAbsolutePosition(), deltaSeconds); + Assets.BUTTERFLY_DEPTH_MATERIAL.update(starSystem.stellarObjects, this.scene.getActiveControls().getTransform().getAbsolutePosition(), deltaSeconds); Assets.GRASS_MATERIAL.update(starSystem.stellarObjects, this.scene.getActiveControls().getTransform().getAbsolutePosition(), deltaSeconds); + Assets.GRASS_DEPTH_MATERIAL.update(starSystem.stellarObjects, this.scene.getActiveControls().getTransform().getAbsolutePosition(), deltaSeconds); } /** diff --git a/src/ts/starmap/starMap.ts b/src/ts/starmap/starMap.ts index 37edd986a..5d0b3f0aa 100644 --- a/src/ts/starmap/starMap.ts +++ b/src/ts/starmap/starMap.ts @@ -58,6 +58,7 @@ import { AudioMasks } from "../audio/audioMasks"; import { Settings } from "../settings"; import { parseDistance } from "../utils/parseToStrings"; import { StarMapInputs } from "../inputs/starMapInputs"; +import i18n from "../i18n"; export class StarMap implements View { readonly scene: Scene; @@ -470,18 +471,18 @@ export class StarMap implements View { if (this.currentSystemSeed !== null) { const currentInstance = this.seedToInstanceMap.get(this.currentSystemSeed.toString()) as InstancedMesh; const distance = StarMap.StarMapDistanceToLy(Vector3.Distance(currentInstance.getAbsolutePosition(), initializedInstance.getAbsolutePosition())); - text += `Distance: ${parseDistance(distance)}\n`; + text += `${i18n.t("starMap:distance")}: ${parseDistance(distance)}\n`; } if (starModel === null) throw new Error("Star model is null!"); let typeString = ""; - if (starModel.bodyType === BodyType.BLACK_HOLE) typeString = "Black hole"; - else if (starModel.bodyType === BodyType.NEUTRON_STAR) typeString = "Neutron star"; - else typeString = getStellarTypeString(starModel.stellarType); - text += `Type: ${typeString}\n`; + if (starModel.bodyType === BodyType.BLACK_HOLE) typeString = i18n.t("objectTypes:blackHole"); + else if (starModel.bodyType === BodyType.NEUTRON_STAR) typeString = i18n.t("objectTypes:neutronStar"); + else typeString = i18n.t("objectTypes:star", { stellarType: getStellarTypeString(starModel.stellarType) }); + text += `${typeString}\n`; - text += `Planets: ${starSystemModel.getNbPlanets()}\n`; + text += `${i18n.t("starMap:planets")}: ${starSystemModel.getNbPlanets()}\n`; this.starMapUI.attachUIToMesh(initializedInstance); this.starMapUI.setSelectedSystem({ name: starSystemModel.getName(), text }); diff --git a/src/ts/starmap/starMapUI.ts b/src/ts/starmap/starMapUI.ts index ad479171f..565806343 100644 --- a/src/ts/starmap/starMapUI.ts +++ b/src/ts/starmap/starMapUI.ts @@ -32,6 +32,7 @@ import { Settings } from "../settings"; import { Engine } from "@babylonjs/core/Engines/engine"; import { Vector3 } from "@babylonjs/core/Maths/math.vector"; import { FreeCamera } from "@babylonjs/core/Cameras/freeCamera"; +import i18n from "../i18n"; export class StarMapUI { readonly gui: AdvancedDynamicTexture; @@ -92,7 +93,7 @@ export class StarMapUI { this.descriptionPanel.textHorizontalAlignment = TextBlock.HORIZONTAL_ALIGNMENT_LEFT; this.descriptionPanel.setPadding(0, 15, 10, 15); - this.warpButton = Button.CreateSimpleButton("warpButton", "Set Warp Destination"); + this.warpButton = Button.CreateSimpleButton("warpButton", i18n.t("starMap:setAsDestination")); //this.warpButton.width = "100px"; this.warpButton.height = "40px"; this.warpButton.background = "midnightblue"; diff --git a/src/ts/stellarObjects/blackHole/blackHole.ts b/src/ts/stellarObjects/blackHole/blackHole.ts index ab0409e35..fdef9a6f9 100644 --- a/src/ts/stellarObjects/blackHole/blackHole.ts +++ b/src/ts/stellarObjects/blackHole/blackHole.ts @@ -30,6 +30,7 @@ import { TransformNode } from "@babylonjs/core/Meshes"; import { OrbitProperties } from "../../orbit/orbitProperties"; import { RingsUniforms } from "../../postProcesses/rings/ringsUniform"; import { OrbitalObjectPhysicalProperties } from "../../architecture/physicalProperties"; +import i18n from "../../i18n"; export class BlackHole implements StellarObject, Cullable { readonly name: string; @@ -88,7 +89,7 @@ export class BlackHole implements StellarObject, Cullable { } getTypeName(): string { - return "Black Hole"; + return i18n.t("objectTypes:blackHole"); } public computeCulling(camera: Camera): void { diff --git a/src/ts/stellarObjects/blackHole/blackHoleModel.ts b/src/ts/stellarObjects/blackHole/blackHoleModel.ts index d057ae929..a08e33661 100644 --- a/src/ts/stellarObjects/blackHole/blackHoleModel.ts +++ b/src/ts/stellarObjects/blackHole/blackHoleModel.ts @@ -73,7 +73,7 @@ export class BlackHoleModel implements StellarObjectModel { } public getNbSpaceStations(): number { - if (uniformRandBool(0.1, this.rng, GenerationSteps.SPACE_STATION)) return 1; + if (uniformRandBool(0.1, this.rng, GenerationSteps.SPACE_STATIONS)) return 1; return 0; } } diff --git a/src/ts/stellarObjects/common.ts b/src/ts/stellarObjects/common.ts index f73298753..8d0325a45 100644 --- a/src/ts/stellarObjects/common.ts +++ b/src/ts/stellarObjects/common.ts @@ -15,7 +15,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export enum StellarType { +export const enum StellarType { /** 30,000 - 50,000 K */ O, /** 10,000 - 30,000 K */ diff --git a/src/ts/stellarObjects/neutronStar/neutronStar.ts b/src/ts/stellarObjects/neutronStar/neutronStar.ts index 60ec13f9d..4520ac7cc 100644 --- a/src/ts/stellarObjects/neutronStar/neutronStar.ts +++ b/src/ts/stellarObjects/neutronStar/neutronStar.ts @@ -40,6 +40,7 @@ import { OrbitalObjectPhysicalProperties } from "../../architecture/physicalProp import { RingsUniforms } from "../../postProcesses/rings/ringsUniform"; import { Camera } from "@babylonjs/core/Cameras/camera"; import { isSizeOnScreenEnough } from "../../utils/isObjectVisibleOnScreen"; +import i18n from "../../i18n"; export class NeutronStar implements StellarObject, Cullable { readonly model: NeutronStarModel; @@ -112,7 +113,7 @@ export class NeutronStar implements StellarObject, Cullable { } getTypeName(): string { - return "Neutron Star"; + return i18n.t("objectTypes:neutronStar"); } getRotationAxis(): Vector3 { diff --git a/src/ts/stellarObjects/neutronStar/neutronStarModel.ts b/src/ts/stellarObjects/neutronStar/neutronStarModel.ts index 2e7c7b7dd..239ef80b1 100644 --- a/src/ts/stellarObjects/neutronStar/neutronStarModel.ts +++ b/src/ts/stellarObjects/neutronStar/neutronStarModel.ts @@ -87,7 +87,7 @@ export class NeutronStarModel implements StellarObjectModel { } public getNbSpaceStations(): number { - if (uniformRandBool(0.00001, this.rng, GenerationSteps.SPACE_STATION)) return 1; + if (uniformRandBool(0.00001, this.rng, GenerationSteps.SPACE_STATIONS)) return 1; return 0; } } diff --git a/src/ts/stellarObjects/star/star.ts b/src/ts/stellarObjects/star/star.ts index 3902f4bcc..c4b0fba8c 100644 --- a/src/ts/stellarObjects/star/star.ts +++ b/src/ts/stellarObjects/star/star.ts @@ -42,6 +42,7 @@ import { Cullable } from "../../bodies/cullable"; import { OrbitProperties } from "../../orbit/orbitProperties"; import { RingsUniforms } from "../../postProcesses/rings/ringsUniform"; import { OrbitalObjectPhysicalProperties } from "../../architecture/physicalProperties"; +import i18n from "../../i18n"; export class Star implements StellarObject, Cullable { readonly name: string; @@ -84,6 +85,7 @@ export class Star implements StellarObject, Cullable { scene ) : Assets.CreateBananaClone(2 * this.model.radius); + this.mesh.name = name; // enforce name in the case of cloning the banana this.aggregate = new PhysicsAggregate( this.getTransform(), @@ -139,7 +141,7 @@ export class Star implements StellarObject, Cullable { } getTypeName(): string { - return `${getStellarTypeString(this.model.stellarType)} star`; + return i18n.t("objectTypes:star", { stellarType: getStellarTypeString(this.model.stellarType) }); } public updateMaterial(deltaTime: number): void { @@ -160,7 +162,7 @@ export class Star implements StellarObject, Cullable { public dispose(): void { this.mesh.dispose(); - this.light.dispose(); this.material.dispose(); + this.light.dispose(); } } diff --git a/src/ts/stellarObjects/star/starMaterial.ts b/src/ts/stellarObjects/star/starMaterial.ts index 4de704466..0e0610dc4 100644 --- a/src/ts/stellarObjects/star/starMaterial.ts +++ b/src/ts/stellarObjects/star/starMaterial.ts @@ -31,7 +31,7 @@ export class StarMaterial extends ShaderMaterial { starModel: StellarObjectModel; starSeed: number; - private internalClock = 0; + private elapsedSeconds = 0; constructor(star: TransformNode, model: StellarObjectModel, scene: Scene) { const shaderName = "starMaterial"; @@ -62,14 +62,16 @@ export class StarMaterial extends ShaderMaterial { this.star = star; this.starModel = model; this.starSeed = model.seed; - } - public update(deltaTime: number) { - this.internalClock += deltaTime; + this.onBindObservable.add(() => { + this.getEffect().setFloat("time", this.elapsedSeconds % 100000); + this.getEffect().setColor3("starColor", this.starModel.color); + this.getEffect().setFloat("seed", this.starSeed); + this.getEffect().setVector3("starPosition", this.star.getAbsolutePosition()); + }); + } - this.setFloat("time", this.internalClock % 100000); - this.setColor3("starColor", this.starModel.color); - this.setFloat("seed", this.starSeed); - this.setVector3("starPosition", this.star.getAbsolutePosition()); + public update(deltaSeconds: number) { + this.elapsedSeconds += deltaSeconds; } } diff --git a/src/ts/stellarObjects/star/starModel.ts b/src/ts/stellarObjects/star/starModel.ts index 08278b212..af0b765b5 100644 --- a/src/ts/stellarObjects/star/starModel.ts +++ b/src/ts/stellarObjects/star/starModel.ts @@ -98,7 +98,7 @@ export class StarModel implements StellarObjectModel { } public getNbSpaceStations(): number { - if (uniformRandBool(0.001, this.rng, GenerationSteps.SPACE_STATION)) return 1; + if (uniformRandBool(0.001, this.rng, GenerationSteps.SPACE_STATIONS)) return 1; return 0; } diff --git a/src/ts/uberCore/loadingScreen.ts b/src/ts/uberCore/loadingScreen.ts new file mode 100644 index 000000000..88a2bd810 --- /dev/null +++ b/src/ts/uberCore/loadingScreen.ts @@ -0,0 +1,168 @@ +import { ILoadingScreen } from "@babylonjs/core/Loading/loadingScreen"; +import { Nullable } from "@babylonjs/core/types"; +import i18next from "../i18n"; + +export class LoadingScreen implements ILoadingScreen { + private loadingDiv: Nullable = null; + private loadingTextDiv: Nullable = null; + + /** + * Creates a new default loading screen + * @param canvas defines the canvas used to render the scene + * @param loadingText defines the default text to display + * @param loadingDivBackgroundColor defines the default background color + */ + constructor(private canvas: HTMLCanvasElement, private loadingText = "", private loadingDivBackgroundColor = "black") {} + + /** + * Function called to display the loading screen + */ + public displayLoadingUI(): void { + if (this.loadingDiv) { + // Do not add a loading screen if there is already one + return; + } + + this.loadingDiv = document.createElement("div"); + this.loadingDiv.id = "babylonjsLoadingDiv"; + + // Loading text + this.loadingTextDiv = document.createElement("div"); + this.loadingTextDiv.classList.add("loadingText"); + + this.loadingDiv.appendChild(this.loadingTextDiv); + + //set the predefined text + this.loadingTextDiv.innerText = this.loadingText; + + const svgSupport = !!window.SVGSVGElement; + // Loading img + const imgBack = new Image(); + imgBack.src = !svgSupport + ? "https://cdn.babylonjs.com/Assets/babylonLogo.png" + : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxODAuMTcgMjA4LjA0Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9LmNscy0ye2ZpbGw6I2UwNjg0Yjt9LmNscy0ze2ZpbGw6I2JiNDY0Yjt9LmNscy00e2ZpbGw6I2UwZGVkODt9LmNscy01e2ZpbGw6I2Q1ZDJjYTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPkJhYnlsb25Mb2dvPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iUGFnZV9FbGVtZW50cyIgZGF0YS1uYW1lPSJQYWdlIEVsZW1lbnRzIj48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik05MC4wOSwwLDAsNTJWMTU2bDkwLjA5LDUyLDkwLjA4LTUyVjUyWiIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSIxODAuMTcgNTIuMDEgMTUxLjk3IDM1LjczIDEyNC44NSA1MS4zOSAxNTMuMDUgNjcuNjcgMTgwLjE3IDUyLjAxIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjI3LjEyIDY3LjY3IDExNy4yMSAxNS42NiA5MC4wOCAwIDAgNTIuMDEgMjcuMTIgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iNjEuODkgMTIwLjMgOTAuMDggMTM2LjU4IDExOC4yOCAxMjAuMyA5MC4wOCAxMDQuMDIgNjEuODkgMTIwLjMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDE1My4wNSAxNDAuMzcgOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyAwIDUyLjAxIDAgMTU2LjAzIDkwLjA4IDIwOC4wNCAxODAuMTcgMTU2LjAzIDE4MC4xNyA1Mi4wMSAxNTMuMDUgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iOTAuMDggNzEuNDYgNjEuODkgODcuNzQgNjEuODkgMTIwLjMgOTAuMDggMTA0LjAyIDExOC4yOCAxMjAuMyAxMTguMjggODcuNzQgOTAuMDggNzEuNDYiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDExOC4yOCA4Ny43NCAxMTguMjggMTIwLjMgOTAuMDggMTM2LjU4IDkwLjA4IDE3Ni43MiAxNTMuMDUgMTQwLjM3IDE1My4wNSA2Ny42NyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtNSIgcG9pbnRzPSIyNy4xMiA2Ny42NyA2MS44OSA4Ny43NCA2MS44OSAxMjAuMyA5MC4wOCAxMzYuNTggOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyIvPjwvZz48L2c+PC9zdmc+`; + + imgBack.style.width = "150px"; + imgBack.style.gridColumn = "1"; + imgBack.style.gridRow = "1"; + imgBack.style.top = "50%"; + imgBack.style.left = "50%"; + imgBack.style.transform = "translate(-50%, -50%)"; + imgBack.style.position = "absolute"; + + const imageSpinnerContainer = document.createElement("div"); + imageSpinnerContainer.classList.add("imageSpinnerContainer"); + + // Loading spinner + const imgSpinner = new Image(); + imgSpinner.classList.add("loadingSpinner"); + imgSpinner.src = !svgSupport + ? "https://cdn.babylonjs.com/Assets/loadingIcon.png" + : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzOTIgMzkyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2UwNjg0Yjt9LmNscy0ye2ZpbGw6bm9uZTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPlNwaW5uZXJJY29uPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iU3Bpbm5lciI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNDAuMjEsMTI2LjQzYzMuNy03LjMxLDcuNjctMTQuNDQsMTItMjEuMzJsMy4zNi01LjEsMy41Mi01YzEuMjMtMS42MywyLjQxLTMuMjksMy42NS00LjkxczIuNTMtMy4yMSwzLjgyLTQuNzlBMTg1LjIsMTg1LjIsMCwwLDEsODMuNCw2Ny40M2EyMDgsMjA4LDAsMCwxLDE5LTE1LjY2YzMuMzUtMi40MSw2Ljc0LTQuNzgsMTAuMjUtN3M3LjExLTQuMjgsMTAuNzUtNi4zMmM3LjI5LTQsMTQuNzMtOCwyMi41My0xMS40OSwzLjktMS43Miw3Ljg4LTMuMywxMi00LjY0YTEwNC4yMiwxMDQuMjIsMCwwLDEsMTIuNDQtMy4yMyw2Mi40NCw2Mi40NCwwLDAsMSwxMi43OC0xLjM5QTI1LjkyLDI1LjkyLDAsMCwxLDE5NiwyMS40NGE2LjU1LDYuNTUsMCwwLDEsMi4wNSw5LDYuNjYsNi42NiwwLDAsMS0xLjY0LDEuNzhsLS40MS4yOWEyMi4wNywyMi4wNywwLDAsMS01Ljc4LDMsMzAuNDIsMzAuNDIsMCwwLDEtNS42NywxLjYyLDM3LjgyLDM3LjgyLDAsMCwxLTUuNjkuNzFjLTEsMC0xLjkuMTgtMi44NS4yNmwtMi44NS4yNHEtNS43Mi41MS0xMS40OCwxLjFjLTMuODQuNC03LjcxLjgyLTExLjU4LDEuNGExMTIuMzQsMTEyLjM0LDAsMCwwLTIyLjk0LDUuNjFjLTMuNzIsMS4zNS03LjM0LDMtMTAuOTQsNC42NHMtNy4xNCwzLjUxLTEwLjYsNS41MUExNTEuNiwxNTEuNiwwLDAsMCw2OC41Niw4N0M2Ny4yMyw4OC40OCw2Niw5MCw2NC42NCw5MS41NnMtMi41MSwzLjE1LTMuNzUsNC43M2wtMy41NCw0LjljLTEuMTMsMS42Ni0yLjIzLDMuMzUtMy4zMyw1YTEyNywxMjcsMCwwLDAtMTAuOTMsMjEuNDksMS41OCwxLjU4LDAsMSwxLTMtMS4xNVM0MC4xOSwxMjYuNDcsNDAuMjEsMTI2LjQzWiIvPjxyZWN0IGNsYXNzPSJjbHMtMiIgd2lkdGg9IjM5MiIgaGVpZ2h0PSIzOTIiLz48L2c+PC9nPjwvc3ZnPg==`; + + if (!svgSupport) { + const logoSize = { w: 16, h: 18.5 }; + const loadingSize = { w: 30, h: 30 }; + // set styling correctly + imgBack.style.width = `${logoSize.w}vh`; + imgBack.style.height = `${logoSize.h}vh`; + imgBack.style.left = `calc(50% - ${logoSize.w / 2}vh)`; + imgBack.style.top = `calc(50% - ${logoSize.h / 2}vh)`; + + imgSpinner.style.width = `${loadingSize.w}vh`; + imgSpinner.style.height = `${loadingSize.h}vh`; + imgSpinner.style.left = `calc(50% - ${loadingSize.w / 2}vh)`; + imgSpinner.style.top = `calc(50% - ${loadingSize.h / 2}vh)`; + } + + imageSpinnerContainer.appendChild(imgSpinner); + + this.loadingDiv.appendChild(imgBack); + this.loadingDiv.appendChild(imageSpinnerContainer); + + this.resizeLoadingUI(); + + window.addEventListener("resize", this.resizeLoadingUI); + + this.loadingDiv.style.backgroundColor = this.loadingDivBackgroundColor; + document.body.appendChild(this.loadingDiv); + + this.loadingDiv.style.opacity = "1"; + } + + /** + * Function called to hide the loading screen + */ + public hideLoadingUI(): void { + if (!this.loadingDiv) { + return; + } + + const onTransitionEnd = () => { + if (this.loadingTextDiv) { + this.loadingTextDiv.remove(); + this.loadingTextDiv = null; + } + if (this.loadingDiv) { + this.loadingDiv.remove(); + this.loadingDiv = null; + } + window.removeEventListener("resize", this.resizeLoadingUI); + }; + + this.loadingDiv.style.opacity = "0"; + this.loadingDiv.addEventListener("transitionend", onTransitionEnd); + } + + public setProgressPercentage(percentage: number) { + this.loadingUIText = `${i18next.t("common:loading")} ${percentage.toFixed(0)}%`; + } + + /** + * Gets or sets the text to display while loading + */ + public set loadingUIText(text: string) { + this.loadingText = text; + + if (this.loadingTextDiv) { + this.loadingTextDiv.innerHTML = this.loadingText; + } + } + + public get loadingUIText(): string { + return this.loadingText; + } + + /** + * Gets or sets the color to use for the background + */ + public get loadingUIBackgroundColor(): string { + return this.loadingDivBackgroundColor; + } + + public set loadingUIBackgroundColor(color: string) { + this.loadingDivBackgroundColor = color; + + if (!this.loadingDiv) { + return; + } + + this.loadingDiv.style.backgroundColor = this.loadingDivBackgroundColor; + } + + // Resize + private resizeLoadingUI = () => { + const canvasRect = this.canvas.getBoundingClientRect(); + const canvasPositioning = window.getComputedStyle(this.canvas).position; + + if (!this.loadingDiv) { + return; + } + + this.loadingDiv.style.position = canvasPositioning === "fixed" ? "fixed" : "absolute"; + this.loadingDiv.style.left = canvasRect.left + "px"; + this.loadingDiv.style.top = canvasRect.top + "px"; + this.loadingDiv.style.width = canvasRect.width + "px"; + this.loadingDiv.style.height = canvasRect.height + "px"; + }; +} diff --git a/src/ts/uberCore/postProcesses/colorCorrection.ts b/src/ts/uberCore/postProcesses/colorCorrection.ts index cc4534270..28a957c3d 100644 --- a/src/ts/uberCore/postProcesses/colorCorrection.ts +++ b/src/ts/uberCore/postProcesses/colorCorrection.ts @@ -17,9 +17,9 @@ import { PostProcess } from "@babylonjs/core/PostProcesses/postProcess"; import colorCorrectionFragment from "../../../shaders/colorCorrection.glsl"; -import { Engine } from "@babylonjs/core/Engines/engine"; import { Effect } from "@babylonjs/core/Materials/effect"; import { Texture } from "@babylonjs/core/Materials/Textures/texture"; +import { Scene } from "@babylonjs/core/scene"; const shaderName = "colorCorrection"; Effect.ShadersStore[`${shaderName}FragmentShader`] = colorCorrectionFragment; @@ -31,8 +31,11 @@ export class ColorCorrection extends PostProcess { gamma = 1; saturation = 1; - constructor(name: string, engine: Engine) { - super(name, shaderName, ["brightness", "contrast", "exposure", "gamma", "saturation"], ["textureSampler"], 1, null, Texture.BILINEAR_SAMPLINGMODE, engine); + constructor(name: string, scene: Scene) { + super(name, shaderName, ["brightness", "contrast", "exposure", "gamma", "saturation"], ["textureSampler"], 1, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine()); + + // This is necessary because BabylonJS post process sets the scene using the camera. However, I don't pass a camera to the constructor as I use a PostProcessRenderPipeline. + this._scene = scene; this.onApplyObservable.add((effect: Effect) => { effect.setFloat("brightness", this.brightness); diff --git a/src/ts/uberCore/postProcesses/types.ts b/src/ts/uberCore/postProcesses/types.ts index 1ec94a8b2..80cecf696 100644 --- a/src/ts/uberCore/postProcesses/types.ts +++ b/src/ts/uberCore/postProcesses/types.ts @@ -19,7 +19,7 @@ import { Matrix, Quaternion, Vector3, Vector4 } from "@babylonjs/core/Maths/math import { Color3 } from "@babylonjs/core/Maths/math.color"; import { Texture } from "@babylonjs/core/Materials/Textures/texture"; -export enum UniformEnumType { +export const enum UniformEnumType { /** * The type to use when BabylonJS manages the uniform itself (like textureSampler) */ @@ -70,7 +70,7 @@ export enum UniformEnumType { COLOR_3_ARRAY } -export enum SamplerEnumType { +export const enum SamplerEnumType { AUTO, TEXTURE } diff --git a/src/ts/uberCore/postProcesses/uberPostProcess.ts b/src/ts/uberCore/postProcesses/uberPostProcess.ts index 71d52bc69..b827ab97e 100644 --- a/src/ts/uberCore/postProcesses/uberPostProcess.ts +++ b/src/ts/uberCore/postProcesses/uberPostProcess.ts @@ -38,6 +38,9 @@ export class UberPostProcess extends PostProcess { super(name, fragmentName, uniformNames, samplerNames, 1, null, Texture.BILINEAR_SAMPLINGMODE, scene.getEngine(), false, null, Constants.TEXTURETYPE_HALF_FLOAT); + // This is necessary because BabylonJS post process sets the scene using the camera. However, I don't pass a camera to the constructor as I use a PostProcessRenderPipeline. + this._scene = scene; + this.uniforms.push(...uniforms); this.samplers.push(...samplers); diff --git a/src/ts/ui/bodyEditor/bodyEditor.ts b/src/ts/ui/bodyEditor/bodyEditor.ts index a1d507f65..e42a517ec 100644 --- a/src/ts/ui/bodyEditor/bodyEditor.ts +++ b/src/ts/ui/bodyEditor/bodyEditor.ts @@ -38,7 +38,7 @@ import { Star } from "../../stellarObjects/star/star"; import { BlackHole } from "../../stellarObjects/blackHole/blackHole"; import { CelestialBody } from "../../architecture/celestialBody"; -export enum EditorVisibility { +export const enum EditorVisibility { HIDDEN, NAVBAR, FULL diff --git a/src/ts/ui/pauseMenu.ts b/src/ts/ui/pauseMenu.ts index 19870e2e4..6bd1397fc 100644 --- a/src/ts/ui/pauseMenu.ts +++ b/src/ts/ui/pauseMenu.ts @@ -18,6 +18,7 @@ import { Observable } from "@babylonjs/core/Misc/observable"; import pauseMenuHTML from "../../html/pauseMenu.html"; import { Assets } from "../assets"; +import i18n from "../i18n"; export class PauseMenu { private readonly rootNode: HTMLElement; @@ -46,9 +47,11 @@ export class PauseMenu { this.screenshotButton = document.getElementById("screenshotButton") as HTMLElement; this.screenshotButton.addEventListener("click", () => this.onScreenshot.notifyObservers()); + this.screenshotButton.innerText = i18n.t("pauseMenu:screenshot"); this.shareButton = document.getElementById("shareButton") as HTMLElement; this.shareButton.addEventListener("click", () => this.onShare.notifyObservers()); + this.shareButton.innerText = i18n.t("pauseMenu:share"); this.contributeButton = document.getElementById("pauseContributeButton") as HTMLElement; this.contributeButton.addEventListener("click", () => { @@ -56,6 +59,7 @@ export class PauseMenu { this.setActivePanel(this.activePanel === this.contibutePanel ? null : this.contibutePanel); }); + this.contributeButton.innerText = i18n.t("pauseMenu:contribute"); this.settingsButton = document.getElementById("pauseSettingsButton") as HTMLElement; this.settingsButton.addEventListener("click", () => { @@ -63,12 +67,15 @@ export class PauseMenu { this.setActivePanel(this.activePanel === this.settingsPanel ? null : this.settingsPanel); }); + this.settingsButton.innerText = i18n.t("pauseMenu:settings"); this.saveButton = document.getElementById("saveButton") as HTMLElement; this.saveButton.addEventListener("click", () => this.onSave.notifyObservers()); + this.saveButton.innerText = i18n.t("pauseMenu:save"); this.resumeButton = document.getElementById("resumeButton") as HTMLElement; this.resumeButton.addEventListener("click", () => this.onResume.notifyObservers()); + this.resumeButton.innerText = i18n.t("pauseMenu:resume"); document.querySelectorAll("#pauseMenu li").forEach((li) => { // play a sound when hovering over a button diff --git a/src/ts/utils/direction.ts b/src/ts/utils/direction.ts index 1600fbe99..e644787c3 100644 --- a/src/ts/utils/direction.ts +++ b/src/ts/utils/direction.ts @@ -18,7 +18,7 @@ import { Axis } from "@babylonjs/core/Maths/math.axis"; import { Quaternion } from "@babylonjs/core/Maths/math.vector"; -export enum Direction { +export const enum Direction { UP, DOWN, LEFT, diff --git a/src/ts/utils/parseToStrings.ts b/src/ts/utils/parseToStrings.ts index 577adb4b5..e56d15a77 100644 --- a/src/ts/utils/parseToStrings.ts +++ b/src/ts/utils/parseToStrings.ts @@ -16,6 +16,7 @@ // along with this program. If not, see . import { Settings } from "../settings"; +import i18n from "../i18n"; export function parseSpeed(speed: number): string { if (speed < 1000) { @@ -37,9 +38,9 @@ export function parseDistance(distance: number): string { } else if (distance < 20000000) { return `${(distance / 1000000).toFixed(2)} Mm`; } else if (distance < 0.3 * Settings.LIGHT_YEAR) { - return `${(distance / Settings.C).toFixed(2)} ls`; + return `${(distance / Settings.C).toFixed(2)} ${i18n.t("units:ls")}`; } else { - return `${(distance / Settings.LIGHT_YEAR).toFixed(2)} ly`; + return `${(distance / Settings.LIGHT_YEAR).toFixed(2)} ${i18n.t("units:ly")}`; } } @@ -68,6 +69,7 @@ export function parsePercentageFrom01(percentage01: number): string { } export const Alphabet = "abcdefghijklmnopqrstuvwxyz"; + export function starName(baseName: string, index: number): string { return `${baseName} ${Alphabet[index].toUpperCase()}`; } diff --git a/src/ts/utils/romanNumerals.ts b/src/ts/utils/romanNumerals.ts new file mode 100644 index 000000000..fa7bd51dd --- /dev/null +++ b/src/ts/utils/romanNumerals.ts @@ -0,0 +1,49 @@ +// This file is part of Cosmos Journeyer +// +// Copyright (C) 2024 Barthélemy Paléologue +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +/** + * Convert a number to a roman numeral string + * @param n The number to convert + * @returns a string representing the number as a roman numeral + */ +export function romanNumeral(n: number): string { + const romanNumerals: [number, string][] = [ + [1000, "M"], + [900, "CM"], + [500, "D"], + [400, "CD"], + [100, "C"], + [90, "XC"], + [50, "L"], + [40, "XL"], + [10, "X"], + [9, "IX"], + [5, "V"], + [4, "IV"], + [1, "I"] + ]; + + let result = ""; + for (const [value, symbol] of romanNumerals) { + while (n >= value) { + result += symbol; + n -= value; + } + } + + return result; +} diff --git a/src/ts/utils/spaceStationNameGenerator.ts b/src/ts/utils/spaceStationNameGenerator.ts new file mode 100644 index 000000000..46fc5512f --- /dev/null +++ b/src/ts/utils/spaceStationNameGenerator.ts @@ -0,0 +1,94 @@ +// This file is part of Cosmos Journeyer +// +// Copyright (C) 2024 Barthélemy Paléologue +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +export const SpaceStationNames: string[] = [ + "Aldrin", + "Apollo", + "Armstrong", + "Asimov", + "Babbage", + "Blinn", + "Boole", + "Catmull", + "Clark", + "Clarke", + "Curie", + "Einstein", + "Feynman", + "Gagarin", + "Galileo", + "Gauss", + "Gemini", + "Gouraud", + "Hawking", + "Heinlein", + "Herbert", + "Kubrick", + "Laika", + "Lovelace", + "Mercury", + "Newton", + "Pascal", + "Phong", + "Picard", + "Rayleigh", + "Stanford", + "Sutherland", + "Suzanne", + "Tolkien", + "Tolstoy", + "Torvalds", + "Turing", + "Von Neumann" +]; + +export const SpaceStationAdjectives: string[] = [ + "'s Abode", + "'s Bar", + "'s Colony", + "'s Discovery", + "'s Endeavour", + "'s Enterprise", + "'s Frontier", + "Habitat", + "Haven", + "Interstellar", + "'s Journey", + "Laboratory", + "Orbital", + "Outpost", + "'s Prospect", + "'s Prosperity", + "'s Refuge", + "'s Sanctuary", + "Settlement", + "Station", + "'s Tranquility", + "'s Unity", + "'s Vision" +]; + +/** + * Generate a space station name using a noise based rng and a given sample index + * @param rng The noise based rng with a range of [0, 1] + * @param sampleIndex The index of the sample to generate + */ +export function generateSpaceStationName(rng: (index: number) => number, sampleIndex: number) { + const adjective = SpaceStationAdjectives[Math.floor(rng(sampleIndex) * SpaceStationAdjectives.length)]; + const name = SpaceStationNames[Math.floor(rng(sampleIndex + 1) * SpaceStationNames.length)]; + return `${name} ${adjective}`; +} diff --git a/src/ts/utils/nameGenerator.ts b/src/ts/utils/starNameGenerator.ts similarity index 84% rename from src/ts/utils/nameGenerator.ts rename to src/ts/utils/starNameGenerator.ts index 340561cc6..1d969d361 100644 --- a/src/ts/utils/nameGenerator.ts +++ b/src/ts/utils/starNameGenerator.ts @@ -171,34 +171,12 @@ const greekLetters: string[] = [ "Omega" ]; -export function romanNumeral(n: number): string { - switch (n) { - case 1: - return "I"; - case 2: - return "II"; - case 3: - return "III"; - case 4: - return "IV"; - case 5: - return "V"; - case 6: - return "VI"; - case 7: - return "VII"; - case 8: - return "VIII"; - case 9: - return "IX"; - case 10: - return "X"; - default: - return n.toString(); - } -} - -export function generateName(rng: (step: number) => number, baseStep = 0): string { +/** + * Generates a star name given a noise based random number generator and the given sample step + * @param rng A noise based random number generator with a range of [0, 1] + * @param baseStep The sample step + */ +export function generateStarName(rng: (step: number) => number, baseStep: number): string { const constellation = constellationNames[Math.floor(rng(baseStep) * constellationNames.length)]; const greekLetter = greekLetters[Math.floor(rng(baseStep + 1) * greekLetters.length)]; return `${greekLetter} ${constellation}`; diff --git a/src/ts/utils/systemTarget.ts b/src/ts/utils/systemTarget.ts index 757f2f4e4..89bb02c16 100644 --- a/src/ts/utils/systemTarget.ts +++ b/src/ts/utils/systemTarget.ts @@ -5,6 +5,7 @@ import { BoundingSphere } from "../architecture/boundingSphere"; import { TypedObject } from "../architecture/typedObject"; import { SystemSeed } from "./systemSeed"; import { StarSystemModel } from "../starSystem/starSystemModel"; +import i18n from "../i18n"; export class SystemTarget implements Transformable, BoundingSphere, TypedObject { readonly name: string; @@ -35,6 +36,6 @@ export class SystemTarget implements Transformable, BoundingSphere, TypedObject } getTypeName(): string { - return "Star system"; + return i18n.t("objectTypes:starSystem"); } } diff --git a/tests/unit/romanNumerals.test.ts b/tests/unit/romanNumerals.test.ts new file mode 100644 index 000000000..b1993061f --- /dev/null +++ b/tests/unit/romanNumerals.test.ts @@ -0,0 +1,37 @@ +// This file is part of Cosmos Journeyer +// +// Copyright (C) 2024 Barthélemy Paléologue +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +import { romanNumeral } from "../../src/ts/utils/romanNumerals"; + +test("romanNumeral", () => { + expect(romanNumeral(1)).toBe("I"); + expect(romanNumeral(3)).toBe("III"); + expect(romanNumeral(4)).toBe("IV"); + expect(romanNumeral(5)).toBe("V"); + expect(romanNumeral(9)).toBe("IX"); + expect(romanNumeral(10)).toBe("X"); + expect(romanNumeral(11)).toBe("XI"); + expect(romanNumeral(40)).toBe("XL"); + expect(romanNumeral(50)).toBe("L"); + expect(romanNumeral(90)).toBe("XC"); + expect(romanNumeral(100)).toBe("C"); + expect(romanNumeral(400)).toBe("CD"); + expect(romanNumeral(500)).toBe("D"); + expect(romanNumeral(900)).toBe("CM"); + expect(romanNumeral(1000)).toBe("M"); + expect(romanNumeral(3999)).toBe("MMMCMXCIX"); +}); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 1d70cc3fc..69a05e24f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -53,7 +53,8 @@ "node_modules/@types" ], /* List of folders to include type definitions from. */ "types": [ - "jest" + "jest", + "webpack-env", ], /* Type declaration files to be included in compilation. */ "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */