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: