@trapi/swagger 1.3.0 → 2.0.0-beta.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.
- package/README.MD +146 -6
- package/dist/index.d.mts +812 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +1306 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +20 -14
- package/dist/config/index.d.ts +0 -3
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -25
- package/dist/config/index.js.map +0 -1
- package/dist/config/type.d.ts +0 -83
- package/dist/config/type.d.ts.map +0 -1
- package/dist/config/type.js +0 -9
- package/dist/config/type.js.map +0 -1
- package/dist/config/utils.d.ts +0 -3
- package/dist/config/utils.d.ts.map +0 -1
- package/dist/config/utils.js +0 -53
- package/dist/config/utils.js.map +0 -1
- package/dist/constants.d.ts +0 -15
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -27
- package/dist/constants.js.map +0 -1
- package/dist/generator/abstract.d.ts +0 -35
- package/dist/generator/abstract.d.ts.map +0 -1
- package/dist/generator/abstract.js +0 -254
- package/dist/generator/abstract.js.map +0 -1
- package/dist/generator/index.d.ts +0 -5
- package/dist/generator/index.d.ts.map +0 -1
- package/dist/generator/index.js +0 -27
- package/dist/generator/index.js.map +0 -1
- package/dist/generator/module.d.ts +0 -14
- package/dist/generator/module.d.ts.map +0 -1
- package/dist/generator/module.js +0 -34
- package/dist/generator/module.js.map +0 -1
- package/dist/generator/v2/index.d.ts +0 -2
- package/dist/generator/v2/index.d.ts.map +0 -1
- package/dist/generator/v2/index.js +0 -24
- package/dist/generator/v2/index.js.map +0 -1
- package/dist/generator/v2/module.d.ts +0 -25
- package/dist/generator/v2/module.d.ts.map +0 -1
- package/dist/generator/v2/module.js +0 -517
- package/dist/generator/v2/module.js.map +0 -1
- package/dist/generator/v3/index.d.ts +0 -2
- package/dist/generator/v3/index.d.ts.map +0 -1
- package/dist/generator/v3/index.js +0 -24
- package/dist/generator/v3/index.js.map +0 -1
- package/dist/generator/v3/module.d.ts +0 -30
- package/dist/generator/v3/module.d.ts.map +0 -1
- package/dist/generator/v3/module.js +0 -500
- package/dist/generator/v3/module.js.map +0 -1
- package/dist/index.d.ts +0 -8
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -30
- package/dist/index.js.map +0 -1
- package/dist/metadata.d.ts +0 -4
- package/dist/metadata.d.ts.map +0 -1
- package/dist/metadata.js +0 -14
- package/dist/metadata.js.map +0 -1
- package/dist/schema/constants.d.ts +0 -28
- package/dist/schema/constants.d.ts.map +0 -1
- package/dist/schema/constants.js +0 -40
- package/dist/schema/constants.js.map +0 -1
- package/dist/schema/index.d.ts +0 -5
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -27
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/type.d.ts +0 -139
- package/dist/schema/type.d.ts.map +0 -1
- package/dist/schema/type.js +0 -9
- package/dist/schema/type.js.map +0 -1
- package/dist/schema/v2/constants.d.ts +0 -8
- package/dist/schema/v2/constants.d.ts.map +0 -1
- package/dist/schema/v2/constants.js +0 -18
- package/dist/schema/v2/constants.js.map +0 -1
- package/dist/schema/v2/index.d.ts +0 -3
- package/dist/schema/v2/index.d.ts.map +0 -1
- package/dist/schema/v2/index.js +0 -25
- package/dist/schema/v2/index.js.map +0 -1
- package/dist/schema/v2/type.d.ts +0 -116
- package/dist/schema/v2/type.d.ts.map +0 -1
- package/dist/schema/v2/type.js +0 -9
- package/dist/schema/v2/type.js.map +0 -1
- package/dist/schema/v3/constants.d.ts +0 -7
- package/dist/schema/v3/constants.d.ts.map +0 -1
- package/dist/schema/v3/constants.js +0 -17
- package/dist/schema/v3/constants.js.map +0 -1
- package/dist/schema/v3/index.d.ts +0 -3
- package/dist/schema/v3/index.d.ts.map +0 -1
- package/dist/schema/v3/index.js +0 -25
- package/dist/schema/v3/index.js.map +0 -1
- package/dist/schema/v3/type.d.ts +0 -159
- package/dist/schema/v3/type.d.ts.map +0 -1
- package/dist/schema/v3/type.js +0 -9
- package/dist/schema/v3/type.js.map +0 -1
- package/dist/type.d.ts +0 -49
- package/dist/type.d.ts.map +0 -1
- package/dist/type.js +0 -9
- package/dist/type.js.map +0 -1
- package/dist/utils/character.d.ts +0 -3
- package/dist/utils/character.d.ts.map +0 -1
- package/dist/utils/character.js +0 -20
- package/dist/utils/character.js.map +0 -1
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -27
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/object.d.ts +0 -2
- package/dist/utils/object.d.ts.map +0 -1
- package/dist/utils/object.js +0 -14
- package/dist/utils/object.js.map +0 -1
- package/dist/utils/path.d.ts +0 -2
- package/dist/utils/path.d.ts.map +0 -1
- package/dist/utils/path.js +0 -20
- package/dist/utils/path.js.map +0 -1
- package/dist/utils/value.d.ts +0 -2
- package/dist/utils/value.d.ts.map +0 -1
- package/dist/utils/value.js +0 -25
- package/dist/utils/value.js.map +0 -1
package/README.MD
CHANGED
|
@@ -5,13 +5,22 @@
|
|
|
5
5
|
[](https://snyk.io/test/github/Tada5hi/trapi)
|
|
6
6
|
[](https://badge.fury.io/js/@trapi%2Fswagger)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Transforms TRAPI metadata into an OpenAPI specification (2.0 / Swagger, 3.0, 3.1, or 3.2) and, optionally, writes it to disk as JSON or YAML.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Inspect the `CHANGELOG.md` in the repository for breaking changes.
|
|
11
|
+
|
|
12
|
+
## Public API
|
|
13
|
+
|
|
14
|
+
The stable public surface is documented in the [API Reference](https://trapi.tada5hi.net/guide/swagger-api-reference). Anything not listed there should be treated as internal even if it is re-exported, and may change without a major version bump.
|
|
11
15
|
|
|
12
16
|
**Table of Contents**
|
|
13
17
|
|
|
14
18
|
- [Installation](#installation)
|
|
19
|
+
- [Usage](#usage)
|
|
20
|
+
- [Configuration](#configuration)
|
|
21
|
+
- [Saving to Disk](#saving-to-disk)
|
|
22
|
+
- [Supported Versions](#supported-versions)
|
|
23
|
+
- [Structure](#structure)
|
|
15
24
|
- [License](#license)
|
|
16
25
|
|
|
17
26
|
## Installation
|
|
@@ -20,12 +29,143 @@ Please read the `CHANGELOG.md` in the repository for breaking changes.
|
|
|
20
29
|
npm install --save @trapi/swagger
|
|
21
30
|
```
|
|
22
31
|
|
|
23
|
-
|
|
24
|
-
|
|
32
|
+
`@trapi/metadata` is a direct dependency of `@trapi/swagger`, so it is pulled in automatically. Install it explicitly if you want to import its types (`Metadata`, `MetadataGenerateOptions`) in your own code:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm install --save @trapi/metadata
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
You also need a preset matching the decorator library used by your controllers (or your own custom preset). The examples below use [@decorators/express](https://github.com/serhiisol/node-decorators) via [`@trapi/preset-decorators-express`](../preset-decorators-express); install both:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install --save @trapi/preset-decorators-express @decorators/express
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Usage
|
|
45
|
+
|
|
46
|
+
`generateSwagger()` accepts either pre-built metadata or metadata generation options — when options are supplied, it runs `generateMetadata()` internally first.
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
import { generateSwagger, saveSwagger } from '@trapi/swagger';
|
|
50
|
+
|
|
51
|
+
const spec = await generateSwagger({
|
|
52
|
+
version: 'v3',
|
|
53
|
+
metadata: {
|
|
54
|
+
entryPoint: ['src/controllers/**/*.ts'],
|
|
55
|
+
preset: '@trapi/preset-decorators-express',
|
|
56
|
+
},
|
|
57
|
+
data: {
|
|
58
|
+
name: 'My API',
|
|
59
|
+
version: '1.0.0',
|
|
60
|
+
description: 'Example service',
|
|
61
|
+
servers: 'https://api.example.com',
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
await saveSwagger(spec, { cwd: './docs', format: 'yaml' });
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Reusing pre-built metadata is useful if you need it for more than just OpenAPI generation:
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
import { generateMetadata } from '@trapi/metadata';
|
|
72
|
+
import { generateSwagger } from '@trapi/swagger';
|
|
73
|
+
|
|
74
|
+
const metadata = await generateMetadata({
|
|
75
|
+
entryPoint: ['src/controllers/**/*.ts'],
|
|
76
|
+
preset: '@trapi/preset-decorators-express',
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const spec = await generateSwagger({
|
|
80
|
+
version: 'v3',
|
|
81
|
+
metadata,
|
|
82
|
+
data: { name: 'My API', version: '1.0.0' },
|
|
83
|
+
});
|
|
84
|
+
```
|
|
25
85
|
|
|
26
|
-
|
|
86
|
+
## Configuration
|
|
27
87
|
|
|
28
|
-
|
|
88
|
+
```typescript
|
|
89
|
+
import type { Metadata, MetadataGenerateOptions } from '@trapi/metadata';
|
|
90
|
+
|
|
91
|
+
export type SwaggerGenerateOptions = {
|
|
92
|
+
/**
|
|
93
|
+
* OpenAPI spec version to generate.
|
|
94
|
+
* Accepts 'v2', 'v3', 'v3.1', 'v3.2'.
|
|
95
|
+
*/
|
|
96
|
+
version: 'v2' | 'v3' | 'v3.1' | 'v3.2';
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Pre-built metadata, or options to generate it from source.
|
|
100
|
+
*/
|
|
101
|
+
metadata: MetadataGenerateOptions | Metadata;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Document-level content (info block, servers, security, ...).
|
|
105
|
+
* All fields are optional and default to values read from the nearest package.json where possible.
|
|
106
|
+
*/
|
|
107
|
+
data?: SwaggerGenerateData;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export type SwaggerGenerateData = {
|
|
111
|
+
name?: string; // info.title
|
|
112
|
+
version?: string; // info.version
|
|
113
|
+
description?: string; // info.description
|
|
114
|
+
license?: string; // info.license.name
|
|
115
|
+
servers?: string | string[] | ServerOption | ServerOption[];
|
|
116
|
+
securityDefinitions?: SecurityDefinitions; // OAuth2, API key, basic auth, ...
|
|
117
|
+
consumes?: string[]; // default request content types
|
|
118
|
+
produces?: string[]; // default response content types
|
|
119
|
+
collectionFormat?: 'csv' | 'ssv' | 'tsv' | 'pipes' | 'multi';
|
|
120
|
+
extra?: Record<string, any>; // merged into the final spec
|
|
121
|
+
};
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`extra` is a raw spec fragment merged onto the generated output. Generated properties take precedence where keys overlap.
|
|
125
|
+
|
|
126
|
+
## Saving to Disk
|
|
127
|
+
|
|
128
|
+
`saveSwagger()` writes the spec to `cwd/name.{format}`. Each call writes exactly one file — call it twice if you want both JSON and YAML. It returns the `DocumentFormatData` for the written file.
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
await saveSwagger(spec, {
|
|
132
|
+
cwd: './docs', // default: process.cwd() (relative paths resolve against it)
|
|
133
|
+
name: 'openapi', // default: 'swagger' — any trailing .json/.yaml is replaced to match format
|
|
134
|
+
format: 'yaml', // 'json' | 'yaml' — default: 'json'
|
|
135
|
+
});
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
If you need in-memory output only, skip `saveSwagger()` and use the value returned by `generateSwagger()` directly.
|
|
139
|
+
|
|
140
|
+
## Supported Versions
|
|
141
|
+
|
|
142
|
+
| Version | `spec.openapi` | Notes |
|
|
143
|
+
|---------|---------------|-------|
|
|
144
|
+
| `v2` | swagger 2.0 | Uses `x-nullable`, `x-deprecated`, flattens intersection types |
|
|
145
|
+
| `v3` | `3.0.0` | Uses `nullable`, `deprecated`, `allOf` for intersections, `requestBody`; strips `$ref` siblings for spec compliance |
|
|
146
|
+
| `v3.1` | `3.1.0` | Same emitter as `v3`; allows `$ref` siblings (OpenAPI 3.1 relaxed that restriction) |
|
|
147
|
+
| `v3.2` | `3.2.0` | Same emitter as `v3.1` |
|
|
148
|
+
|
|
149
|
+
Version-specific differences that matter most:
|
|
150
|
+
|
|
151
|
+
- **Nullable types**: V2 emits `x-nullable: true` (non-standard); V3 uses `nullable: true`.
|
|
152
|
+
- **Request body**: V2 emits `in: body` parameters; V3 emits a top-level `requestBody`.
|
|
153
|
+
- **File uploads**: V2 uses `type: file` formData; V3 uses `multipart/form-data` request bodies.
|
|
154
|
+
- **Intersections**: V2 flattens all member properties into the object; V3 emits `allOf`.
|
|
155
|
+
|
|
156
|
+
## Structure
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
src/
|
|
160
|
+
├── core/ # Domain types, config, OpenAPI schema types, errors
|
|
161
|
+
│ ├── config/
|
|
162
|
+
│ ├── schema/v2, v3
|
|
163
|
+
│ └── utils/
|
|
164
|
+
├── adapters/ # Emitters (V2Generator, V3Generator)
|
|
165
|
+
│ └── generator/abstract.ts, v2/, v3/
|
|
166
|
+
├── app/ # Orchestration (generateSwagger, saveSwagger)
|
|
167
|
+
└── index.ts # Public entry point
|
|
168
|
+
```
|
|
29
169
|
|
|
30
170
|
## License
|
|
31
171
|
|