@strapi/strapi 5.19.0 → 5.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,QAAQ,EAAE,aAAa,EA+BnC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,QAAQ,EAAE,aAAa,EAgCnC,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface CommandOptions {
2
+ output?: string;
3
+ }
4
+ /**
5
+ * @experimental
6
+ */
7
+ declare const action: (options: CommandOptions) => Promise<void>;
8
+ export { action };
9
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/openapi/generate.ts"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAaD;;GAEG;AACH,QAAA,MAAM,MAAM,YAAmB,cAAc,kBAY5C,CAAC;AA2CF,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { StrapiCommand } from '../../types';
2
+ /**
3
+ * `$ strapi openapi`
4
+ */
5
+ declare const command: StrapiCommand;
6
+ export { command };
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/openapi/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD;;GAEG;AACH,QAAA,MAAM,OAAO,EAAE,aAad,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "5.19.0";
3
+ var version = "5.20.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.js.map
@@ -1,4 +1,4 @@
1
- var version = "5.19.0";
1
+ var version = "5.20.0";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.mjs.map
@@ -24,6 +24,7 @@ var generate = require('./generate.js');
24
24
  var report = require('./report.js');
25
25
  var start = require('./start.js');
26
26
  var version = require('./version.js');
27
+ var index = require('./openapi/index.js');
27
28
  var command = require('./export/command.js');
28
29
  var command$1 = require('./import/command.js');
29
30
  var command$2 = require('./transfer/command.js');
