diff --git a/config/docusaurus/extensions.js b/config/docusaurus/extensions.js
index 5afd55e07..fd5210107 100644
--- a/config/docusaurus/extensions.js
+++ b/config/docusaurus/extensions.js
@@ -51,6 +51,7 @@ const presets = [
blog: {
showReadingTime: true,
editUrl: `${GITHUB_DOCS}/edit/master/blog/`,
+ onInlineAuthors: "ignore",
},
theme: {
customCss: require.resolve("../../src/app/index.scss"),
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/guides/examples/page-layout.mdx b/i18n/en/docusaurus-plugin-content-docs/current/guides/examples/page-layout.mdx
index 994141ea5..d88ad8bff 100644
--- a/i18n/en/docusaurus-plugin-content-docs/current/guides/examples/page-layout.mdx
+++ b/i18n/en/docusaurus-plugin-content-docs/current/guides/examples/page-layout.mdx
@@ -1,5 +1,5 @@
---
-sidebar_position: 2
+sidebar_position: 3
sidebar_class_name: sidebar-item--wip
---
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/guides/examples/types.md b/i18n/en/docusaurus-plugin-content-docs/current/guides/examples/types.md
new file mode 100644
index 000000000..cd6390be4
--- /dev/null
+++ b/i18n/en/docusaurus-plugin-content-docs/current/guides/examples/types.md
@@ -0,0 +1,440 @@
+---
+sidebar_position: 2
+---
+
+# Types
+
+This guide concerns data types from typed languages like TypeScript and describes where they fit within FSD.
+
+:::info
+
+Is your question not covered by this guide? Post your question by leaving feedback on this article (blue button on the right) and we will consider expanding this guide!
+
+:::
+
+## Utility types
+
+Utility types are types that don't have much meaning on their own and are usually used with other types. For example:
+
+
+
+```ts
+type ArrayValues = T[number];
+```
+
+
+ Source: https://github.com/sindresorhus/type-fest/blob/main/source/array-values.d.ts
+
+
+
+
+To make utility types available across your project, either install a library like [`type-fest`][ext-type-fest], or create your own library in `shared/lib`. Make sure to clearly indicate what new types _should_ be added to this library, and what types _don't belong_ there. For example, call it `shared/lib/utility-types` and add a README inside that describes what is a utility type in your team.
+
+Don't overestimate the potential reusability of a utility type. Just because it can be reused, doesn't mean it will be, and as such, not every utility type needs to be in Shared. Some utility types are fine right next to where they are needed:
+
+- π pages
+ - π home
+ - π api
+ - π ArrayValues.ts (utility type)
+ - π getMemoryUsageMetrics.ts (the code that uses the utility type)
+
+:::warning
+
+Resist the temptation to create a `shared/types` folder, or to add a `types` segment to your slices. The category "types" is similar to the category "components" or "hooks" in that it describes what the contents are, not what they are for. Segments should describe the purpose of the code, not the essence.
+
+:::
+
+## Business entities and their cross-references
+
+Among the most important types in an app are the types of business entities, i.e. the real-world things that your app works with. For example, in a music streaming app, you might have business entities _Song_, _Album_, etc.
+
+Business entities often come from the backend, so the first step is to type the backend responses. It's convenient to have a function to make a request to every endpoint, and to type the response of this function. For extra type safety, you may want to run the response through a schema validation library like [Zod][ext-zod].
+
+For example, if you keep all your requests in Shared, you could do it like this:
+
+```ts title="shared/api/songs.ts"
+import type { Artist } from "./artists";
+
+interface Song {
+ id: number;
+ title: string;
+ artists: Array;
+}
+
+export function listSongs() {
+ return fetch('/api/songs').then((res) => res.json() as Promise>);
+}
+```
+
+You might notice that the `Song` type references a different entity, `Artist`. This is a benefit of storing your requests in Shared β real-world types are often intertwined. If we kept this function in `entities/song/api`, we wouldn't be able to simply import `Artist` from `entities/artist`, because FSD restricts cross-imports between slices with [the import rule on layers][import-rule-on-layers]:
+
+> A module in a slice can only import other slices when they are located on layers strictly below.
+
+There are two ways to deal with this issue:
+
+1. **Parametrize your types**
+ You can make your types accept type arguments as slots for connections with other entities, and even impose constraints on those slots. For example:
+
+ ```ts title="entities/song/model/song.ts"
+ interface Song {
+ id: number;
+ title: string;
+ artists: Array;
+ }
+ ```
+
+ This works better for some types than others. A simple type like `Cart = { items: Array }` can easily be made to work with any type of product. More connected types, like `Country` and `City`, may not be as easy to separate.
+
+2. **Cross-import (but do it right)**
+ To make cross-imports between entities in FSD, you can use a special public API specifically for each slice that will be cross-importing. For example, if we have entities `song`, `artist`, and `playlist`, and the latter two need to reference `song`, we can make two special public APIs for both of them in the `song` entity with the `@x` notation:
+
+ - π entities
+ - π song
+ - π @x
+ - π artist.ts (a public API for the `artist` entity to import from)
+ - π playlist.ts (a public API for the `playlist` entity to import from)
+ - π index.ts (regular public API)
+
+ The contents of a file `π entities/song/@x/artist.ts` are similar to `π entities/song/index.ts`:
+
+ ```ts title="entities/song/@x/artist.ts"
+ export type { Song } from "../model/song.ts";
+ ```
+
+ Then the `π entities/artist/model/artist.ts` can import `Song` like this:
+
+ ```ts title="entities/artist/model/artist.ts"
+ import type { Song } from "entities/song/@x/artist";
+
+ export interface Artist {
+ name: string;
+ songs: Array;
+ }
+ ```
+
+ By making explicit connections between entities, we stay on top of inter-dependencies and maintain a decent level of domain separation.
+
+## Data transfer objects and mappers {#data-transfer-objects-and-mappers}
+
+Data transfer objects, or DTOs, is a term that describes the shape of data that comes from the backend. Sometimes, the DTO is fine to use as is, but sometimes it's inconvenient for the frontend. That's where mappers come in β they transform a DTO into a more convenient shape.
+
+### Where to put DTOs
+
+If you have backend types in a separate package (for example, if you share code between the frontend and the backend), then just import your DTOs from there and you're done! If you don't share code between the backend and frontend, then you need to keep DTOs somewhere in your frontend codebase, and we will explore this case below.
+
+If you have your request functions in `shared/api`, that's where the DTOs should be, right next to the function that uses them:
+
+```ts title="shared/api/songs.ts"
+import type { ArtistDTO } from "./artists";
+
+interface SongDTO {
+ id: number;
+ title: string;
+ artist_ids: Array;
+}
+
+export function listSongs() {
+ return fetch('/api/songs').then((res) => res.json() as Promise>);
+}
+```
+
+As mentioned in the previous section, storing your requests and DTOs in Shared comes with the benefit of being able to reference other DTOs.
+
+### Where to put mappers
+
+Mappers are functions that accept a DTO for transformation, and as such, they should be located near the definition of the DTO. In practice this means that if your requests and DTOs are defined in `shared/api`, then the mappers should go there as well:
+
+```ts title="shared/api/songs.ts"
+import type { ArtistDTO } from "./artists";
+
+interface SongDTO {
+ id: number;
+ title: string;
+ disc_no: number;
+ artist_ids: Array;
+}
+
+interface Song {
+ id: string;
+ title: string;
+ /** The full title of the song, including the disc number. */
+ fullTitle: string;
+ artistIds: Array;
+}
+
+function adaptSongDTO(dto: SongDTO): Song {
+ return {
+ id: String(dto.id),
+ title: dto.title,
+ fullTitle: `${dto.disc_no} / ${dto.title}`,
+ artistIds: dto.artist_ids.map(String),
+ };
+}
+
+export function listSongs() {
+ return fetch('/api/songs').then(async (res) => (await res.json()).map(adaptSongDTO));
+}
+```
+
+If your requests and stores are defined in entity slices, then all this code would go there, keeping in mind the limitations of cross-imports between slices:
+
+```ts title="entities/song/api/dto.ts"
+import type { ArtistDTO } from "entities/artist/@x/song";
+
+export interface SongDTO {
+ id: number;
+ title: string;
+ disc_no: number;
+ artist_ids: Array;
+}
+```
+
+```ts title="entities/song/api/mapper.ts"
+import type { SongDTO } from "./dto";
+
+export interface Song {
+ id: string;
+ title: string;
+ /** The full title of the song, including the disc number. */
+ fullTitle: string;
+ artistIds: Array;
+}
+
+export function adaptSongDTO(dto: SongDTO): Song {
+ return {
+ id: String(dto.id),
+ title: dto.title,
+ fullTitle: `${dto.disc_no} / ${dto.title}`,
+ artistIds: dto.artist_ids.map(String),
+ };
+}
+```
+
+```ts title="entities/song/api/listSongs.ts"
+import { adaptSongDTO } from "./mapper";
+
+export function listSongs() {
+ return fetch('/api/songs').then(async (res) => (await res.json()).map(adaptSongDTO));
+}
+```
+
+```ts title="entities/song/model/songs.ts"
+import { createSlice, createEntityAdapter } from "@reduxjs/toolkit";
+
+import { listSongs } from "../api/listSongs";
+
+export const fetchSongs = createAsyncThunk('songs/fetchSongs', listSongs);
+
+const songAdapter = createEntityAdapter();
+const songsSlice = createSlice({
+ name: "songs",
+ initialState: songAdapter.getInitialState(),
+ reducers: {},
+ extraReducers: (builder) => {
+ builder.addCase(fetchSongs.fulfilled, (state, action) => {
+ songAdapter.upsertMany(state, action.payload);
+ })
+ },
+});
+```
+
+### How to deal with nested DTOs
+
+The most problematic part is when a response from the backend contains several entities. For example, if the song included not just the authors' IDs, but the entire author objects. In this case, it is impossible for entities not to know about each other (unless we want to discard the data or have a firm conversation with the backend team). Instead of coming up with solutions for indirect connections between slices (such as a common middleware that would dispatch actions to other slices), prefer explicit cross-imports with the `@x` notation. Here is how we can implement it with Redux Toolkit:
+
+```ts title="entities/song/model/songs.ts"
+import {
+ createSlice,
+ createEntityAdapter,
+ createAsyncThunk,
+ createSelector,
+} from '@reduxjs/toolkit'
+import { normalize, schema } from 'normalizr'
+
+import { getSong } from "../api/getSong";
+
+// Define normalizr entity schemas
+export const artistEntity = new schema.Entity('artists')
+export const songEntity = new schema.Entity('songs', {
+ artists: [artistEntity],
+})
+
+const songAdapter = createEntityAdapter()
+
+export const fetchSong = createAsyncThunk(
+ 'songs/fetchSong',
+ async (id: string) => {
+ const data = await getSong(id)
+ // Normalize the data so reducers can load a predictable payload, like:
+ // `action.payload = { songs: {}, artists: {} }`
+ const normalized = normalize(data, songEntity)
+ return normalized.entities
+ }
+)
+
+export const slice = createSlice({
+ name: 'songs',
+ initialState: songAdapter.getInitialState(),
+ reducers: {},
+ extraReducers: (builder) => {
+ builder.addCase(fetchSong.fulfilled, (state, action) => {
+ songAdapter.upsertMany(state, action.payload.songs)
+ })
+ },
+})
+
+const reducer = slice.reducer
+export default reducer
+```
+
+```ts title="entities/song/@x/artist.ts"
+export { fetchSong } from "../model/songs";
+```
+
+```ts title="entities/artist/model/artists.ts"
+import { createSlice, createEntityAdapter } from '@reduxjs/toolkit'
+
+import { fetchSong } from 'entities/song/@x/artist'
+
+const artistAdapter = createEntityAdapter()
+
+export const slice = createSlice({
+ name: 'users',
+ initialState: artistAdapter.getInitialState(),
+ reducers: {},
+ extraReducers: (builder) => {
+ builder.addCase(fetchSong.fulfilled, (state, action) => {
+ // And handle the same fetch result by inserting the artists here
+ usersAdapter.upsertMany(state, action.payload.users)
+ })
+ },
+})
+
+const reducer = slice.reducer
+export default reducer
+```
+
+This slightly limits the benefits of slice isolation, but it accurately represents a connection between these two entities that we have no control over. If these entities are to ever be refactored, they have to be refactored together.
+
+## Global types and Redux
+
+Global types are types that will be used across the whole application. There are two kinds of global types, based on what they need to know about:
+1. Generic types that don't have any application specifics
+2. Types that need to know about the whole application
+
+The first case is simple to resolve β place your types in Shared, in an appropriate segment. For example, if you have an interface for a global variable for analytics, you can put it in `shared/analytics`.
+
+:::warning
+
+Avoid creating the `shared/types` folder. It groups unrelated things based only on the property of "being a type", and that property is usually not useful when searching for code in a project.
+
+:::
+
+The second case is commonly encountered in projects with Redux without RTK. Your final store type is only available once you add all the reducers together, but this store type needs to be available to selectors that you use across the app. For example, here's your typical store definition:
+
+```ts title="app/store/index.ts"
+import { combineReducers, rootReducer } from "redux";
+
+import { songReducer } from "entities/song";
+import { artistReducer } from "entities/artist";
+
+const rootReducer = combineReducers(songReducer, artistReducer);
+
+const store = createStore(rootReducer);
+
+type RootState = ReturnType;
+type AppDispatch = typeof store.dispatch;
+```
+
+It would be nice to have typed Redux hooks `useAppDispatch` and `useAppSelector` in `shared/store`, but they cannot import `RootState` and `AppDispatch` from the App layer due to the [import rule on layers][import-rule-on-layers]:
+
+> A module in a slice can only import other slices when they are located on layers strictly below.
+
+The recommended solution in this case is to create an implicit dependency between layers Shared and App. These two types, `RootState` and `AppDispatch` are unlikely to change, and they will be familiar to Redux developers, so we don't have to worry about them as much.
+
+In TypeScript, you can do it by declaring the types as global like this:
+
+```ts title="app/store/index.ts"
+/* same content as in the code block before⦠*/
+
+declare type RootState = ReturnType;
+declare type AppDispatch = typeof store.dispatch;
+```
+
+```ts title="shared/store/index.ts"
+import { useDispatch, useSelector, type TypedUseSelectorHook } from "react-redux";
+
+export const useAppDispatch = useDispatch.withTypes()
+export const useAppSelector: TypedUseSelectorHook = useSelector;
+```
+
+## Enums
+
+The general rule with enums is that they should be defined **as close to the usage locations as possible**. When an enum represents values specific to a single feature, it should be defined in that same feature.
+
+The choice of segment should be dictated by usage locations as well. If your enum contains, for example, positions of a toast on the screen, it should be placed in the `ui` segment. If it represents the loading state of a backend operation, it should be placed in the `api` segment.
+
+Some enums are truly common across the whole project, like general backend response statuses or design system tokens. In this case, you can place them in Shared, and choose the segment based on what the enum represents (`api` for response statuses, `ui` for design tokens, etc.).
+
+## Type validation schemas and Zod
+
+If you want to validate that your data conforms to a certain shape or constraints, you can define a validation schema. In TypeScript, a popular library for this job is [Zod][ext-zod]. Validation schemas should also be colocated with the code that uses them, as much as possible.
+
+Validation schemas are similar to mappers (as discussed in the [Data transfer objects and mappers](#data-transfer-objects-and-mappers) section) in the sense that they take a data transfer object and parse it, producing an error if the parsing fails.
+
+One of the most common cases of validation is for the data that comes from the backend. Typically, you want to fail the request when the data doesn't match the schema, so it makes sense to put the schema in the same place as the request function, which is usually the `api` segment.
+
+If your data comes through user input, like a form, the validation should happen as the data is being entered. You can place your schema in the `ui` segment, next to the form component, or in the `model` segment, if the `ui` segment is too crowded.
+
+## Typings of component props and context
+
+In general, it's best to keep the props or context interface in the same file as the component or context that uses them. If you have a framework with single-file components, like Vue or Svelte, and you can't define the props interface in the same file, or you want to share that interface between several components, create a separate file in the same folder, typically, the `ui` segment.
+
+Here's an example with JSX (React or Solid):
+
+```ts title="pages/home/ui/RecentActions.tsx"
+interface RecentActionsProps {
+ actions: Array<{ id: string; text: string }>;
+}
+
+export function RecentActions({ actions }: RecentActionsProps) {
+ /* β¦ */
+}
+```
+
+And here's an example with the interface stored in a separate file for Vue:
+
+```ts title="pages/home/ui/RecentActionsProps.ts"
+export interface RecentActionsProps {
+ actions: Array<{ id: string; text: string }>;
+}
+```
+
+```html title="pages/home/ui/RecentActions.vue"
+
+```
+
+## Ambient declaration files (`*.d.ts`)
+
+Some packages, for example, [Vite][ext-vite] or [ts-reset][ext-ts-reset], require ambient declaration files to work across your app. Usually, they aren't large or complicated, so they often don't require any architecting, it's fine to just throw them in the `src/` folder. To keep the `src` more organized, you can keep them on the App layer, in `app/ambient/`.
+
+Other packages simply don't have typings, and you might want to declare them as untyped or even write your own typings for them. A good place for those typings would be `shared/lib`, in a folder like `shared/lib/untyped-packages`. Create a `%LIBRARY_NAME%.d.ts` file there and declare the types you need:
+
+```ts title="shared/lib/untyped-packages/use-react-screenshot.d.ts"
+// This library doesn't have typings, and we didn't want to bother writing our own.
+declare module "use-react-screenshot";
+```
+
+## Auto-generation of types
+
+It's common to generate types from external sources, for example, generating backend types from an OpenAPI schema. In this case, create a dedicated place in your codebase for these types, like `shared/api/openapi`. Ideally, you should also include a README in that folder that describes what these files are, how to regenerate them, etc.
+
+[import-rule-on-layers]: /docs/reference/layers#import-rule-on-layers
+[ext-type-fest]: https://github.com/sindresorhus/type-fest
+[ext-zod]: https://zod.dev
+[ext-vite]: https://vitejs.dev
+[ext-ts-reset]: https://www.totaltypescript.com/ts-reset
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/guides/examples/types.mdx b/i18n/en/docusaurus-plugin-content-docs/current/guides/examples/types.mdx
deleted file mode 100644
index 05f03dbea..000000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/guides/examples/types.mdx
+++ /dev/null
@@ -1,30 +0,0 @@
----
-sidebar_position: 3
-sidebar_class_name: sidebar-item--wip
----
-
-import WIP from '@site/src/shared/ui/wip/tmpl.mdx'
-
-# Types
-
-
-
-> **The types are different**
->
-> This may be as a utility type (`Maybe`) and subject area (Tls Contract, Camera, ...)
->
-> 1) what refers to The subject area is usually better to put in the shared/api (especially when there is a code generation in one place)
-> (for entities such spraying PTS released)
->
-> 2) Common service types that you can segelerite - same-react-app-env.d.ts
->
-> 3) And if you have service types and you need to import right everywhere, then it's not critical especially, you can also put it in shared, you can also put it next to react-app-env.d.ts
->
-> https://t.me/feature_sliced/3879
->
-> 4) It makes sense to store normalized types for entities in entities
->
-> https://t.me/feature_sliced/4513
-
-
-> https://t.me/feature_sliced/3877
diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/page-layout.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/page-layout.mdx
index dd6457a0f..3199f30b4 100644
--- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/page-layout.mdx
+++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/page-layout.mdx
@@ -1,5 +1,5 @@
---
-sidebar_position: 2
+sidebar_position: 3
sidebar_class_name: sidebar-item--wip
---
diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/types.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/types.md
new file mode 100644
index 000000000..c00ae7fe9
--- /dev/null
+++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/types.md
@@ -0,0 +1,434 @@
+---
+sidebar_position: 2
+---
+
+# Π’ΠΈΠΏΡ
+
+Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
ΠΈΠ· ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ·ΡΠΊΠΎΠ², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ TypeScript, ΠΈ Π³Π΄Π΅ ΠΎΠ½ΠΈ Π²ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² FSD.
+
+:::info
+
+ΠΠ°ΡΠ΅Π³ΠΎ Π²ΠΎΠΏΡΠΎΡΠ° Π½Π΅Ρ Π² ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅? ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ, ΠΎΡΡΠ°Π²ΠΈΠ² ΠΎΡΠ·ΡΠ² ΠΊ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ (ΡΠΈΠ½ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ° ΡΠΏΡΠ°Π²Π°), ΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°!
+
+:::
+
+## Π’ΠΈΠΏΡ-ΡΡΠΈΠ»ΠΈΡΡ
+
+Π’ΠΈΠΏΡ-ΡΡΠΈΠ»ΠΈΡΡ β ΡΡΠΎ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΡΠΌΡΡΠ»Π° ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
+
+
+
+```ts
+type ArrayValues = T[number];
+```
+
+
+ ΠΡΡΠΎΡΠ½ΠΈΠΊ: https://github.com/sindresorhus/type-fest/blob/main/source/array-values.d.ts
+
+
+
+
+Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΈΠΏΡ-ΡΡΠΈΠ»ΠΈΡΡ Π² Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ [`type-fest`][ext-type-fest], ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² `shared/lib`. ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΡΠΊΠΎ ΡΠΊΠ°ΠΆΠΈΡΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ Π½ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ _ΠΌΠΎΠΆΠ½ΠΎ_ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π² ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π° ΠΊΠ°ΠΊΠΈΠ΅ β _Π½Π΅Π»ΡΠ·Ρ_. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°Π·ΠΎΠ²ΠΈΡΠ΅ Π΅Π΅ `shared/lib/utility-types` ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π²Π½ΡΡΡΡ ΡΠ°ΠΉΠ» README, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΈΠΏΡ-ΡΡΠΈΠ»ΠΈΡΡ Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
+
+ΠΠ΅ ΠΏΠ΅ΡΠ΅ΠΎΡΠ΅Π½ΠΈΠ²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π» ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²-ΡΡΠΈΠ»ΠΈΡ. Π’ΠΎ, ΡΡΠΎ ΠΈΡ
_ΠΌΠΎΠΆΠ½ΠΎ_ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ, Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΊ ΠΈ Π±ΡΠ΄Π΅Ρ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΏ-ΡΡΠΈΠ»ΠΈΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π² Shared. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΠΏΡ-ΡΡΠΈΠ»ΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π»Π΅ΠΆΠ°ΡΡ ΠΏΡΡΠΌΠΎ ΡΠ°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π½ΡΠΆΠ½Ρ:
+
+- π pages
+ - π home
+ - π api
+ - π ArrayValues.ts (ΡΠΈΠΏ-ΡΡΠΈΠ»ΠΈΡΠ°)
+ - π getMemoryUsageMetrics.ts (ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ)
+
+:::warning
+
+ΠΠ΅ ΠΏΠΎΠ΄Π΄Π°Π²Π°ΠΉΡΠ΅ΡΡ ΠΈΡΠΊΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ°ΠΏΠΊΡ `shared/types` ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅Π³ΠΌΠ΅Π½Ρ `types` Π² Π²Π°ΡΠΈ ΡΠ»Π°ΠΉΡΡ. ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ "ΡΠΈΠΏΡ" ΠΏΠΎΡ
ΠΎΠΆΠ° Π½Π° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ "ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ" ΠΈΠ»ΠΈ "Ρ
ΡΠΊΠΈ" Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½Π° ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅, Π° Π½Π΅ ΡΠΎ, Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ. Π‘Π΅Π³ΠΌΠ΅Π½ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ΅Π»Ρ ΠΊΠΎΠ΄Π°, Π° Π½Π΅ Π΅Π³ΠΎ ΡΡΡΡ.
+
+:::
+
+## ΠΠΈΠ·Π½Π΅Ρ-ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΈΡ
ΡΡΡΠ»ΠΊΠΈ Π΄ΡΡΠ³ Π½Π° Π΄ΡΡΠ³Π°
+
+ΠΠ΄Π½ΠΈΠΌΠΈ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΡ
ΡΠΈΠΏΠΎΠ² Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠΏΡ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ, Ρ. Π΅. ΡΠ΅Π°Π»ΡΠ½ΡΡ
Π²Π΅ΡΠ΅ΠΉ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΎΠ½Π»Π°ΠΉΠ½-ΠΌΡΠ·ΡΠΊΠΈ Ρ Π²Π°Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΡΠ½ΠΎΡΡΠΈ _ΠΠ΅ΡΠ½Ρ_ (song), _ΠΠ»ΡΠ±ΠΎΠΌ_ (album) ΠΈ Ρ. Π΄.
+
+ΠΠΈΠ·Π½Π΅Ρ-ΡΡΡΠ½ΠΎΡΡΠΈ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ Ρ Π±ΡΠΊΠ΅Π½Π΄Π°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΎΡΠ²Π΅ΡΠΎΠ² Π±ΡΠΊΠ΅Π½Π΄Π°. Π£Π΄ΠΎΠ±Π½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠ° ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΡ ΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ»Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ² Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ΅ΡΠ΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎ ΡΡ
Π΅ΠΌΠ°ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ [Zod][ext-zod].
+
+ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΡΠ°Π½ΠΈΡΠ΅ Π²ΡΠ΅ ΡΠ²ΠΎΠΈ Π·Π°ΠΏΡΠΎΡΡ Π² Shared, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ:
+
+```ts title="shared/api/songs.ts"
+import type { Artist } from "./artists";
+
+interface Song {
+ id: number;
+ title: string;
+ artists: Array;
+}
+
+export function listSongs() {
+ return fetch('/api/songs').then((res) => res.json() as Promise>);
+}
+```
+
+ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠΈΠΏ `Song` ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° Π΄ΡΡΠ³ΡΡ ΡΡΡΠ½ΠΎΡΡΡ, `Artist`. ΠΡΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π²Π°ΡΠΈΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² Shared β ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΡΠ°ΡΡΠΎ ΡΡΡΠ»Π°ΡΡΡΡ Π΄ΡΡΠ³ Π½Π° Π΄ΡΡΠ³Π°. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π² `entities/song/api`, ΠΌΡ Π±Ρ Π½Π΅ ΡΠΌΠΎΠ³Π»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ `Artist` ΠΈΠ· `entities/artist`, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ FSD ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΊΡΠΎΡΡ-ΠΈΠΌΠΏΠΎΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ»Π°ΠΉΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· [ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ° Π΄Π»Ρ ΡΠ»ΠΎΡΠ²][import-rule-on-layers]:
+
+> ΠΠΎΠ΄ΡΠ»Ρ Π² ΡΠ»Π°ΠΉΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ»Π°ΠΉΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π½Π° ΡΠ»ΠΎΡΡ
ΡΡΡΠΎΠ³ΠΎ Π½ΠΈΠΆΠ΅.
+
+ΠΡΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
+
+1. **ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΡΠΈΠΏΡ**
+ ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ± Π²Π°ΡΠΈ ΡΠΈΠΏΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π»ΠΈ ΡΠΈΠΏΠΎΠ²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ»ΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ, ΠΈ Π΄Π°ΠΆΠ΅ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΡΡΠΈ ΡΠ»ΠΎΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
+
+ ```ts title="entities/song/model/song.ts"
+ interface Song {
+ id: number;
+ title: string;
+ artists: Array;
+ }
+ ```
+
+ ΠΡΠΎ Ρ
ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠΈΠΏΠΎΠ², ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Ρ
ΡΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
. ΠΡΠΎΡΡΠΎΠΉ ΡΠΈΠΏ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ `Cart = { items: Array }`, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π»ΡΠ±ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°. ΠΠΎΠ»Π΅Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠΈΠΏΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ `Country` ΠΈ `City`, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ ΡΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ.
+
+2. **ΠΡΠΎΡΡ-ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ (Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ)**
+ Π§ΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΡΠΎΡΡ-ΠΈΠΌΠΏΠΎΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ Π² FSD, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ API ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π°ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΊΡΠΎΡΡ-ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΡΡΠ½ΠΎΡΡΠΈ `song` (ΠΏΠ΅ΡΠ½Ρ), `artist` (ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ), ΠΈ `playlist` (ΠΏΠ»Π΅ΠΉΠ»ΠΈΡΡ), ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° `song`, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π²Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ
API Π΄Π»Ρ Π½ΠΈΡ
ΠΎΠ±ΠΎΠΈΡ
Π² ΡΡΡΠ½ΠΎΡΡΠΈ `song` ΡΠ΅ΡΠ΅Π· `@x`-Π½ΠΎΡΠ°ΡΠΈΡ:
+
+ - π entities
+ - π song
+ - π @x
+ - π artist.ts (ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ API, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠ½ΠΎΡΡΡ `artist`)
+ - π playlist.ts (ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ API, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠ½ΠΎΡΡΡ `playlist`)
+ - π index.ts (ΠΎΠ±ΡΠΊΠ½ΠΎΠ²Π΅Π½Π½ΡΠΉ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ API)
+
+ Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° `π entities/song/@x/artist.ts` ΠΏΠΎΡ
ΠΎΠΆΠ΅ Π½Π° `π entities/song/index.ts`:
+
+
+ ```ts title="entities/song/@x/artist.ts"
+ export type { Song } from "../model/song.ts";
+ ```
+
+ ΠΠ°ΡΠ΅ΠΌ `π entities/artist/model/artist.ts` ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ `Song` ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
+
+ ```ts title="entities/artist/model/artist.ts"
+ import type { Song } from "entities/song/@x/artist";
+
+ export interface Artist {
+ name: string;
+ songs: Array;
+ }
+ ```
+
+ Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²Π½ΡΡ
ΡΠ²ΡΠ·Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΎΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ².
+
+## ΠΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
(DTO) ΠΈ ΠΌΠ°ΠΏΠΏΠ΅ΡΡ {#data-transfer-objects-and-mappers}
+
+ΠΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
, ΠΈΠ»ΠΈ DTO (ΠΎΡ Π°Π½Π³Π». _data transfer object_), β ΡΡΠΎ ΡΠ΅ΡΠΌΠΈΠ½, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΠΎΡΠΌΡ Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ ΠΈΠ· Π±ΡΠΊΠ΅Π½Π΄Π°. ΠΠ½ΠΎΠ³Π΄Π° DTO ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π΅ΡΡΡ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡ
ΡΠΎΡΠΌΠ°Ρ Π½Π΅ΡΠ΄ΠΎΠ±Π΅Π½ Π΄Π»Ρ ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π°. Π’ΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΌΠ°ΠΏΠΏΠ΅ΡΡ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡ DTO Π² Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΡ ΡΠΎΡΠΌΡ.
+
+### ΠΡΠ΄Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ DTO
+
+ΠΡΠ»ΠΈ Π²Π°ΡΠΈ ΡΠΈΠΏΡ Π±ΡΠΊΠ΅Π½Π΄Π° Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Π΄Π΅Π»ΠΈΡΠ΅ ΠΊΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ΠΎΠΌ ΠΈ Π±ΡΠΊΠ΅Π½Π΄ΠΎΠΌ), ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ Π²Π°ΡΠΈ DTO ΠΎΡΡΡΠ΄Π°, ΠΈ Π³ΠΎΡΠΎΠ²ΠΎ! ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π΄Π΅Π»ΠΈΡΠ΅ ΠΊΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρ Π±ΡΠΊΠ΅Π½Π΄ΠΎΠΌ ΠΈ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ΠΎΠΌ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Ρ
ΡΠ°Π½ΠΈΡΡ DTO Π³Π΄Π΅-ΡΠΎ Π² Π²Π°ΡΠ΅ΠΌ ΡΡΠΎΠ½ΡΠ΅Π½Π΄-ΠΊΠΎΠ΄Π΅, ΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ Π½ΠΈΠΆΠ΅.
+
+ΠΡΠ»ΠΈ Π²Ρ Ρ
ΡΠ°Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² `shared/api`, ΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ DTO, ΠΏΡΡΠΌΠΎ ΡΡΠ΄ΠΎΠΌ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ:
+
+```ts title="shared/api/songs.ts"
+import type { ArtistDTO } from "./artists";
+
+interface SongDTO {
+ id: number;
+ title: string;
+ artist_ids: Array;
+}
+
+export function listSongs() {
+ return fetch('/api/songs').then((res) => res.json() as Promise>);
+}
+```
+
+ΠΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, Ρ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π²Π°ΡΠΈΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ DTO Π² Shared ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ DTO.
+
+### ΠΡΠ΄Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ ΠΌΠ°ΠΏΠΏΠ΅ΡΡ
+
+ΠΠ°ΠΏΠΏΠ΅ΡΡ β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ DTO Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ ΡΡΠ΄ΠΎΠΌ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ DTO. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Π°ΡΠΈ Π·Π°ΠΏΡΠΎΡΡ ΠΈ DTO ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² `shared/api`, ΡΠΎ ΠΈ ΠΌΠ°ΠΏΠΏΠ΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°ΠΌ ΠΆΠ΅:
+
+```ts title="shared/api/songs.ts"
+import type { ArtistDTO } from "./artists";
+
+interface SongDTO {
+ id: number;
+ title: string;
+ disc_no: number;
+ artist_ids: Array;
+}
+
+interface Song {
+ id: string;
+ title: string;
+ /** The full title of the song, including the disc number. */
+ fullTitle: string;
+ artistIds: Array;
+}
+
+function adaptSongDTO(dto: SongDTO): Song {
+ return {
+ id: String(dto.id),
+ title: dto.title,
+ fullTitle: `${dto.disc_no} / ${dto.title}`,
+ artistIds: dto.artist_ids.map(String),
+ };
+}
+
+export function listSongs() {
+ return fetch('/api/songs').then(async (res) => (await res.json()).map(adaptSongDTO));
+}
+```
+
+ΠΡΠ»ΠΈ Π²Π°ΡΠΈ Π·Π°ΠΏΡΠΎΡΡ ΠΈ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π² ΡΠ»Π°ΠΉΡΠ°Ρ
ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ, ΡΠΎ Π²Π΅ΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°ΠΌ, Ρ ΡΡΡΡΠΎΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΊΡΠΎΡΡ-ΠΈΠΌΠΏΠΎΡΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ:
+
+```ts title="entities/song/api/dto.ts"
+import type { ArtistDTO } from "entities/artist/@x/song";
+
+export interface SongDTO {
+ id: number;
+ title: string;
+ disc_no: number;
+ artist_ids: Array;
+}
+```
+
+```ts title="entities/song/api/mapper.ts"
+import type { SongDTO } from "./dto";
+
+export interface Song {
+ id: string;
+ title: string;
+ /** ΠΠΎΠ»Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ½ΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ Π½ΠΎΠΌΠ΅Ρ Π΄ΠΈΡΠΊΠ°. */
+ fullTitle: string;
+ artistIds: Array;
+}
+
+export function adaptSongDTO(dto: SongDTO): Song {
+ return {
+ id: String(dto.id),
+ title: dto.title,
+ fullTitle: `${dto.disc_no} / ${dto.title}`,
+ artistIds: dto.artist_ids.map(String),
+ };
+}
+```
+
+```ts title="entities/song/api/listSongs.ts"
+import { adaptSongDTO } from "./mapper";
+
+export function listSongs() {
+ return fetch('/api/songs').then(async (res) => (await res.json()).map(adaptSongDTO));
+}
+```
+
+```ts title="entities/song/model/songs.ts"
+import { createSlice, createEntityAdapter } from "@reduxjs/toolkit";
+
+import { listSongs } from "../api/listSongs";
+
+export const fetchSongs = createAsyncThunk('songs/fetchSongs', listSongs);
+
+const songAdapter = createEntityAdapter();
+const songsSlice = createSlice({
+ name: "songs",
+ initialState: songAdapter.getInitialState(),
+ reducers: {},
+ extraReducers: (builder) => {
+ builder.addCase(fetchSongs.fulfilled, (state, action) => {
+ songAdapter.upsertMany(state, action.payload);
+ })
+ },
+});
+```
+
+### Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ DTO
+
+Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ β ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΡΠ²Π΅Ρ ΠΎΡ Π±ΡΠΊΠ΅Π½Π΄Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ½Ρ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ID Π°Π²ΡΠΎΡΠΎΠ², Π½ΠΎ ΠΈ ΡΠ°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄Π°Π½Π½ΡΡ
ΠΎΠ± Π°Π²ΡΠΎΡΠ°Ρ
ΡΠ΅Π»ΠΈΠΊΠΎΠΌ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΡΠ½ΠΎΡΡΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π½Π΅ Π·Π½Π°ΡΡ Π΄ΡΡΠ³ ΠΎ Π΄ΡΡΠ³Π΅ (Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ Π½Π΅ Ρ
ΠΎΡΠΈΠΌ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ Π±Π΅ΡΠ΅Π΄Ρ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π±ΡΠΊΠ΅Π½Π΄Π°). ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ΄ΡΠΌΡΠ²Π°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π½Π΅ΡΠ²Π½ΡΡ
ΡΠ²ΡΠ·Π΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ΅Π·Π°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠΈΠΉ middleware, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π΄ΠΈΡΠΏΠ°ΡΡΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ»Π°ΠΉΡΠ°ΠΌ), ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ²Π½ΡΠΉ ΠΊΡΠΎΡΡ-ΠΈΠΌΠΏΠΎΡΡ ΡΠ΅ΡΠ΅Π· `@x`-Π½ΠΎΡΠ°ΡΠΈΡ. ΠΠΎΡ ΠΊΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ Redux Toolkit:
+
+
+```ts title="entities/song/model/songs.ts"
+import {
+ createSlice,
+ createEntityAdapter,
+ createAsyncThunk,
+ createSelector,
+} from '@reduxjs/toolkit'
+import { normalize, schema } from 'normalizr'
+
+import { getSong } from "../api/getSong";
+
+// ΠΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΡΡ
Π΅ΠΌΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ Π² normalizr
+export const artistEntity = new schema.Entity('artists')
+export const songEntity = new schema.Entity('songs', {
+ artists: [artistEntity],
+})
+
+const songAdapter = createEntityAdapter()
+
+export const fetchSong = createAsyncThunk(
+ 'songs/fetchSong',
+ async (id: string) => {
+ const data = await getSong(id)
+ // ΠΠΎΡΠΌΠ°Π»ΠΈΠ·ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅, ΡΡΠΎΠ±Ρ ΡΠ΅Π΄ΡΡΡΠ΅ΡΡ ΠΌΠΎΠ³Π»ΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
+ // `action.payload = { songs: {}, artists: {} }`
+ const normalized = normalize(data, songEntity)
+ return normalized.entities
+ }
+)
+
+export const slice = createSlice({
+ name: 'songs',
+ initialState: songAdapter.getInitialState(),
+ reducers: {},
+ extraReducers: (builder) => {
+ builder.addCase(fetchSong.fulfilled, (state, action) => {
+ songAdapter.upsertMany(state, action.payload.songs)
+ })
+ },
+})
+
+const reducer = slice.reducer
+export default reducer
+```
+
+```ts title="entities/song/@x/artist.ts"
+export { fetchSong } from "../model/songs";
+```
+
+```ts title="entities/artist/model/artists.ts"
+import { createSlice, createEntityAdapter } from '@reduxjs/toolkit'
+
+import { fetchSong } from 'entities/song/@x/artist'
+
+const artistAdapter = createEntityAdapter()
+
+export const slice = createSlice({
+ name: 'users',
+ initialState: artistAdapter.getInitialState(),
+ reducers: {},
+ extraReducers: (builder) => {
+ builder.addCase(fetchSong.fulfilled, (state, action) => {
+ // Π Π·Π΄Π΅ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΡΠΎΡ ΠΆΠ΅ ΠΎΡΠ²Π΅Ρ Ρ Π±ΡΠΊΠ΅Π½Π΄Π°, Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ΠΉ
+ usersAdapter.upsertMany(state, action.payload.users)
+ })
+ },
+})
+
+const reducer = slice.reducer
+export default reducer
+```
+
+ΠΡΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ ΡΠ»Π°ΠΉΡΠΎΠ², Π½ΠΎ ΡΡΡΠΊΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ Π΄Π²ΡΠΌΡ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π½Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌ. ΠΡΠ»ΠΈ ΡΡΠΈ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π±ΡΠ΄ΡΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΡΡΡΡ, ΠΈΡ
Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΡΡ Π²ΠΌΠ΅ΡΡΠ΅.
+
+## ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΠΈ Redux
+
+ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ β ΡΡΠΎ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° Π²ΠΈΠ΄Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ
ΡΠΈΠΏΠΎΠ², Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΈΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ:
+1. Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
+2. Π’ΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ ΠΎΠ±ΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ
+
+ΠΠ΅ΡΠ²ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ Π»Π΅Π³ΠΊΠΎ ΡΠ΅ΡΠΈΡΡ β ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠΈΠΏΡ Π² Shared, Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ΅Π³ΠΌΠ΅Π½Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Π³ΠΎ Π² `shared/analytics`.
+
+:::warning
+
+ΠΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ°ΠΏΠΊΠΈ `shared/types`. ΠΠ½Π° Π³ΡΡΠΏΠΏΠΈΡΡΠ΅Ρ Π½Π΅ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Π²Π΅ΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Β«Π±ΡΡΡ ΡΠΈΠΏΠΎΠΌΒ», ΠΈ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ ΠΊΠΎΠ΄Π° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅.
+
+:::
+
+ΠΡΠΎΡΠΎΠΉ ΡΠ»ΡΡΠ°ΠΉ ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
Ρ Redux Π±Π΅Π· RTK. ΠΠ°Ρ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΈΠΏ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΠ΅ Π²ΡΠ΅ ΡΠ΅Π΄ΡΡΡΠ΅ΡΡ, Π½ΠΎ ΡΡΠΎΡ ΡΠΈΠΏ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π½ΡΠΆΠ΅Π½ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΡ ΡΠΈΠΏΠΈΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π² Redux:
+
+```ts title="app/store/index.ts"
+import { combineReducers, rootReducer } from "redux";
+
+import { songReducer } from "entities/song";
+import { artistReducer } from "entities/artist";
+
+const rootReducer = combineReducers(songReducer, artistReducer);
+
+const store = createStore(rootReducer);
+
+type RootState = ReturnType;
+type AppDispatch = typeof store.dispatch;
+```
+
+ΠΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Ρ
ΡΠΊΠΈ `useAppDispatch` ΠΈ `useAppSelector` Π² `shared/store`, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ `RootState` ΠΈ `AppDispatch` ΠΈΠ· ΡΠ»ΠΎΡ App ΠΈΠ·-Π·Π° [ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠΌΠΏΠΎΡΡΠ° Π΄Π»Ρ ΡΠ»ΠΎΡΠ²][import-rule-on-layers]:
+
+> ΠΠΎΠ΄ΡΠ»Ρ Π² ΡΠ»Π°ΠΉΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ»Π°ΠΉΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π½Π° ΡΠ»ΠΎΡΡ
ΡΡΡΠΎΠ³ΠΎ Π½ΠΈΠΆΠ΅.
+
+Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅ΡΠ²Π½ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ»ΠΎΡΠΌΠΈ Shared ΠΈ App. ΠΡΠΈ Π΄Π²Π° ΡΠΈΠΏΠ°, `RootState` ΠΈ `AppDispatch`, Π²ΡΡΠ΄ Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡ, ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π·Π½Π°ΠΊΠΎΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π½Π° Redux, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ΡΠ²Π½Π°Ρ ΡΠ²ΡΠ·Ρ Π²ΡΡΠ΄ Π»ΠΈ ΡΡΠ°Π½Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
+
+Π TypeScript ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΎΠ±ΡΡΠ²ΠΈΠ² ΡΠΈΠΏΡ ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊ:
+
+```ts title="app/store/index.ts"
+/* ΡΠΎ ΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π² Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π° Π΄ΠΎ ΡΡΠΎΠ³ΠΎβ¦ */
+
+declare type RootState = ReturnType;
+declare type AppDispatch = typeof store.dispatch;
+```
+
+```ts title="shared/store/index.ts"
+import { useDispatch, useSelector, type TypedUseSelectorHook } from "react-redux";
+
+export const useAppDispatch = useDispatch.withTypes()
+export const useAppSelector: TypedUseSelectorHook = useSelector;
+```
+
+## Π‘Ρ
Π΅ΠΌΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² ΠΈ Zod
+
+ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΠΎ Π²Π°ΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅ ΠΈΠ»ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡ
Π΅ΠΌΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ. Π TypeScript ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Π΄Π»Ρ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ [Zod][ext-zod]. Π‘Ρ
Π΅ΠΌΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½Ρ ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
+
+Π‘Ρ
Π΅ΠΌΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΠΏΠΎΡ
ΠΎΠΆΠΈ Π½Π° ΠΌΠ°ΠΏΠΏΠ΅ΡΡ (ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΎΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ [ΠΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
(DTO) ΠΈ ΠΌΠ°ΠΏΠΏΠ΅ΡΡ](#data-transfer-objects-and-mappers)) Π² ΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
ΠΈ ΠΏΠ°ΡΡΡΡ Π΅Π³ΠΎ, Π²ΡΠ΄Π°Π²Π°Ρ ΠΎΡΠΈΠ±ΠΊΡ, Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΡΠΈΠ½Π³ Π½Π΅ ΡΠ΄Π°Π»ΡΡ.
+
+ΠΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ
ΡΠ»ΡΡΠ°Π΅Π² Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ β ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅, ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠ΅ Ρ Π±ΡΠΊΠ΅Π½Π΄Π°. ΠΠ±ΡΡΠ½ΠΎ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ Π·Π°ΠΏΡΠΎΡ ΠΊΠ°ΠΊ Π½Π΅ΡΠ΄Π°Π²ΡΠΈΠΉΡΡ, Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΡ
Π΅ΠΌΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΡ
Π΅ΠΌΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΌΠ΅ΡΡΠ΅, ΡΡΠΎ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠΌ `api`.
+
+ΠΡΠ»ΠΈ Π²Π°ΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· ΡΠΎΡΠΌΡ, Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ
. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΡΠ²ΠΎΡ ΡΡ
Π΅ΠΌΡ Π² ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ `ui`, ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ ΡΠΎΡΠΌΡ, ΠΈΠ»ΠΈ Π² ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ `model`, Π΅ΡΠ»ΠΈ ΡΠ΅Π³ΠΌΠ΅Π½Ρ `ui` ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½.
+
+## Π’ΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΏΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°
+
+Π ΡΠ΅Π»ΠΎΠΌ, Π»ΡΡΡΠ΅ Ρ
ΡΠ°Π½ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΎΠΏΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π² ΡΠΎΠΌ ΠΆΠ΅ ΡΠ°ΠΉΠ»Π΅, ΡΡΠΎ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Ρ ΠΎΠ΄Π½ΠΎΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Vue ΠΈΠ»ΠΈ Svelte, ΠΈ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΎΠΏΠΎΠ² Π² ΡΠΎΠΌ ΠΆΠ΅ ΡΠ°ΠΉΠ»Π΅, ΠΈΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Π² ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠ΅, ΠΎΠ±ΡΡΠ½ΠΎ Π² ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ `ui`.
+
+ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Ρ JSX (React ΠΈΠ»ΠΈ Solid):
+
+```ts title="pages/home/ui/RecentActions.tsx"
+interface RecentActionsProps {
+ actions: Array<{ id: string; text: string }>;
+}
+
+export function RecentActions({ actions }: RecentActionsProps) {
+ /* β¦ */
+}
+```
+
+Π Π²ΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, Ρ
ΡΠ°Π½ΡΡΠΈΠΌΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅, Π΄Π»Ρ Vue:
+
+```ts title="pages/home/ui/RecentActionsProps.ts"
+export interface RecentActionsProps {
+ actions: Array<{ id: string; text: string }>;
+}
+```
+
+```html title="pages/home/ui/RecentActions.vue"
+
+```
+
+## ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ (`*.d.ts`)
+
+ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, [Vite][ext-vite] ΠΈΠ»ΠΈ [ts-reset][ext-ts-reset], ΡΡΠ΅Π±ΡΡΡ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΠΎΠ½ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΈ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°ΡΡΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ, ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΏΠ°ΠΏΠΊΡ `src/`. Π§ΡΠΎΠ±Ρ `src` Π±ΡΠ» Π±ΠΎΠ»Π΅Π΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Ρ
ΡΠ°Π½ΠΈΡΡ ΠΈΡ
Π½Π° ΡΠ»ΠΎΠ΅ App, Π² `app/ambient/`.
+
+ΠΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏΠΎΠ², ΠΈ Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΈΡ
ΠΊΠ°ΠΊ Π½Π΅ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π»Ρ Π½ΠΈΡ
. Π₯ΠΎΡΠΎΡΠΈΠΌ ΠΌΠ΅ΡΡΠΎΠΌ Π΄Π»Ρ ΡΡΠΈΡ
ΡΠΈΠΏΠΎΠ² Π±ΡΠ΄Π΅Ρ `shared/lib`, Π² ΠΏΠ°ΠΏΠΊΠ΅ ΡΠΈΠΏΠ° `shared/lib/untyped-packages`. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΌ ΡΠ°ΠΉΠ» `%LIBRARY_NAME%.d.ts` ΠΈ ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ:
+
+```ts title="shared/lib/untyped-packages/use-react-screenshot.d.ts"
+// Π£ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅Ρ ΡΠΈΠΏΠΎΠ², ΠΈ ΠΌΡ Π½Π΅ Ρ
ΠΎΡΠ΅Π»ΠΈ Π·Π°ΠΌΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠ²ΠΎΠΈΡ
.
+declare module "use-react-screenshot";
+```
+
+## ΠΠ²ΡΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ²
+
+Π§Π°ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠΏΡ ΠΈΠ· Π²Π½Π΅ΡΠ½ΠΈΡ
ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠΏΡ Π±ΡΠΊΠ΅Π½Π΄Π° ΠΈΠ· ΡΡ
Π΅ΠΌΡ OpenAPI. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π΄Π»Ρ ΡΡΠΈΡ
ΡΠΈΠΏΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, `shared/api/openapi`. ΠΠ΄Π΅Π°Π»ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ README Π² ΡΡΡ ΠΏΠ°ΠΏΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΡΠΎ Π·Π° ΡΠ°ΠΉΠ»Ρ, ΠΊΠ°ΠΊ ΠΈΡ
ΠΏΠ΅ΡΠ΅Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Ρ. Π΄.
+
+[import-rule-on-layers]: /docs/reference/layers#import-rule-on-layers
+[ext-type-fest]: https://github.com/sindresorhus/type-fest
+[ext-zod]: https://zod.dev
+[ext-vite]: https://vitejs.dev
+[ext-ts-reset]: https://www.totaltypescript.com/ts-reset
diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/types.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/types.mdx
deleted file mode 100644
index edd2422ba..000000000
--- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/examples/types.mdx
+++ /dev/null
@@ -1,30 +0,0 @@
----
-sidebar_position: 3
-sidebar_class_name: sidebar-item--wip
----
-
-import WIP from '@site/src/shared/ui/wip/tmpl.mdx'
-
-# Π’ΠΈΠΏΡ
-
-
-
-> **Π’ΠΈΠΏΡ Π±ΡΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅**
->
-> ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠΉ type (`Maybe`), ΡΠ°ΠΊ ΠΈ ΠΏΠΎ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ (Tls, Contract, Camera, ...)
->
-> 1) Π’ΠΎ ΡΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π»ΡΡΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π² shared/api (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Π΅ΡΡΡ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π² ΠΎΠ΄Π½ΠΎ ΠΌΠ΅ΡΡΠΎ)
-> (ΠΏΠΎ entities ΡΠ°ΠΊΠΎΠ΅ ΡΠ°ΡΠΏΡΠ»ΡΡΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ Π²ΡΠΉΠ΄Π΅Ρ)
->
-> 2) ΠΠ±ΡΠΈΠ΅ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠ΅ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠΎΠ²Π°ΡΡ - Π² ΡΠΎΡ ΠΆΠ΅ react-app-env.d.ts
->
-> 3) Π Π΅ΡΠ»ΠΈ Ρ ΡΠ΅Π±Ρ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠ΅ ΡΠΈΠΏΡ ΠΈ Π½Π°Π΄ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΡΠΌ Π²Π΅Π·Π΄Π΅ - ΡΠΎ Π½Π΅ΠΊΡΠΈΡΠΈΡΠ½ΠΎ ΠΎΡΠΎΠ±ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π² shared, ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΡΡΠ΄ΠΎΠΌ Ρ react-app-env.d.ts ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ
->
-> https://t.me/feature_sliced/3879
->
-> 4) ΠΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π»Ρ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Ρ
ΡΠ°Π½ΠΈΡΡ Π² entities
->
-> https://t.me/feature_sliced/4513
-
-
-> https://t.me/feature_sliced/3877
diff --git a/package.json b/package.json
index 67a98ef80..a123b49f8 100644
--- a/package.json
+++ b/package.json
@@ -26,11 +26,11 @@
},
"dependencies": {
"@ant-design/icons": "^5.4.0",
- "@docusaurus/core": "^3.4.0",
- "@docusaurus/plugin-client-redirects": "^3.4.0",
- "@docusaurus/plugin-content-docs": "^3.4.0",
- "@docusaurus/plugin-ideal-image": "^3.4.0",
- "@docusaurus/preset-classic": "^3.4.0",
+ "@docusaurus/core": "^3.5.1",
+ "@docusaurus/plugin-client-redirects": "^3.5.1",
+ "@docusaurus/plugin-content-docs": "^3.5.1",
+ "@docusaurus/plugin-ideal-image": "^3.5.1",
+ "@docusaurus/preset-classic": "^3.5.1",
"@fontsource-variable/overpass": "^5.0.19",
"@mdx-js/react": "^3.0.1",
"@svgr/webpack": "^8.1.0",
@@ -67,14 +67,14 @@
},
"devDependencies": {
"@babel/eslint-parser": "^7.25.1",
- "@docusaurus/module-type-aliases": "^3.4.0",
- "@docusaurus/theme-classic": "^3.4.0",
- "@docusaurus/tsconfig": "^3.4.0",
- "@docusaurus/types": "^3.4.0",
+ "@docusaurus/module-type-aliases": "^3.5.1",
+ "@docusaurus/theme-classic": "^3.5.1",
+ "@docusaurus/tsconfig": "^3.5.1",
+ "@docusaurus/types": "^3.5.1",
"@eslint-kit/eslint-config-base": "4.1.0",
"@eslint-kit/eslint-config-patch": "^1.0.0",
"@eslint-kit/eslint-config-react": "^3.0.0",
- "@types/node": "^22.1.0",
+ "@types/node": "^22.2.0",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
"@typescript-eslint/eslint-plugin": "^6.21.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a0ca2259e..260b2840d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -12,20 +12,20 @@ importers:
specifier: ^5.4.0
version: 5.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@docusaurus/core':
- specifier: ^3.4.0
- version: 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ specifier: ^3.5.1
+ version: 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
'@docusaurus/plugin-client-redirects':
- specifier: ^3.4.0
- version: 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ specifier: ^3.5.1
+ version: 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
'@docusaurus/plugin-content-docs':
- specifier: ^3.4.0
- version: 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ specifier: ^3.5.1
+ version: 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
'@docusaurus/plugin-ideal-image':
- specifier: ^3.4.0
- version: 3.4.0(eslint@7.32.0)(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ specifier: ^3.5.1
+ version: 3.5.1(eslint@7.32.0)(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
'@docusaurus/preset-classic':
- specifier: ^3.4.0
- version: 3.4.0(@algolia/client-search@4.24.0)(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.5.4)
+ specifier: ^3.5.1
+ version: 3.5.1(@algolia/client-search@4.24.0)(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.5.4)
'@fontsource-variable/overpass':
specifier: ^5.0.19
version: 5.0.19
@@ -94,17 +94,17 @@ importers:
specifier: ^7.25.1
version: 7.25.1(@babel/core@7.25.2)(eslint@7.32.0)
'@docusaurus/module-type-aliases':
- specifier: ^3.4.0
- version: 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^3.5.1
+ version: 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@docusaurus/theme-classic':
- specifier: ^3.4.0
- version: 3.4.0(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ specifier: ^3.5.1
+ version: 3.5.1(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
'@docusaurus/tsconfig':
- specifier: ^3.4.0
- version: 3.4.0
+ specifier: ^3.5.1
+ version: 3.5.1
'@docusaurus/types':
- specifier: ^3.4.0
- version: 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^3.5.1
+ version: 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@eslint-kit/eslint-config-base':
specifier: 4.1.0
version: 4.1.0(@typescript-eslint/parser@6.21.0(eslint@7.32.0)(typescript@5.5.4))(eslint@7.32.0)
@@ -115,8 +115,8 @@ importers:
specifier: ^3.0.0
version: 3.0.0(eslint@7.32.0)
'@types/node':
- specifier: ^22.1.0
- version: 22.1.0
+ specifier: ^22.2.0
+ version: 22.2.0
'@types/react':
specifier: ^18.3.3
version: 18.3.3
@@ -134,7 +134,7 @@ importers:
version: 6.26.1
docusaurus-plugin-sass:
specifier: ^0.2.5
- version: 0.2.5(@docusaurus/core@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(sass@1.77.8)(webpack@5.93.0)
+ version: 0.2.5(@docusaurus/core@3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(sass@1.77.8)(webpack@5.93.0)
eslint:
specifier: ^7.32.0
version: 7.32.0
@@ -161,7 +161,7 @@ importers:
version: 13.0.0(stylelint@15.11.0(typescript@5.5.4))
stylelint-config-standard-scss:
specifier: ^11.1.0
- version: 11.1.0(postcss@8.4.40)(stylelint@15.11.0(typescript@5.5.4))
+ version: 11.1.0(postcss@8.4.41)(stylelint@15.11.0(typescript@5.5.4))
typescript:
specifier: ^5.5.4
version: 5.5.4
@@ -960,97 +960,98 @@ packages:
search-insights:
optional: true
- '@docusaurus/core@3.4.0':
- resolution: {integrity: sha512-g+0wwmN2UJsBqy2fQRQ6fhXruoEa62JDeEa5d8IdTJlMoaDaEDfHh7WjwGRn4opuTQWpjAwP/fbcgyHKlE+64w==}
+ '@docusaurus/core@3.5.1':
+ resolution: {integrity: sha512-N3+9IbGI2jbkiRc6ZbEnU9dC02nHQXi8ivM1VJldkPQyP7WlyHXS+NDhmL3rwaYOMbGH96X2LcKigCKg7pEEqg==}
engines: {node: '>=18.0'}
hasBin: true
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/cssnano-preset@3.4.0':
- resolution: {integrity: sha512-qwLFSz6v/pZHy/UP32IrprmH5ORce86BGtN0eBtG75PpzQJAzp9gefspox+s8IEOr0oZKuQ/nhzZ3xwyc3jYJQ==}
+ '@docusaurus/cssnano-preset@3.5.1':
+ resolution: {integrity: sha512-mvtWPLWePlm+4doepxMUT5ynsJQ3CgPtDdbaQh9wm3iAE/7OATBpSgLlfz5N+YtxI5bjIErjbkH8yzISP+S65g==}
engines: {node: '>=18.0'}
- '@docusaurus/logger@3.4.0':
- resolution: {integrity: sha512-bZwkX+9SJ8lB9kVRkXw+xvHYSMGG4bpYHKGXeXFvyVc79NMeeBSGgzd4TQLHH+DYeOJoCdl8flrFJVxlZ0wo/Q==}
+ '@docusaurus/logger@3.5.1':
+ resolution: {integrity: sha512-B36a88CEHCtxIylAV1HNuiiISpoKBqm0UxA6a/JwtHX++Dxb7LNDSGs8ELBlQsZN0OG2tX3tBsCWyaLPwYorkQ==}
engines: {node: '>=18.0'}
- '@docusaurus/lqip-loader@3.4.0':
- resolution: {integrity: sha512-F//Gjqcz925zLL1l3Y3XOtQvn927GBIr9ZouvzWF4jHNKuuHBqzOPSADF5O/cT3Vq1ucPWooyhPBxYcvSGF4SA==}
+ '@docusaurus/lqip-loader@3.5.1':
+ resolution: {integrity: sha512-6zH81/yQyJlRxyVUKUXUt1XmsrbcRlWWwQmnq+xfVHgLymkZnLXD4C28ZSUWVt6SBVXOj4f0FTAo31UrMXfYdQ==}
engines: {node: '>=18.0'}
- '@docusaurus/mdx-loader@3.4.0':
- resolution: {integrity: sha512-kSSbrrk4nTjf4d+wtBA9H+FGauf2gCax89kV8SUSJu3qaTdSIKdWERlngsiHaCFgZ7laTJ8a67UFf+xlFPtuTw==}
+ '@docusaurus/mdx-loader@3.5.1':
+ resolution: {integrity: sha512-D6Ea2dt32xhoqH+1EuHLGDVSX2HLFiR4QpI0GTU46qOu2hb2ChpQENIUZ2inOsdGFunNa0fCnDG3qn7Kdbzq1A==}
engines: {node: '>=18.0'}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/module-type-aliases@3.4.0':
- resolution: {integrity: sha512-A1AyS8WF5Bkjnb8s+guTDuYmUiwJzNrtchebBHpc0gz0PyHJNMaybUlSrmJjHVcGrya0LKI4YcR3lBDQfXRYLw==}
+ '@docusaurus/module-type-aliases@3.5.1':
+ resolution: {integrity: sha512-SKKdA5RnvZr3pvFXkxtfsBVNgflRGa/bN1HbNi+1s0HNVYPuhB9DFC/CrKe2OoOfUXx7F7k2gg0Jg9gJYDy4rA==}
peerDependencies:
react: '*'
react-dom: '*'
- '@docusaurus/plugin-client-redirects@3.4.0':
- resolution: {integrity: sha512-Pr8kyh/+OsmYCvdZhc60jy/FnrY6flD2TEAhl4rJxeVFxnvvRgEhoaIVX8q9MuJmaQoh6frPk94pjs7/6YgBDQ==}
+ '@docusaurus/plugin-client-redirects@3.5.1':
+ resolution: {integrity: sha512-0At2RdS+7gDA25IMQROp4CcKx526jfER7bsna0EdWtPkC+rimSwxcxEHy0A+7xkBuUPh4SZNNuPVJAnYnvggrA==}
engines: {node: '>=18.0'}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/plugin-content-blog@3.4.0':
- resolution: {integrity: sha512-vv6ZAj78ibR5Jh7XBUT4ndIjmlAxkijM3Sx5MAAzC1gyv0vupDQNhzuFg1USQmQVj3P5I6bquk12etPV3LJ+Xw==}
+ '@docusaurus/plugin-content-blog@3.5.1':
+ resolution: {integrity: sha512-aPmrMV5cDa2QUZ+kPVJID5O6r+ZuLFtHEyneVl9AgryL/9ECudhtpTUdmdnmapnWfUzSSgqYRZ1JtydGLheSzw==}
engines: {node: '>=18.0'}
peerDependencies:
+ '@docusaurus/plugin-content-docs': '*'
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/plugin-content-docs@3.4.0':
- resolution: {integrity: sha512-HkUCZffhBo7ocYheD9oZvMcDloRnGhBMOZRyVcAQRFmZPmNqSyISlXA1tQCIxW+r478fty97XXAGjNYzBjpCsg==}
+ '@docusaurus/plugin-content-docs@3.5.1':
+ resolution: {integrity: sha512-DX+I3eVyXak9KqYXg8dgptomqz/O4twjydpLJT8ZSe9lsZ0Pa1ZNPwmftWYn160O3o6GGeUYzr13Y1Got3iXRQ==}
engines: {node: '>=18.0'}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/plugin-content-pages@3.4.0':
- resolution: {integrity: sha512-h2+VN/0JjpR8fIkDEAoadNjfR3oLzB+v1qSXbIAKjQ46JAHx3X22n9nqS+BWSQnTnp1AjkjSvZyJMekmcwxzxg==}
+ '@docusaurus/plugin-content-pages@3.5.1':
+ resolution: {integrity: sha512-V2PDVrO2vHYJ7uhrEHpfzg3TTuwfrgNC0pGhM5gXaMfCbdhKm7iwV0huGLcyIX5Peyh7EMP2e8GFccUzWFMYOg==}
engines: {node: '>=18.0'}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/plugin-debug@3.4.0':
- resolution: {integrity: sha512-uV7FDUNXGyDSD3PwUaf5YijX91T5/H9SX4ErEcshzwgzWwBtK37nUWPU3ZLJfeTavX3fycTOqk9TglpOLaWkCg==}
+ '@docusaurus/plugin-debug@3.5.1':
+ resolution: {integrity: sha512-teFZamoECDiELwM1cx5OXd6dBpRtHarc7kWGL1iQozAkYcobZmqOWykBl4joMjSWUbJlx5v9/CVciykWbFNXjA==}
engines: {node: '>=18.0'}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/plugin-google-analytics@3.4.0':
- resolution: {integrity: sha512-mCArluxEGi3cmYHqsgpGGt3IyLCrFBxPsxNZ56Mpur0xSlInnIHoeLDH7FvVVcPJRPSQ9/MfRqLsainRw+BojA==}
+ '@docusaurus/plugin-google-analytics@3.5.1':
+ resolution: {integrity: sha512-5FUiYZQWPXTPucMzaOOM25R7IwIPvMKbiB0SNVGtxVsGyFyo5i5fzrkBQl4mkZd7uqmslEPzwYbC28ZeFnrxjg==}
engines: {node: '>=18.0'}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/plugin-google-gtag@3.4.0':
- resolution: {integrity: sha512-Dsgg6PLAqzZw5wZ4QjUYc8Z2KqJqXxHxq3vIoyoBWiLEEfigIs7wHR+oiWUQy3Zk9MIk6JTYj7tMoQU0Jm3nqA==}
+ '@docusaurus/plugin-google-gtag@3.5.1':
+ resolution: {integrity: sha512-jxBtLBPMv9BJXPXrwJSs69qYcHP/evT1NkVza2yOai7wi5r3E1tVm0bAxdciWitpM0dgS/HDa30qXE7vA1NRDg==}
engines: {node: '>=18.0'}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/plugin-google-tag-manager@3.4.0':
- resolution: {integrity: sha512-O9tX1BTwxIhgXpOLpFDueYA9DWk69WCbDRrjYoMQtFHSkTyE7RhNgyjSPREUWJb9i+YUg3OrsvrBYRl64FCPCQ==}
+ '@docusaurus/plugin-google-tag-manager@3.5.1':
+ resolution: {integrity: sha512-W5WsKoRmb3lDmg2IBfmKsZDlQAkEx/dXuwr4bj7sSQdM8qd829Rsc4Gp5RddUrQdUz/W3Iocn7LayRM5aacJlA==}
engines: {node: '>=18.0'}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/plugin-ideal-image@3.4.0':
- resolution: {integrity: sha512-s8N/PRiv1R66UY+WX/2E9a+GjkRooXVcf0VJNEYA3yZ6c24Path15ivjmdMtKaSo/6OXYbejGlA4DJZ5TPLkCQ==}
+ '@docusaurus/plugin-ideal-image@3.5.1':
+ resolution: {integrity: sha512-gBdjBTIHyHR5Na3kCKKf2k/29KQ7wljh32zICSJkd59ts5VQzAbFgacNDmA/ZLpHFX88QMXJrwOQ6u/WAayGaw==}
engines: {node: '>=18.0'}
peerDependencies:
jimp: '*'
@@ -1060,15 +1061,15 @@ packages:
jimp:
optional: true
- '@docusaurus/plugin-sitemap@3.4.0':
- resolution: {integrity: sha512-+0VDvx9SmNrFNgwPoeoCha+tRoAjopwT0+pYO1xAbyLcewXSemq+eLxEa46Q1/aoOaJQ0qqHELuQM7iS2gp33Q==}
+ '@docusaurus/plugin-sitemap@3.5.1':
+ resolution: {integrity: sha512-VXMGJM6uy4jx6HUsFs+kn8MujWGjN7S7p7PYUYSf1bmcFNlf+Qg5vDZtwBElHa2hapeH2AIj2b3QmTgmWeyOHw==}
engines: {node: '>=18.0'}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/preset-classic@3.4.0':
- resolution: {integrity: sha512-Ohj6KB7siKqZaQhNJVMBBUzT3Nnp6eTKqO+FXO3qu/n1hJl3YLwVKTWBg28LF7MWrKu46UuYavwMRxud0VyqHg==}
+ '@docusaurus/preset-classic@3.5.1':
+ resolution: {integrity: sha512-afDMZoNYxdloJ7qJJbd3Lmv9uYXKKsEAOtvnvu2945kqe1LUGIIwOo1nMAKgB9y21E5FEvWKnla0MvkMraumZA==}
engines: {node: '>=18.0'}
peerDependencies:
react: ^18.0.0
@@ -1091,42 +1092,43 @@ packages:
sharp:
optional: true
- '@docusaurus/theme-classic@3.4.0':
- resolution: {integrity: sha512-0IPtmxsBYv2adr1GnZRdMkEQt1YW6tpzrUPj02YxNpvJ5+ju4E13J5tB4nfdaen/tfR1hmpSPlTFPvTf4kwy8Q==}
+ '@docusaurus/theme-classic@3.5.1':
+ resolution: {integrity: sha512-k8rLMwHuTc3SqYekc20s1uZHjabt9yi6mt1RUjbkwmjsJlAB6zrtYvsB+ZxrhY5yeUD8DZm3h0qVvKbClHVCCA==}
engines: {node: '>=18.0'}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/theme-common@3.4.0':
- resolution: {integrity: sha512-0A27alXuv7ZdCg28oPE8nH/Iz73/IUejVaCazqu9elS4ypjiLhK3KfzdSQBnL/g7YfHSlymZKdiOHEo8fJ0qMA==}
+ '@docusaurus/theme-common@3.5.1':
+ resolution: {integrity: sha512-r34YDzSjggX+B+8W+mG2dVh1ps4JJRCiyq8E1LnZIKLU6F89I2KpAZpPQ2/njKsKhBRLtQ1x92HVkD0FZ3xjrg==}
engines: {node: '>=18.0'}
peerDependencies:
+ '@docusaurus/plugin-content-docs': '*'
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/theme-search-algolia@3.4.0':
- resolution: {integrity: sha512-aiHFx7OCw4Wck1z6IoShVdUWIjntC8FHCw9c5dR8r3q4Ynh+zkS8y2eFFunN/DL6RXPzpnvKCg3vhLQYJDmT9Q==}
+ '@docusaurus/theme-search-algolia@3.5.1':
+ resolution: {integrity: sha512-IcUbgh9YcedANhpa0Q3+67WUKY8G7YkN/pZxVBEFjq3d2bniRKktPv41Nh/+AtGLSNJIcspZwEAs/r/mKSZGug==}
engines: {node: '>=18.0'}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/theme-translations@3.4.0':
- resolution: {integrity: sha512-zSxCSpmQCCdQU5Q4CnX/ID8CSUUI3fvmq4hU/GNP/XoAWtXo9SAVnM3TzpU8Gb//H3WCsT8mJcTfyOk3d9ftNg==}
+ '@docusaurus/theme-translations@3.5.1':
+ resolution: {integrity: sha512-fyzQOWrTm0+ZpTlS0/xHsIK4f+LA4qVFrq8rCzIHjxZRip/noYUOwF64lA95vcuw6qnOVBoNE/LyfbBvExnpcw==}
engines: {node: '>=18.0'}
- '@docusaurus/tsconfig@3.4.0':
- resolution: {integrity: sha512-0qENiJ+TRaeTzcg4olrnh0BQ7eCxTgbYWBnWUeQDc84UYkt/T3pDNnm3SiQkqPb+YQ1qtYFlC0RriAElclo8Dg==}
+ '@docusaurus/tsconfig@3.5.1':
+ resolution: {integrity: sha512-6OO63/xQ11Tu4reCRuB4zfjqdZYmQwkOTVI8zxxEHCLma4pplsx4HTCB2lVgztEL+Qr6hcHY952ZrpmoAt5rUA==}
- '@docusaurus/types@3.4.0':
- resolution: {integrity: sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==}
+ '@docusaurus/types@3.5.1':
+ resolution: {integrity: sha512-IXTGQBoXAGFliGF5Cn3F+gSGskgzAL8+4y6dDY1gcePA0r8WngHj8oovS1YPv+b9JOff32nv8YGGZITHOMXJsA==}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
- '@docusaurus/utils-common@3.4.0':
- resolution: {integrity: sha512-NVx54Wr4rCEKsjOH5QEVvxIqVvm+9kh7q8aYTU5WzUU9/Hctd6aTrcZ3G0Id4zYJ+AeaG5K5qHA4CY5Kcm2iyQ==}
+ '@docusaurus/utils-common@3.5.1':
+ resolution: {integrity: sha512-374n6/IW34gHR65JMMN33XLFogTCsrGVPQDVbv2vG96EYHvYzE/plfcGV7xSbXB8yS1YHsxVfvNgVUGi973bfQ==}
engines: {node: '>=18.0'}
peerDependencies:
'@docusaurus/types': '*'
@@ -1134,12 +1136,12 @@ packages:
'@docusaurus/types':
optional: true
- '@docusaurus/utils-validation@3.4.0':
- resolution: {integrity: sha512-hYQ9fM+AXYVTWxJOT1EuNaRnrR2WGpRdLDQG07O8UOpsvCPWUVOeo26Rbm0JWY2sGLfzAb+tvJ62yF+8F+TV0g==}
+ '@docusaurus/utils-validation@3.5.1':
+ resolution: {integrity: sha512-LZdQnqVVLStgTCn0rfvf4wuOQkjPbGtLXJIQ449em1wJeSFO7lfmn5VGUNLt+xKHvIPfN272EHG8BuvijCI0+A==}
engines: {node: '>=18.0'}
- '@docusaurus/utils@3.4.0':
- resolution: {integrity: sha512-fRwnu3L3nnWaXOgs88BVBmG1yGjcQqZNHG+vInhEa2Sz2oQB+ZjbEMO5Rh9ePFpZ0YDiDUhpaVjwmS+AU2F14g==}
+ '@docusaurus/utils@3.5.1':
+ resolution: {integrity: sha512-/4QAvXyiQviz2FQ4ct5l1ckvDihIdjS8FsOExC0T+Y1UD38jgPbjTwRJXsDaRsDRCCrDAtXvlonxXw2kixcnXw==}
engines: {node: '>=18.0'}
peerDependencies:
'@docusaurus/types': '*'
@@ -1374,8 +1376,8 @@ packages:
resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==}
engines: {node: '>=12.22.0'}
- '@pnpm/npm-conf@2.3.0':
- resolution: {integrity: sha512-DqrO+oXGR7HCuicNy6quk6ALJSDDPKI7RZz1bP5im8mSL8J2e+9w26LdkjuAfpAjOutYUJVbnXnx4IbTQeIgfw==}
+ '@pnpm/npm-conf@2.3.1':
+ resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==}
engines: {node: '>=12'}
'@polka/url@1.0.0-next.25':
@@ -1560,8 +1562,8 @@ packages:
'@types/http-errors@2.0.4':
resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==}
- '@types/http-proxy@1.17.14':
- resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==}
+ '@types/http-proxy@1.17.15':
+ resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==}
'@types/istanbul-lib-coverage@2.0.6':
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
@@ -1605,8 +1607,8 @@ packages:
'@types/node@17.0.45':
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
- '@types/node@22.1.0':
- resolution: {integrity: sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==}
+ '@types/node@22.2.0':
+ resolution: {integrity: sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==}
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -1674,8 +1676,8 @@ packages:
'@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
- '@types/yargs@17.0.32':
- resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==}
+ '@types/yargs@17.0.33':
+ resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
'@typescript-eslint/eslint-plugin@6.21.0':
resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==}
@@ -1990,8 +1992,8 @@ packages:
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
- babel-plugin-polyfill-corejs3@0.10.4:
- resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==}
+ babel-plugin-polyfill-corejs3@0.10.6:
+ resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
@@ -2133,8 +2135,8 @@ packages:
caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
- caniuse-lite@1.0.30001647:
- resolution: {integrity: sha512-n83xdNiyeNcHpzWY+1aFbqCK7LuLfBricc4+alSQL2Xb6OR3XpnQAmlDG+pQcdTfiHRuLcQ96VOfrPSGiNJYSg==}
+ caniuse-lite@1.0.30001651:
+ resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -2359,14 +2361,14 @@ packages:
peerDependencies:
webpack: ^5.1.0
- core-js-compat@3.37.1:
- resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==}
+ core-js-compat@3.38.0:
+ resolution: {integrity: sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==}
- core-js-pure@3.37.1:
- resolution: {integrity: sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==}
+ core-js-pure@3.38.0:
+ resolution: {integrity: sha512-8balb/HAXo06aHP58mZMtXgD8vcnXz9tUDePgqBgJgKdmTlMt+jw3ujqniuBDQXMvTzxnMpxHFeuSM3g1jWQuQ==}
- core-js@3.37.1:
- resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==}
+ core-js@3.38.0:
+ resolution: {integrity: sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug==}
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -2700,8 +2702,8 @@ packages:
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- electron-to-chromium@1.5.4:
- resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==}
+ electron-to-chromium@1.5.6:
+ resolution: {integrity: sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2716,8 +2718,8 @@ packages:
resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
engines: {node: '>= 4'}
- emoticon@4.0.1:
- resolution: {integrity: sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==}
+ emoticon@4.1.0:
+ resolution: {integrity: sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==}
encodeurl@1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
@@ -3515,8 +3517,8 @@ packages:
resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
engines: {node: '>=12'}
- infima@0.2.0-alpha.43:
- resolution: {integrity: sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==}
+ infima@0.2.0-alpha.44:
+ resolution: {integrity: sha512-tuRkUSO/lB3rEhLJk25atwAjgLuzq070+pOW8XcvpHky/YbENnRRdPd85IBkyeTgttmOy5ah+yHYsK1HhUd4lQ==}
engines: {node: '>=12'}
inflight@1.0.6:
@@ -3863,8 +3865,8 @@ packages:
resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==}
engines: {node: '>=14.16'}
- launch-editor@2.8.0:
- resolution: {integrity: sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==}
+ launch-editor@2.8.1:
+ resolution: {integrity: sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==}
leven@3.1.0:
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
@@ -4823,8 +4825,8 @@ packages:
peerDependencies:
postcss: ^8.4.31
- postcss-resolve-nested-selector@0.1.4:
- resolution: {integrity: sha512-R6vHqZWgVnTAPq0C+xjyHfEZqfIYboCBVSy24MjxEDm+tIh1BU4O6o7DP7AA7kHzf136d+Qc5duI4tlpHjixDw==}
+ postcss-resolve-nested-selector@0.1.5:
+ resolution: {integrity: sha512-tum2m18S22ZSNjXatMG0FSk5ZL83pTttymeJx5Gzxg7RU0s1jNDU9rXltro4osQrukjyNormcb07IEjqEyPNaA==}
postcss-safe-parser@6.0.0:
resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
@@ -4874,8 +4876,8 @@ packages:
peerDependencies:
postcss: ^8.4.31
- postcss@8.4.40:
- resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==}
+ postcss@8.4.41:
+ resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==}
engines: {node: ^10 || ^12 || >=14}
prebuild-install@7.1.2:
@@ -5779,8 +5781,8 @@ packages:
uglify-js:
optional: true
- terser@5.31.3:
- resolution: {integrity: sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==}
+ terser@5.31.5:
+ resolution: {integrity: sha512-YPmas0L0rE1UyLL/llTWA0SiDOqIcAQYLeUj7cJYzXHlRTAnMSg9pPe4VJ5PlKvTrPQsdVFuiRiwyeNlYgwh2Q==}
engines: {node: '>=10'}
hasBin: true
@@ -7010,7 +7012,7 @@ snapshots:
'@babel/helper-module-imports': 7.24.7
'@babel/helper-plugin-utils': 7.24.8
babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2)
- babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.25.2)
+ babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2)
babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2)
semver: 6.3.1
transitivePeerDependencies:
@@ -7160,9 +7162,9 @@ snapshots:
'@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.25.2)
'@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2)
babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2)
- babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.25.2)
+ babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2)
babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2)
- core-js-compat: 3.37.1
+ core-js-compat: 3.38.0
semver: 6.3.1
transitivePeerDependencies:
- supports-color
@@ -7201,7 +7203,7 @@ snapshots:
'@babel/runtime-corejs3@7.25.0':
dependencies:
- core-js-pure: 3.37.1
+ core-js-pure: 3.38.0
regenerator-runtime: 0.14.1
'@babel/runtime@7.25.0':
@@ -7270,7 +7272,7 @@ snapshots:
transitivePeerDependencies:
- '@algolia/client-search'
- '@docusaurus/core@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ '@docusaurus/core@3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
dependencies:
'@babel/core': 7.25.2
'@babel/generator': 7.25.0
@@ -7282,13 +7284,13 @@ snapshots:
'@babel/runtime': 7.25.0
'@babel/runtime-corejs3': 7.25.0
'@babel/traverse': 7.25.3
- '@docusaurus/cssnano-preset': 3.4.0
- '@docusaurus/logger': 3.4.0
- '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
- '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
- autoprefixer: 10.4.20(postcss@8.4.40)
+ '@docusaurus/cssnano-preset': 3.5.1
+ '@docusaurus/logger': 3.5.1
+ '@docusaurus/mdx-loader': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/utils': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/utils-common': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ autoprefixer: 10.4.20(postcss@8.4.41)
babel-loader: 9.1.3(@babel/core@7.25.2)(webpack@5.93.0)
babel-plugin-dynamic-import-node: 2.3.3
boxen: 6.2.1
@@ -7299,10 +7301,10 @@ snapshots:
combine-promises: 1.2.0
commander: 5.1.0
copy-webpack-plugin: 11.0.0(webpack@5.93.0)
- core-js: 3.37.1
+ core-js: 3.38.0
css-loader: 6.11.0(webpack@5.93.0)
css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.93.0)
- cssnano: 6.1.2(postcss@8.4.40)
+ cssnano: 6.1.2(postcss@8.4.41)
del: 6.1.1
detect-port: 1.6.1
escape-html: 1.0.3
@@ -7317,8 +7319,8 @@ snapshots:
lodash: 4.17.21
mini-css-extract-plugin: 2.9.0(webpack@5.93.0)
p-map: 4.0.0
- postcss: 8.4.40
- postcss-loader: 7.3.4(postcss@8.4.40)(typescript@5.5.4)(webpack@5.93.0)
+ postcss: 8.4.41
+ postcss-loader: 7.3.4(postcss@8.4.41)(typescript@5.5.4)(webpack@5.93.0)
prompts: 2.4.2
react: 18.3.1
react-dev-utils: 12.0.1(eslint@7.32.0)(typescript@5.5.4)(webpack@5.93.0)
@@ -7361,21 +7363,21 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/cssnano-preset@3.4.0':
+ '@docusaurus/cssnano-preset@3.5.1':
dependencies:
- cssnano-preset-advanced: 6.1.2(postcss@8.4.40)
- postcss: 8.4.40
- postcss-sort-media-queries: 5.2.0(postcss@8.4.40)
+ cssnano-preset-advanced: 6.1.2(postcss@8.4.41)
+ postcss: 8.4.41
+ postcss-sort-media-queries: 5.2.0(postcss@8.4.41)
tslib: 2.6.3
- '@docusaurus/logger@3.4.0':
+ '@docusaurus/logger@3.5.1':
dependencies:
chalk: 4.1.2
tslib: 2.6.3
- '@docusaurus/lqip-loader@3.4.0(webpack@5.93.0)':
+ '@docusaurus/lqip-loader@3.5.1(webpack@5.93.0)':
dependencies:
- '@docusaurus/logger': 3.4.0
+ '@docusaurus/logger': 3.5.1
file-loader: 6.2.0(webpack@5.93.0)
lodash: 4.17.21
sharp: 0.32.6
@@ -7383,11 +7385,11 @@ snapshots:
transitivePeerDependencies:
- webpack
- '@docusaurus/mdx-loader@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ '@docusaurus/mdx-loader@3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
dependencies:
- '@docusaurus/logger': 3.4.0
- '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/logger': 3.5.1
+ '@docusaurus/utils': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
'@mdx-js/mdx': 3.0.1
'@slorber/remark-comment': 1.0.0
escape-html: 1.0.3
@@ -7420,9 +7422,9 @@ snapshots:
- uglify-js
- webpack-cli
- '@docusaurus/module-type-aliases@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@docusaurus/module-type-aliases@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@types/history': 4.7.11
'@types/react': 18.3.3
'@types/react-router-config': 5.0.11
@@ -7438,13 +7440,13 @@ snapshots:
- uglify-js
- webpack-cli
- '@docusaurus/plugin-client-redirects@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ '@docusaurus/plugin-client-redirects@3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/logger': 3.4.0
- '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
- '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/logger': 3.5.1
+ '@docusaurus/utils': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/utils-common': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
eta: 2.2.0
fs-extra: 11.2.0
lodash: 4.17.21
@@ -7470,15 +7472,17 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/plugin-content-blog@3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
- dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/logger': 3.4.0
- '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
- '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/plugin-content-blog@3.5.1(@docusaurus/plugin-content-docs@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ dependencies:
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/logger': 3.5.1
+ '@docusaurus/mdx-loader': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/plugin-content-docs': 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/theme-common': 3.5.1(@docusaurus/plugin-content-docs@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/utils': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/utils-common': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
cheerio: 1.0.0-rc.12
feed: 4.2.2
fs-extra: 11.2.0
@@ -7509,16 +7513,17 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/plugin-content-docs@3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
- dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/logger': 3.4.0
- '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/module-type-aliases': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
- '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/plugin-content-docs@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ dependencies:
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/logger': 3.5.1
+ '@docusaurus/mdx-loader': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/module-type-aliases': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/theme-common': 3.5.1(@docusaurus/plugin-content-docs@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/utils': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/utils-common': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
'@types/react-router-config': 5.0.11
combine-promises: 1.2.0
fs-extra: 11.2.0
@@ -7547,13 +7552,13 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/plugin-content-pages@3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ '@docusaurus/plugin-content-pages@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/mdx-loader': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/utils': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
fs-extra: 11.2.0
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -7577,11 +7582,11 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/plugin-debug@3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ '@docusaurus/plugin-debug@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/utils': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
fs-extra: 11.2.0
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -7605,11 +7610,11 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/plugin-google-analytics@3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ '@docusaurus/plugin-google-analytics@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
tslib: 2.6.3
@@ -7631,11 +7636,11 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/plugin-google-gtag@3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ '@docusaurus/plugin-google-gtag@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
'@types/gtag.js': 0.0.12
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -7658,11 +7663,11 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/plugin-google-tag-manager@3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ '@docusaurus/plugin-google-tag-manager@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
tslib: 2.6.3
@@ -7684,14 +7689,14 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/plugin-ideal-image@3.4.0(eslint@7.32.0)(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ '@docusaurus/plugin-ideal-image@3.5.1(eslint@7.32.0)(prop-types@15.8.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/lqip-loader': 3.4.0(webpack@5.93.0)
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/lqip-loader': 3.5.1(webpack@5.93.0)
'@docusaurus/responsive-loader': 1.7.0(sharp@0.32.6)
- '@docusaurus/theme-translations': 3.4.0
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/theme-translations': 3.5.1
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
'@slorber/react-ideal-image': 0.0.12(prop-types@15.8.1)(react-waypoint@10.3.0(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -7718,14 +7723,14 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/plugin-sitemap@3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ '@docusaurus/plugin-sitemap@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/logger': 3.4.0
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
- '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/logger': 3.5.1
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/utils': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/utils-common': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
fs-extra: 11.2.0
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -7749,21 +7754,21 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/preset-classic@3.4.0(@algolia/client-search@4.24.0)(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.5.4)':
- dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/plugin-content-blog': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/plugin-content-docs': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/plugin-content-pages': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/plugin-debug': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/plugin-google-analytics': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/plugin-google-gtag': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/plugin-google-tag-manager': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/plugin-sitemap': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/theme-classic': 3.4.0(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/theme-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/theme-search-algolia': 3.4.0(@algolia/client-search@4.24.0)(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.5.4)
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/preset-classic@3.5.1(@algolia/client-search@4.24.0)(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.5.4)':
+ dependencies:
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/plugin-content-blog': 3.5.1(@docusaurus/plugin-content-docs@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/plugin-content-docs': 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/plugin-content-pages': 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/plugin-debug': 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/plugin-google-analytics': 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/plugin-google-gtag': 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/plugin-google-tag-manager': 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/plugin-sitemap': 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/theme-classic': 3.5.1(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/theme-common': 3.5.1(@docusaurus/plugin-content-docs@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/theme-search-algolia': 3.5.1(@algolia/client-search@4.24.0)(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.5.4)
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
transitivePeerDependencies:
@@ -7798,27 +7803,27 @@ snapshots:
optionalDependencies:
sharp: 0.32.6
- '@docusaurus/theme-classic@3.4.0(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
- dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/module-type-aliases': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/plugin-content-blog': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/plugin-content-docs': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/plugin-content-pages': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/theme-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/theme-translations': 3.4.0
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
- '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/theme-classic@3.5.1(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ dependencies:
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/mdx-loader': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/module-type-aliases': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/plugin-content-blog': 3.5.1(@docusaurus/plugin-content-docs@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/plugin-content-docs': 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/plugin-content-pages': 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/theme-common': 3.5.1(@docusaurus/plugin-content-docs@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/theme-translations': 3.5.1
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/utils': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/utils-common': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
'@mdx-js/react': 3.0.1(@types/react@18.3.3)(react@18.3.1)
clsx: 2.1.1
copy-text-to-clipboard: 3.2.0
- infima: 0.2.0-alpha.43
+ infima: 0.2.0-alpha.44
lodash: 4.17.21
nprogress: 0.2.0
- postcss: 8.4.40
+ postcss: 8.4.41
prism-react-renderer: 2.3.1(react@18.3.1)
prismjs: 1.29.0
react: 18.3.1
@@ -7846,15 +7851,13 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/theme-common@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
+ '@docusaurus/theme-common@3.5.1(@docusaurus/plugin-content-docs@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)':
dependencies:
- '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/module-type-aliases': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/plugin-content-blog': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/plugin-content-docs': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/plugin-content-pages': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
- '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@docusaurus/mdx-loader': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/module-type-aliases': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/plugin-content-docs': 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/utils': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/utils-common': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
'@types/history': 4.7.11
'@types/react': 18.3.3
'@types/react-router-config': 5.0.11
@@ -7867,33 +7870,23 @@ snapshots:
utility-types: 3.11.0
transitivePeerDependencies:
- '@docusaurus/types'
- - '@parcel/css'
- - '@rspack/core'
- '@swc/core'
- - '@swc/css'
- - bufferutil
- - csso
- - debug
- esbuild
- - eslint
- - lightningcss
- supports-color
- typescript
- uglify-js
- - utf-8-validate
- - vue-template-compiler
- webpack-cli
- '@docusaurus/theme-search-algolia@3.4.0(@algolia/client-search@4.24.0)(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.5.4)':
+ '@docusaurus/theme-search-algolia@3.5.1(@algolia/client-search@4.24.0)(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.3)(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)(typescript@5.5.4)':
dependencies:
'@docsearch/react': 3.6.1(@algolia/client-search@4.24.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.15.0)
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/logger': 3.4.0
- '@docusaurus/plugin-content-docs': 3.4.0(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/theme-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
- '@docusaurus/theme-translations': 3.4.0
- '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
- '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/logger': 3.5.1
+ '@docusaurus/plugin-content-docs': 3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/theme-common': 3.5.1(@docusaurus/plugin-content-docs@3.5.1(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/theme-translations': 3.5.1
+ '@docusaurus/utils': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/utils-validation': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
algoliasearch: 4.24.0
algoliasearch-helper: 3.22.3(algoliasearch@4.24.0)
clsx: 2.1.1
@@ -7926,14 +7919,14 @@ snapshots:
- vue-template-compiler
- webpack-cli
- '@docusaurus/theme-translations@3.4.0':
+ '@docusaurus/theme-translations@3.5.1':
dependencies:
fs-extra: 11.2.0
tslib: 2.6.3
- '@docusaurus/tsconfig@3.4.0': {}
+ '@docusaurus/tsconfig@3.5.1': {}
- '@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@mdx-js/mdx': 3.0.1
'@types/history': 4.7.11
@@ -7953,17 +7946,17 @@ snapshots:
- uglify-js
- webpack-cli
- '@docusaurus/utils-common@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
+ '@docusaurus/utils-common@3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
dependencies:
tslib: 2.6.3
optionalDependencies:
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@docusaurus/utils-validation@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)':
+ '@docusaurus/utils-validation@3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)':
dependencies:
- '@docusaurus/logger': 3.4.0
- '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
- '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@docusaurus/logger': 3.5.1
+ '@docusaurus/utils': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)
+ '@docusaurus/utils-common': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
fs-extra: 11.2.0
joi: 17.13.3
js-yaml: 4.1.0
@@ -7978,10 +7971,10 @@ snapshots:
- uglify-js
- webpack-cli
- '@docusaurus/utils@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)':
+ '@docusaurus/utils@3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4)':
dependencies:
- '@docusaurus/logger': 3.4.0
- '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
+ '@docusaurus/logger': 3.5.1
+ '@docusaurus/utils-common': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
'@svgr/webpack': 8.1.0(typescript@5.5.4)
escape-string-regexp: 4.0.0
file-loader: 6.2.0(webpack@5.93.0)
@@ -8001,7 +7994,7 @@ snapshots:
utility-types: 3.11.0
webpack: 5.93.0
optionalDependencies:
- '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@docusaurus/types': 3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
transitivePeerDependencies:
- '@swc/core'
- esbuild
@@ -8161,8 +8154,8 @@ snapshots:
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 22.1.0
- '@types/yargs': 17.0.32
+ '@types/node': 22.2.0
+ '@types/yargs': 17.0.33
chalk: 4.1.2
'@jridgewell/gen-mapping@0.3.5':
@@ -8245,7 +8238,7 @@ snapshots:
dependencies:
graceful-fs: 4.2.10
- '@pnpm/npm-conf@2.3.0':
+ '@pnpm/npm-conf@2.3.1':
dependencies:
'@pnpm/config.env-replace': 1.1.0
'@pnpm/network.ca-file': 1.0.2
@@ -8389,20 +8382,20 @@ snapshots:
'@types/body-parser@1.19.5':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
'@types/bonjour@3.5.13':
dependencies:
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
'@types/connect-history-api-fallback@1.5.4':
dependencies:
'@types/express-serve-static-core': 4.19.5
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
'@types/connect@3.4.38':
dependencies:
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
'@types/debug@4.1.12':
dependencies:
@@ -8426,7 +8419,7 @@ snapshots:
'@types/express-serve-static-core@4.19.5':
dependencies:
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
'@types/qs': 6.9.15
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
@@ -8452,9 +8445,9 @@ snapshots:
'@types/http-errors@2.0.4': {}
- '@types/http-proxy@1.17.14':
+ '@types/http-proxy@1.17.15':
dependencies:
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
'@types/istanbul-lib-coverage@2.0.6': {}
@@ -8490,11 +8483,11 @@ snapshots:
'@types/node-forge@1.3.11':
dependencies:
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
'@types/node@17.0.45': {}
- '@types/node@22.1.0':
+ '@types/node@22.2.0':
dependencies:
undici-types: 6.13.0
@@ -8540,14 +8533,14 @@ snapshots:
'@types/sax@1.2.7':
dependencies:
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
'@types/semver@7.5.8': {}
'@types/send@0.17.4':
dependencies:
'@types/mime': 1.3.5
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
'@types/serve-index@1.9.4':
dependencies:
@@ -8556,12 +8549,12 @@ snapshots:
'@types/serve-static@1.15.7':
dependencies:
'@types/http-errors': 2.0.4
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
'@types/send': 0.17.4
'@types/sockjs@0.3.36':
dependencies:
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
'@types/unist@2.0.10': {}
@@ -8569,11 +8562,11 @@ snapshots:
'@types/ws@8.5.12':
dependencies:
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
'@types/yargs-parser@21.0.3': {}
- '@types/yargs@17.0.32':
+ '@types/yargs@17.0.33':
dependencies:
'@types/yargs-parser': 21.0.3
@@ -8945,14 +8938,14 @@ snapshots:
at-least-node@1.0.0: {}
- autoprefixer@10.4.20(postcss@8.4.40):
+ autoprefixer@10.4.20(postcss@8.4.41):
dependencies:
browserslist: 4.23.3
- caniuse-lite: 1.0.30001647
+ caniuse-lite: 1.0.30001651
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.0.1
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
available-typed-arrays@1.0.7:
@@ -8981,11 +8974,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.25.2):
+ babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2):
dependencies:
'@babel/core': 7.25.2
'@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2)
- core-js-compat: 3.37.1
+ core-js-compat: 3.38.0
transitivePeerDependencies:
- supports-color
@@ -9102,8 +9095,8 @@ snapshots:
browserslist@4.23.3:
dependencies:
- caniuse-lite: 1.0.30001647
- electron-to-chromium: 1.5.4
+ caniuse-lite: 1.0.30001651
+ electron-to-chromium: 1.5.6
node-releases: 2.0.18
update-browserslist-db: 1.1.0(browserslist@4.23.3)
@@ -9163,11 +9156,11 @@ snapshots:
caniuse-api@3.0.0:
dependencies:
browserslist: 4.23.3
- caniuse-lite: 1.0.30001647
+ caniuse-lite: 1.0.30001651
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
- caniuse-lite@1.0.30001647: {}
+ caniuse-lite@1.0.30001651: {}
ccount@2.0.1: {}
@@ -9387,13 +9380,13 @@ snapshots:
serialize-javascript: 6.0.2
webpack: 5.93.0
- core-js-compat@3.37.1:
+ core-js-compat@3.38.0:
dependencies:
browserslist: 4.23.3
- core-js-pure@3.37.1: {}
+ core-js-pure@3.38.0: {}
- core-js@3.37.1: {}
+ core-js@3.38.0: {}
core-util-is@1.0.3: {}
@@ -9426,9 +9419,9 @@ snapshots:
dependencies:
type-fest: 1.4.0
- css-declaration-sorter@7.2.0(postcss@8.4.40):
+ css-declaration-sorter@7.2.0(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
css-functions-list@3.2.2: {}
@@ -9438,12 +9431,12 @@ snapshots:
css-loader@6.11.0(webpack@5.93.0):
dependencies:
- icss-utils: 5.1.0(postcss@8.4.40)
- postcss: 8.4.40
- postcss-modules-extract-imports: 3.1.0(postcss@8.4.40)
- postcss-modules-local-by-default: 4.0.5(postcss@8.4.40)
- postcss-modules-scope: 3.2.0(postcss@8.4.40)
- postcss-modules-values: 4.0.0(postcss@8.4.40)
+ icss-utils: 5.1.0(postcss@8.4.41)
+ postcss: 8.4.41
+ postcss-modules-extract-imports: 3.1.0(postcss@8.4.41)
+ postcss-modules-local-by-default: 4.0.5(postcss@8.4.41)
+ postcss-modules-scope: 3.2.0(postcss@8.4.41)
+ postcss-modules-values: 4.0.0(postcss@8.4.41)
postcss-value-parser: 4.2.0
semver: 7.6.3
optionalDependencies:
@@ -9452,9 +9445,9 @@ snapshots:
css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.93.0):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
- cssnano: 6.1.2(postcss@8.4.40)
+ cssnano: 6.1.2(postcss@8.4.41)
jest-worker: 29.7.0
- postcss: 8.4.40
+ postcss: 8.4.41
schema-utils: 4.2.0
serialize-javascript: 6.0.2
webpack: 5.93.0
@@ -9491,60 +9484,60 @@ snapshots:
cssesc@3.0.0: {}
- cssnano-preset-advanced@6.1.2(postcss@8.4.40):
+ cssnano-preset-advanced@6.1.2(postcss@8.4.41):
dependencies:
- autoprefixer: 10.4.20(postcss@8.4.40)
+ autoprefixer: 10.4.20(postcss@8.4.41)
browserslist: 4.23.3
- cssnano-preset-default: 6.1.2(postcss@8.4.40)
- postcss: 8.4.40
- postcss-discard-unused: 6.0.5(postcss@8.4.40)
- postcss-merge-idents: 6.0.3(postcss@8.4.40)
- postcss-reduce-idents: 6.0.3(postcss@8.4.40)
- postcss-zindex: 6.0.2(postcss@8.4.40)
+ cssnano-preset-default: 6.1.2(postcss@8.4.41)
+ postcss: 8.4.41
+ postcss-discard-unused: 6.0.5(postcss@8.4.41)
+ postcss-merge-idents: 6.0.3(postcss@8.4.41)
+ postcss-reduce-idents: 6.0.3(postcss@8.4.41)
+ postcss-zindex: 6.0.2(postcss@8.4.41)
- cssnano-preset-default@6.1.2(postcss@8.4.40):
+ cssnano-preset-default@6.1.2(postcss@8.4.41):
dependencies:
browserslist: 4.23.3
- css-declaration-sorter: 7.2.0(postcss@8.4.40)
- cssnano-utils: 4.0.2(postcss@8.4.40)
- postcss: 8.4.40
- postcss-calc: 9.0.1(postcss@8.4.40)
- postcss-colormin: 6.1.0(postcss@8.4.40)
- postcss-convert-values: 6.1.0(postcss@8.4.40)
- postcss-discard-comments: 6.0.2(postcss@8.4.40)
- postcss-discard-duplicates: 6.0.3(postcss@8.4.40)
- postcss-discard-empty: 6.0.3(postcss@8.4.40)
- postcss-discard-overridden: 6.0.2(postcss@8.4.40)
- postcss-merge-longhand: 6.0.5(postcss@8.4.40)
- postcss-merge-rules: 6.1.1(postcss@8.4.40)
- postcss-minify-font-values: 6.1.0(postcss@8.4.40)
- postcss-minify-gradients: 6.0.3(postcss@8.4.40)
- postcss-minify-params: 6.1.0(postcss@8.4.40)
- postcss-minify-selectors: 6.0.4(postcss@8.4.40)
- postcss-normalize-charset: 6.0.2(postcss@8.4.40)
- postcss-normalize-display-values: 6.0.2(postcss@8.4.40)
- postcss-normalize-positions: 6.0.2(postcss@8.4.40)
- postcss-normalize-repeat-style: 6.0.2(postcss@8.4.40)
- postcss-normalize-string: 6.0.2(postcss@8.4.40)
- postcss-normalize-timing-functions: 6.0.2(postcss@8.4.40)
- postcss-normalize-unicode: 6.1.0(postcss@8.4.40)
- postcss-normalize-url: 6.0.2(postcss@8.4.40)
- postcss-normalize-whitespace: 6.0.2(postcss@8.4.40)
- postcss-ordered-values: 6.0.2(postcss@8.4.40)
- postcss-reduce-initial: 6.1.0(postcss@8.4.40)
- postcss-reduce-transforms: 6.0.2(postcss@8.4.40)
- postcss-svgo: 6.0.3(postcss@8.4.40)
- postcss-unique-selectors: 6.0.4(postcss@8.4.40)
-
- cssnano-utils@4.0.2(postcss@8.4.40):
- dependencies:
- postcss: 8.4.40
-
- cssnano@6.1.2(postcss@8.4.40):
- dependencies:
- cssnano-preset-default: 6.1.2(postcss@8.4.40)
+ css-declaration-sorter: 7.2.0(postcss@8.4.41)
+ cssnano-utils: 4.0.2(postcss@8.4.41)
+ postcss: 8.4.41
+ postcss-calc: 9.0.1(postcss@8.4.41)
+ postcss-colormin: 6.1.0(postcss@8.4.41)
+ postcss-convert-values: 6.1.0(postcss@8.4.41)
+ postcss-discard-comments: 6.0.2(postcss@8.4.41)
+ postcss-discard-duplicates: 6.0.3(postcss@8.4.41)
+ postcss-discard-empty: 6.0.3(postcss@8.4.41)
+ postcss-discard-overridden: 6.0.2(postcss@8.4.41)
+ postcss-merge-longhand: 6.0.5(postcss@8.4.41)
+ postcss-merge-rules: 6.1.1(postcss@8.4.41)
+ postcss-minify-font-values: 6.1.0(postcss@8.4.41)
+ postcss-minify-gradients: 6.0.3(postcss@8.4.41)
+ postcss-minify-params: 6.1.0(postcss@8.4.41)
+ postcss-minify-selectors: 6.0.4(postcss@8.4.41)
+ postcss-normalize-charset: 6.0.2(postcss@8.4.41)
+ postcss-normalize-display-values: 6.0.2(postcss@8.4.41)
+ postcss-normalize-positions: 6.0.2(postcss@8.4.41)
+ postcss-normalize-repeat-style: 6.0.2(postcss@8.4.41)
+ postcss-normalize-string: 6.0.2(postcss@8.4.41)
+ postcss-normalize-timing-functions: 6.0.2(postcss@8.4.41)
+ postcss-normalize-unicode: 6.1.0(postcss@8.4.41)
+ postcss-normalize-url: 6.0.2(postcss@8.4.41)
+ postcss-normalize-whitespace: 6.0.2(postcss@8.4.41)
+ postcss-ordered-values: 6.0.2(postcss@8.4.41)
+ postcss-reduce-initial: 6.1.0(postcss@8.4.41)
+ postcss-reduce-transforms: 6.0.2(postcss@8.4.41)
+ postcss-svgo: 6.0.3(postcss@8.4.41)
+ postcss-unique-selectors: 6.0.4(postcss@8.4.41)
+
+ cssnano-utils@4.0.2(postcss@8.4.41):
+ dependencies:
+ postcss: 8.4.41
+
+ cssnano@6.1.2(postcss@8.4.41):
+ dependencies:
+ cssnano-preset-default: 6.1.2(postcss@8.4.41)
lilconfig: 3.1.2
- postcss: 8.4.40
+ postcss: 8.4.41
csso@5.0.5:
dependencies:
@@ -9686,9 +9679,9 @@ snapshots:
dependencies:
esutils: 2.0.3
- docusaurus-plugin-sass@0.2.5(@docusaurus/core@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(sass@1.77.8)(webpack@5.93.0):
+ docusaurus-plugin-sass@0.2.5(@docusaurus/core@3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(sass@1.77.8)(webpack@5.93.0):
dependencies:
- '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
+ '@docusaurus/core': 3.5.1(@docusaurus/types@3.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@7.32.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)
sass: 1.77.8
sass-loader: 10.5.2(sass@1.77.8)(webpack@5.93.0)
transitivePeerDependencies:
@@ -9751,7 +9744,7 @@ snapshots:
ee-first@1.1.1: {}
- electron-to-chromium@1.5.4: {}
+ electron-to-chromium@1.5.6: {}
emoji-regex@8.0.0: {}
@@ -9761,7 +9754,7 @@ snapshots:
emojis-list@3.0.0: {}
- emoticon@4.0.1: {}
+ emoticon@4.1.0: {}
encodeurl@1.0.2: {}
@@ -10129,7 +10122,7 @@ snapshots:
eval@0.1.8:
dependencies:
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
require-like: 0.1.2
eventemitter3@4.0.7: {}
@@ -10671,7 +10664,7 @@ snapshots:
he: 1.2.0
param-case: 3.0.4
relateurl: 0.2.7
- terser: 5.31.3
+ terser: 5.31.5
html-minifier-terser@7.2.0:
dependencies:
@@ -10681,7 +10674,7 @@ snapshots:
entities: 4.5.0
param-case: 3.0.4
relateurl: 0.2.7
- terser: 5.31.3
+ terser: 5.31.5
html-tags@3.3.1: {}
@@ -10739,7 +10732,7 @@ snapshots:
http-proxy-middleware@2.0.6(@types/express@4.17.21):
dependencies:
- '@types/http-proxy': 1.17.14
+ '@types/http-proxy': 1.17.15
http-proxy: 1.18.1
is-glob: 4.0.3
is-plain-obj: 3.0.0
@@ -10768,9 +10761,9 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
- icss-utils@5.1.0(postcss@8.4.40):
+ icss-utils@5.1.0(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
ieee754@1.2.1: {}
@@ -10801,7 +10794,7 @@ snapshots:
indent-string@5.0.0: {}
- infima@0.2.0-alpha.43: {}
+ infima@0.2.0-alpha.44: {}
inflight@1.0.6:
dependencies:
@@ -11010,7 +11003,7 @@ snapshots:
jest-util@29.7.0:
dependencies:
'@jest/types': 29.6.3
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
@@ -11018,13 +11011,13 @@ snapshots:
jest-worker@27.5.1:
dependencies:
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
merge-stream: 2.0.0
supports-color: 8.1.1
jest-worker@29.7.0:
dependencies:
- '@types/node': 22.1.0
+ '@types/node': 22.2.0
jest-util: 29.7.0
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -11107,7 +11100,7 @@ snapshots:
dependencies:
package-json: 8.1.1
- launch-editor@2.8.0:
+ launch-editor@2.8.1:
dependencies:
picocolors: 1.0.1
shell-quote: 1.8.1
@@ -12119,52 +12112,52 @@ snapshots:
possible-typed-array-names@1.0.0: {}
- postcss-calc@9.0.1(postcss@8.4.40):
+ postcss-calc@9.0.1(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-selector-parser: 6.1.1
postcss-value-parser: 4.2.0
- postcss-colormin@6.1.0(postcss@8.4.40):
+ postcss-colormin@6.1.0(postcss@8.4.41):
dependencies:
browserslist: 4.23.3
caniuse-api: 3.0.0
colord: 2.9.3
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-convert-values@6.1.0(postcss@8.4.40):
+ postcss-convert-values@6.1.0(postcss@8.4.41):
dependencies:
browserslist: 4.23.3
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-discard-comments@6.0.2(postcss@8.4.40):
+ postcss-discard-comments@6.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
- postcss-discard-duplicates@6.0.3(postcss@8.4.40):
+ postcss-discard-duplicates@6.0.3(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
- postcss-discard-empty@6.0.3(postcss@8.4.40):
+ postcss-discard-empty@6.0.3(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
- postcss-discard-overridden@6.0.2(postcss@8.4.40):
+ postcss-discard-overridden@6.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
- postcss-discard-unused@6.0.5(postcss@8.4.40):
+ postcss-discard-unused@6.0.5(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-selector-parser: 6.1.1
- postcss-loader@7.3.4(postcss@8.4.40)(typescript@5.5.4)(webpack@5.93.0):
+ postcss-loader@7.3.4(postcss@8.4.41)(typescript@5.5.4)(webpack@5.93.0):
dependencies:
cosmiconfig: 8.3.6(typescript@5.5.4)
jiti: 1.21.6
- postcss: 8.4.40
+ postcss: 8.4.41
semver: 7.6.3
webpack: 5.93.0
transitivePeerDependencies:
@@ -12172,180 +12165,180 @@ snapshots:
postcss-media-query-parser@0.2.3: {}
- postcss-merge-idents@6.0.3(postcss@8.4.40):
+ postcss-merge-idents@6.0.3(postcss@8.4.41):
dependencies:
- cssnano-utils: 4.0.2(postcss@8.4.40)
- postcss: 8.4.40
+ cssnano-utils: 4.0.2(postcss@8.4.41)
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-merge-longhand@6.0.5(postcss@8.4.40):
+ postcss-merge-longhand@6.0.5(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- stylehacks: 6.1.1(postcss@8.4.40)
+ stylehacks: 6.1.1(postcss@8.4.41)
- postcss-merge-rules@6.1.1(postcss@8.4.40):
+ postcss-merge-rules@6.1.1(postcss@8.4.41):
dependencies:
browserslist: 4.23.3
caniuse-api: 3.0.0
- cssnano-utils: 4.0.2(postcss@8.4.40)
- postcss: 8.4.40
+ cssnano-utils: 4.0.2(postcss@8.4.41)
+ postcss: 8.4.41
postcss-selector-parser: 6.1.1
- postcss-minify-font-values@6.1.0(postcss@8.4.40):
+ postcss-minify-font-values@6.1.0(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-minify-gradients@6.0.3(postcss@8.4.40):
+ postcss-minify-gradients@6.0.3(postcss@8.4.41):
dependencies:
colord: 2.9.3
- cssnano-utils: 4.0.2(postcss@8.4.40)
- postcss: 8.4.40
+ cssnano-utils: 4.0.2(postcss@8.4.41)
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-minify-params@6.1.0(postcss@8.4.40):
+ postcss-minify-params@6.1.0(postcss@8.4.41):
dependencies:
browserslist: 4.23.3
- cssnano-utils: 4.0.2(postcss@8.4.40)
- postcss: 8.4.40
+ cssnano-utils: 4.0.2(postcss@8.4.41)
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-minify-selectors@6.0.4(postcss@8.4.40):
+ postcss-minify-selectors@6.0.4(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-selector-parser: 6.1.1
- postcss-modules-extract-imports@3.1.0(postcss@8.4.40):
+ postcss-modules-extract-imports@3.1.0(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
- postcss-modules-local-by-default@4.0.5(postcss@8.4.40):
+ postcss-modules-local-by-default@4.0.5(postcss@8.4.41):
dependencies:
- icss-utils: 5.1.0(postcss@8.4.40)
- postcss: 8.4.40
+ icss-utils: 5.1.0(postcss@8.4.41)
+ postcss: 8.4.41
postcss-selector-parser: 6.1.1
postcss-value-parser: 4.2.0
- postcss-modules-scope@3.2.0(postcss@8.4.40):
+ postcss-modules-scope@3.2.0(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-selector-parser: 6.1.1
- postcss-modules-values@4.0.0(postcss@8.4.40):
+ postcss-modules-values@4.0.0(postcss@8.4.41):
dependencies:
- icss-utils: 5.1.0(postcss@8.4.40)
- postcss: 8.4.40
+ icss-utils: 5.1.0(postcss@8.4.41)
+ postcss: 8.4.41
- postcss-normalize-charset@6.0.2(postcss@8.4.40):
+ postcss-normalize-charset@6.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
- postcss-normalize-display-values@6.0.2(postcss@8.4.40):
+ postcss-normalize-display-values@6.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-normalize-positions@6.0.2(postcss@8.4.40):
+ postcss-normalize-positions@6.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-normalize-repeat-style@6.0.2(postcss@8.4.40):
+ postcss-normalize-repeat-style@6.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-normalize-string@6.0.2(postcss@8.4.40):
+ postcss-normalize-string@6.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-normalize-timing-functions@6.0.2(postcss@8.4.40):
+ postcss-normalize-timing-functions@6.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-normalize-unicode@6.1.0(postcss@8.4.40):
+ postcss-normalize-unicode@6.1.0(postcss@8.4.41):
dependencies:
browserslist: 4.23.3
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-normalize-url@6.0.2(postcss@8.4.40):
+ postcss-normalize-url@6.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-normalize-whitespace@6.0.2(postcss@8.4.40):
+ postcss-normalize-whitespace@6.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-ordered-values@6.0.2(postcss@8.4.40):
+ postcss-ordered-values@6.0.2(postcss@8.4.41):
dependencies:
- cssnano-utils: 4.0.2(postcss@8.4.40)
- postcss: 8.4.40
+ cssnano-utils: 4.0.2(postcss@8.4.41)
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-reduce-idents@6.0.3(postcss@8.4.40):
+ postcss-reduce-idents@6.0.3(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-reduce-initial@6.1.0(postcss@8.4.40):
+ postcss-reduce-initial@6.1.0(postcss@8.4.41):
dependencies:
browserslist: 4.23.3
caniuse-api: 3.0.0
- postcss: 8.4.40
+ postcss: 8.4.41
- postcss-reduce-transforms@6.0.2(postcss@8.4.40):
+ postcss-reduce-transforms@6.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
- postcss-resolve-nested-selector@0.1.4: {}
+ postcss-resolve-nested-selector@0.1.5: {}
- postcss-safe-parser@6.0.0(postcss@8.4.40):
+ postcss-safe-parser@6.0.0(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
- postcss-scss@4.0.9(postcss@8.4.40):
+ postcss-scss@4.0.9(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-selector-parser@6.1.1:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
- postcss-sort-media-queries@5.2.0(postcss@8.4.40):
+ postcss-sort-media-queries@5.2.0(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
sort-css-media-queries: 2.2.0
- postcss-sorting@8.0.2(postcss@8.4.40):
+ postcss-sorting@8.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
- postcss-svgo@6.0.3(postcss@8.4.40):
+ postcss-svgo@6.0.3(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-value-parser: 4.2.0
svgo: 3.3.2
- postcss-unique-selectors@6.0.4(postcss@8.4.40):
+ postcss-unique-selectors@6.0.4(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-selector-parser: 6.1.1
postcss-value-parser@4.2.0: {}
- postcss-zindex@6.0.2(postcss@8.4.40):
+ postcss-zindex@6.0.2(postcss@8.4.41):
dependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
- postcss@8.4.40:
+ postcss@8.4.41:
dependencies:
nanoid: 3.3.7
picocolors: 1.0.1
@@ -12705,7 +12698,7 @@ snapshots:
registry-auth-token@5.0.2:
dependencies:
- '@pnpm/npm-conf': 2.3.0
+ '@pnpm/npm-conf': 2.3.1
registry-url@6.0.1:
dependencies:
@@ -12735,7 +12728,7 @@ snapshots:
remark-emoji@4.0.1:
dependencies:
'@types/mdast': 4.0.4
- emoticon: 4.0.1
+ emoticon: 4.1.0
mdast-util-find-and-replace: 3.0.1
node-emoji: 2.1.3
unified: 11.0.5
@@ -12855,7 +12848,7 @@ snapshots:
dependencies:
escalade: 3.1.2
picocolors: 1.0.1
- postcss: 8.4.40
+ postcss: 8.4.41
strip-json-comments: 3.1.1
run-async@2.4.1: {}
@@ -13325,10 +13318,10 @@ snapshots:
dependencies:
inline-style-parser: 0.2.3
- stylehacks@6.1.1(postcss@8.4.40):
+ stylehacks@6.1.1(postcss@8.4.41):
dependencies:
browserslist: 4.23.3
- postcss: 8.4.40
+ postcss: 8.4.41
postcss-selector-parser: 6.1.1
stylelint-config-recess-order@4.6.0(stylelint@15.11.0(typescript@5.5.4)):
@@ -13336,26 +13329,26 @@ snapshots:
stylelint: 15.11.0(typescript@5.5.4)
stylelint-order: 6.0.4(stylelint@15.11.0(typescript@5.5.4))
- stylelint-config-recommended-scss@13.1.0(postcss@8.4.40)(stylelint@15.11.0(typescript@5.5.4)):
+ stylelint-config-recommended-scss@13.1.0(postcss@8.4.41)(stylelint@15.11.0(typescript@5.5.4)):
dependencies:
- postcss-scss: 4.0.9(postcss@8.4.40)
+ postcss-scss: 4.0.9(postcss@8.4.41)
stylelint: 15.11.0(typescript@5.5.4)
stylelint-config-recommended: 13.0.0(stylelint@15.11.0(typescript@5.5.4))
stylelint-scss: 5.3.2(stylelint@15.11.0(typescript@5.5.4))
optionalDependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
stylelint-config-recommended@13.0.0(stylelint@15.11.0(typescript@5.5.4)):
dependencies:
stylelint: 15.11.0(typescript@5.5.4)
- stylelint-config-standard-scss@11.1.0(postcss@8.4.40)(stylelint@15.11.0(typescript@5.5.4)):
+ stylelint-config-standard-scss@11.1.0(postcss@8.4.41)(stylelint@15.11.0(typescript@5.5.4)):
dependencies:
stylelint: 15.11.0(typescript@5.5.4)
- stylelint-config-recommended-scss: 13.1.0(postcss@8.4.40)(stylelint@15.11.0(typescript@5.5.4))
+ stylelint-config-recommended-scss: 13.1.0(postcss@8.4.41)(stylelint@15.11.0(typescript@5.5.4))
stylelint-config-standard: 34.0.0(stylelint@15.11.0(typescript@5.5.4))
optionalDependencies:
- postcss: 8.4.40
+ postcss: 8.4.41
stylelint-config-standard@34.0.0(stylelint@15.11.0(typescript@5.5.4)):
dependencies:
@@ -13364,15 +13357,15 @@ snapshots:
stylelint-order@6.0.4(stylelint@15.11.0(typescript@5.5.4)):
dependencies:
- postcss: 8.4.40
- postcss-sorting: 8.0.2(postcss@8.4.40)
+ postcss: 8.4.41
+ postcss-sorting: 8.0.2(postcss@8.4.41)
stylelint: 15.11.0(typescript@5.5.4)
stylelint-scss@5.3.2(stylelint@15.11.0(typescript@5.5.4)):
dependencies:
known-css-properties: 0.29.0
postcss-media-query-parser: 0.2.3
- postcss-resolve-nested-selector: 0.1.4
+ postcss-resolve-nested-selector: 0.1.5
postcss-selector-parser: 6.1.1
postcss-value-parser: 4.2.0
stylelint: 15.11.0(typescript@5.5.4)
@@ -13406,9 +13399,9 @@ snapshots:
micromatch: 4.0.7
normalize-path: 3.0.0
picocolors: 1.0.1
- postcss: 8.4.40
- postcss-resolve-nested-selector: 0.1.4
- postcss-safe-parser: 6.0.0(postcss@8.4.40)
+ postcss: 8.4.41
+ postcss-resolve-nested-selector: 0.1.5
+ postcss-safe-parser: 6.0.0(postcss@8.4.41)
postcss-selector-parser: 6.1.1
postcss-value-parser: 4.2.0
resolve-from: 5.0.0
@@ -13505,10 +13498,10 @@ snapshots:
jest-worker: 27.5.1
schema-utils: 3.3.0
serialize-javascript: 6.0.2
- terser: 5.31.3
+ terser: 5.31.5
webpack: 5.93.0
- terser@5.31.3:
+ terser@5.31.5:
dependencies:
'@jridgewell/source-map': 0.3.6
acorn: 8.12.1
@@ -13850,7 +13843,7 @@ snapshots:
html-entities: 2.5.2
http-proxy-middleware: 2.0.6(@types/express@4.17.21)
ipaddr.js: 2.2.0
- launch-editor: 2.8.0
+ launch-editor: 2.8.1
open: 8.4.2
p-retry: 4.6.2
rimraf: 3.0.2