@strapi/openapi 0.0.0-experimental.4e03c41e8e44fa7b77c41c3e0edd86c7f1fc9c52 → 0.0.0-experimental.ffc36acb308febe288f1a31b62cbbb75b286585c
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.
- package/dist/assemblers/document/factory.js +1 -1
- package/dist/assemblers/document/factory.mjs +1 -1
- package/dist/assemblers/document/info.js +1 -1
- package/dist/assemblers/document/info.js.map +1 -1
- package/dist/assemblers/document/info.mjs +1 -1
- package/dist/assemblers/document/info.mjs.map +1 -1
- package/dist/assemblers/document/metadata.js +1 -1
- package/dist/assemblers/document/metadata.mjs +1 -1
- package/dist/assemblers/document/path/factory.js +1 -1
- package/dist/assemblers/document/path/factory.mjs +1 -1
- package/dist/assemblers/document/path/path-item/factory.js +1 -1
- package/dist/assemblers/document/path/path-item/factory.mjs +1 -1
- package/dist/assemblers/document/path/path-item/operation/body.d.ts.map +1 -1
- package/dist/assemblers/document/path/path-item/operation/body.js.map +1 -1
- package/dist/assemblers/document/path/path-item/operation/body.mjs.map +1 -1
- package/dist/assemblers/document/path/path-item/operation/operation-id.js +1 -1
- package/dist/assemblers/document/path/path-item/operation/operation-id.mjs +1 -1
- package/dist/assemblers/document/path/path-item/operation/operation.d.ts.map +1 -1
- package/dist/assemblers/document/path/path-item/operation/operation.js +5 -2
- package/dist/assemblers/document/path/path-item/operation/operation.js.map +1 -1
- package/dist/assemblers/document/path/path-item/operation/operation.mjs +5 -2
- package/dist/assemblers/document/path/path-item/operation/operation.mjs.map +1 -1
- package/dist/assemblers/document/path/path-item/operation/parameters.js +2 -2
- package/dist/assemblers/document/path/path-item/operation/parameters.js.map +1 -1
- package/dist/assemblers/document/path/path-item/operation/parameters.mjs +2 -2
- package/dist/assemblers/document/path/path-item/operation/parameters.mjs.map +1 -1
- package/dist/assemblers/document/path/path-item/operation/responses.js.map +1 -1
- package/dist/assemblers/document/path/path-item/operation/responses.mjs.map +1 -1
- package/dist/assemblers/document/path/path-item/operation/tags.js +1 -1
- package/dist/assemblers/document/path/path-item/operation/tags.mjs +1 -1
- package/dist/assemblers/document/path/path-item/path-item.js +1 -1
- package/dist/assemblers/document/path/path-item/path-item.mjs +1 -1
- package/dist/assemblers/document/path/path.js +1 -1
- package/dist/assemblers/document/path/path.mjs +1 -1
- package/dist/context/factories/document.d.ts +2 -2
- package/dist/context/factories/document.d.ts.map +1 -1
- package/dist/context/factories/document.js +1 -1
- package/dist/context/factories/document.js.map +1 -1
- package/dist/context/factories/document.mjs +1 -1
- package/dist/context/factories/document.mjs.map +1 -1
- package/dist/context/factories/operation.d.ts +2 -2
- package/dist/context/factories/operation.d.ts.map +1 -1
- package/dist/context/factories/operation.js +1 -1
- package/dist/context/factories/operation.js.map +1 -1
- package/dist/context/factories/operation.mjs +1 -1
- package/dist/context/factories/operation.mjs.map +1 -1
- package/dist/context/factories/path-item.js +1 -1
- package/dist/context/factories/path-item.mjs +1 -1
- package/dist/context/factories/path.js +1 -1
- package/dist/context/factories/path.mjs +1 -1
- package/dist/exports.d.ts +27 -1
- package/dist/exports.d.ts.map +1 -1
- package/dist/exports.js +28 -1
- package/dist/exports.js.map +1 -1
- package/dist/exports.mjs +28 -1
- package/dist/exports.mjs.map +1 -1
- package/dist/generator/generator.js +1 -1
- package/dist/generator/generator.js.map +1 -1
- package/dist/generator/generator.mjs +1 -1
- package/dist/generator/generator.mjs.map +1 -1
- package/dist/generator/types.d.ts +2 -2
- package/dist/generator/types.d.ts.map +1 -1
- package/dist/post-processor/component-writer.js +21 -2
- package/dist/post-processor/component-writer.js.map +1 -1
- package/dist/post-processor/component-writer.mjs +1 -1
- package/dist/post-processor/component-writer.mjs.map +1 -1
- package/dist/registries/types.d.ts +2 -2
- package/dist/registries/types.d.ts.map +1 -1
- package/dist/routes/collector.js +1 -1
- package/dist/routes/collector.mjs +1 -1
- package/dist/routes/providers/admin.js +1 -1
- package/dist/routes/providers/admin.mjs +1 -1
- package/dist/routes/providers/api.js +1 -1
- package/dist/routes/providers/api.mjs +1 -1
- package/dist/routes/providers/plugin.js +1 -1
- package/dist/routes/providers/plugin.mjs +1 -1
- package/dist/types.d.ts +5 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/zod.d.ts +4 -4
- package/dist/utils/zod.d.ts.map +1 -1
- package/dist/utils/zod.js +2 -2
- package/dist/utils/zod.js.map +1 -1
- package/dist/utils/zod.mjs +2 -2
- package/dist/utils/zod.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -2,7 +2,7 @@ import { RegistriesFactory } from '../../registries/factory.mjs';
|
|
|
2
2
|
import { TimerFactory } from '../../utils/timer/factory.mjs';
|
|
3
3
|
import 'debug';
|
|
4
4
|
import 'node:crypto';
|
|
5
|
-
import 'zod';
|
|
5
|
+
import 'zod/v4';
|
|
6
6
|
import { AbstractContextFactory } from './abstract.mjs';
|
|
7
7
|
|
|
8
8
|
class OperationContextFactory extends AbstractContextFactory {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.mjs","sources":["../../../src/context/factories/operation.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"operation.mjs","sources":["../../../src/context/factories/operation.ts"],"sourcesContent":["import type { OpenAPIV3_1 } from 'openapi-types';\n\nimport { RegistriesFactory } from '../../registries';\n\nimport type { OperationContext, OperationContextData } from '../../types';\nimport { TimerFactory } from '../../utils';\n\nimport type { PartialContext } from '../types';\n\nimport { AbstractContextFactory } from './abstract';\n\nexport class OperationContextFactory extends AbstractContextFactory<\n Partial<OpenAPIV3_1.OperationObject>\n> {\n constructor(\n registriesFactory: RegistriesFactory = new RegistriesFactory(),\n timerFactory: TimerFactory = new TimerFactory()\n ) {\n super(registriesFactory, timerFactory);\n }\n\n create(context: PartialContext<OperationContextData>): OperationContext {\n return super.create(context, {});\n }\n}\n"],"names":["OperationContextFactory","AbstractContextFactory","create","context","constructor","registriesFactory","RegistriesFactory","timerFactory","TimerFactory"],"mappings":";;;;;;;AAWO,MAAMA,uBAAgCC,SAAAA,sBAAAA,CAAAA;AAU3CC,IAAAA,MAAAA,CAAOC,OAA6C,EAAoB;AACtE,QAAA,OAAO,KAAK,CAACD,MAAOC,CAAAA,OAAAA,EAAS,EAAC,CAAA;AAChC;AATAC,IAAAA,WAAAA,CACEC,oBAAuC,IAAIC,iBAAAA,EAAmB,EAC9DC,YAA6B,GAAA,IAAIC,cAAc,CAC/C;AACA,QAAA,KAAK,CAACH,iBAAmBE,EAAAA,YAAAA,CAAAA;AAC3B;AAKF;;;;"}
|
|
@@ -4,7 +4,7 @@ var factory = require('../../registries/factory.js');
|
|
|
4
4
|
var factory$1 = require('../../utils/timer/factory.js');
|
|
5
5
|
require('debug');
|
|
6
6
|
require('node:crypto');
|
|
7
|
-
require('zod');
|
|
7
|
+
require('zod/v4');
|
|
8
8
|
var abstract = require('./abstract.js');
|
|
9
9
|
|
|
10
10
|
class PathItemContextFactory extends abstract.AbstractContextFactory {
|
|
@@ -2,7 +2,7 @@ import { RegistriesFactory } from '../../registries/factory.mjs';
|
|
|
2
2
|
import { TimerFactory } from '../../utils/timer/factory.mjs';
|
|
3
3
|
import 'debug';
|
|
4
4
|
import 'node:crypto';
|
|
5
|
-
import 'zod';
|
|
5
|
+
import 'zod/v4';
|
|
6
6
|
import { AbstractContextFactory } from './abstract.mjs';
|
|
7
7
|
|
|
8
8
|
class PathItemContextFactory extends AbstractContextFactory {
|
|
@@ -4,7 +4,7 @@ var factory = require('../../registries/factory.js');
|
|
|
4
4
|
var factory$1 = require('../../utils/timer/factory.js');
|
|
5
5
|
require('debug');
|
|
6
6
|
require('node:crypto');
|
|
7
|
-
require('zod');
|
|
7
|
+
require('zod/v4');
|
|
8
8
|
var abstract = require('./abstract.js');
|
|
9
9
|
|
|
10
10
|
class PathContextFactory extends abstract.AbstractContextFactory {
|
|
@@ -2,7 +2,7 @@ import { RegistriesFactory } from '../../registries/factory.mjs';
|
|
|
2
2
|
import { TimerFactory } from '../../utils/timer/factory.mjs';
|
|
3
3
|
import 'debug';
|
|
4
4
|
import 'node:crypto';
|
|
5
|
-
import 'zod';
|
|
5
|
+
import 'zod/v4';
|
|
6
6
|
import { AbstractContextFactory } from './abstract.mjs';
|
|
7
7
|
|
|
8
8
|
class PathContextFactory extends AbstractContextFactory {
|
package/dist/exports.d.ts
CHANGED
|
@@ -2,8 +2,34 @@ import type { Core } from '@strapi/types';
|
|
|
2
2
|
import type { GenerationOptions } from './types';
|
|
3
3
|
import type { GeneratorOutput } from './generator';
|
|
4
4
|
/**
|
|
5
|
+
* Generates an in-memory OpenAPI specification for Strapi routes.
|
|
6
|
+
*
|
|
5
7
|
* @experimental
|
|
8
|
+
*
|
|
9
|
+
* @param strapi - The Strapi application instance.
|
|
10
|
+
* @param options - Optional configuration for the generation process.
|
|
11
|
+
* @param options.type - The type of routes to generate documentation for, either 'admin' or 'content-api'.
|
|
12
|
+
* Defaults to 'content-api'.
|
|
13
|
+
* @returns An object containing the generated OpenAPI document and other relevant outputs.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { generate } from '@strapi/openapi';
|
|
18
|
+
*
|
|
19
|
+
* // Assuming 'strapi' is your Strapi instance
|
|
20
|
+
* const output = generate(strapi, { type: 'content-api' });
|
|
21
|
+
* console.log(output.document);
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import { generate } from '@strapi/openapi';
|
|
27
|
+
*
|
|
28
|
+
* // Generate documentation for all route types (default)
|
|
29
|
+
* const output = generate(strapi);
|
|
30
|
+
* console.log(output.document);
|
|
31
|
+
* ```
|
|
6
32
|
*/
|
|
7
33
|
export declare const generate: (strapi: Core.Strapi, options?: GenerationOptions) => GeneratorOutput;
|
|
8
|
-
export { GenerationOptions, GeneratorOutput };
|
|
34
|
+
export type { GenerationOptions, GeneratorOutput };
|
|
9
35
|
//# sourceMappingURL=exports.d.ts.map
|
package/dist/exports.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAgB1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD
|
|
1
|
+
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAgB1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,QAAQ,WAAY,KAAK,MAAM,YAAY,iBAAiB,KAAG,eA4B3E,CAAC;AAEF,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/exports.js
CHANGED
|
@@ -6,7 +6,7 @@ require('./assemblers/document/path/path.js');
|
|
|
6
6
|
var document = require('./context/factories/document.js');
|
|
7
7
|
require('debug');
|
|
8
8
|
require('node:crypto');
|
|
9
|
-
require('zod');
|
|
9
|
+
require('zod/v4');
|
|
10
10
|
require('./assemblers/document/path/path-item/path-item.js');
|
|
11
11
|
require('./assemblers/document/path/path-item/operation/operation.js');
|
|
12
12
|
require('./assemblers/document/path/path-item/operation/operation-id.js');
|
|
@@ -24,7 +24,33 @@ var plugin = require('./routes/providers/plugin.js');
|
|
|
24
24
|
var isOfType = require('./routes/rules/is-of-type.js');
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
|
+
* Generates an in-memory OpenAPI specification for Strapi routes.
|
|
28
|
+
*
|
|
27
29
|
* @experimental
|
|
30
|
+
*
|
|
31
|
+
* @param strapi - The Strapi application instance.
|
|
32
|
+
* @param options - Optional configuration for the generation process.
|
|
33
|
+
* @param options.type - The type of routes to generate documentation for, either 'admin' or 'content-api'.
|
|
34
|
+
* Defaults to 'content-api'.
|
|
35
|
+
* @returns An object containing the generated OpenAPI document and other relevant outputs.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* import { generate } from '@strapi/openapi';
|
|
40
|
+
*
|
|
41
|
+
* // Assuming 'strapi' is your Strapi instance
|
|
42
|
+
* const output = generate(strapi, { type: 'content-api' });
|
|
43
|
+
* console.log(output.document);
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* import { generate } from '@strapi/openapi';
|
|
49
|
+
*
|
|
50
|
+
* // Generate documentation for all route types (default)
|
|
51
|
+
* const output = generate(strapi);
|
|
52
|
+
* console.log(output.document);
|
|
53
|
+
* ```
|
|
28
54
|
*/ const generate = (strapi, options)=>{
|
|
29
55
|
const { type = 'content-api' } = options ?? {};
|
|
30
56
|
const config = {
|
|
@@ -32,6 +58,7 @@ var isOfType = require('./routes/rules/is-of-type.js');
|
|
|
32
58
|
assemblers: new factory$1.DocumentAssemblerFactory().createAll(),
|
|
33
59
|
postProcessors: new factory$2.PostProcessorsFactory().createAll()
|
|
34
60
|
};
|
|
61
|
+
// Data sources for the Strapi routes
|
|
35
62
|
const routeCollector = new collector.RouteCollector([
|
|
36
63
|
new admin.AdminRoutesProvider(strapi),
|
|
37
64
|
new api.ApiRoutesProvider(strapi),
|
package/dist/exports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.js","sources":["../src/exports.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { DocumentAssemblerFactory } from './assemblers';\nimport { DocumentContextFactory } from './context';\nimport { OpenAPIGenerator } from './generator';\nimport { PostProcessorsFactory } from './post-processor';\nimport { PreProcessorFactory } from './pre-processor';\nimport {\n AdminRoutesProvider,\n ApiRoutesProvider,\n PluginRoutesProvider,\n RouteCollector,\n RouteMatcher,\n rules,\n} from './routes';\n\nimport type { GenerationOptions } from './types';\nimport type { GeneratorOutput } from './generator';\n\n/**\n * @experimental\n */\nexport const generate = (strapi: Core.Strapi, options?: GenerationOptions): GeneratorOutput => {\n const { type = 'content-api' } = options ?? {};\n\n const config = {\n preProcessors: new PreProcessorFactory().createAll(),\n assemblers: new DocumentAssemblerFactory().createAll(),\n postProcessors: new PostProcessorsFactory().createAll(),\n };\n\n const routeCollector = new RouteCollector(\n [\n new AdminRoutesProvider(strapi),\n new ApiRoutesProvider(strapi),\n new PluginRoutesProvider(strapi),\n ],\n\n new RouteMatcher([\n // Only match content-api routes\n rules.isOfType(type),\n ])\n );\n\n const contextFactory = new DocumentContextFactory();\n\n const generator = new OpenAPIGenerator(config, strapi, routeCollector, contextFactory);\n\n return generator.generate();\n};\n\nexport { GenerationOptions, GeneratorOutput };\n"],"names":["generate","strapi","options","type","config","preProcessors","PreProcessorFactory","createAll","assemblers","DocumentAssemblerFactory","postProcessors","PostProcessorsFactory","routeCollector","RouteCollector","AdminRoutesProvider","ApiRoutesProvider","PluginRoutesProvider","RouteMatcher","rules","contextFactory","DocumentContextFactory","generator","OpenAPIGenerator"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAmBA
|
|
1
|
+
{"version":3,"file":"exports.js","sources":["../src/exports.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { DocumentAssemblerFactory } from './assemblers';\nimport { DocumentContextFactory } from './context';\nimport { OpenAPIGenerator } from './generator';\nimport { PostProcessorsFactory } from './post-processor';\nimport { PreProcessorFactory } from './pre-processor';\nimport {\n AdminRoutesProvider,\n ApiRoutesProvider,\n PluginRoutesProvider,\n RouteCollector,\n RouteMatcher,\n rules,\n} from './routes';\n\nimport type { GenerationOptions } from './types';\nimport type { GeneratorOutput } from './generator';\n\n/**\n * Generates an in-memory OpenAPI specification for Strapi routes.\n *\n * @experimental\n *\n * @param strapi - The Strapi application instance.\n * @param options - Optional configuration for the generation process.\n * @param options.type - The type of routes to generate documentation for, either 'admin' or 'content-api'.\n * Defaults to 'content-api'.\n * @returns An object containing the generated OpenAPI document and other relevant outputs.\n *\n * @example\n * ```typescript\n * import { generate } from '@strapi/openapi';\n *\n * // Assuming 'strapi' is your Strapi instance\n * const output = generate(strapi, { type: 'content-api' });\n * console.log(output.document);\n * ```\n *\n * @example\n * ```typescript\n * import { generate } from '@strapi/openapi';\n *\n * // Generate documentation for all route types (default)\n * const output = generate(strapi);\n * console.log(output.document);\n * ```\n */\nexport const generate = (strapi: Core.Strapi, options?: GenerationOptions): GeneratorOutput => {\n const { type = 'content-api' } = options ?? {};\n\n const config = {\n preProcessors: new PreProcessorFactory().createAll(),\n assemblers: new DocumentAssemblerFactory().createAll(),\n postProcessors: new PostProcessorsFactory().createAll(),\n };\n\n // Data sources for the Strapi routes\n const routeCollector = new RouteCollector(\n [\n new AdminRoutesProvider(strapi),\n new ApiRoutesProvider(strapi),\n new PluginRoutesProvider(strapi),\n ],\n\n new RouteMatcher([\n // Only match content-api routes\n rules.isOfType(type),\n ])\n );\n\n const contextFactory = new DocumentContextFactory();\n\n const generator = new OpenAPIGenerator(config, strapi, routeCollector, contextFactory);\n\n return generator.generate();\n};\n\nexport type { GenerationOptions, GeneratorOutput };\n"],"names":["generate","strapi","options","type","config","preProcessors","PreProcessorFactory","createAll","assemblers","DocumentAssemblerFactory","postProcessors","PostProcessorsFactory","routeCollector","RouteCollector","AdminRoutesProvider","ApiRoutesProvider","PluginRoutesProvider","RouteMatcher","rules","contextFactory","DocumentContextFactory","generator","OpenAPIGenerator"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BC,IACM,MAAMA,QAAW,GAAA,CAACC,MAAqBC,EAAAA,OAAAA,GAAAA;AAC5C,IAAA,MAAM,EAAEC,IAAO,GAAA,aAAa,EAAE,GAAGD,WAAW,EAAC;AAE7C,IAAA,MAAME,MAAS,GAAA;QACbC,aAAe,EAAA,IAAIC,8BAAsBC,SAAS,EAAA;QAClDC,UAAY,EAAA,IAAIC,qCAA2BF,SAAS,EAAA;QACpDG,cAAgB,EAAA,IAAIC,kCAAwBJ,SAAS;AACvD,KAAA;;IAGA,MAAMK,cAAAA,GAAiB,IAAIC,wBACzB,CAAA;AACE,QAAA,IAAIC,yBAAoBb,CAAAA,MAAAA,CAAAA;AACxB,QAAA,IAAIc,qBAAkBd,CAAAA,MAAAA,CAAAA;AACtB,QAAA,IAAIe,2BAAqBf,CAAAA,MAAAA;AAC1B,KAAA,EAED,IAAIgB,oBAAa,CAAA;;AAEfC,QAAAA,iBAAc,CAACf,IAAAA;AAChB,KAAA,CAAA,CAAA;AAGH,IAAA,MAAMgB,iBAAiB,IAAIC,+BAAAA,EAAAA;AAE3B,IAAA,MAAMC,WAAY,GAAA,IAAIC,0BAAiBlB,CAAAA,MAAAA,EAAQH,QAAQW,cAAgBO,EAAAA,cAAAA,CAAAA;AAEvE,IAAA,OAAOE,YAAUrB,QAAQ,EAAA;AAC3B;;;;"}
|
package/dist/exports.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import './assemblers/document/path/path.mjs';
|
|
|
4
4
|
import { DocumentContextFactory } from './context/factories/document.mjs';
|
|
5
5
|
import 'debug';
|
|
6
6
|
import 'node:crypto';
|
|
7
|
-
import 'zod';
|
|
7
|
+
import 'zod/v4';
|
|
8
8
|
import './assemblers/document/path/path-item/path-item.mjs';
|
|
9
9
|
import './assemblers/document/path/path-item/operation/operation.mjs';
|
|
10
10
|
import './assemblers/document/path/path-item/operation/operation-id.mjs';
|
|
@@ -22,7 +22,33 @@ import { PluginRoutesProvider } from './routes/providers/plugin.mjs';
|
|
|
22
22
|
import { isOfType } from './routes/rules/is-of-type.mjs';
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
+
* Generates an in-memory OpenAPI specification for Strapi routes.
|
|
26
|
+
*
|
|
25
27
|
* @experimental
|
|
28
|
+
*
|
|
29
|
+
* @param strapi - The Strapi application instance.
|
|
30
|
+
* @param options - Optional configuration for the generation process.
|
|
31
|
+
* @param options.type - The type of routes to generate documentation for, either 'admin' or 'content-api'.
|
|
32
|
+
* Defaults to 'content-api'.
|
|
33
|
+
* @returns An object containing the generated OpenAPI document and other relevant outputs.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* import { generate } from '@strapi/openapi';
|
|
38
|
+
*
|
|
39
|
+
* // Assuming 'strapi' is your Strapi instance
|
|
40
|
+
* const output = generate(strapi, { type: 'content-api' });
|
|
41
|
+
* console.log(output.document);
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* import { generate } from '@strapi/openapi';
|
|
47
|
+
*
|
|
48
|
+
* // Generate documentation for all route types (default)
|
|
49
|
+
* const output = generate(strapi);
|
|
50
|
+
* console.log(output.document);
|
|
51
|
+
* ```
|
|
26
52
|
*/ const generate = (strapi, options)=>{
|
|
27
53
|
const { type = 'content-api' } = options ?? {};
|
|
28
54
|
const config = {
|
|
@@ -30,6 +56,7 @@ import { isOfType } from './routes/rules/is-of-type.mjs';
|
|
|
30
56
|
assemblers: new DocumentAssemblerFactory().createAll(),
|
|
31
57
|
postProcessors: new PostProcessorsFactory().createAll()
|
|
32
58
|
};
|
|
59
|
+
// Data sources for the Strapi routes
|
|
33
60
|
const routeCollector = new RouteCollector([
|
|
34
61
|
new AdminRoutesProvider(strapi),
|
|
35
62
|
new ApiRoutesProvider(strapi),
|
package/dist/exports.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.mjs","sources":["../src/exports.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { DocumentAssemblerFactory } from './assemblers';\nimport { DocumentContextFactory } from './context';\nimport { OpenAPIGenerator } from './generator';\nimport { PostProcessorsFactory } from './post-processor';\nimport { PreProcessorFactory } from './pre-processor';\nimport {\n AdminRoutesProvider,\n ApiRoutesProvider,\n PluginRoutesProvider,\n RouteCollector,\n RouteMatcher,\n rules,\n} from './routes';\n\nimport type { GenerationOptions } from './types';\nimport type { GeneratorOutput } from './generator';\n\n/**\n * @experimental\n */\nexport const generate = (strapi: Core.Strapi, options?: GenerationOptions): GeneratorOutput => {\n const { type = 'content-api' } = options ?? {};\n\n const config = {\n preProcessors: new PreProcessorFactory().createAll(),\n assemblers: new DocumentAssemblerFactory().createAll(),\n postProcessors: new PostProcessorsFactory().createAll(),\n };\n\n const routeCollector = new RouteCollector(\n [\n new AdminRoutesProvider(strapi),\n new ApiRoutesProvider(strapi),\n new PluginRoutesProvider(strapi),\n ],\n\n new RouteMatcher([\n // Only match content-api routes\n rules.isOfType(type),\n ])\n );\n\n const contextFactory = new DocumentContextFactory();\n\n const generator = new OpenAPIGenerator(config, strapi, routeCollector, contextFactory);\n\n return generator.generate();\n};\n\nexport { GenerationOptions, GeneratorOutput };\n"],"names":["generate","strapi","options","type","config","preProcessors","PreProcessorFactory","createAll","assemblers","DocumentAssemblerFactory","postProcessors","PostProcessorsFactory","routeCollector","RouteCollector","AdminRoutesProvider","ApiRoutesProvider","PluginRoutesProvider","RouteMatcher","rules","contextFactory","DocumentContextFactory","generator","OpenAPIGenerator"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAmBA
|
|
1
|
+
{"version":3,"file":"exports.mjs","sources":["../src/exports.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { DocumentAssemblerFactory } from './assemblers';\nimport { DocumentContextFactory } from './context';\nimport { OpenAPIGenerator } from './generator';\nimport { PostProcessorsFactory } from './post-processor';\nimport { PreProcessorFactory } from './pre-processor';\nimport {\n AdminRoutesProvider,\n ApiRoutesProvider,\n PluginRoutesProvider,\n RouteCollector,\n RouteMatcher,\n rules,\n} from './routes';\n\nimport type { GenerationOptions } from './types';\nimport type { GeneratorOutput } from './generator';\n\n/**\n * Generates an in-memory OpenAPI specification for Strapi routes.\n *\n * @experimental\n *\n * @param strapi - The Strapi application instance.\n * @param options - Optional configuration for the generation process.\n * @param options.type - The type of routes to generate documentation for, either 'admin' or 'content-api'.\n * Defaults to 'content-api'.\n * @returns An object containing the generated OpenAPI document and other relevant outputs.\n *\n * @example\n * ```typescript\n * import { generate } from '@strapi/openapi';\n *\n * // Assuming 'strapi' is your Strapi instance\n * const output = generate(strapi, { type: 'content-api' });\n * console.log(output.document);\n * ```\n *\n * @example\n * ```typescript\n * import { generate } from '@strapi/openapi';\n *\n * // Generate documentation for all route types (default)\n * const output = generate(strapi);\n * console.log(output.document);\n * ```\n */\nexport const generate = (strapi: Core.Strapi, options?: GenerationOptions): GeneratorOutput => {\n const { type = 'content-api' } = options ?? {};\n\n const config = {\n preProcessors: new PreProcessorFactory().createAll(),\n assemblers: new DocumentAssemblerFactory().createAll(),\n postProcessors: new PostProcessorsFactory().createAll(),\n };\n\n // Data sources for the Strapi routes\n const routeCollector = new RouteCollector(\n [\n new AdminRoutesProvider(strapi),\n new ApiRoutesProvider(strapi),\n new PluginRoutesProvider(strapi),\n ],\n\n new RouteMatcher([\n // Only match content-api routes\n rules.isOfType(type),\n ])\n );\n\n const contextFactory = new DocumentContextFactory();\n\n const generator = new OpenAPIGenerator(config, strapi, routeCollector, contextFactory);\n\n return generator.generate();\n};\n\nexport type { GenerationOptions, GeneratorOutput };\n"],"names":["generate","strapi","options","type","config","preProcessors","PreProcessorFactory","createAll","assemblers","DocumentAssemblerFactory","postProcessors","PostProcessorsFactory","routeCollector","RouteCollector","AdminRoutesProvider","ApiRoutesProvider","PluginRoutesProvider","RouteMatcher","rules","contextFactory","DocumentContextFactory","generator","OpenAPIGenerator"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BC,IACM,MAAMA,QAAW,GAAA,CAACC,MAAqBC,EAAAA,OAAAA,GAAAA;AAC5C,IAAA,MAAM,EAAEC,IAAO,GAAA,aAAa,EAAE,GAAGD,WAAW,EAAC;AAE7C,IAAA,MAAME,MAAS,GAAA;QACbC,aAAe,EAAA,IAAIC,sBAAsBC,SAAS,EAAA;QAClDC,UAAY,EAAA,IAAIC,2BAA2BF,SAAS,EAAA;QACpDG,cAAgB,EAAA,IAAIC,wBAAwBJ,SAAS;AACvD,KAAA;;IAGA,MAAMK,cAAAA,GAAiB,IAAIC,cACzB,CAAA;AACE,QAAA,IAAIC,mBAAoBb,CAAAA,MAAAA,CAAAA;AACxB,QAAA,IAAIc,iBAAkBd,CAAAA,MAAAA,CAAAA;AACtB,QAAA,IAAIe,oBAAqBf,CAAAA,MAAAA;AAC1B,KAAA,EAED,IAAIgB,YAAa,CAAA;;AAEfC,QAAAA,QAAc,CAACf,IAAAA;AAChB,KAAA,CAAA,CAAA;AAGH,IAAA,MAAMgB,iBAAiB,IAAIC,sBAAAA,EAAAA;AAE3B,IAAA,MAAMC,SAAY,GAAA,IAAIC,gBAAiBlB,CAAAA,MAAAA,EAAQH,QAAQW,cAAgBO,EAAAA,cAAAA,CAAAA;AAEvE,IAAA,OAAOE,UAAUrB,QAAQ,EAAA;AAC3B;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sources":["../../src/generator/generator.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type {
|
|
1
|
+
{"version":3,"file":"generator.js","sources":["../../src/generator/generator.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { OpenAPIV3_1 } from 'openapi-types';\n\nimport type { Assembler } from '../assemblers';\nimport type { DocumentContextFactory } from '../context';\nimport type { PostProcessor } from '../post-processor';\nimport type { PreProcessor } from '../pre-processor';\nimport type { RouteCollector } from '../routes';\nimport type { DocumentContext } from '../types';\n\nimport type { GeneratorOptions, GeneratorOutput } from './types';\n\nimport { createDebugger } from '../utils';\n\nconst debug = createDebugger('generator');\n\nexport interface OpenAPIGeneratorConfig {\n preProcessors?: PreProcessor[];\n assemblers?: Assembler.Document[];\n postProcessors?: PostProcessor[];\n}\n\nexport class OpenAPIGenerator {\n // Config\n private readonly _assemblers: Assembler.Document[];\n\n private readonly _preProcessors: PreProcessor[];\n\n private readonly _postProcessors: PostProcessor[];\n\n // Dependencies\n private readonly _strapi: Core.Strapi;\n\n private readonly _routeCollector: RouteCollector;\n\n // Factories\n private readonly _contextFactory: DocumentContextFactory;\n\n constructor(\n // Config\n config: OpenAPIGeneratorConfig,\n\n // Dependencies\n strapi: Core.Strapi,\n routeCollector: RouteCollector,\n\n // Factories\n contextFactory: DocumentContextFactory\n ) {\n // Config\n this._assemblers = config.assemblers ?? [];\n this._preProcessors = config.preProcessors ?? [];\n this._postProcessors = config.postProcessors ?? [];\n\n // Dependencies\n this._strapi = strapi;\n this._routeCollector = routeCollector;\n\n // Factories\n this._contextFactory = contextFactory;\n }\n\n generate(_options?: GeneratorOptions): GeneratorOutput {\n debug('generating a new OpenAPI document with the following options: %O', _options);\n\n const context = this._initContext(this._strapi);\n\n this\n // Init timers\n ._bootstrap(context)\n // Run registered pre-processors\n ._preProcess(context)\n // Run registered section assemblers\n ._assemble(context)\n // Run registered post-processors\n ._postProcess(context)\n // Clean up and set necessary properties\n ._finalize(context);\n\n const { data, stats } = context.output;\n\n return { document: data as OpenAPIV3_1.Document, durationMs: stats.time.elapsedTime };\n }\n\n private _initContext(strapi: Core.Strapi): DocumentContext {\n debug('collecting registered routes...');\n const routes = this._routeCollector.collect();\n\n debug('creating the initial document generation context...');\n return this._contextFactory.create({ strapi, routes });\n }\n\n private _bootstrap(context: DocumentContext) {\n const { timer } = context;\n\n timer.reset();\n\n const startedAt = timer.start();\n\n debug('started generation: %o', new Date(startedAt).toISOString());\n\n return this;\n }\n\n private _finalize(context: DocumentContext) {\n const { timer, output } = context;\n\n output.stats.time = timer.stop();\n\n const { endTime, elapsedTime } = output.stats.time;\n\n debug('completed generation: %O (elapsed: %Oms)', new Date(endTime).toISOString(), elapsedTime);\n\n return this;\n }\n\n private _preProcess(context: DocumentContext) {\n for (const preProcessor of this._preProcessors) {\n debug('running pre-processor: %s...', preProcessor.constructor.name);\n\n preProcessor.preProcess(context);\n }\n\n return this;\n }\n\n private _assemble(context: DocumentContext) {\n for (const assembler of this._assemblers) {\n debug('running assembler: %s...', assembler.constructor.name);\n\n assembler.assemble(context);\n }\n\n return this;\n }\n\n private _postProcess(context: DocumentContext) {\n for (const postProcessor of this._postProcessors) {\n debug('running post-processor: %s...', postProcessor.constructor.name);\n\n postProcessor.postProcess(context);\n }\n\n return this;\n }\n}\n"],"names":["debug","createDebugger","OpenAPIGenerator","generate","_options","context","_initContext","_strapi","_bootstrap","_preProcess","_assemble","_postProcess","_finalize","data","stats","output","document","durationMs","time","elapsedTime","strapi","routes","_routeCollector","collect","_contextFactory","create","timer","reset","startedAt","start","Date","toISOString","stop","endTime","preProcessor","_preProcessors","constructor","name","preProcess","assembler","_assemblers","assemble","postProcessor","_postProcessors","postProcess","config","routeCollector","contextFactory","assemblers","preProcessors","postProcessors"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.mjs","sources":["../../src/generator/generator.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type {
|
|
1
|
+
{"version":3,"file":"generator.mjs","sources":["../../src/generator/generator.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { OpenAPIV3_1 } from 'openapi-types';\n\nimport type { Assembler } from '../assemblers';\nimport type { DocumentContextFactory } from '../context';\nimport type { PostProcessor } from '../post-processor';\nimport type { PreProcessor } from '../pre-processor';\nimport type { RouteCollector } from '../routes';\nimport type { DocumentContext } from '../types';\n\nimport type { GeneratorOptions, GeneratorOutput } from './types';\n\nimport { createDebugger } from '../utils';\n\nconst debug = createDebugger('generator');\n\nexport interface OpenAPIGeneratorConfig {\n preProcessors?: PreProcessor[];\n assemblers?: Assembler.Document[];\n postProcessors?: PostProcessor[];\n}\n\nexport class OpenAPIGenerator {\n // Config\n private readonly _assemblers: Assembler.Document[];\n\n private readonly _preProcessors: PreProcessor[];\n\n private readonly _postProcessors: PostProcessor[];\n\n // Dependencies\n private readonly _strapi: Core.Strapi;\n\n private readonly _routeCollector: RouteCollector;\n\n // Factories\n private readonly _contextFactory: DocumentContextFactory;\n\n constructor(\n // Config\n config: OpenAPIGeneratorConfig,\n\n // Dependencies\n strapi: Core.Strapi,\n routeCollector: RouteCollector,\n\n // Factories\n contextFactory: DocumentContextFactory\n ) {\n // Config\n this._assemblers = config.assemblers ?? [];\n this._preProcessors = config.preProcessors ?? [];\n this._postProcessors = config.postProcessors ?? [];\n\n // Dependencies\n this._strapi = strapi;\n this._routeCollector = routeCollector;\n\n // Factories\n this._contextFactory = contextFactory;\n }\n\n generate(_options?: GeneratorOptions): GeneratorOutput {\n debug('generating a new OpenAPI document with the following options: %O', _options);\n\n const context = this._initContext(this._strapi);\n\n this\n // Init timers\n ._bootstrap(context)\n // Run registered pre-processors\n ._preProcess(context)\n // Run registered section assemblers\n ._assemble(context)\n // Run registered post-processors\n ._postProcess(context)\n // Clean up and set necessary properties\n ._finalize(context);\n\n const { data, stats } = context.output;\n\n return { document: data as OpenAPIV3_1.Document, durationMs: stats.time.elapsedTime };\n }\n\n private _initContext(strapi: Core.Strapi): DocumentContext {\n debug('collecting registered routes...');\n const routes = this._routeCollector.collect();\n\n debug('creating the initial document generation context...');\n return this._contextFactory.create({ strapi, routes });\n }\n\n private _bootstrap(context: DocumentContext) {\n const { timer } = context;\n\n timer.reset();\n\n const startedAt = timer.start();\n\n debug('started generation: %o', new Date(startedAt).toISOString());\n\n return this;\n }\n\n private _finalize(context: DocumentContext) {\n const { timer, output } = context;\n\n output.stats.time = timer.stop();\n\n const { endTime, elapsedTime } = output.stats.time;\n\n debug('completed generation: %O (elapsed: %Oms)', new Date(endTime).toISOString(), elapsedTime);\n\n return this;\n }\n\n private _preProcess(context: DocumentContext) {\n for (const preProcessor of this._preProcessors) {\n debug('running pre-processor: %s...', preProcessor.constructor.name);\n\n preProcessor.preProcess(context);\n }\n\n return this;\n }\n\n private _assemble(context: DocumentContext) {\n for (const assembler of this._assemblers) {\n debug('running assembler: %s...', assembler.constructor.name);\n\n assembler.assemble(context);\n }\n\n return this;\n }\n\n private _postProcess(context: DocumentContext) {\n for (const postProcessor of this._postProcessors) {\n debug('running post-processor: %s...', postProcessor.constructor.name);\n\n postProcessor.postProcess(context);\n }\n\n return this;\n }\n}\n"],"names":["debug","createDebugger","OpenAPIGenerator","generate","_options","context","_initContext","_strapi","_bootstrap","_preProcess","_assemble","_postProcess","_finalize","data","stats","output","document","durationMs","time","elapsedTime","strapi","routes","_routeCollector","collect","_contextFactory","create","timer","reset","startedAt","start","Date","toISOString","stop","endTime","preProcessor","_preProcessors","constructor","name","preProcess","assembler","_assemblers","assemble","postProcessor","_postProcessors","postProcess","config","routeCollector","contextFactory","assemblers","preProcessors","postProcessors"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { OpenAPIV3_1 } from 'openapi-types';
|
|
2
2
|
export interface GeneratorOutputOptions {
|
|
3
3
|
validate?: boolean;
|
|
4
4
|
}
|
|
@@ -6,7 +6,7 @@ export interface GeneratorOptions {
|
|
|
6
6
|
output: GeneratorOutputOptions;
|
|
7
7
|
}
|
|
8
8
|
export interface GeneratorOutput {
|
|
9
|
-
document:
|
|
9
|
+
document: OpenAPIV3_1.Document;
|
|
10
10
|
durationMs: number;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generator/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -1,12 +1,31 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var z = require('zod');
|
|
3
|
+
var z = require('zod/v4');
|
|
4
4
|
var zod = require('../utils/zod.js');
|
|
5
5
|
|
|
6
|
+
function _interopNamespaceDefault(e) {
|
|
7
|
+
var n = Object.create(null);
|
|
8
|
+
if (e) {
|
|
9
|
+
Object.keys(e).forEach(function (k) {
|
|
10
|
+
if (k !== 'default') {
|
|
11
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
12
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () { return e[k]; }
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
n.default = e;
|
|
20
|
+
return Object.freeze(n);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
|
|
24
|
+
|
|
6
25
|
class ComponentsWriter {
|
|
7
26
|
postProcess(context) {
|
|
8
27
|
const { output } = context;
|
|
9
|
-
const { schemas } =
|
|
28
|
+
const { schemas } = z__namespace.toJSONSchema(z__namespace.globalRegistry, {
|
|
10
29
|
uri: zod.toComponentsPath
|
|
11
30
|
});
|
|
12
31
|
output.data.components = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-writer.js","sources":["../../src/post-processor/component-writer.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"component-writer.js","sources":["../../src/post-processor/component-writer.ts"],"sourcesContent":["import { OpenAPIV3_1 } from 'openapi-types';\nimport * as z from 'zod/v4';\nimport type { DocumentContext } from '../types';\nimport { toComponentsPath } from '../utils/zod';\nimport type { PostProcessor } from './types';\n\nexport class ComponentsWriter implements PostProcessor {\n postProcess(context: DocumentContext): void {\n const { output } = context;\n\n const { schemas } = z.toJSONSchema(z.globalRegistry, {\n uri: toComponentsPath,\n }) as OpenAPIV3_1.ComponentsObject;\n\n output.data.components = { schemas };\n }\n}\n"],"names":["ComponentsWriter","postProcess","context","output","schemas","z","toJSONSchema","globalRegistry","uri","toComponentsPath","data","components"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAMA,gBAAAA,CAAAA;AACXC,IAAAA,WAAAA,CAAYC,OAAwB,EAAQ;QAC1C,MAAM,EAAEC,MAAM,EAAE,GAAGD,OAAAA;QAEnB,MAAM,EAAEE,OAAO,EAAE,GAAGC,aAAEC,YAAY,CAACD,YAAEE,CAAAA,cAAc,EAAE;YACnDC,GAAKC,EAAAA;AACP,SAAA,CAAA;QAEAN,MAAOO,CAAAA,IAAI,CAACC,UAAU,GAAG;AAAEP,YAAAA;AAAQ,SAAA;AACrC;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-writer.mjs","sources":["../../src/post-processor/component-writer.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"component-writer.mjs","sources":["../../src/post-processor/component-writer.ts"],"sourcesContent":["import { OpenAPIV3_1 } from 'openapi-types';\nimport * as z from 'zod/v4';\nimport type { DocumentContext } from '../types';\nimport { toComponentsPath } from '../utils/zod';\nimport type { PostProcessor } from './types';\n\nexport class ComponentsWriter implements PostProcessor {\n postProcess(context: DocumentContext): void {\n const { output } = context;\n\n const { schemas } = z.toJSONSchema(z.globalRegistry, {\n uri: toComponentsPath,\n }) as OpenAPIV3_1.ComponentsObject;\n\n output.data.components = { schemas };\n }\n}\n"],"names":["ComponentsWriter","postProcess","context","output","schemas","z","toJSONSchema","globalRegistry","uri","toComponentsPath","data","components"],"mappings":";;;AAMO,MAAMA,gBAAAA,CAAAA;AACXC,IAAAA,WAAAA,CAAYC,OAAwB,EAAQ;QAC1C,MAAM,EAAEC,MAAM,EAAE,GAAGD,OAAAA;QAEnB,MAAM,EAAEE,OAAO,EAAE,GAAGC,EAAEC,YAAY,CAACD,CAAEE,CAAAA,cAAc,EAAE;YACnDC,GAAKC,EAAAA;AACP,SAAA,CAAA;QAEAN,MAAOO,CAAAA,IAAI,CAACC,UAAU,GAAG;AAAEP,YAAAA;AAAQ,SAAA;AACrC;AACF;;;;"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export type ComponentType = keyof
|
|
1
|
+
import type { OpenAPIV3_1 } from 'openapi-types';
|
|
2
|
+
export type ComponentType = keyof OpenAPIV3_1.ComponentsObject;
|
|
3
3
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registries/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/registries/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC"}
|
package/dist/routes/collector.js
CHANGED
package/dist/types.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { OpenAPIV3_1 } from 'openapi-types';
|
|
2
2
|
import type { Context } from './context';
|
|
3
|
-
export type DocumentContextData = Partial<
|
|
3
|
+
export type DocumentContextData = Partial<OpenAPIV3_1.Document>;
|
|
4
4
|
export type DocumentContext = Context<DocumentContextData>;
|
|
5
|
-
export type OperationContextData = Partial<
|
|
5
|
+
export type OperationContextData = Partial<OpenAPIV3_1.OperationObject>;
|
|
6
6
|
export type OperationContext = Context<OperationContextData>;
|
|
7
|
-
export type PathContextData = Partial<
|
|
7
|
+
export type PathContextData = Partial<OpenAPIV3_1.PathsObject>;
|
|
8
8
|
export type PathContext = Context<PathContextData>;
|
|
9
|
-
export type PathItemContextData = Partial<
|
|
9
|
+
export type PathItemContextData = Partial<OpenAPIV3_1.PathItemObject>;
|
|
10
10
|
export type PathItemContext = Context<PathItemContextData>;
|
|
11
11
|
export interface GenerationOptions {
|
|
12
12
|
type: 'admin' | 'content-api';
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAChE,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAE3D,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AACxE,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAE7D,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAC/D,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAEnD,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AACtE,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,GAAG,aAAa,CAAC;CAC/B"}
|
package/dist/utils/zod.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as z from 'zod';
|
|
2
|
-
import type {
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import type { OpenAPIV3_1 } from 'openapi-types';
|
|
3
3
|
/**
|
|
4
4
|
* Converts a Zod schema to an OpenAPI Schema Object.
|
|
5
5
|
*
|
|
@@ -15,7 +15,7 @@ import type { OpenAPIV3 } from 'openapi-types';
|
|
|
15
15
|
*
|
|
16
16
|
* @example
|
|
17
17
|
* ```typescript
|
|
18
|
-
* import
|
|
18
|
+
* import * as z from 'zod/v4';
|
|
19
19
|
*
|
|
20
20
|
* // Create a Zod schema
|
|
21
21
|
* const userSchema = z.object({
|
|
@@ -28,7 +28,7 @@ import type { OpenAPIV3 } from 'openapi-types';
|
|
|
28
28
|
* const openAPISchema = zodToOpenAPI(userSchema);
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
|
-
export declare const zodToOpenAPI: (zodSchema: z.ZodType) =>
|
|
31
|
+
export declare const zodToOpenAPI: (zodSchema: z.ZodType) => OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject;
|
|
32
32
|
/**
|
|
33
33
|
* Generates a path string for referencing a component schema by its identifier.
|
|
34
34
|
*
|
package/dist/utils/zod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../src/utils/zod.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../src/utils/zod.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,eAAO,MAAM,YAAY,cACZ,EAAE,OAAO,KACnB,YAAY,YAAY,GAAG,YAAY,eAsBzC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,OAAQ,MAAM,WAAiC,CAAC"}
|
package/dist/utils/zod.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var node_crypto = require('node:crypto');
|
|
4
|
-
var z = require('zod');
|
|
4
|
+
var z = require('zod/v4');
|
|
5
5
|
|
|
6
6
|
function _interopNamespaceDefault(e) {
|
|
7
7
|
var n = Object.create(null);
|
|
@@ -37,7 +37,7 @@ var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
|
|
|
37
37
|
*
|
|
38
38
|
* @example
|
|
39
39
|
* ```typescript
|
|
40
|
-
* import
|
|
40
|
+
* import * as z from 'zod/v4';
|
|
41
41
|
*
|
|
42
42
|
* // Create a Zod schema
|
|
43
43
|
* const userSchema = z.object({
|
package/dist/utils/zod.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod.js","sources":["../../src/utils/zod.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport * as z from 'zod';\n\nimport type {
|
|
1
|
+
{"version":3,"file":"zod.js","sources":["../../src/utils/zod.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport * as z from 'zod/v4';\n\nimport type { OpenAPIV3_1 } from 'openapi-types';\n\n/**\n * Converts a Zod schema to an OpenAPI Schema Object.\n *\n * @description\n * Takes a Zod schema and converts it into an OpenAPI Schema Object (v3.1).\n * It uses a local registry to handle the conversion process and generates the appropriate\n * OpenAPI components.\n *\n * @param zodSchema - The Zod schema to convert to OpenAPI format. Can be any valid Zod schema.\n *\n * @returns An OpenAPI Schema Object representing the input Zod schema structure.\n * If the conversion cannot be completed, returns undefined.\n *\n * @example\n * ```typescript\n * import * as z from 'zod/v4';\n *\n * // Create a Zod schema\n * const userSchema = z.object({\n * id: z.number(),\n * name: z.string(),\n * email: z.string().email()\n * });\n *\n * // Convert to OpenAPI schema\n * const openAPISchema = zodToOpenAPI(userSchema);\n * ```\n */\n\nexport const zodToOpenAPI = (\n zodSchema: z.ZodType\n): OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject => {\n try {\n const id = randomUUID();\n const registry = z.registry<{ id: string }>();\n\n // Add the schema to the local registry with a custom, unique ID\n registry.add(zodSchema, { id });\n\n // Copy the global registry definitions into the local registry to make sure references are resolved\n // This prevent \"__shared\" definitions from being created\n for (const [key, value] of z.globalRegistry._idmap) {\n registry.add(value, { id: key });\n }\n\n // Generate the schemas and only return the one we want, transform the URI path to be OpenAPI compliant\n const { schemas } = z.toJSONSchema(registry, { uri: toComponentsPath });\n\n // TODO: make sure it's compliant\n return schemas[id] as OpenAPIV3_1.SchemaObject;\n } catch (e) {\n throw new Error(\"Couldn't transform the zod schema into an OpenAPI schema\");\n }\n};\n\n/**\n * Generates a path string for referencing a component schema by its identifier.\n *\n * @param id - The identifier of the component schema.\n * @returns The constructed path string for the specified component schema.\n */\nexport const toComponentsPath = (id: string) => `#/components/schemas/${id}`;\n"],"names":["zodToOpenAPI","zodSchema","id","randomUUID","registry","z","add","key","value","globalRegistry","_idmap","schemas","toJSONSchema","uri","toComponentsPath","e","Error"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6BaA,MAAAA,YAAAA,GAAe,CAC1BC,SAAAA,GAAAA;IAEA,IAAI;AACF,QAAA,MAAMC,EAAKC,GAAAA,sBAAAA,EAAAA;QACX,MAAMC,QAAAA,GAAWC,aAAED,QAAQ,EAAA;;QAG3BA,QAASE,CAAAA,GAAG,CAACL,SAAW,EAAA;AAAEC,YAAAA;AAAG,SAAA,CAAA;;;QAI7B,KAAK,MAAM,CAACK,GAAKC,EAAAA,KAAAA,CAAM,IAAIH,YAAEI,CAAAA,cAAc,CAACC,MAAM,CAAE;YAClDN,QAASE,CAAAA,GAAG,CAACE,KAAO,EAAA;gBAAEN,EAAIK,EAAAA;AAAI,aAAA,CAAA;AAChC;;AAGA,QAAA,MAAM,EAAEI,OAAO,EAAE,GAAGN,YAAEO,CAAAA,YAAY,CAACR,QAAU,EAAA;YAAES,GAAKC,EAAAA;AAAiB,SAAA,CAAA;;QAGrE,OAAOH,OAAO,CAACT,EAAG,CAAA;AACpB,KAAA,CAAE,OAAOa,CAAG,EAAA;AACV,QAAA,MAAM,IAAIC,KAAM,CAAA,0DAAA,CAAA;AAClB;AACF;AAEA;;;;;IAMaF,MAAAA,gBAAAA,GAAmB,CAACZ,EAAAA,GAAe,CAAC,qBAAqB,EAAEA,EAAG,CAAA;;;;;"}
|