@@ -55,6 +56,7 @@ const commands = [
55
56
  command,
56
57
  command$1,
57
58
  command$2,
59
+ index.command,
58
60
  /**
59
61
  * Cloud
60
62
  */ cloudCli.buildStrapiCloudCommands
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/cli/commands/index.ts"],"sourcesContent":["import { buildStrapiCloudCommands as cloudCommands } from '@strapi/cloud-cli';\n\nimport { command as createAdminUser } from './admin/create-user';\nimport { command as resetAdminUserPassword } from './admin/reset-user-password';\nimport { command as listComponents } from './components/list';\nimport { command as configurationDump } from './configuration/dump';\nimport { command as configurationRestore } from './configuration/restore';\nimport { command as listContentTypes } from './content-types/list';\nimport { command as listControllers } from './controllers/list';\nimport { command as listHooks } from './hooks/list';\nimport { command as listMiddlewares } from './middlewares/list';\nimport { command as listPolicies } from './policies/list';\nimport { command as listRoutes } from './routes/list';\nimport { command as listServices } from './services/list';\nimport { command as disableTelemetry } from './telemetry/disable';\nimport { command as enableTelemetry } from './telemetry/enable';\nimport { command as generateTemplates } from './templates/generate';\nimport { command as generateTsTypes } from './ts/generate-types';\nimport { command as buildCommand } from './build';\nimport { command as consoleCommand } from './console';\nimport { command as developCommand } from './develop';\nimport { command as generateCommand } from './generate';\nimport { command as reportCommand } from './report';\nimport { command as startCommand } from './start';\nimport { command as versionCommand } from './version';\nimport exportCommand from './export/command';\nimport importCommand from './import/command';\nimport transferCommand from './transfer/command';\n\nimport { StrapiCommand } from '../types';\n\nexport const commands: StrapiCommand[] = [\n createAdminUser,\n resetAdminUserPassword,\n listComponents,\n configurationDump,\n configurationRestore,\n consoleCommand,\n listContentTypes,\n listControllers,\n generateCommand,\n listHooks,\n listMiddlewares,\n listPolicies,\n reportCommand,\n listRoutes,\n listServices,\n startCommand,\n disableTelemetry,\n enableTelemetry,\n generateTemplates,\n generateTsTypes,\n versionCommand,\n buildCommand,\n developCommand,\n exportCommand,\n importCommand,\n transferCommand,\n /**\n * Cloud\n */\n cloudCommands,\n];\n"],"names":["commands","createAdminUser","resetAdminUserPassword","listComponents","configurationDump","configurationRestore","consoleCommand","listContentTypes","listControllers","generateCommand","listHooks","listMiddlewares","listPolicies","reportCommand","listRoutes","listServices","startCommand","disableTelemetry","enableTelemetry","generateTemplates","generateTsTypes","versionCommand","buildCommand","developCommand","exportCommand","importCommand","transferCommand","cloudCommands"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA+BaA,QAA4B,GAAA;AACvCC,IAAAA,kBAAAA;AACAC,IAAAA,yBAAAA;AACAC,IAAAA,YAAAA;AACAC,IAAAA,YAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,gBAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,aAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,kBAAAA;AACAC,IAAAA,qBAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA,aAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA,OAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACA;;MAGAC;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/cli/commands/index.ts"],"sourcesContent":["import { buildStrapiCloudCommands as cloudCommands } from '@strapi/cloud-cli';\n\nimport { command as createAdminUser } from './admin/create-user';\nimport { command as resetAdminUserPassword } from './admin/reset-user-password';\nimport { command as listComponents } from './components/list';\nimport { command as configurationDump } from './configuration/dump';\nimport { command as configurationRestore } from './configuration/restore';\nimport { command as listContentTypes } from './content-types/list';\nimport { command as listControllers } from './controllers/list';\nimport { command as listHooks } from './hooks/list';\nimport { command as listMiddlewares } from './middlewares/list';\nimport { command as listPolicies } from './policies/list';\nimport { command as listRoutes } from './routes/list';\nimport { command as listServices } from './services/list';\nimport { command as disableTelemetry } from './telemetry/disable';\nimport { command as enableTelemetry } from './telemetry/enable';\nimport { command as generateTemplates } from './templates/generate';\nimport { command as generateTsTypes } from './ts/generate-types';\nimport { command as buildCommand } from './build';\nimport { command as consoleCommand } from './console';\nimport { command as developCommand } from './develop';\nimport { command as generateCommand } from './generate';\nimport { command as reportCommand } from './report';\nimport { command as startCommand } from './start';\nimport { command as versionCommand } from './version';\nimport { command as openAPICommand } from './openapi';\nimport exportCommand from './export/command';\nimport importCommand from './import/command';\nimport transferCommand from './transfer/command';\n\nimport { StrapiCommand } from '../types';\n\nexport const commands: StrapiCommand[] = [\n createAdminUser,\n resetAdminUserPassword,\n listComponents,\n configurationDump,\n configurationRestore,\n consoleCommand,\n listContentTypes,\n listControllers,\n generateCommand,\n listHooks,\n listMiddlewares,\n listPolicies,\n reportCommand,\n listRoutes,\n listServices,\n startCommand,\n disableTelemetry,\n enableTelemetry,\n generateTemplates,\n generateTsTypes,\n versionCommand,\n buildCommand,\n developCommand,\n exportCommand,\n importCommand,\n transferCommand,\n openAPICommand,\n /**\n * Cloud\n */\n cloudCommands,\n];\n"],"names":["commands","createAdminUser","resetAdminUserPassword","listComponents","configurationDump","configurationRestore","consoleCommand","listContentTypes","listControllers","generateCommand","listHooks","listMiddlewares","listPolicies","reportCommand","listRoutes","listServices","startCommand","disableTelemetry","enableTelemetry","generateTemplates","generateTsTypes","versionCommand","buildCommand","developCommand","exportCommand","importCommand","transferCommand","openAPICommand","cloudCommands"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgCaA,QAA4B,GAAA;AACvCC,IAAAA,kBAAAA;AACAC,IAAAA,yBAAAA;AACAC,IAAAA,YAAAA;AACAC,IAAAA,YAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,gBAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,aAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA,kBAAAA;AACAC,IAAAA,qBAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA,aAAAA;AACAC,IAAAA,eAAAA;AACAC,IAAAA,OAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,aAAAA;AACA;;MAGAC;;;;;"}
@@ -22,6 +22,7 @@ import { command as command$8 } from './generate.mjs';
22
22
  import { command as command$c } from './report.mjs';
23
23
  import { command as command$f } from './start.mjs';
24
24
  import { command as command$k } from './version.mjs';
25
+ import { command as command$q } from './openapi/index.mjs';
25
26
  import command$n from './export/command.mjs';
26
27
  import command$o from './import/command.mjs';
27
28
  import command$p from './transfer/command.mjs';
@@ -53,6 +54,7 @@ const commands = [
53
54
  command$n,
54
55
  command$o,
55
56
  command$p,
57
+ command$q,
56
58
  /**
57
59
  * Cloud
58
60
  */ buildStrapiCloudCommands
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../src/cli/commands/index.ts"],"sourcesContent":["import { buildStrapiCloudCommands as cloudCommands } from '@strapi/cloud-cli';\n\nimport { command as createAdminUser } from './admin/create-user';\nimport { command as resetAdminUserPassword } from './admin/reset-user-password';\nimport { command as listComponents } from './components/list';\nimport { command as configurationDump } from './configuration/dump';\nimport { command as configurationRestore } from './configuration/restore';\nimport { command as listContentTypes } from './content-types/list';\nimport { command as listControllers } from './controllers/list';\nimport { command as listHooks } from './hooks/list';\nimport { command as listMiddlewares } from './middlewares/list';\nimport { command as listPolicies } from './policies/list';\nimport { command as listRoutes } from './routes/list';\nimport { command as listServices } from './services/list';\nimport { command as disableTelemetry } from './telemetry/disable';\nimport { command as enableTelemetry } from './telemetry/enable';\nimport { command as generateTemplates } from './templates/generate';\nimport { command as generateTsTypes } from './ts/generate-types';\nimport { command as buildCommand } from './build';\nimport { command as consoleCommand } from './console';\nimport { command as developCommand } from './develop';\nimport { command as generateCommand } from './generate';\nimport { command as reportCommand } from './report';\nimport { command as startCommand } from './start';\nimport { command as versionCommand } from './version';\nimport exportCommand from './export/command';\nimport importCommand from './import/command';\nimport transferCommand from './transfer/command';\n\nimport { StrapiCommand } from '../types';\n\nexport const commands: StrapiCommand[] = [\n createAdminUser,\n resetAdminUserPassword,\n listComponents,\n configurationDump,\n configurationRestore,\n consoleCommand,\n listContentTypes,\n listControllers,\n generateCommand,\n listHooks,\n listMiddlewares,\n listPolicies,\n reportCommand,\n listRoutes,\n listServices,\n startCommand,\n disableTelemetry,\n enableTelemetry,\n generateTemplates,\n generateTsTypes,\n versionCommand,\n buildCommand,\n developCommand,\n exportCommand,\n importCommand,\n transferCommand,\n /**\n * Cloud\n */\n cloudCommands,\n];\n"],"names":["commands","createAdminUser","resetAdminUserPassword","listComponents","configurationDump","configurationRestore","consoleCommand","listContentTypes","listControllers","generateCommand","listHooks","listMiddlewares","listPolicies","reportCommand","listRoutes","listServices","startCommand","disableTelemetry","enableTelemetry","generateTemplates","generateTsTypes","versionCommand","buildCommand","developCommand","exportCommand","importCommand","transferCommand","cloudCommands"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;MA+BaA,QAA4B,GAAA;AACvCC,IAAAA,OAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACA;;MAGAC;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/cli/commands/index.ts"],"sourcesContent":["import { buildStrapiCloudCommands as cloudCommands } from '@strapi/cloud-cli';\n\nimport { command as createAdminUser } from './admin/create-user';\nimport { command as resetAdminUserPassword } from './admin/reset-user-password';\nimport { command as listComponents } from './components/list';\nimport { command as configurationDump } from './configuration/dump';\nimport { command as configurationRestore } from './configuration/restore';\nimport { command as listContentTypes } from './content-types/list';\nimport { command as listControllers } from './controllers/list';\nimport { command as listHooks } from './hooks/list';\nimport { command as listMiddlewares } from './middlewares/list';\nimport { command as listPolicies } from './policies/list';\nimport { command as listRoutes } from './routes/list';\nimport { command as listServices } from './services/list';\nimport { command as disableTelemetry } from './telemetry/disable';\nimport { command as enableTelemetry } from './telemetry/enable';\nimport { command as generateTemplates } from './templates/generate';\nimport { command as generateTsTypes } from './ts/generate-types';\nimport { command as buildCommand } from './build';\nimport { command as consoleCommand } from './console';\nimport { command as developCommand } from './develop';\nimport { command as generateCommand } from './generate';\nimport { command as reportCommand } from './report';\nimport { command as startCommand } from './start';\nimport { command as versionCommand } from './version';\nimport { command as openAPICommand } from './openapi';\nimport exportCommand from './export/command';\nimport importCommand from './import/command';\nimport transferCommand from './transfer/command';\n\nimport { StrapiCommand } from '../types';\n\nexport const commands: StrapiCommand[] = [\n createAdminUser,\n resetAdminUserPassword,\n listComponents,\n configurationDump,\n configurationRestore,\n consoleCommand,\n listContentTypes,\n listControllers,\n generateCommand,\n listHooks,\n listMiddlewares,\n listPolicies,\n reportCommand,\n listRoutes,\n listServices,\n startCommand,\n disableTelemetry,\n enableTelemetry,\n generateTemplates,\n generateTsTypes,\n versionCommand,\n buildCommand,\n developCommand,\n exportCommand,\n importCommand,\n transferCommand,\n openAPICommand,\n /**\n * Cloud\n */\n cloudCommands,\n];\n"],"names":["commands","createAdminUser","resetAdminUserPassword","listComponents","configurationDump","configurationRestore","consoleCommand","listContentTypes","listControllers","generateCommand","listHooks","listMiddlewares","listPolicies","reportCommand","listRoutes","listServices","startCommand","disableTelemetry","enableTelemetry","generateTemplates","generateTsTypes","versionCommand","buildCommand","developCommand","exportCommand","importCommand","transferCommand","openAPICommand","cloudCommands"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgCaA,QAA4B,GAAA;AACvCC,IAAAA,OAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACAC,IAAAA,SAAAA;AACA;;MAGAC;;;;;"}
@@ -0,0 +1,76 @@
1
+ 'use strict';
2
+
3
+ var core = require('@strapi/core');
4
+ var openapi = require('@strapi/openapi');
5
+ var chalk = require('chalk');
6
+ var fse = require('fs-extra');
7
+ var path = require('path');
8
+
9
+ function _interopNamespaceDefault(e) {
10
+ var n = Object.create(null);
11
+ if (e) {
12
+ Object.keys(e).forEach(function (k) {
13
+ if (k !== 'default') {
14
+ var d = Object.getOwnPropertyDescriptor(e, k);
15
+ Object.defineProperty(n, k, d.get ? d : {
16
+ enumerable: true,
17
+ get: function () { return e[k]; }
18
+ });
19
+ }
20
+ });
21
+ }
22
+ n.default = e;
23
+ return Object.freeze(n);
24
+ }
25
+
26
+ var openapi__namespace = /*#__PURE__*/_interopNamespaceDefault(openapi);
27
+
28
+ const DEFAULT_OUTPUT = path.join(process.cwd(), 'specification.json');
29
+ const EXPERIMENTAL_MSG = chalk.yellow(`
30
+ ⚠️ The OpenAPI generation feature is currently experimental.
31
+ Its behavior and output might change in future releases without following semver.
32
+ Please report any issues you encounter on https://github.com/strapi/strapi/issues/new?template=BUG_REPORT.yml.
33
+ `);
34
+ /**
35
+ * @experimental
36
+ */ const action = async (options)=>{
37
+ console.warn(EXPERIMENTAL_MSG);
38
+ const filePath = options.output ?? DEFAULT_OUTPUT;
39
+ const app = await createStrapiApp();
40
+ const { document, durationMs } = openapi__namespace.generate(app, {
41
+ type: 'content-api'
42
+ });
43
+ writeDocumentToFile(document, filePath);
44
+ summarize(app, durationMs, filePath);
45
+ await teardownStrapiApp(app);
46
+ };
47
+ const createStrapiApp = async ()=>{
48
+ const appContext = await core.compileStrapi();
49
+ const app = core.createStrapi(appContext);
50
+ // Make sure to not log Strapi debug info
51
+ app.log.level = 'error';
52
+ // Load internals
53
+ await app.load();
54
+ // Make sure the routes are mounted before generating the specification
55
+ app.server.mount();
56
+ return app;
57
+ };
58
+ const writeDocumentToFile = (document, filePath)=>{
59
+ fse.outputFileSync(filePath, JSON.stringify(document, null, 2));
60
+ };
61
+ const teardownStrapiApp = async (app)=>{
62
+ await app.destroy();
63
+ };
64
+ const summarize = (app, durationMs, filePath)=>{
65
+ const cwd = process.cwd();
66
+ const relativeFilePath = path.relative(cwd, filePath);
67
+ const { name, version } = app.config.get('info');
68
+ const fName = chalk.cyan(name);
69
+ const fVersion = chalk.cyan(`v${version}`);
70
+ const fFile = chalk.magenta(relativeFilePath);
71
+ const fTime = chalk.green(`${durationMs}ms`);
72
+ console.log(chalk.bold(`Generated an OpenAPI specification for "${fName} ${fVersion}" at ${fFile} in ${fTime}`));
73
+ };
74
+
75
+ exports.action = action;
76
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sources":["../../../../../src/cli/commands/openapi/generate.ts"],"sourcesContent":["import { compileStrapi, createStrapi } from '@strapi/core';\nimport * as openapi from '@strapi/openapi';\n\nimport type { Core } from '@strapi/types';\n\nimport chalk from 'chalk';\nimport fse from 'fs-extra';\nimport path from 'path';\n\nconst DEFAULT_OUTPUT = path.join(process.cwd(), 'specification.json');\n\ninterface CommandOptions {\n output?: string;\n}\n\ninterface StrapiInfoConfig {\n name: string;\n version: string;\n}\n\nconst EXPERIMENTAL_MSG = chalk.yellow(`\n⚠️ The OpenAPI generation feature is currently experimental.\n Its behavior and output might change in future releases without following semver.\n Please report any issues you encounter on https://github.com/strapi/strapi/issues/new?template=BUG_REPORT.yml.\n`);\n\n/**\n * @experimental\n */\nconst action = async (options: CommandOptions) => {\n console.warn(EXPERIMENTAL_MSG);\n\n const filePath = options.output ?? DEFAULT_OUTPUT;\n const app = await createStrapiApp();\n\n const { document, durationMs } = openapi.generate(app, { type: 'content-api' });\n\n writeDocumentToFile(document, filePath);\n summarize(app, durationMs, filePath);\n\n await teardownStrapiApp(app);\n};\n\nconst createStrapiApp = async (): Promise<Core.Strapi> => {\n const appContext = await compileStrapi();\n const app = createStrapi(appContext);\n\n // Make sure to not log Strapi debug info\n app.log.level = 'error';\n\n // Load internals\n await app.load();\n\n // Make sure the routes are mounted before generating the specification\n app.server.mount();\n\n return app;\n};\n\nconst writeDocumentToFile = (document: unknown, filePath: string): void => {\n fse.outputFileSync(filePath, JSON.stringify(document, null, 2));\n};\n\nconst teardownStrapiApp = async (app: Core.Strapi) => {\n await app.destroy();\n};\n\nconst summarize = (app: Core.Strapi, durationMs: number, filePath: string): void => {\n const cwd = process.cwd();\n const relativeFilePath = path.relative(cwd, filePath);\n const { name, version } = app.config.get<StrapiInfoConfig>('info');\n\n const fName = chalk.cyan(name);\n const fVersion = chalk.cyan(`v${version}`);\n const fFile = chalk.magenta(relativeFilePath);\n const fTime = chalk.green(`${durationMs}ms`);\n\n console.log(\n chalk.bold(\n `Generated an OpenAPI specification for \"${fName} ${fVersion}\" at ${fFile} in ${fTime}`\n )\n );\n};\n\nexport { action };\n"],"names":["DEFAULT_OUTPUT","path","join","process","cwd","EXPERIMENTAL_MSG","chalk","yellow","action","options","console","warn","filePath","output","app","createStrapiApp","document","durationMs","openapi","generate","type","writeDocumentToFile","summarize","teardownStrapiApp","appContext","compileStrapi","createStrapi","log","level","load","server","mount","fse","outputFileSync","JSON","stringify","destroy","relativeFilePath","relative","name","version","config","get","fName","cyan","fVersion","fFile","magenta","fTime","green","bold"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,MAAMA,iBAAiBC,IAAKC,CAAAA,IAAI,CAACC,OAAAA,CAAQC,GAAG,EAAI,EAAA,oBAAA,CAAA;AAWhD,MAAMC,gBAAmBC,GAAAA,KAAAA,CAAMC,MAAM,CAAC;;;;AAItC,CAAC,CAAA;AAED;;IAGA,MAAMC,SAAS,OAAOC,OAAAA,GAAAA;AACpBC,IAAAA,OAAAA,CAAQC,IAAI,CAACN,gBAAAA,CAAAA;IAEb,MAAMO,QAAAA,GAAWH,OAAQI,CAAAA,MAAM,IAAIb,cAAAA;AACnC,IAAA,MAAMc,MAAM,MAAMC,eAAAA,EAAAA;IAElB,MAAM,EAAEC,QAAQ,EAAEC,UAAU,EAAE,GAAGC,kBAAAA,CAAQC,QAAQ,CAACL,GAAK,EAAA;QAAEM,IAAM,EAAA;AAAc,KAAA,CAAA;AAE7EC,IAAAA,mBAAAA,CAAoBL,QAAUJ,EAAAA,QAAAA,CAAAA;AAC9BU,IAAAA,SAAAA,CAAUR,KAAKG,UAAYL,EAAAA,QAAAA,CAAAA;AAE3B,IAAA,MAAMW,iBAAkBT,CAAAA,GAAAA,CAAAA;AAC1B;AAEA,MAAMC,eAAkB,GAAA,UAAA;AACtB,IAAA,MAAMS,aAAa,MAAMC,kBAAAA,EAAAA;AACzB,IAAA,MAAMX,MAAMY,iBAAaF,CAAAA,UAAAA,CAAAA;;IAGzBV,GAAIa,CAAAA,GAAG,CAACC,KAAK,GAAG,OAAA;;AAGhB,IAAA,MAAMd,IAAIe,IAAI,EAAA;;IAGdf,GAAIgB,CAAAA,MAAM,CAACC,KAAK,EAAA;IAEhB,OAAOjB,GAAAA;AACT,CAAA;AAEA,MAAMO,mBAAAA,GAAsB,CAACL,QAAmBJ,EAAAA,QAAAA,GAAAA;AAC9CoB,IAAAA,GAAAA,CAAIC,cAAc,CAACrB,QAAAA,EAAUsB,KAAKC,SAAS,CAACnB,UAAU,IAAM,EAAA,CAAA,CAAA,CAAA;AAC9D,CAAA;AAEA,MAAMO,oBAAoB,OAAOT,GAAAA,GAAAA;AAC/B,IAAA,MAAMA,IAAIsB,OAAO,EAAA;AACnB,CAAA;AAEA,MAAMd,SAAAA,GAAY,CAACR,GAAAA,EAAkBG,UAAoBL,EAAAA,QAAAA,GAAAA;IACvD,MAAMR,GAAAA,GAAMD,QAAQC,GAAG,EAAA;AACvB,IAAA,MAAMiC,gBAAmBpC,GAAAA,IAAAA,CAAKqC,QAAQ,CAAClC,GAAKQ,EAAAA,QAAAA,CAAAA;IAC5C,MAAM,EAAE2B,IAAI,EAAEC,OAAO,EAAE,GAAG1B,GAAI2B,CAAAA,MAAM,CAACC,GAAG,CAAmB,MAAA,CAAA;IAE3D,MAAMC,KAAAA,GAAQrC,KAAMsC,CAAAA,IAAI,CAACL,IAAAA,CAAAA;IACzB,MAAMM,QAAAA,GAAWvC,MAAMsC,IAAI,CAAC,CAAC,CAAC,EAAEJ,QAAQ,CAAC,CAAA;IACzC,MAAMM,KAAAA,GAAQxC,KAAMyC,CAAAA,OAAO,CAACV,gBAAAA,CAAAA;IAC5B,MAAMW,KAAAA,GAAQ1C,MAAM2C,KAAK,CAAC,CAAC,EAAEhC,UAAAA,CAAW,EAAE,CAAC,CAAA;AAE3CP,IAAAA,OAAAA,CAAQiB,GAAG,CACTrB,KAAAA,CAAM4C,IAAI,CACR,CAAC,wCAAwC,EAAEP,KAAAA,CAAM,CAAC,EAAEE,SAAS,KAAK,EAAEC,MAAM,IAAI,EAAEE,MAAM,CAAC,CAAA,CAAA;AAG7F,CAAA;;;;"}
@@ -0,0 +1,55 @@
1
+ import { compileStrapi, createStrapi } from '@strapi/core';
2
+ import * as openapi from '@strapi/openapi';
3
+ import chalk from 'chalk';
4
+ import fse from 'fs-extra';
5
+ import path from 'path';
6
+
7
+ const DEFAULT_OUTPUT = path.join(process.cwd(), 'specification.json');
8
+ const EXPERIMENTAL_MSG = chalk.yellow(`
9
+ ⚠️ The OpenAPI generation feature is currently experimental.
10
+ Its behavior and output might change in future releases without following semver.
11
+ Please report any issues you encounter on https://github.com/strapi/strapi/issues/new?template=BUG_REPORT.yml.
12
+ `);
13
+ /**
14
+ * @experimental
15
+ */ const action = async (options)=>{
16
+ console.warn(EXPERIMENTAL_MSG);
17
+ const filePath = options.output ?? DEFAULT_OUTPUT;
18
+ const app = await createStrapiApp();
19
+ const { document, durationMs } = openapi.generate(app, {
20
+ type: 'content-api'
21
+ });
22
+ writeDocumentToFile(document, filePath);
23
+ summarize(app, durationMs, filePath);
24
+ await teardownStrapiApp(app);
25
+ };
26
+ const createStrapiApp = async ()=>{
27
+ const appContext = await compileStrapi();
28
+ const app = createStrapi(appContext);
29
+ // Make sure to not log Strapi debug info
30
+ app.log.level = 'error';
31
+ // Load internals
32
+ await app.load();
33
+ // Make sure the routes are mounted before generating the specification
34
+ app.server.mount();
35
+ return app;
36
+ };
37
+ const writeDocumentToFile = (document, filePath)=>{
38
+ fse.outputFileSync(filePath, JSON.stringify(document, null, 2));
39
+ };
40
+ const teardownStrapiApp = async (app)=>{
41
+ await app.destroy();
42
+ };
43
+ const summarize = (app, durationMs, filePath)=>{
44
+ const cwd = process.cwd();
45
+ const relativeFilePath = path.relative(cwd, filePath);
46
+ const { name, version } = app.config.get('info');
47
+ const fName = chalk.cyan(name);
48
+ const fVersion = chalk.cyan(`v${version}`);
49
+ const fFile = chalk.magenta(relativeFilePath);
50
+ const fTime = chalk.green(`${durationMs}ms`);
51
+ console.log(chalk.bold(`Generated an OpenAPI specification for "${fName} ${fVersion}" at ${fFile} in ${fTime}`));
52
+ };
53
+
54
+ export { action };
55
+ //# sourceMappingURL=generate.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.mjs","sources":["../../../../../src/cli/commands/openapi/generate.ts"],"sourcesContent":["import { compileStrapi, createStrapi } from '@strapi/core';\nimport * as openapi from '@strapi/openapi';\n\nimport type { Core } from '@strapi/types';\n\nimport chalk from 'chalk';\nimport fse from 'fs-extra';\nimport path from 'path';\n\nconst DEFAULT_OUTPUT = path.join(process.cwd(), 'specification.json');\n\ninterface CommandOptions {\n output?: string;\n}\n\ninterface StrapiInfoConfig {\n name: string;\n version: string;\n}\n\nconst EXPERIMENTAL_MSG = chalk.yellow(`\n⚠️ The OpenAPI generation feature is currently experimental.\n Its behavior and output might change in future releases without following semver.\n Please report any issues you encounter on https://github.com/strapi/strapi/issues/new?template=BUG_REPORT.yml.\n`);\n\n/**\n * @experimental\n */\nconst action = async (options: CommandOptions) => {\n console.warn(EXPERIMENTAL_MSG);\n\n const filePath = options.output ?? DEFAULT_OUTPUT;\n const app = await createStrapiApp();\n\n const { document, durationMs } = openapi.generate(app, { type: 'content-api' });\n\n writeDocumentToFile(document, filePath);\n summarize(app, durationMs, filePath);\n\n await teardownStrapiApp(app);\n};\n\nconst createStrapiApp = async (): Promise<Core.Strapi> => {\n const appContext = await compileStrapi();\n const app = createStrapi(appContext);\n\n // Make sure to not log Strapi debug info\n app.log.level = 'error';\n\n // Load internals\n await app.load();\n\n // Make sure the routes are mounted before generating the specification\n app.server.mount();\n\n return app;\n};\n\nconst writeDocumentToFile = (document: unknown, filePath: string): void => {\n fse.outputFileSync(filePath, JSON.stringify(document, null, 2));\n};\n\nconst teardownStrapiApp = async (app: Core.Strapi) => {\n await app.destroy();\n};\n\nconst summarize = (app: Core.Strapi, durationMs: number, filePath: string): void => {\n const cwd = process.cwd();\n const relativeFilePath = path.relative(cwd, filePath);\n const { name, version } = app.config.get<StrapiInfoConfig>('info');\n\n const fName = chalk.cyan(name);\n const fVersion = chalk.cyan(`v${version}`);\n const fFile = chalk.magenta(relativeFilePath);\n const fTime = chalk.green(`${durationMs}ms`);\n\n console.log(\n chalk.bold(\n `Generated an OpenAPI specification for \"${fName} ${fVersion}\" at ${fFile} in ${fTime}`\n )\n );\n};\n\nexport { action };\n"],"names":["DEFAULT_OUTPUT","path","join","process","cwd","EXPERIMENTAL_MSG","chalk","yellow","action","options","console","warn","filePath","output","app","createStrapiApp","document","durationMs","openapi","generate","type","writeDocumentToFile","summarize","teardownStrapiApp","appContext","compileStrapi","createStrapi","log","level","load","server","mount","fse","outputFileSync","JSON","stringify","destroy","relativeFilePath","relative","name","version","config","get","fName","cyan","fVersion","fFile","magenta","fTime","green","bold"],"mappings":";;;;;;AASA,MAAMA,iBAAiBC,IAAKC,CAAAA,IAAI,CAACC,OAAAA,CAAQC,GAAG,EAAI,EAAA,oBAAA,CAAA;AAWhD,MAAMC,gBAAmBC,GAAAA,KAAAA,CAAMC,MAAM,CAAC;;;;AAItC,CAAC,CAAA;AAED;;IAGA,MAAMC,SAAS,OAAOC,OAAAA,GAAAA;AACpBC,IAAAA,OAAAA,CAAQC,IAAI,CAACN,gBAAAA,CAAAA;IAEb,MAAMO,QAAAA,GAAWH,OAAQI,CAAAA,MAAM,IAAIb,cAAAA;AACnC,IAAA,MAAMc,MAAM,MAAMC,eAAAA,EAAAA;IAElB,MAAM,EAAEC,QAAQ,EAAEC,UAAU,EAAE,GAAGC,OAAAA,CAAQC,QAAQ,CAACL,GAAK,EAAA;QAAEM,IAAM,EAAA;AAAc,KAAA,CAAA;AAE7EC,IAAAA,mBAAAA,CAAoBL,QAAUJ,EAAAA,QAAAA,CAAAA;AAC9BU,IAAAA,SAAAA,CAAUR,KAAKG,UAAYL,EAAAA,QAAAA,CAAAA;AAE3B,IAAA,MAAMW,iBAAkBT,CAAAA,GAAAA,CAAAA;AAC1B;AAEA,MAAMC,eAAkB,GAAA,UAAA;AACtB,IAAA,MAAMS,aAAa,MAAMC,aAAAA,EAAAA;AACzB,IAAA,MAAMX,MAAMY,YAAaF,CAAAA,UAAAA,CAAAA;;IAGzBV,GAAIa,CAAAA,GAAG,CAACC,KAAK,GAAG,OAAA;;AAGhB,IAAA,MAAMd,IAAIe,IAAI,EAAA;;IAGdf,GAAIgB,CAAAA,MAAM,CAACC,KAAK,EAAA;IAEhB,OAAOjB,GAAAA;AACT,CAAA;AAEA,MAAMO,mBAAAA,GAAsB,CAACL,QAAmBJ,EAAAA,QAAAA,GAAAA;AAC9CoB,IAAAA,GAAAA,CAAIC,cAAc,CAACrB,QAAAA,EAAUsB,KAAKC,SAAS,CAACnB,UAAU,IAAM,EAAA,CAAA,CAAA,CAAA;AAC9D,CAAA;AAEA,MAAMO,oBAAoB,OAAOT,GAAAA,GAAAA;AAC/B,IAAA,MAAMA,IAAIsB,OAAO,EAAA;AACnB,CAAA;AAEA,MAAMd,SAAAA,GAAY,CAACR,GAAAA,EAAkBG,UAAoBL,EAAAA,QAAAA,GAAAA;IACvD,MAAMR,GAAAA,GAAMD,QAAQC,GAAG,EAAA;AACvB,IAAA,MAAMiC,gBAAmBpC,GAAAA,IAAAA,CAAKqC,QAAQ,CAAClC,GAAKQ,EAAAA,QAAAA,CAAAA;IAC5C,MAAM,EAAE2B,IAAI,EAAEC,OAAO,EAAE,GAAG1B,GAAI2B,CAAAA,MAAM,CAACC,GAAG,CAAmB,MAAA,CAAA;IAE3D,MAAMC,KAAAA,GAAQrC,KAAMsC,CAAAA,IAAI,CAACL,IAAAA,CAAAA;IACzB,MAAMM,QAAAA,GAAWvC,MAAMsC,IAAI,CAAC,CAAC,CAAC,EAAEJ,QAAQ,CAAC,CAAA;IACzC,MAAMM,KAAAA,GAAQxC,KAAMyC,CAAAA,OAAO,CAACV,gBAAAA,CAAAA;IAC5B,MAAMW,KAAAA,GAAQ1C,MAAM2C,KAAK,CAAC,CAAC,EAAEhC,UAAAA,CAAW,EAAE,CAAC,CAAA;AAE3CP,IAAAA,OAAAA,CAAQiB,GAAG,CACTrB,KAAAA,CAAM4C,IAAI,CACR,CAAC,wCAAwC,EAAEP,KAAAA,CAAM,CAAC,EAAEE,SAAS,KAAK,EAAEC,MAAM,IAAI,EAAEE,MAAM,CAAC,CAAA,CAAA;AAG7F,CAAA;;;;"}
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ var commander = require('commander');
4
+ var helpers = require('../../utils/helpers.js');
5
+ var generate = require('./generate.js');
6
+
7
+ /**
8
+ * `$ strapi openapi`
9
+ */ const command = ()=>{
10
+ const openapi = commander.createCommand('openapi').description('Manage OpenAPI specifications for your Strapi application');
11
+ // `$ strapi openapi generate [-o, --output <path>]`
12
+ openapi.command('generate').description('Generate an OpenAPI specification for the current Strapi application').option('-o, --output <path>', 'Output file path for the OpenAPI specification').action(helpers.runAction('openapi:generate', generate.action));
13
+ return openapi;
14
+ };
15
+
16
+ exports.command = command;
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/cli/commands/openapi/index.ts"],"sourcesContent":["import { createCommand } from 'commander';\n\nimport type { StrapiCommand } from '../../types';\nimport { runAction } from '../../utils/helpers';\nimport { action as generate } from './generate';\n\n/**\n * `$ strapi openapi`\n */\nconst command: StrapiCommand = () => {\n const openapi = createCommand('openapi').description(\n 'Manage OpenAPI specifications for your Strapi application'\n );\n\n // `$ strapi openapi generate [-o, --output <path>]`\n openapi\n .command('generate')\n .description('Generate an OpenAPI specification for the current Strapi application')\n .option('-o, --output <path>', 'Output file path for the OpenAPI specification')\n .action(runAction('openapi:generate', generate));\n\n return openapi;\n};\n\nexport { command };\n"],"names":["command","openapi","createCommand","description","option","action","runAction","generate"],"mappings":";;;;;;AAMA;;AAEC,UACKA,OAAyB,GAAA,IAAA;AAC7B,IAAA,MAAMC,OAAUC,GAAAA,uBAAAA,CAAc,SAAWC,CAAAA,CAAAA,WAAW,CAClD,2DAAA,CAAA;;AAIFF,IAAAA,OAAAA,CACGD,OAAO,CAAC,UACRG,CAAAA,CAAAA,WAAW,CAAC,sEAAA,CAAA,CACZC,MAAM,CAAC,qBAAuB,EAAA,gDAAA,CAAA,CAC9BC,MAAM,CAACC,kBAAU,kBAAoBC,EAAAA,eAAAA,CAAAA,CAAAA;IAExC,OAAON,OAAAA;AACT;;;;"}
@@ -0,0 +1,15 @@
1
+ import { createCommand } from 'commander';
2
+ import { runAction } from '../../utils/helpers.mjs';
3
+ import { action } from './generate.mjs';
4
+
5
+ /**
6
+ * `$ strapi openapi`
7
+ */ const command = ()=>{
8
+ const openapi = createCommand('openapi').description('Manage OpenAPI specifications for your Strapi application');
9
+ // `$ strapi openapi generate [-o, --output <path>]`
10
+ openapi.command('generate').description('Generate an OpenAPI specification for the current Strapi application').option('-o, --output <path>', 'Output file path for the OpenAPI specification').action(runAction('openapi:generate', action));
11
+ return openapi;
12
+ };
13
+
14
+ export { command };
15
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../src/cli/commands/openapi/index.ts"],"sourcesContent":["import { createCommand } from 'commander';\n\nimport type { StrapiCommand } from '../../types';\nimport { runAction } from '../../utils/helpers';\nimport { action as generate } from './generate';\n\n/**\n * `$ strapi openapi`\n */\nconst command: StrapiCommand = () => {\n const openapi = createCommand('openapi').description(\n 'Manage OpenAPI specifications for your Strapi application'\n );\n\n // `$ strapi openapi generate [-o, --output <path>]`\n openapi\n .command('generate')\n .description('Generate an OpenAPI specification for the current Strapi application')\n .option('-o, --output <path>', 'Output file path for the OpenAPI specification')\n .action(runAction('openapi:generate', generate));\n\n return openapi;\n};\n\nexport { command };\n"],"names":["command","openapi","createCommand","description","option","action","runAction","generate"],"mappings":";;;;AAMA;;AAEC,UACKA,OAAyB,GAAA,IAAA;AAC7B,IAAA,MAAMC,OAAUC,GAAAA,aAAAA,CAAc,SAAWC,CAAAA,CAAAA,WAAW,CAClD,2DAAA,CAAA;;AAIFF,IAAAA,OAAAA,CACGD,OAAO,CAAC,UACRG,CAAAA,CAAAA,WAAW,CAAC,sEAAA,CAAA,CACZC,MAAM,CAAC,qBAAuB,EAAA,gDAAA,CAAA,CAC9BC,MAAM,CAACC,UAAU,kBAAoBC,EAAAA,MAAAA,CAAAA,CAAAA;IAExC,OAAON,OAAAA;AACT;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/strapi",
3
- "version": "5.19.0",
3
+ "version": "5.20.0",
4
4
  "description": "An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite",
5
5
  "keywords": [
6
6
  "strapi",
@@ -110,24 +110,25 @@
110
110
  },
111
111
  "dependencies": {
112
112
  "@pmmmwh/react-refresh-webpack-plugin": "0.5.15",
113
- "@strapi/admin": "5.19.0",
114
- "@strapi/cloud-cli": "5.19.0",
115
- "@strapi/content-manager": "5.19.0",
116
- "@strapi/content-releases": "5.19.0",
117
- "@strapi/content-type-builder": "5.19.0",
118
- "@strapi/core": "5.19.0",
119
- "@strapi/data-transfer": "5.19.0",
120
- "@strapi/database": "5.19.0",
121
- "@strapi/email": "5.19.0",
122
- "@strapi/generators": "5.19.0",
123
- "@strapi/i18n": "5.19.0",
124
- "@strapi/logger": "5.19.0",
125
- "@strapi/permissions": "5.19.0",
126
- "@strapi/review-workflows": "5.19.0",
127
- "@strapi/types": "5.19.0",
128
- "@strapi/typescript-utils": "5.19.0",
129
- "@strapi/upload": "5.19.0",
130
- "@strapi/utils": "5.19.0",
113
+ "@strapi/admin": "5.20.0",
114
+ "@strapi/cloud-cli": "5.20.0",
115
+ "@strapi/content-manager": "5.20.0",
116
+ "@strapi/content-releases": "5.20.0",
117
+ "@strapi/content-type-builder": "5.20.0",
118
+ "@strapi/core": "5.20.0",
119
+ "@strapi/data-transfer": "5.20.0",
120
+ "@strapi/database": "5.20.0",
121
+ "@strapi/email": "5.20.0",
122
+ "@strapi/generators": "5.20.0",
123
+ "@strapi/i18n": "5.20.0",
124
+ "@strapi/logger": "5.20.0",
125
+ "@strapi/openapi": "5.20.0",
126
+ "@strapi/permissions": "5.20.0",
127
+ "@strapi/review-workflows": "5.20.0",
128
+ "@strapi/types": "5.20.0",
129
+ "@strapi/typescript-utils": "5.20.0",
130
+ "@strapi/upload": "5.20.0",
131
+ "@strapi/utils": "5.20.0",
131
132
  "@types/nodemon": "1.19.6",
132
133
  "@vitejs/plugin-react-swc": "3.6.0",
133
134
  "boxen": "5.1.2",
@@ -181,11 +182,11 @@
181
182
  "@types/node": "18.19.24",
182
183
  "@types/webpack-bundle-analyzer": "4.7.0",
183
184
  "@types/webpack-hot-middleware": "2.25.9",
184
- "eslint-config-custom": "5.19.0",
185
+ "eslint-config-custom": "5.20.0",
185
186
  "jest": "29.6.0",
186
187
  "react": "18.3.1",
187
188
  "react-dom": "18.3.1",
188
- "tsconfig": "5.19.0"
189
+ "tsconfig": "5.20.0"
189
190
  },
190
191
  "peerDependencies": {
191
192
  "react": "^17.0.0 || ^18.0.0",