@trapi/swagger 1.3.0 → 2.0.0-beta.1

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.
Files changed (118) hide show
  1. package/README.MD +146 -6
  2. package/dist/index.d.mts +825 -0
  3. package/dist/index.d.mts.map +1 -0
  4. package/dist/index.mjs +1308 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/package.json +20 -14
  7. package/dist/config/index.d.ts +0 -3
  8. package/dist/config/index.d.ts.map +0 -1
  9. package/dist/config/index.js +0 -25
  10. package/dist/config/index.js.map +0 -1
  11. package/dist/config/type.d.ts +0 -83
  12. package/dist/config/type.d.ts.map +0 -1
  13. package/dist/config/type.js +0 -9
  14. package/dist/config/type.js.map +0 -1
  15. package/dist/config/utils.d.ts +0 -3
  16. package/dist/config/utils.d.ts.map +0 -1
  17. package/dist/config/utils.js +0 -53
  18. package/dist/config/utils.js.map +0 -1
  19. package/dist/constants.d.ts +0 -15
  20. package/dist/constants.d.ts.map +0 -1
  21. package/dist/constants.js +0 -27
  22. package/dist/constants.js.map +0 -1
  23. package/dist/generator/abstract.d.ts +0 -35
  24. package/dist/generator/abstract.d.ts.map +0 -1
  25. package/dist/generator/abstract.js +0 -254
  26. package/dist/generator/abstract.js.map +0 -1
  27. package/dist/generator/index.d.ts +0 -5
  28. package/dist/generator/index.d.ts.map +0 -1
  29. package/dist/generator/index.js +0 -27
  30. package/dist/generator/index.js.map +0 -1
  31. package/dist/generator/module.d.ts +0 -14
  32. package/dist/generator/module.d.ts.map +0 -1
  33. package/dist/generator/module.js +0 -34
  34. package/dist/generator/module.js.map +0 -1
  35. package/dist/generator/v2/index.d.ts +0 -2
  36. package/dist/generator/v2/index.d.ts.map +0 -1
  37. package/dist/generator/v2/index.js +0 -24
  38. package/dist/generator/v2/index.js.map +0 -1
  39. package/dist/generator/v2/module.d.ts +0 -25
  40. package/dist/generator/v2/module.d.ts.map +0 -1
  41. package/dist/generator/v2/module.js +0 -517
  42. package/dist/generator/v2/module.js.map +0 -1
  43. package/dist/generator/v3/index.d.ts +0 -2
  44. package/dist/generator/v3/index.d.ts.map +0 -1
  45. package/dist/generator/v3/index.js +0 -24
  46. package/dist/generator/v3/index.js.map +0 -1
  47. package/dist/generator/v3/module.d.ts +0 -30
  48. package/dist/generator/v3/module.d.ts.map +0 -1
  49. package/dist/generator/v3/module.js +0 -500
  50. package/dist/generator/v3/module.js.map +0 -1
  51. package/dist/index.d.ts +0 -8
  52. package/dist/index.d.ts.map +0 -1
  53. package/dist/index.js +0 -30
  54. package/dist/index.js.map +0 -1
  55. package/dist/metadata.d.ts +0 -4
  56. package/dist/metadata.d.ts.map +0 -1
  57. package/dist/metadata.js +0 -14
  58. package/dist/metadata.js.map +0 -1
  59. package/dist/schema/constants.d.ts +0 -28
  60. package/dist/schema/constants.d.ts.map +0 -1
  61. package/dist/schema/constants.js +0 -40
  62. package/dist/schema/constants.js.map +0 -1
  63. package/dist/schema/index.d.ts +0 -5
  64. package/dist/schema/index.d.ts.map +0 -1
  65. package/dist/schema/index.js +0 -27
  66. package/dist/schema/index.js.map +0 -1
  67. package/dist/schema/type.d.ts +0 -139
  68. package/dist/schema/type.d.ts.map +0 -1
  69. package/dist/schema/type.js +0 -9
  70. package/dist/schema/type.js.map +0 -1
  71. package/dist/schema/v2/constants.d.ts +0 -8
  72. package/dist/schema/v2/constants.d.ts.map +0 -1
  73. package/dist/schema/v2/constants.js +0 -18
  74. package/dist/schema/v2/constants.js.map +0 -1
  75. package/dist/schema/v2/index.d.ts +0 -3
  76. package/dist/schema/v2/index.d.ts.map +0 -1
  77. package/dist/schema/v2/index.js +0 -25
  78. package/dist/schema/v2/index.js.map +0 -1
  79. package/dist/schema/v2/type.d.ts +0 -116
  80. package/dist/schema/v2/type.d.ts.map +0 -1
  81. package/dist/schema/v2/type.js +0 -9
  82. package/dist/schema/v2/type.js.map +0 -1
  83. package/dist/schema/v3/constants.d.ts +0 -7
  84. package/dist/schema/v3/constants.d.ts.map +0 -1
  85. package/dist/schema/v3/constants.js +0 -17
  86. package/dist/schema/v3/constants.js.map +0 -1
  87. package/dist/schema/v3/index.d.ts +0 -3
  88. package/dist/schema/v3/index.d.ts.map +0 -1
  89. package/dist/schema/v3/index.js +0 -25
  90. package/dist/schema/v3/index.js.map +0 -1
  91. package/dist/schema/v3/type.d.ts +0 -159
  92. package/dist/schema/v3/type.d.ts.map +0 -1
  93. package/dist/schema/v3/type.js +0 -9
  94. package/dist/schema/v3/type.js.map +0 -1
  95. package/dist/type.d.ts +0 -49
  96. package/dist/type.d.ts.map +0 -1
  97. package/dist/type.js +0 -9
  98. package/dist/type.js.map +0 -1
  99. package/dist/utils/character.d.ts +0 -3
  100. package/dist/utils/character.d.ts.map +0 -1
  101. package/dist/utils/character.js +0 -20
  102. package/dist/utils/character.js.map +0 -1
  103. package/dist/utils/index.d.ts +0 -5
  104. package/dist/utils/index.d.ts.map +0 -1
  105. package/dist/utils/index.js +0 -27
  106. package/dist/utils/index.js.map +0 -1
  107. package/dist/utils/object.d.ts +0 -2
  108. package/dist/utils/object.d.ts.map +0 -1
  109. package/dist/utils/object.js +0 -14
  110. package/dist/utils/object.js.map +0 -1
  111. package/dist/utils/path.d.ts +0 -2
  112. package/dist/utils/path.d.ts.map +0 -1
  113. package/dist/utils/path.js +0 -20
  114. package/dist/utils/path.js.map +0 -1
  115. package/dist/utils/value.d.ts +0 -2
  116. package/dist/utils/value.d.ts.map +0 -1
  117. package/dist/utils/value.js +0 -25
  118. package/dist/utils/value.js.map +0 -1
package/README.MD CHANGED
@@ -5,13 +5,22 @@
5
5
  [![Known Vulnerabilities](https://snyk.io/test/github/Tada5hi/trapi/badge.svg)](https://snyk.io/test/github/Tada5hi/trapi)
6
6
  [![npm version](https://badge.fury.io/js/@trapi%2Fswagger.svg)](https://badge.fury.io/js/@trapi%2Fswagger)
7
7
 
8
- This is a tool to generate swagger documentation in `json` or `yml` format with a given metadata definition file.
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
- Please read the `CHANGELOG.md` in the repository for breaking changes.
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
- **Important NOTE**
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
- The `Readme.md` is under construction ☂ at the moment. So please stay patient, till it is available ⭐.
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