diff --git a/package.json b/package.json index a7ef1898773..6206f07ec1f 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,8 @@ "plugin:build:commit": "nx run-many -t build:commit --projects='tag:scope:plugin'", "plugin:build:dev": "nx run-many -t dev --projects='tag:scope:plugin' --maxParallel=100", "process-specs": "node --experimental-strip-types scripts/process-specs.ts", - "generate-apis": "yarn process-specs && rtk-query-codegen-openapi ./scripts/generate-rtk-apis.ts" + "generate-apis": "yarn process-specs && rtk-query-codegen-openapi ./scripts/generate-rtk-apis.ts", + "generate:api-client": "NODE_OPTIONS='--experimental-strip-types' plop --plopfile public/app/api/generator/plopfile.ts" }, "grafana": { "whatsNewUrl": "https://grafana.com/docs/grafana/next/whatsnew/whats-new-in-v%[1]s-%[2]s/", @@ -216,6 +217,7 @@ "nx": "20.7.1", "openapi-types": "^12.1.3", "pdf-parse": "^1.1.1", + "plop": "^4.0.1", "postcss": "8.5.1", "postcss-loader": "8.1.1", "postcss-reporter": "7.1.0", diff --git a/public/app/api/README.md b/public/app/api/README.md index eafebb5e614..67bf87ae19a 100644 --- a/public/app/api/README.md +++ b/public/app/api/README.md @@ -7,7 +7,7 @@ To show the steps to follow, we are going to work on adding an API client to cre First, check if the `group` and the `version` are already present in [openapi_test.go](/pkg/tests/apis/openapi_test.go). If so, move on to the next step.
If you need to add a new block, you can check for the right `group` and `version` in the backend API call that you want to replicate in the frontend. -```jsx +```go { Group: "dashboard.grafana.app", Version: "v0alpha1", @@ -20,136 +20,6 @@ Afterwards, you need to run the `TestIntegrationOpenAPIs` test. Note that it wil > Note: You don’t need to follow these two steps if the `group` you’re working with is already in the `openapi_test.go` file. -
+### 2. Run the API generator script -### 2. Create the API definition - -In the [`/public/app/api/clients`](/public/app/api/clients) folder, create a new folder and `baseAPI.ts` file for your group. This file should have the following content: - -```jsx -import { createApi } from '@reduxjs/toolkit/query/react'; - -import { createBaseQuery } from 'app/api/createBaseQuery'; -import { getAPIBaseURL } from 'app/api/utils'; - -export const BASE_URL = getAPIBaseURL('dashboard.grafana.app', 'v0alpha1'); - -export const api = createApi({ - reducerPath: 'dashboardAPI', - baseQuery: createBaseQuery({ - baseURL: BASE_URL, - }), - endpoints: () => ({}), -}); -``` - -This is the API definition for the specific group you're working with, where `getAPIBaseURL` should have the proper `group` and `version` as parameters. The `reducerPath` needs to be unique. The convention is to use `API`: `dashboard` will be `dashboardAPI`, `iam` will be `iamAPI` and so on. - -### 3. Add your new client to the generation script - -Open [generate-rtk-apis.ts](/scripts/generate-rtk-apis.ts) and add the following information: - -| Data | Descritpion | -| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| outputFile name | File that will be created after running the API Client Generation script. It is the key of the object. | -| apiFile | File with the group's API definition. | -| schemaFile | File with the schema that was automatically created in the second step. Although it is in openapi_snapshots, you should link the one saved in `data/openapi`. | -| filterEndpoints | The `operationId` of the particular route you want to work with. You can check the available operationIds in the specific group's spec file. As seen in the `migrate-to-cloud` one, it is an array | -|  tag | Must be set to `true`, to automatically attach tags to endpoints. This is needed for proper cache invalidation. See more info in the [official documentation](https://redux-toolkit.js.org/rtk-query/usage/automated-refetching#:~:text=RTK%20Query%20uses,an%20active%20subscription.).  | - -
- -> More info in [Redux Toolkit](https://redux-toolkit.js.org/rtk-query/usage/code-generation#simple-usage) - -In our example, the information added will be: - -```jsx -'../public/app/api/clients/dashboard/endpoints.gen.ts': { - apiFile: '../public/app/api/clients/dashboard/baseAPI.ts', - schemaFile: '../data/openapi/dashboard.grafana.app-v0alpha1.json', - filterEndpoints: ['createDashboard', 'updateDashboard'], - tag: true, -}, -``` - -### 4. Run the API client generation script - -Then, we are ready to run the script to create the API client: - -```jsx -yarn generate-apis -``` - -This will create an `endpoints.gen.ts` file in the path specified in the previous step. - -### 5. Create the index file for your hooks - -In the same `api` folder where the `endpoints.gen.ts` file has been saved, you have to create an index file from which you can import the types and hooks needed. By doing this, we selectively export hooks/types from `endpoints.gen.ts`. - -In our case, the dashboard index will be like: - -```jsx -import { generatedAPI } from './endpoints.gen'; - -export const dashboardAPI = generatedAPI; -export const { useCreateDashboardMutation, useUpdateDashboardMutation} = dashboardAPI; -// eslint-disable-next-line no-barrel-files/no-barrel-files -export { type Dashboard } from './endpoints.gen'; - -``` - -There are some use cases where the hook will not work out of the box, and that is a clue to see if it needs to be modified. The hooks can be tweaked by using `enhanceEndpoints`. - -```jsx -export const dashboardsAPI = generatedApi.enhanceEndpoints({ - endpoints: { - // Need to mutate the generated query to set the Content-Type header correctly - updateDashboard: (endpointDefinition) => { - const originalQuery = endpointDefinition.query; - if (originalQuery) { - endpointDefinition.query = (requestOptions) => ({ - ...originalQuery(requestOptions), - headers: { - 'Content-Type': 'application/merge-patch+json', - }, - }); - } - }, - }, -}); -``` - -### 6. Add reducers and middleware to the Redux store - -Last but not least, you need to add the middleware and reducers to the store. - -In Grafana, the reducers are added to [`root.ts`](/public/app/core/reducers/root.ts): - -```jsx - import { dashboardAPI } from ''; - const rootReducers = { - ..., - [dashboardAPI.reducerPath]: dashboardAPI.reducer, - }; -``` - -And the middleware is added to [`configureStore.ts`](/public/app/store/configureStore.ts): - -```jsx -import { dashboardAPI } from ''; -export function configureStore(initialState?: Partial) { - const store = reduxConfigureStore({ - reducer: createRootReducer(), - middleware: (getDefaultMiddleware) => - getDefaultMiddleware({ thunk: true, serializableCheck: false, immutableCheck: false }).concat( - ..., - dashboardAPI.middleware - ), - ..., - }); -``` - -You have available the official documentation in [RTK Query](https://redux-toolkit.js.org/tutorials/rtk-query#add-the-service-to-your-store) - -After this step is done, it is time to use your hooks across Grafana. -Enjoy coding! +Run `yarn generate:api-client` and follow the prompts. See [API Client Generator](./generator/README.md) for details. diff --git a/public/app/api/generator/README.md b/public/app/api/generator/README.md new file mode 100644 index 00000000000..fb54b8011d4 --- /dev/null +++ b/public/app/api/generator/README.md @@ -0,0 +1,52 @@ +# RTK Query API Client Generator + +This generator automates the process of creating RTK Query API clients for Grafana's API groups. It replaces the manual steps outlined in the [main API documentation](../README.md). + +## Usage + +```bash +yarn generate:api-client +``` + +The CLI will prompt for: + +1. **Enterprise or OSS API** - Whether this is an Enterprise or OSS API. This affects paths and build commands. +2. **API group name** - The basic name for the API (e.g., `dashboard`) +3. **API group** - The full API group name (defaults to `.grafana.app`) +4. **API version** - The API version (e.g., `v0alpha1`) +5. **Reducer path** - The Redux reducer path (defaults to `API`). This will also be used as the API's named export. +6. **Endpoints** - Optional comma-separated list of endpoints to include (e.g., `createDashboard,updateDashboard`). If not provided, all endpoints will be included. + +## What It Does + +The generator automates the following: + +1. Creates the `baseAPI.ts` file for the API group +2. Updates the appropriate generate script to include the API client + - `scripts/generate-rtk-apis.ts` for OSS APIs + - `local/generate-enterprise-apis.ts` for Enterprise APIs +3. Creates the `index.ts` file with proper exports +4. For OSS APIs only: Registers Redux reducers and middleware in the store. For Enterprise this needs to be done manually +5. Formats all generated files using Prettier and ESLint +6. Automatically runs the appropriate command to generate endpoints from the OpenAPI schema + +## Limitations + +- The generator is optimized for Kubernetes-style APIs, as it requires Kubernetes resource details. For legacy APIs, manual adjustments may be needed. +- It expects processed OpenAPI specifications to exist in the `openapi_snapshots` directory + +## Troubleshooting + +### Missing OpenAPI Schema + +If an error about a missing OpenAPI schema appears, check that: + +1. The API group and version exist in the backend +2. The `TestIntegrationOpenAPIs` test has been run to generate the schema (step 1 in the [main API documentation](../README.md)). +3. The schema file exists at `data/openapi/-.json` + +### Validation Errors + +- API group must include `.grafana.app` +- Version must be in format `v0alpha1`, `v1beta2`, etc. +- Reducer path must end with `API` diff --git a/public/app/api/generator/helpers.ts b/public/app/api/generator/helpers.ts new file mode 100644 index 00000000000..71b7447a11f --- /dev/null +++ b/public/app/api/generator/helpers.ts @@ -0,0 +1,115 @@ +import { execSync } from 'child_process'; +import path from 'path'; + +type PlopActionFunction = ( + answers: Record, + config?: Record +) => string | Promise; + +// Helper to remove quotes from operation IDs +export const removeQuotes = (str: string | unknown) => { + if (typeof str !== 'string') { + return str; + } + return str.replace(/^['"](.*)['"]$/, '$1'); +}; + +export const formatEndpoints = () => (endpointsInput: string | string[]) => { + if (Array.isArray(endpointsInput)) { + return endpointsInput.map((op) => `'${removeQuotes(op)}'`).join(', '); + } + + // Handle string input (comma-separated) + if (typeof endpointsInput === 'string') { + const endpointsArray = endpointsInput + .split(',') + .map((id) => id.trim()) + .filter(Boolean); + + return endpointsArray.map((op) => `'${removeQuotes(op)}'`).join(', '); + } + + return ''; +}; + +// List of created or modified files +export const getFilesToFormat = (groupName: string, isEnterprise = false) => { + const apiClientBasePath = isEnterprise ? 'public/app/extensions/api/clients' : 'public/app/api/clients'; + const generateScriptPath = isEnterprise ? 'local/generate-enterprise-apis.ts' : 'scripts/generate-rtk-apis.ts'; + + return [ + `${apiClientBasePath}/${groupName}/baseAPI.ts`, + `${apiClientBasePath}/${groupName}/index.ts`, + generateScriptPath, + ...(isEnterprise ? [] : [`public/app/core/reducers/root.ts`, `public/app/store/configureStore.ts`]), + ]; +}; + +export const runGenerateApis = + (basePath: string): PlopActionFunction => + (answers, config) => { + try { + const isEnterprise = answers.isEnterprise || (config && config.isEnterprise); + + let command; + if (isEnterprise) { + command = 'yarn process-specs && npx rtk-query-codegen-openapi ./local/generate-enterprise-apis.ts'; + } else { + command = 'yarn generate-apis'; + } + + console.log(`⏳ Running ${command} to generate endpoints...`); + execSync(command, { stdio: 'inherit', cwd: basePath }); + return '✅ API endpoints generated successfully!'; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + console.error('❌ Failed to generate API endpoints:', errorMessage); + return '❌ Failed to generate API endpoints. See error above.'; + } + }; + +export const formatFiles = + (basePath: string): PlopActionFunction => + (_, config) => { + if (!config || !Array.isArray(config.files)) { + console.error('Invalid config passed to formatFiles action'); + return '❌ Formatting failed: Invalid configuration'; + } + + const filesToFormat = config.files.map((file: string) => path.join(basePath, file)); + + try { + const filesList = filesToFormat.map((file: string) => `"${file}"`).join(' '); + + console.log('🧹 Running ESLint on generated/modified files...'); + try { + execSync(`yarn eslint --fix ${filesList}`, { cwd: basePath }); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + console.warn(`⚠️ Warning: ESLint encountered issues: ${errorMessage}`); + } + + console.log('🧹 Running Prettier on generated/modified files...'); + try { + // '--ignore-path' is necessary so the gitignored files ('local/' folder) can still be formatted + execSync(`yarn prettier --write ${filesList} --ignore-path=./.prettierignore`, { cwd: basePath }); + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + console.warn(`⚠️ Warning: Prettier encountered issues: ${errorMessage}`); + } + + return '✅ Files linted and formatted successfully!'; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + console.error('⚠️ Warning: Formatting operations failed:', errorMessage); + return '⚠️ Warning: Formatting operations failed.'; + } + }; + +export const validateGroup = (group: string) => { + return group && group.includes('.grafana.app') ? true : 'Group should be in format: name.grafana.app'; +}; + +export const validateVersion = (version: string) => { + return version && /^v\d+[a-z]*\d+$/.test(version) ? true : 'Version should be in format: v0alpha1, v1beta2, etc.'; +}; diff --git a/public/app/api/generator/plopfile.ts b/public/app/api/generator/plopfile.ts new file mode 100644 index 00000000000..921089c8c5a --- /dev/null +++ b/public/app/api/generator/plopfile.ts @@ -0,0 +1,165 @@ +import path from 'path'; +import type { NodePlopAPI, PlopGeneratorConfig } from 'plop'; + +import { + formatEndpoints, + validateGroup, + validateVersion, + getFilesToFormat, + runGenerateApis, + formatFiles, + // The file extension is necessary to make the imports + // work with the '--experimental-strip-types' flag + // @ts-ignore +} from './helpers.ts'; +// @ts-ignore +import { type ActionConfig, type PlopData, isPlopData } from './types.ts'; + +export default function plopGenerator(plop: NodePlopAPI) { + // Grafana root path + const basePath = path.resolve(import.meta.dirname, '../../../..'); + + // Register custom action types + plop.setActionType('runGenerateApis', runGenerateApis(basePath)); + plop.setActionType('formatFiles', formatFiles(basePath)); + + // Used in templates to format endpoints + plop.setHelper('formatEndpoints', formatEndpoints()); + + const generateRtkApiActions = (data: PlopData) => { + const { reducerPath, groupName, isEnterprise } = data; + + const apiClientBasePath = isEnterprise ? 'public/app/extensions/api/clients' : 'public/app/api/clients'; + const generateScriptPath = isEnterprise ? 'local/generate-enterprise-apis.ts' : 'scripts/generate-rtk-apis.ts'; + + // Using app path, so the imports work on any file level + const clientImportPath = isEnterprise ? '../extensions/api/clients' : 'app/api/clients'; + + const apiPathPrefix = isEnterprise ? '../public/app/extensions/api/clients' : '../public/app/api/clients'; + + const templateData = { + ...data, + apiPathPrefix, + }; + + // Base actions that are always added + const actions: ActionConfig[] = [ + { + type: 'add', + path: path.join(basePath, `${apiClientBasePath}/${groupName}/baseAPI.ts`), + templateFile: './templates/baseAPI.ts.hbs', + }, + { + type: 'modify', + path: path.join(basePath, generateScriptPath), + pattern: '// PLOP_INJECT_API_CLIENT - Used by the API client generator', + templateFile: './templates/config-entry.hbs', + data: templateData, + }, + { + type: 'add', + path: path.join(basePath, `${apiClientBasePath}/${groupName}/index.ts`), + templateFile: './templates/index.ts.hbs', + }, + ]; + + // Only add redux reducer and middleware for OSS clients + if (!isEnterprise) { + actions.push( + { + type: 'modify', + path: path.join(basePath, 'public/app/core/reducers/root.ts'), + pattern: '// PLOP_INJECT_IMPORT', + template: `import { ${reducerPath} } from '${clientImportPath}/${groupName}';\n// PLOP_INJECT_IMPORT`, + }, + { + type: 'modify', + path: path.join(basePath, 'public/app/core/reducers/root.ts'), + pattern: '// PLOP_INJECT_REDUCER', + template: `[${reducerPath}.reducerPath]: ${reducerPath}.reducer,\n // PLOP_INJECT_REDUCER`, + }, + { + type: 'modify', + path: path.join(basePath, 'public/app/store/configureStore.ts'), + pattern: '// PLOP_INJECT_IMPORT', + template: `import { ${reducerPath} } from '${clientImportPath}/${groupName}';\n// PLOP_INJECT_IMPORT`, + }, + { + type: 'modify', + path: path.join(basePath, 'public/app/store/configureStore.ts'), + pattern: '// PLOP_INJECT_MIDDLEWARE', + template: `${reducerPath}.middleware,\n // PLOP_INJECT_MIDDLEWARE`, + } + ); + } + + // Add formatting and generation actions + actions.push( + { + type: 'formatFiles', + files: getFilesToFormat(groupName, isEnterprise), + }, + { + type: 'runGenerateApis', + isEnterprise, + } + ); + + return actions; + }; + + const generator: PlopGeneratorConfig = { + description: 'Generate RTK Query API client for a Grafana API group', + prompts: [ + { + type: 'confirm', + name: 'isEnterprise', + message: 'Is this a Grafana Enterprise API?', + default: false, + }, + { + type: 'input', + name: 'groupName', + message: 'API group name (e.g. dashboard):', + validate: (input: string) => (input?.trim() ? true : 'Group name is required'), + }, + { + type: 'input', + name: 'group', + message: 'API group (e.g. dashboard.grafana.app):', + default: (answers: { groupName?: string }) => `${answers.groupName}.grafana.app`, + validate: validateGroup, + }, + { + type: 'input', + name: 'version', + message: 'API version (e.g. v0alpha1):', + default: 'v0alpha1', + validate: validateVersion, + }, + { + type: 'input', + name: 'reducerPath', + message: 'Reducer path (e.g. dashboardAPI):', + default: (answers: { groupName?: string }) => `${answers.groupName}API`, + validate: (input: string) => + input?.endsWith('API') ? true : 'Reducer path should end with "API" (e.g. dashboardAPI)', + }, + { + type: 'input', + name: 'endpoints', + message: 'Endpoints to include (comma-separated, optional):', + validate: () => true, + }, + ], + actions: function (data) { + if (!isPlopData(data)) { + throw new Error('Invalid data format received from prompts'); + } + + return generateRtkApiActions(data); + }, + }; + + plop.setGenerator('rtk-api-client', generator); +} diff --git a/public/app/api/generator/templates/baseAPI.ts.hbs b/public/app/api/generator/templates/baseAPI.ts.hbs new file mode 100644 index 00000000000..a5fd29cf488 --- /dev/null +++ b/public/app/api/generator/templates/baseAPI.ts.hbs @@ -0,0 +1,14 @@ +import { createApi } from '@reduxjs/toolkit/query/react'; + +import { createBaseQuery } from 'app/api/createBaseQuery'; +import { getAPIBaseURL } from 'app/api/utils'; + +export const BASE_URL = getAPIBaseURL('{{group}}', '{{version}}'); + +export const api = createApi({ + reducerPath: '{{reducerPath}}', + baseQuery: createBaseQuery({ + baseURL: BASE_URL, + }), + endpoints: () => ({}), +}); diff --git a/public/app/api/generator/templates/config-entry.hbs b/public/app/api/generator/templates/config-entry.hbs new file mode 100644 index 00000000000..53c0eaf673e --- /dev/null +++ b/public/app/api/generator/templates/config-entry.hbs @@ -0,0 +1,9 @@ +'{{apiPathPrefix}}/{{groupName}}/endpoints.gen.ts': { + apiFile: '{{apiPathPrefix}}/{{groupName}}/baseAPI.ts', + schemaFile: '../data/openapi/{{group}}-{{version}}.json', + {{#if endpoints}} + filterEndpoints: [{{{formatEndpoints endpoints}}}], + {{/if}} + tag: true, +}, +// PLOP_INJECT_API_CLIENT - Used by the API client generator diff --git a/public/app/api/generator/templates/index.ts.hbs b/public/app/api/generator/templates/index.ts.hbs new file mode 100644 index 00000000000..de9c3c66cf8 --- /dev/null +++ b/public/app/api/generator/templates/index.ts.hbs @@ -0,0 +1,3 @@ +import { generatedAPI } from './endpoints.gen'; + +export const {{reducerPath}} = generatedAPI.enhanceEndpoints({}); diff --git a/public/app/api/generator/types.ts b/public/app/api/generator/types.ts new file mode 100644 index 00000000000..0eb73b6ab90 --- /dev/null +++ b/public/app/api/generator/types.ts @@ -0,0 +1,27 @@ +import type { AddActionConfig, ModifyActionConfig } from 'plop'; + +export interface FormatFilesActionConfig { + type: 'formatFiles'; + files: string[]; +} + +export interface RunGenerateApisActionConfig { + type: 'runGenerateApis'; + isEnterprise: boolean; +} + +// Union type of all possible action configs +export type ActionConfig = AddActionConfig | ModifyActionConfig | FormatFilesActionConfig | RunGenerateApisActionConfig; + +export interface PlopData { + groupName: string; + group: string; + version: string; + reducerPath: string; + endpoints: string; + isEnterprise: boolean; +} + +export function isPlopData(data: unknown): data is PlopData { + return typeof data === 'object' && data !== null; +} diff --git a/public/app/core/reducers/root.ts b/public/app/core/reducers/root.ts index 6b307d25529..99877d65c90 100644 --- a/public/app/core/reducers/root.ts +++ b/public/app/core/reducers/root.ts @@ -35,6 +35,8 @@ import { provisioningAPI } from '../../api/clients/provisioning'; import { alertingApi } from '../../features/alerting/unified/api/alertingApi'; import { userPreferencesAPI } from '../../features/preferences/api'; import { cleanUpAction } from '../actions/cleanUp'; +// Used by the API client generator +// PLOP_INJECT_IMPORT const rootReducers = { ...sharedReducers, @@ -69,6 +71,8 @@ const rootReducers = { [provisioningAPI.reducerPath]: provisioningAPI.reducer, [folderAPI.reducerPath]: folderAPI.reducer, [advisorAPI.reducerPath]: advisorAPI.reducer, + // PLOP_INJECT_REDUCER + // Used by the API client generator }; const addedReducers = {}; diff --git a/public/app/store/configureStore.ts b/public/app/store/configureStore.ts index a5061d7a9ed..b161a695acf 100644 --- a/public/app/store/configureStore.ts +++ b/public/app/store/configureStore.ts @@ -13,6 +13,8 @@ import { folderAPI } from '../api/clients/folder'; import { iamAPI } from '../api/clients/iam'; import { playlistAPI } from '../api/clients/playlist'; import { provisioningAPI } from '../api/clients/provisioning'; +// Used by the API client generator +// PLOP_INJECT_IMPORT import { buildInitialState } from '../core/reducers/navModel'; import { addReducer, createRootReducer } from '../core/reducers/root'; import { alertingApi } from '../features/alerting/unified/api/alertingApi'; @@ -49,6 +51,8 @@ export function configureStore(initialState?: Partial) { provisioningAPI.middleware, folderAPI.middleware, advisorAPI.middleware, + // PLOP_INJECT_MIDDLEWARE + // Used by the API client generator ...extraMiddleware ), devTools: process.env.NODE_ENV !== 'production', diff --git a/scripts/generate-rtk-apis.ts b/scripts/generate-rtk-apis.ts index 8375026e378..2b805713919 100644 --- a/scripts/generate-rtk-apis.ts +++ b/scripts/generate-rtk-apis.ts @@ -72,6 +72,7 @@ const config: ConfigFile = { filterEndpoints: ['listPlaylist', 'getPlaylist', 'createPlaylist', 'deletePlaylist', 'replacePlaylist'], tag: true, }, + // PLOP_INJECT_API_CLIENT - Used by the API client generator }, }; diff --git a/yarn.lock b/yarn.lock index a16603a5027..e578eb3f212 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3916,10 +3916,10 @@ __metadata: languageName: node linkType: hard -"@inquirer/figures@npm:^1.0.8": - version: 1.0.8 - resolution: "@inquirer/figures@npm:1.0.8" - checksum: 10/0e5e4fbb15e799e818c598fcc3558ef076daf78662149711b046723fd6316381e95f7d5573d6ef0062095ad22c6ac98833033f0948df5c722932107a567fd9c3 +"@inquirer/figures@npm:^1.0.3, @inquirer/figures@npm:^1.0.8": + version: 1.0.11 + resolution: "@inquirer/figures@npm:1.0.11" + checksum: 10/357ddd2e83718bc3c9189d518b93fd69099af9c860354df9a5ac0ec024cb5df1228ae4608d2de7625624d2adcd047db813f29426a610eaae7b9e449f8c753c6b languageName: node linkType: hard @@ -9353,6 +9353,13 @@ __metadata: languageName: node linkType: hard +"@types/fined@npm:*": + version: 1.1.5 + resolution: "@types/fined@npm:1.1.5" + checksum: 10/7a9e58904ac95205a989046dbfb3f5c91f5f07664d8d3e4b2d4e25777e5478252d8cea9637c3dc215526a0d2fb3ab3681047183d3447af00ce934466f6569f56 + languageName: node + linkType: hard + "@types/fs-extra@npm:^11.0.4": version: 11.0.4 resolution: "@types/fs-extra@npm:11.0.4" @@ -9478,6 +9485,16 @@ __metadata: languageName: node linkType: hard +"@types/inquirer@npm:^9.0.3": + version: 9.0.7 + resolution: "@types/inquirer@npm:9.0.7" + dependencies: + "@types/through": "npm:*" + rxjs: "npm:^7.2.0" + checksum: 10/84cefdd10d7ca747ae2338ea35518020abbc28f7670ade446e367c4cd333153618b374d30830253f31a9567dd26e7f3093fb3cd20210af5ba27a1a91b89bb97e + languageName: node + linkType: hard + "@types/is-hotkey@npm:0.1.10": version: 0.1.10 resolution: "@types/is-hotkey@npm:0.1.10" @@ -9584,6 +9601,16 @@ __metadata: languageName: node linkType: hard +"@types/liftoff@npm:^4.0.3": + version: 4.0.3 + resolution: "@types/liftoff@npm:4.0.3" + dependencies: + "@types/fined": "npm:*" + "@types/node": "npm:*" + checksum: 10/ee38489d296f14caef85fdeb9a7de45232e0c221bdcdd97ccae3f720c2d12315377198790c228d569e64eed26b19ae132fa119b7e675b552a69af3b8538807f3 + languageName: node + linkType: hard + "@types/lodash.memoize@npm:^4.1.7": version: 4.1.7 resolution: "@types/lodash.memoize@npm:4.1.7" @@ -10140,6 +10167,15 @@ __metadata: languageName: node linkType: hard +"@types/through@npm:*": + version: 0.0.33 + resolution: "@types/through@npm:0.0.33" + dependencies: + "@types/node": "npm:*" + checksum: 10/fd0b73f873a64ed5366d1d757c42e5dbbb2201002667c8958eda7ca02fff09d73de91360572db465ee00240c32d50c6039ea736d8eca374300f9664f93e8da39 + languageName: node + linkType: hard + "@types/tinycolor2@npm:1.4.6": version: 1.4.6 resolution: "@types/tinycolor2@npm:1.4.6" @@ -11045,6 +11081,16 @@ __metadata: languageName: node linkType: hard +"aggregate-error@npm:^4.0.0": + version: 4.0.1 + resolution: "aggregate-error@npm:4.0.1" + dependencies: + clean-stack: "npm:^4.0.0" + indent-string: "npm:^5.0.0" + checksum: 10/bb3ffdfd13447800fff237c2cba752c59868ee669104bb995dfbbe0b8320e967d679e683dabb640feb32e4882d60258165cde0baafc4cd467cc7d275a13ad6b5 + languageName: node + linkType: hard + "ajv-draft-04@npm:^1.0.0": version: 1.0.0 resolution: "ajv-draft-04@npm:1.0.0" @@ -11343,6 +11389,13 @@ __metadata: languageName: node linkType: hard +"array-each@npm:^1.0.1": + version: 1.0.1 + resolution: "array-each@npm:1.0.1" + checksum: 10/eb2393c1200003993d97dab2b280aa01e6ca339b383198e5d250cc8cd31f8012a0c22b66f275401a80e89e21bfab420e0f4c77c295637dea525fe0e152ba2300 + languageName: node + linkType: hard + "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" @@ -11371,6 +11424,13 @@ __metadata: languageName: node linkType: hard +"array-slice@npm:^1.0.0": + version: 1.1.0 + resolution: "array-slice@npm:1.1.0" + checksum: 10/3c8ecc7eefe104c97e2207e1d5644be160924c89e08b1807f3cad77f4a8fb10150fc275ebfab90dc02064d178b010cad31b69c9386769d172da270be5e233c51 + languageName: node + linkType: hard + "array-tree-filter@npm:^2.1.0": version: 2.1.0 resolution: "array-tree-filter@npm:2.1.0" @@ -12411,6 +12471,17 @@ __metadata: languageName: node linkType: hard +"capital-case@npm:^1.0.4": + version: 1.0.4 + resolution: "capital-case@npm:1.0.4" + dependencies: + no-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + upper-case-first: "npm:^2.0.2" + checksum: 10/41fa8fa87f6d24d0835a2b4a9341a3eaecb64ac29cd7c5391f35d6175a0fa98ab044e7f2602e1ec3afc886231462ed71b5b80c590b8b41af903ec2c15e5c5931 + languageName: node + linkType: hard + "case-sensitive-paths-webpack-plugin@npm:^2.4.0": version: 2.4.0 resolution: "case-sensitive-paths-webpack-plugin@npm:2.4.0" @@ -12489,10 +12560,10 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^5.2.0": - version: 5.3.0 - resolution: "chalk@npm:5.3.0" - checksum: 10/6373caaab21bd64c405bfc4bd9672b145647fc9482657b5ea1d549b3b2765054e9d3d928870cdf764fb4aad67555f5061538ff247b8310f110c5c888d92397ea +"chalk@npm:^5.2.0, chalk@npm:^5.3.0": + version: 5.4.1 + resolution: "chalk@npm:5.4.1" + checksum: 10/29df3ffcdf25656fed6e95962e2ef86d14dfe03cd50e7074b06bad9ffbbf6089adbb40f75c00744d843685c8d008adaf3aed31476780312553caf07fa86e5bc7 languageName: node linkType: hard @@ -12503,6 +12574,26 @@ __metadata: languageName: node linkType: hard +"change-case@npm:^4.1.2": + version: 4.1.2 + resolution: "change-case@npm:4.1.2" + dependencies: + camel-case: "npm:^4.1.2" + capital-case: "npm:^1.0.4" + constant-case: "npm:^3.0.4" + dot-case: "npm:^3.0.4" + header-case: "npm:^2.0.4" + no-case: "npm:^3.0.4" + param-case: "npm:^3.0.4" + pascal-case: "npm:^3.1.2" + path-case: "npm:^3.0.4" + sentence-case: "npm:^3.0.4" + snake-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + checksum: 10/e4bc4a093a1f7cce8b33896665cf9e456e3bc3cc0def2ad7691b1994cfca99b3188d0a513b16855b01a6bd20692fcde12a7d4d87a5615c4c515bbbf0e651f116 + languageName: node + linkType: hard + "char-regex@npm:^1.0.2": version: 1.0.2 resolution: "char-regex@npm:1.0.2" @@ -12706,6 +12797,15 @@ __metadata: languageName: node linkType: hard +"clean-stack@npm:^4.0.0": + version: 4.2.0 + resolution: "clean-stack@npm:4.2.0" + dependencies: + escape-string-regexp: "npm:5.0.0" + checksum: 10/373f656a31face5c615c0839213b9b542a0a48057abfb1df66900eab4dc2a5c6097628e4a0b5aa559cdfc4e66f8a14ea47be9681773165a44470ef5fb8ccc172 + languageName: node + linkType: hard + "cli-cursor@npm:3.1.0, cli-cursor@npm:^3.1.0": version: 3.1.0 resolution: "cli-cursor@npm:3.1.0" @@ -12715,6 +12815,15 @@ __metadata: languageName: node linkType: hard +"cli-cursor@npm:^5.0.0": + version: 5.0.0 + resolution: "cli-cursor@npm:5.0.0" + dependencies: + restore-cursor: "npm:^5.0.0" + checksum: 10/1eb9a3f878b31addfe8d82c6d915ec2330cec8447ab1f117f4aa34f0137fbb3137ec3466e1c9a65bcb7557f6e486d343f2da57f253a2f668d691372dfa15c090 + languageName: node + linkType: hard + "cli-spinners@npm:2.6.1": version: 2.6.1 resolution: "cli-spinners@npm:2.6.1" @@ -12722,7 +12831,7 @@ __metadata: languageName: node linkType: hard -"cli-spinners@npm:^2.5.0": +"cli-spinners@npm:^2.5.0, cli-spinners@npm:^2.9.2": version: 2.9.2 resolution: "cli-spinners@npm:2.9.2" checksum: 10/a0a863f442df35ed7294424f5491fa1756bd8d2e4ff0c8736531d886cec0ece4d85e8663b77a5afaf1d296e3cbbebff92e2e99f52bbea89b667cbe789b994794 @@ -13174,6 +13283,17 @@ __metadata: languageName: node linkType: hard +"constant-case@npm:^3.0.4": + version: 3.0.4 + resolution: "constant-case@npm:3.0.4" + dependencies: + no-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + upper-case: "npm:^2.0.2" + checksum: 10/6c3346d51afc28d9fae922e966c68eb77a19d94858dba230dd92d7b918b37d36db50f0311e9ecf6847e43e934b1c01406a0936973376ab17ec2c471fbcfb2cf3 + languageName: node + linkType: hard + "constants-browserify@npm:^1.0.0": version: 1.0.0 resolution: "constants-browserify@npm:1.0.0" @@ -14637,6 +14757,22 @@ __metadata: languageName: node linkType: hard +"del@npm:^7.1.0": + version: 7.1.0 + resolution: "del@npm:7.1.0" + dependencies: + globby: "npm:^13.1.2" + graceful-fs: "npm:^4.2.10" + is-glob: "npm:^4.0.3" + is-path-cwd: "npm:^3.0.0" + is-path-inside: "npm:^4.0.0" + p-map: "npm:^5.5.0" + rimraf: "npm:^3.0.2" + slash: "npm:^4.0.0" + checksum: 10/93527e78e95125809ff20a112814b00648ed64af204be1a565862698060c9ec8f5c5fe1a4866725acfde9b0da6423f4b7a7642c1d38cd4b05cbeb643a7b089e3 + languageName: node + linkType: hard + "delaunator@npm:5": version: 5.0.0 resolution: "delaunator@npm:5.0.0" @@ -14695,6 +14831,13 @@ __metadata: languageName: node linkType: hard +"detect-file@npm:^1.0.0": + version: 1.0.0 + resolution: "detect-file@npm:1.0.0" + checksum: 10/1861e4146128622e847abe0e1ed80fef01e78532665858a792267adf89032b7a9c698436137707fcc6f02956c2a6a0052d6a0cef5be3d4b76b1ff0da88e2158a + languageName: node + linkType: hard + "detect-indent@npm:^5.0.0": version: 5.0.0 resolution: "detect-indent@npm:5.0.0" @@ -15098,6 +15241,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^10.3.0": + version: 10.4.0 + resolution: "emoji-regex@npm:10.4.0" + checksum: 10/76bb92c5bcf0b6980d37e535156231e4a9d0aa6ab3b9f5eabf7690231d5aa5d5b8e516f36e6804cbdd0f1c23dfef2a60c40ab7bb8aedd890584281a565b97c50 + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -15636,6 +15786,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:5.0.0": + version: 5.0.0 + resolution: "escape-string-regexp@npm:5.0.0" + checksum: 10/20daabe197f3cb198ec28546deebcf24b3dbb1a5a269184381b3116d12f0532e06007f4bc8da25669d6a7f8efb68db0758df4cd981f57bc5b57f521a3e12c59e + languageName: node + linkType: hard + "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -16213,6 +16370,15 @@ __metadata: languageName: node linkType: hard +"expand-tilde@npm:^2.0.0, expand-tilde@npm:^2.0.2": + version: 2.0.2 + resolution: "expand-tilde@npm:2.0.2" + dependencies: + homedir-polyfill: "npm:^1.0.1" + checksum: 10/2efe6ed407d229981b1b6ceb552438fbc9e5c7d6a6751ad6ced3e0aa5cf12f0b299da695e90d6c2ac79191b5c53c613e508f7149e4573abfbb540698ddb7301a + languageName: node + linkType: hard + "expect@npm:^29.0.0, expect@npm:^29.7.0": version: 29.7.0 resolution: "expect@npm:29.7.0" @@ -16281,14 +16447,14 @@ __metadata: languageName: node linkType: hard -"extend@npm:~3.0.2": +"extend@npm:^3.0.2, extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" checksum: 10/59e89e2dc798ec0f54b36d82f32a27d5f6472c53974f61ca098db5d4648430b725387b53449a34df38fd0392045434426b012f302b3cc049a6500ccf82877e4e languageName: node linkType: hard -"external-editor@npm:^3.0.3": +"external-editor@npm:^3.0.3, external-editor@npm:^3.1.0": version: 3.1.0 resolution: "external-editor@npm:3.1.0" dependencies: @@ -16358,7 +16524,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2, fast-glob@npm:^3.3.3": +"fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.2, fast-glob@npm:^3.3.3": version: 3.3.3 resolution: "fast-glob@npm:3.3.3" dependencies: @@ -16671,6 +16837,31 @@ __metadata: languageName: node linkType: hard +"findup-sync@npm:^5.0.0": + version: 5.0.0 + resolution: "findup-sync@npm:5.0.0" + dependencies: + detect-file: "npm:^1.0.0" + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.4" + resolve-dir: "npm:^1.0.1" + checksum: 10/576716c77a0e8330b17ae9cba27d1fda8907c8cda7bf33a47f1999e16e089bfc6df4dd62933e0760f430736183c054348c34aa45dd882d49c8c098f55b89ee1d + languageName: node + linkType: hard + +"fined@npm:^2.0.0": + version: 2.0.0 + resolution: "fined@npm:2.0.0" + dependencies: + expand-tilde: "npm:^2.0.2" + is-plain-object: "npm:^5.0.0" + object.defaults: "npm:^1.1.0" + object.pick: "npm:^1.3.0" + parse-filepath: "npm:^1.0.2" + checksum: 10/3c5125a5b4eabb9a9569a9bc55a629d4f463ea8926cca9ee0b54d0e0351715aaed7f245a5372defbb59a0aaccdfefae9dc1a9ac0c7b1167ba8537284db956852 + languageName: node + linkType: hard + "fishery@npm:^2.2.2": version: 2.2.3 resolution: "fishery@npm:2.2.3" @@ -16680,6 +16871,13 @@ __metadata: languageName: node linkType: hard +"flagged-respawn@npm:^2.0.0": + version: 2.0.0 + resolution: "flagged-respawn@npm:2.0.0" + checksum: 10/1b48b1aca4614833bc1c1aa5a7af09232bc284168334b85492e580b51f9bc5ee1a59e4d830934ca91f6dc483300043ac8fe17f88f97f289153f6fcbd8dc9171b + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.1.1 resolution: "flat-cache@npm:3.1.1" @@ -16747,6 +16945,22 @@ __metadata: languageName: node linkType: hard +"for-in@npm:^1.0.1": + version: 1.0.2 + resolution: "for-in@npm:1.0.2" + checksum: 10/09f4ae93ce785d253ac963d94c7f3432d89398bf25ac7a24ed034ca393bf74380bdeccc40e0f2d721a895e54211b07c8fad7132e8157827f6f7f059b70b4043d + languageName: node + linkType: hard + +"for-own@npm:^1.0.0": + version: 1.0.0 + resolution: "for-own@npm:1.0.0" + dependencies: + for-in: "npm:^1.0.1" + checksum: 10/233238f6e9060f61295a7f7c7e3e9de11aaef57e82a108e7f350dc92ae84fe2189848077ac4b8db47fd8edd45337ed8d9f66bd0b1efa4a6a1b3f38aa21b7ab2e + languageName: node + linkType: hard + "foreground-child@npm:^3.1.0": version: 3.1.1 resolution: "foreground-child@npm:3.1.1" @@ -17112,6 +17326,13 @@ __metadata: languageName: node linkType: hard +"get-east-asian-width@npm:^1.0.0": + version: 1.3.0 + resolution: "get-east-asian-width@npm:1.3.0" + checksum: 10/8e8e779eb28701db7fdb1c8cab879e39e6ae23f52dadd89c8aed05869671cee611a65d4f8557b83e981428623247d8bc5d0c7a4ef3ea7a41d826e73600112ad8 + languageName: node + linkType: hard + "get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7": version: 1.2.7 resolution: "get-intrinsic@npm:1.2.7" @@ -17428,6 +17649,17 @@ __metadata: languageName: node linkType: hard +"global-modules@npm:^1.0.0": + version: 1.0.0 + resolution: "global-modules@npm:1.0.0" + dependencies: + global-prefix: "npm:^1.0.1" + is-windows: "npm:^1.0.1" + resolve-dir: "npm:^1.0.0" + checksum: 10/e4031a01c0c7401349bb69e1499c7268d636552b16374c0002d677c7a6185da6782a2927a7a3a7c046eb7be97cd26b3c7b1b736f9818ecc7ac09e9d61449065e + languageName: node + linkType: hard + "global-modules@npm:^2.0.0": version: 2.0.0 resolution: "global-modules@npm:2.0.0" @@ -17437,6 +17669,19 @@ __metadata: languageName: node linkType: hard +"global-prefix@npm:^1.0.1": + version: 1.0.2 + resolution: "global-prefix@npm:1.0.2" + dependencies: + expand-tilde: "npm:^2.0.2" + homedir-polyfill: "npm:^1.0.1" + ini: "npm:^1.3.4" + is-windows: "npm:^1.0.1" + which: "npm:^1.2.14" + checksum: 10/68cf78f81cd85310095ca1f0ec22dd5f43a1059646b2c7b3fc4a7c9ce744356e66ca833adda4e5753e38021847aaec393a159a029ba2d257c08ccb3f00ca2899 + languageName: node + linkType: hard + "global-prefix@npm:^3.0.0": version: 3.0.0 resolution: "global-prefix@npm:3.0.0" @@ -17509,6 +17754,19 @@ __metadata: languageName: node linkType: hard +"globby@npm:^13.1.2, globby@npm:^13.2.2": + version: 13.2.2 + resolution: "globby@npm:13.2.2" + dependencies: + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.3.0" + ignore: "npm:^5.2.4" + merge2: "npm:^1.4.1" + slash: "npm:^4.0.0" + checksum: 10/4494a9d2162a7e4d327988b26be66d8eab87d7f59a83219e74b065e2c3ced23698f68fb10482bf9337133819281803fb886d6ae06afbb2affa743623eb0b1949 + languageName: node + linkType: hard + "globby@npm:^14.0.0": version: 14.0.1 resolution: "globby@npm:14.0.1" @@ -17800,6 +18058,7 @@ __metadata: ol-ext: "npm:4.0.26" openapi-types: "npm:^12.1.3" pdf-parse: "npm:^1.1.1" + plop: "npm:^4.0.1" pluralize: "npm:^8.0.0" postcss: "npm:8.5.1" postcss-loader: "npm:8.1.1" @@ -17947,12 +18206,12 @@ __metadata: languageName: node linkType: hard -"handlebars@npm:^4.7.7": - version: 4.7.7 - resolution: "handlebars@npm:4.7.7" +"handlebars@npm:^4.7.7, handlebars@npm:^4.7.8": + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" dependencies: minimist: "npm:^1.2.5" - neo-async: "npm:^2.6.0" + neo-async: "npm:^2.6.2" source-map: "npm:^0.6.1" uglify-js: "npm:^3.1.4" wordwrap: "npm:^1.0.0" @@ -17961,7 +18220,7 @@ __metadata: optional: true bin: handlebars: bin/handlebars - checksum: 10/617b1e689b7577734abc74564bdb8cdaddf8fd48ce72afdb489f426e9c60a7d6ee2a2707c023720c4059070128243c948bded8f2716e4543378033e3971b85ea + checksum: 10/bd528f4dd150adf67f3f857118ef0fa43ff79a153b1d943fa0a770f2599e38b25a7a0dbac1a3611a4ec86970fd2325a81310fb788b5c892308c9f8743bd02e11 languageName: node linkType: hard @@ -18072,6 +18331,16 @@ __metadata: languageName: node linkType: hard +"header-case@npm:^2.0.4": + version: 2.0.4 + resolution: "header-case@npm:2.0.4" + dependencies: + capital-case: "npm:^1.0.4" + tslib: "npm:^2.0.3" + checksum: 10/571c83eeb25e8130d172218712f807c0b96d62b020981400bccc1503a7cf14b09b8b10498a962d2739eccf231d950e3848ba7d420b58a6acd2f9283439546cd9 + languageName: node + linkType: hard + "headers-polyfill@npm:^4.0.2": version: 4.0.2 resolution: "headers-polyfill@npm:4.0.2" @@ -18165,6 +18434,15 @@ __metadata: languageName: node linkType: hard +"homedir-polyfill@npm:^1.0.1": + version: 1.0.3 + resolution: "homedir-polyfill@npm:1.0.3" + dependencies: + parse-passwd: "npm:^1.0.0" + checksum: 10/18dd4db87052c6a2179d1813adea0c4bfcfa4f9996f0e226fefb29eb3d548e564350fa28ec46b0bf1fbc0a1d2d6922ceceb80093115ea45ff8842a4990139250 + languageName: node + linkType: hard + "hookified@npm:^1.6.0": version: 1.7.0 resolution: "hookified@npm:1.7.0" @@ -18802,6 +19080,13 @@ __metadata: languageName: node linkType: hard +"indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: 10/e466c27b6373440e6d84fbc19e750219ce25865cb82d578e41a6053d727e5520dc5725217d6eb1cc76005a1bb1696a0f106d84ce7ebda3033b963a38583fb3b3 + languageName: node + linkType: hard + "infer-owner@npm:^1.0.4": version: 1.0.4 resolution: "infer-owner@npm:1.0.4" @@ -18840,7 +19125,7 @@ __metadata: languageName: node linkType: hard -"ini@npm:^1.3.2, ini@npm:^1.3.5, ini@npm:^1.3.8": +"ini@npm:^1.3.2, ini@npm:^1.3.4, ini@npm:^1.3.5, ini@npm:^1.3.8": version: 1.3.8 resolution: "ini@npm:1.3.8" checksum: 10/314ae176e8d4deb3def56106da8002b462221c174ddb7ce0c49ee72c8cd1f9044f7b10cc555a7d8850982c3b9ca96fc212122749f5234bc2b6fb05fb942ed566 @@ -18901,6 +19186,26 @@ __metadata: languageName: node linkType: hard +"inquirer@npm:^9.2.10": + version: 9.3.7 + resolution: "inquirer@npm:9.3.7" + dependencies: + "@inquirer/figures": "npm:^1.0.3" + ansi-escapes: "npm:^4.3.2" + cli-width: "npm:^4.1.0" + external-editor: "npm:^3.1.0" + mute-stream: "npm:1.0.0" + ora: "npm:^5.4.1" + run-async: "npm:^3.0.0" + rxjs: "npm:^7.8.1" + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^6.2.0" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10/92d0a0f55701e05a8dd3624eab0c03c6e96de18285cefdbef4edc5c1a77c8283361700e088db275ec5d5b36c45ff9428127125d78428e07ea4c5574f55b17176 + languageName: node + linkType: hard + "internal-slot@npm:^1.1.0": version: 1.1.0 resolution: "internal-slot@npm:1.1.0" @@ -18978,6 +19283,16 @@ __metadata: languageName: node linkType: hard +"is-absolute@npm:^1.0.0": + version: 1.0.0 + resolution: "is-absolute@npm:1.0.0" + dependencies: + is-relative: "npm:^1.0.0" + is-windows: "npm:^1.0.1" + checksum: 10/9d16b2605eda3f3ce755410f1d423e327ad3a898bcb86c9354cf63970ed3f91ba85e9828aa56f5d6a952b9fae43d0477770f78d37409ae8ecc31e59ebc279b27 + languageName: node + linkType: hard + "is-alphabetical@npm:^1.0.0": version: 1.0.4 resolution: "is-alphabetical@npm:1.0.4" @@ -19278,6 +19593,13 @@ __metadata: languageName: node linkType: hard +"is-interactive@npm:^2.0.0": + version: 2.0.0 + resolution: "is-interactive@npm:2.0.0" + checksum: 10/e8d52ad490bed7ae665032c7675ec07732bbfe25808b0efbc4d5a76b1a1f01c165f332775c63e25e9a03d319ebb6b24f571a9e902669fc1e40b0a60b5be6e26c + languageName: node + linkType: hard + "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" @@ -19354,6 +19676,13 @@ __metadata: languageName: node linkType: hard +"is-path-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "is-path-cwd@npm:3.0.0" + checksum: 10/bc34d13b6a03dfca4a3ab6a8a5ba78ae4b24f4f1db4b2b031d2760c60d0913bd16a4b980dcb4e590adfc906649d5f5132684079a3972bd219da49deebb9adea8 + languageName: node + linkType: hard + "is-path-inside@npm:^3.0.2": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" @@ -19361,6 +19690,13 @@ __metadata: languageName: node linkType: hard +"is-path-inside@npm:^4.0.0": + version: 4.0.0 + resolution: "is-path-inside@npm:4.0.0" + checksum: 10/8810fa11c58e6360b82c3e0d6cd7d9c7d0392d3ac9eb10f980b81f9839f40ac6d1d6d6f05d069db0d227759801228f0b072e1b6c343e4469b065ab5fe0b68fe5 + languageName: node + linkType: hard + "is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": version: 1.1.0 resolution: "is-plain-obj@npm:1.1.0" @@ -19424,6 +19760,15 @@ __metadata: languageName: node linkType: hard +"is-relative@npm:^1.0.0": + version: 1.0.0 + resolution: "is-relative@npm:1.0.0" + dependencies: + is-unc-path: "npm:^1.0.0" + checksum: 10/3271a0df109302ef5e14a29dcd5d23d9788e15ade91a40b942b035827ffbb59f7ce9ff82d036ea798541a52913cbf9d2d0b66456340887b51f3542d57b5a4c05 + languageName: node + linkType: hard + "is-set@npm:^2.0.3": version: 2.0.3 resolution: "is-set@npm:2.0.3" @@ -19509,6 +19854,15 @@ __metadata: languageName: node linkType: hard +"is-unc-path@npm:^1.0.0": + version: 1.0.0 + resolution: "is-unc-path@npm:1.0.0" + dependencies: + unc-path-regex: "npm:^0.1.2" + checksum: 10/e8abfde203f7409f5b03a5f1f8636e3a41e78b983702ef49d9343eb608cdfe691429398e8815157519b987b739bcfbc73ae7cf4c8582b0ab66add5171088eab6 + languageName: node + linkType: hard + "is-unicode-supported@npm:^0.1.0": version: 0.1.0 resolution: "is-unicode-supported@npm:0.1.0" @@ -19516,6 +19870,20 @@ __metadata: languageName: node linkType: hard +"is-unicode-supported@npm:^1.3.0": + version: 1.3.0 + resolution: "is-unicode-supported@npm:1.3.0" + checksum: 10/20a1fc161afafaf49243551a5ac33b6c4cf0bbcce369fcd8f2951fbdd000c30698ce320de3ee6830497310a8f41880f8066d440aa3eb0a853e2aa4836dd89abc + languageName: node + linkType: hard + +"is-unicode-supported@npm:^2.0.0": + version: 2.1.0 + resolution: "is-unicode-supported@npm:2.1.0" + checksum: 10/f254e3da6b0ab1a57a94f7273a7798dd35d1d45b227759f600d0fa9d5649f9c07fa8d3c8a6360b0e376adf916d151ec24fc9a50c5295c58bae7ca54a76a063f9 + languageName: node + linkType: hard + "is-valid-glob@npm:^1.0.0": version: 1.0.0 resolution: "is-valid-glob@npm:1.0.0" @@ -19556,6 +19924,13 @@ __metadata: languageName: node linkType: hard +"is-windows@npm:^1.0.1": + version: 1.0.2 + resolution: "is-windows@npm:1.0.2" + checksum: 10/438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 + languageName: node + linkType: hard + "is-wsl@npm:^2.2.0": version: 2.2.0 resolution: "is-wsl@npm:2.2.0" @@ -19595,6 +19970,13 @@ __metadata: languageName: node linkType: hard +"isbinaryfile@npm:^5.0.0": + version: 5.0.4 + resolution: "isbinaryfile@npm:5.0.4" + checksum: 10/6162e900b17e6c73da6138667d6b195ed234f9fd9d073e7c8c07ee36657e63b6a69d73da55f522d45a1928f5da4642b5d25d27e24ebd3bb68b83647d594bee79 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -19609,7 +19991,7 @@ __metadata: languageName: node linkType: hard -"isobject@npm:^3.0.1": +"isobject@npm:^3.0.0, isobject@npm:^3.0.1": version: 3.0.1 resolution: "isobject@npm:3.0.1" checksum: 10/db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 @@ -21048,6 +21430,22 @@ __metadata: languageName: node linkType: hard +"liftoff@npm:^4.0.0": + version: 4.0.0 + resolution: "liftoff@npm:4.0.0" + dependencies: + extend: "npm:^3.0.2" + findup-sync: "npm:^5.0.0" + fined: "npm:^2.0.0" + flagged-respawn: "npm:^2.0.0" + is-plain-object: "npm:^5.0.0" + object.map: "npm:^1.0.1" + rechoir: "npm:^0.8.0" + resolve: "npm:^1.20.0" + checksum: 10/bb9f467ed4d792ce6b519558a2d7b9ef4ec28c7aa09270981395631d456c031128881c2bd31375c7c9d416abb4fc1263dbf17d9ba46bac9df0e88e04c378c699 + languageName: node + linkType: hard + "lilconfig@npm:^3.1.2, lilconfig@npm:^3.1.3": version: 3.1.3 resolution: "lilconfig@npm:3.1.3" @@ -21344,6 +21742,16 @@ __metadata: languageName: node linkType: hard +"log-symbols@npm:^6.0.0": + version: 6.0.0 + resolution: "log-symbols@npm:6.0.0" + dependencies: + chalk: "npm:^5.3.0" + is-unicode-supported: "npm:^1.3.0" + checksum: 10/510cdda36700cbcd87a2a691ea08d310a6c6b449084018f7f2ec4f732ca5e51b301ff1327aadd96f53c08318e616276c65f7fe22f2a16704fb0715d788bc3c33 + languageName: node + linkType: hard + "log-update@npm:^4.0.0": version: 4.0.0 resolution: "log-update@npm:4.0.0" @@ -21584,6 +21992,15 @@ __metadata: languageName: node linkType: hard +"make-iterator@npm:^1.0.0": + version: 1.0.1 + resolution: "make-iterator@npm:1.0.1" + dependencies: + kind-of: "npm:^6.0.2" + checksum: 10/d38afc388f4374b15c0622d4fa4d3e8c3154e3a6ba35b01e9a5179c127d7dd09a91fa571056aa9e041981b39f80bdbab035c05475e56ef675a18bdf550f0cb6a + languageName: node + linkType: hard + "makeerror@npm:1.0.12": version: 1.0.12 resolution: "makeerror@npm:1.0.12" @@ -21593,6 +22010,13 @@ __metadata: languageName: node linkType: hard +"map-cache@npm:^0.2.0": + version: 0.2.2 + resolution: "map-cache@npm:0.2.2" + checksum: 10/3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 + languageName: node + linkType: hard + "map-obj@npm:^1.0.0": version: 1.0.1 resolution: "map-obj@npm:1.0.1" @@ -21858,6 +22282,13 @@ __metadata: languageName: node linkType: hard +"mimic-function@npm:^5.0.0": + version: 5.0.1 + resolution: "mimic-function@npm:5.0.1" + checksum: 10/eb5893c99e902ccebbc267c6c6b83092966af84682957f79313311edb95e8bb5f39fb048d77132b700474d1c86d90ccc211e99bae0935447a4834eb4c882982c + languageName: node + linkType: hard + "min-indent@npm:^1.0.0, min-indent@npm:^1.0.1": version: 1.0.1 resolution: "min-indent@npm:1.0.1" @@ -22127,6 +22558,15 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10/16fd79c28645759505914561e249b9a1f5fe3362279ad95487a4501e4467abeb714fd35b95307326b8fd03f3c7719065ef11a6f97b7285d7888306d1bd2232ba + languageName: node + linkType: hard + "mktemp@npm:~0.4.0": version: 0.4.0 resolution: "mktemp@npm:0.4.0" @@ -22372,7 +22812,7 @@ __metadata: languageName: node linkType: hard -"mute-stream@npm:^1.0.0": +"mute-stream@npm:1.0.0, mute-stream@npm:^1.0.0": version: 1.0.0 resolution: "mute-stream@npm:1.0.0" checksum: 10/36fc968b0e9c9c63029d4f9dc63911950a3bdf55c9a87f58d3a266289b67180201cade911e7699f8b2fa596b34c9db43dad37649e3f7fdd13c3bb9edb0017ee7 @@ -22437,7 +22877,7 @@ __metadata: languageName: node linkType: hard -"neo-async@npm:^2.6.0, neo-async@npm:^2.6.2": +"neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" checksum: 10/1a7948fea86f2b33ec766bc899c88796a51ba76a4afc9026764aedc6e7cde692a09067031e4a1bf6db4f978ccd99e7f5b6c03fe47ad9865c3d4f99050d67e002 @@ -22633,6 +23073,27 @@ __metadata: languageName: node linkType: hard +"node-plop@npm:^0.32.0": + version: 0.32.0 + resolution: "node-plop@npm:0.32.0" + dependencies: + "@types/inquirer": "npm:^9.0.3" + change-case: "npm:^4.1.2" + del: "npm:^7.1.0" + globby: "npm:^13.2.2" + handlebars: "npm:^4.7.8" + inquirer: "npm:^9.2.10" + isbinaryfile: "npm:^5.0.0" + lodash.get: "npm:^4.4.2" + lower-case: "npm:^2.0.2" + mkdirp: "npm:^3.0.1" + resolve: "npm:^1.22.4" + title-case: "npm:^3.0.3" + upper-case: "npm:^2.0.2" + checksum: 10/e584ecd9090e4ce310af93357e0dcbbb073e528374e020cf796c24e85ee5d2141308c5bb4dca533141f24e94bf5a4e4c6d86621d1322917915ea6f66cc6b3326 + languageName: node + linkType: hard + "node-readfiles@npm:^0.2.0": version: 0.2.0 resolution: "node-readfiles@npm:0.2.0" @@ -23066,6 +23527,18 @@ __metadata: languageName: node linkType: hard +"object.defaults@npm:^1.1.0": + version: 1.1.0 + resolution: "object.defaults@npm:1.1.0" + dependencies: + array-each: "npm:^1.0.1" + array-slice: "npm:^1.0.0" + for-own: "npm:^1.0.0" + isobject: "npm:^3.0.0" + checksum: 10/9b194806eb9b5cf8c956d20e9869b3c7431c85748d761a570b45beb71041119408ca2c3d380fe43d4340019e6d03fab91d60842cb3d7259ceffd9e582cd79fb8 + languageName: node + linkType: hard + "object.entries@npm:^1.1.8": version: 1.1.8 resolution: "object.entries@npm:1.1.8" @@ -23100,6 +23573,16 @@ __metadata: languageName: node linkType: hard +"object.map@npm:^1.0.1": + version: 1.0.1 + resolution: "object.map@npm:1.0.1" + dependencies: + for-own: "npm:^1.0.0" + make-iterator: "npm:^1.0.0" + checksum: 10/c2b945a309f789441fae30e4c0772066b45ad03eb1c0f91b8ae117700c975676652b356f61635fe0b21ae021d98f10a04d2f1c6cf30aef14111154e756b162d7 + languageName: node + linkType: hard + "object.omit@npm:^3.0.0": version: 3.0.0 resolution: "object.omit@npm:3.0.0" @@ -23109,6 +23592,15 @@ __metadata: languageName: node linkType: hard +"object.pick@npm:^1.3.0": + version: 1.3.0 + resolution: "object.pick@npm:1.3.0" + dependencies: + isobject: "npm:^3.0.1" + checksum: 10/92d7226a6b581d0d62694a5632b6a1594c81b3b5a4eb702a7662e0b012db532557067d6f773596c577f75322eba09cdca37ca01ea79b6b29e3e17365f15c615e + languageName: node + linkType: hard + "object.values@npm:^1.1.6, object.values@npm:^1.2.0, object.values@npm:^1.2.1": version: 1.2.1 resolution: "object.values@npm:1.2.1" @@ -23218,6 +23710,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^7.0.0": + version: 7.0.0 + resolution: "onetime@npm:7.0.0" + dependencies: + mimic-function: "npm:^5.0.0" + checksum: 10/eb08d2da9339819e2f9d52cab9caf2557d80e9af8c7d1ae86e1a0fef027d00a88e9f5bd67494d350df360f7c559fbb44e800b32f310fb989c860214eacbb561c + languageName: node + linkType: hard + "open@npm:^10.0.3": version: 10.0.3 resolution: "open@npm:10.0.3" @@ -23322,6 +23823,23 @@ __metadata: languageName: node linkType: hard +"ora@npm:^8.0.0": + version: 8.2.0 + resolution: "ora@npm:8.2.0" + dependencies: + chalk: "npm:^5.3.0" + cli-cursor: "npm:^5.0.0" + cli-spinners: "npm:^2.9.2" + is-interactive: "npm:^2.0.0" + is-unicode-supported: "npm:^2.0.0" + log-symbols: "npm:^6.0.0" + stdin-discarder: "npm:^0.2.2" + string-width: "npm:^7.2.0" + strip-ansi: "npm:^7.1.0" + checksum: 10/cea932fdcb29549cd7b5af81f427760986429cadc752b1dd4bf31bc6821f5ba137e1ef9a18cde7bdfbe5b4e3d3201e76b048765c51a27b15d18c57ac0e0a909a + languageName: node + linkType: hard + "os-tmpdir@npm:~1.0.2": version: 1.0.2 resolution: "os-tmpdir@npm:1.0.2" @@ -23458,6 +23976,15 @@ __metadata: languageName: node linkType: hard +"p-map@npm:^5.5.0": + version: 5.5.0 + resolution: "p-map@npm:5.5.0" + dependencies: + aggregate-error: "npm:^4.0.0" + checksum: 10/089a709d2525208a965b7907cc8e58af950542629b538198fc142c40e7f36b3b492dd6a46a1279515ccab58bb6f047e04593c0ab5ef4539d312adf7f761edf55 + languageName: node + linkType: hard + "p-pipe@npm:3.1.0": version: 3.1.0 resolution: "p-pipe@npm:3.1.0" @@ -23657,6 +24184,17 @@ __metadata: languageName: node linkType: hard +"parse-filepath@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-filepath@npm:1.0.2" + dependencies: + is-absolute: "npm:^1.0.0" + map-cache: "npm:^0.2.0" + path-root: "npm:^0.1.1" + checksum: 10/6794c3f38d3921f0f7cc63fb1fb0c4d04cd463356ad389c8ce6726d3c50793b9005971f4138975a6d7025526058d5e65e9bfe634d0765e84c4e2571152665a69 + languageName: node + linkType: hard + "parse-headers@npm:^2.0.2": version: 2.0.4 resolution: "parse-headers@npm:2.0.4" @@ -23696,6 +24234,13 @@ __metadata: languageName: node linkType: hard +"parse-passwd@npm:^1.0.0": + version: 1.0.0 + resolution: "parse-passwd@npm:1.0.0" + checksum: 10/4e55e0231d58f828a41d0f1da2bf2ff7bcef8f4cb6146e69d16ce499190de58b06199e6bd9b17fbf0d4d8aef9052099cdf8c4f13a6294b1a522e8e958073066e + languageName: node + linkType: hard + "parse-path@npm:^7.0.0": version: 7.0.0 resolution: "parse-path@npm:7.0.0" @@ -23776,6 +24321,16 @@ __metadata: languageName: node linkType: hard +"path-case@npm:^3.0.4": + version: 3.0.4 + resolution: "path-case@npm:3.0.4" + dependencies: + dot-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + checksum: 10/61de0526222629f65038a66f63330dd22d5b54014ded6636283e1d15364da38b3cf29e4433aa3f9d8b0dba407ae2b059c23b0104a34ee789944b1bc1c5c7e06d + languageName: node + linkType: hard + "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -23825,6 +24380,22 @@ __metadata: languageName: node linkType: hard +"path-root-regex@npm:^0.1.0": + version: 0.1.2 + resolution: "path-root-regex@npm:0.1.2" + checksum: 10/dcd75d1f8e93faabe35a58e875b0f636839b3658ff2ad8c289463c40bc1a844debe0dab73c3398ef9dc8f6ec6c319720aff390cf4633763ddcf3cf4b1bbf7e8b + languageName: node + linkType: hard + +"path-root@npm:^0.1.1": + version: 0.1.1 + resolution: "path-root@npm:0.1.1" + dependencies: + path-root-regex: "npm:^0.1.0" + checksum: 10/ff88aebfc1c59ace510cc06703d67692a11530989920427625e52b66a303ca9b3d4059b0b7d0b2a73248d1ad29bcb342b8b786ec00592f3101d38a45fd3b2e08 + languageName: node + linkType: hard + "path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" @@ -24064,6 +24635,24 @@ __metadata: languageName: node linkType: hard +"plop@npm:^4.0.1": + version: 4.0.1 + resolution: "plop@npm:4.0.1" + dependencies: + "@types/liftoff": "npm:^4.0.3" + chalk: "npm:^5.3.0" + interpret: "npm:^3.1.1" + liftoff: "npm:^4.0.0" + minimist: "npm:^1.2.8" + node-plop: "npm:^0.32.0" + ora: "npm:^8.0.0" + v8flags: "npm:^4.0.1" + bin: + plop: bin/plop.js + checksum: 10/cb7f4c2b8fe3b1f3735a0a9ab92a7b1b0aa940293ce85840b2ec55821b62a697e1e29e9d68ff298d23eb5501e965fc707f586a962a4bf213dcf606f2589837a4 + languageName: node + linkType: hard + "pluralize@npm:8.0.0, pluralize@npm:^8.0.0": version: 8.0.0 resolution: "pluralize@npm:8.0.0" @@ -26774,6 +27363,16 @@ __metadata: languageName: node linkType: hard +"resolve-dir@npm:^1.0.0, resolve-dir@npm:^1.0.1": + version: 1.0.1 + resolution: "resolve-dir@npm:1.0.1" + dependencies: + expand-tilde: "npm:^2.0.0" + global-modules: "npm:^1.0.0" + checksum: 10/ef736b8ed60d6645c3b573da17d329bfb50ec4e1d6c5ffd6df49e3497acef9226f9810ea6823b8ece1560e01dcb13f77a9f6180d4f242d00cc9a8f4de909c65c + languageName: node + linkType: hard + "resolve-from@npm:5.0.0, resolve-from@npm:^5.0.0": version: 5.0.0 resolution: "resolve-from@npm:5.0.0" @@ -26896,6 +27495,16 @@ __metadata: languageName: node linkType: hard +"restore-cursor@npm:^5.0.0": + version: 5.1.0 + resolution: "restore-cursor@npm:5.1.0" + dependencies: + onetime: "npm:^7.0.0" + signal-exit: "npm:^4.1.0" + checksum: 10/838dd54e458d89cfbc1a923b343c1b0f170a04100b4ce1733e97531842d7b440463967e521216e8ab6c6f8e89df877acc7b7f4c18ec76e99fb9bf5a60d358d2c + languageName: node + linkType: hard + "ret@npm:^0.2.0": version: 0.2.2 resolution: "ret@npm:0.2.2" @@ -27183,6 +27792,13 @@ __metadata: languageName: node linkType: hard +"run-async@npm:^3.0.0": + version: 3.0.0 + resolution: "run-async@npm:3.0.0" + checksum: 10/97fb8747f7765b77ebcd311d3a33548099336f04c6434e0763039b98c1de0f1b4421000695aff8751f309c0b995d8dfd620c1f1e4c35572da38c101488165305 + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -27199,7 +27815,7 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:7.8.1, rxjs@npm:^7.5.1, rxjs@npm:^7.5.5": +"rxjs@npm:7.8.1": version: 7.8.1 resolution: "rxjs@npm:7.8.1" dependencies: @@ -27208,6 +27824,15 @@ __metadata: languageName: node linkType: hard +"rxjs@npm:^7.2.0, rxjs@npm:^7.5.1, rxjs@npm:^7.5.5, rxjs@npm:^7.8.1": + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10/03dff09191356b2b87d94fbc1e97c4e9eb3c09d4452399dddd451b09c2f1ba8d56925a40af114282d7bc0c6fe7514a2236ca09f903cf70e4bbf156650dddb49d + languageName: node + linkType: hard + "safe-array-concat@npm:^1.1.3": version: 1.1.3 resolution: "safe-array-concat@npm:1.1.3" @@ -27490,6 +28115,17 @@ __metadata: languageName: node linkType: hard +"sentence-case@npm:^3.0.4": + version: 3.0.4 + resolution: "sentence-case@npm:3.0.4" + dependencies: + no-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + upper-case-first: "npm:^2.0.2" + checksum: 10/3cfe6c0143e649132365695706702d7f729f484fa7b25f43435876efe7af2478243eefb052bacbcce10babf9319fd6b5b6bc59b94c80a1c819bcbb40651465d5 + languageName: node + linkType: hard + "serialize-error@npm:^8.1.0": version: 8.1.0 resolution: "serialize-error@npm:8.1.0" @@ -27850,6 +28486,13 @@ __metadata: languageName: node linkType: hard +"slash@npm:^4.0.0": + version: 4.0.0 + resolution: "slash@npm:4.0.0" + checksum: 10/da8e4af73712253acd21b7853b7e0dbba776b786e82b010a5bfc8b5051a1db38ed8aba8e1e8f400dd2c9f373be91eb1c42b66e91abb407ff42b10feece5e1d2d + languageName: node + linkType: hard + "slash@npm:^5.0.0, slash@npm:^5.1.0": version: 5.1.0 resolution: "slash@npm:5.1.0" @@ -28041,6 +28684,16 @@ __metadata: languageName: node linkType: hard +"snake-case@npm:^3.0.4": + version: 3.0.4 + resolution: "snake-case@npm:3.0.4" + dependencies: + dot-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + checksum: 10/0a7a79900bbb36f8aaa922cf111702a3647ac6165736d5dc96d3ef367efc50465cac70c53cd172c382b022dac72ec91710608e5393de71f76d7142e6fd80e8a3 + languageName: node + linkType: hard + "socket.io-adapter@npm:~2.5.2": version: 2.5.5 resolution: "socket.io-adapter@npm:2.5.5" @@ -28498,6 +29151,13 @@ __metadata: languageName: node linkType: hard +"stdin-discarder@npm:^0.2.2": + version: 0.2.2 + resolution: "stdin-discarder@npm:0.2.2" + checksum: 10/642ffd05bd5b100819d6b24a613d83c6e3857c6de74eb02fc51506fa61dc1b0034665163831873868157c4538d71e31762bcf319be86cea04c3aba5336470478 + languageName: node + linkType: hard + "storybook@npm:^8.6.2": version: 8.6.2 resolution: "storybook@npm:8.6.2" @@ -28619,6 +29279,17 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^7.2.0": + version: 7.2.0 + resolution: "string-width@npm:7.2.0" + dependencies: + emoji-regex: "npm:^10.3.0" + get-east-asian-width: "npm:^1.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10/42f9e82f61314904a81393f6ef75b832c39f39761797250de68c041d8ba4df2ef80db49ab6cd3a292923a6f0f409b8c9980d120f7d32c820b4a8a84a2598a295 + languageName: node + linkType: hard + "string.prototype.includes@npm:^2.0.1": version: 2.0.1 resolution: "string.prototype.includes@npm:2.0.1" @@ -28742,7 +29413,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^7.0.1": +"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": version: 7.1.0 resolution: "strip-ansi@npm:7.1.0" dependencies: @@ -29400,6 +30071,15 @@ __metadata: languageName: node linkType: hard +"title-case@npm:^3.0.3": + version: 3.0.3 + resolution: "title-case@npm:3.0.3" + dependencies: + tslib: "npm:^2.0.3" + checksum: 10/369fe90f650a66205c34ebef63a69c6d1fd411ae3aad23db0aae165ddb881af50e67c6ea6800d605bc2b9e0ab5f22dada58fe97a1a7e7f3131ee0ef176cc65ec + languageName: node + linkType: hard + "tlds@npm:1.252.0": version: 1.252.0 resolution: "tlds@npm:1.252.0" @@ -30084,6 +30764,13 @@ __metadata: languageName: node linkType: hard +"unc-path-regex@npm:^0.1.2": + version: 0.1.2 + resolution: "unc-path-regex@npm:0.1.2" + checksum: 10/a05fa2006bf4606051c10fc7968f08ce7b28fa646befafa282813aeb1ac1a56f65cb1b577ca7851af2726198d59475bb49b11776036257b843eaacee2860a4ec + languageName: node + linkType: hard + "underscore.string@npm:~3.3.4": version: 3.3.6 resolution: "underscore.string@npm:3.3.6" @@ -30290,6 +30977,24 @@ __metadata: languageName: node linkType: hard +"upper-case-first@npm:^2.0.2": + version: 2.0.2 + resolution: "upper-case-first@npm:2.0.2" + dependencies: + tslib: "npm:^2.0.3" + checksum: 10/4487db4701effe3b54ced4b3e4aa4d9ab06c548f97244d04aafb642eedf96a76d5a03cf5f38f10f415531d5792d1ac6e1b50f2a76984dc6964ad530f12876409 + languageName: node + linkType: hard + +"upper-case@npm:^2.0.2": + version: 2.0.2 + resolution: "upper-case@npm:2.0.2" + dependencies: + tslib: "npm:^2.0.3" + checksum: 10/508723a2b03ab90cf1d6b7e0397513980fab821cbe79c87341d0e96cedefadf0d85f9d71eac24ab23f526a041d585a575cfca120a9f920e44eb4f8a7cf89121c + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -30469,6 +31174,13 @@ __metadata: languageName: node linkType: hard +"v8flags@npm:^4.0.1": + version: 4.0.1 + resolution: "v8flags@npm:4.0.1" + checksum: 10/69863ede75ff79579654951c78724c084bc337d0ebe1d9bffc6924f3f2bd0b40a9eb4c568fc795201d5eb72311b77e5d75a7e1544faa12355412360dc37d76e2 + languageName: node + linkType: hard + "validate-npm-package-license@npm:3.0.4, validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" @@ -31213,7 +31925,7 @@ __metadata: languageName: node linkType: hard -"which@npm:^1.3.1": +"which@npm:^1.2.14, which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" dependencies: