@furystack/rest-service 12.2.0 → 12.3.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/CHANGELOG.md +44 -0
- package/esm/api-manager.d.ts +1 -1
- package/esm/api-manager.d.ts.map +1 -1
- package/esm/api-manager.js +3 -2
- package/esm/api-manager.js.map +1 -1
- package/esm/endpoint-generators/create-get-openapi-document-action.d.ts +29 -0
- package/esm/endpoint-generators/create-get-openapi-document-action.d.ts.map +1 -0
- package/esm/endpoint-generators/create-get-openapi-document-action.js +61 -0
- package/esm/endpoint-generators/create-get-openapi-document-action.js.map +1 -0
- package/esm/endpoint-generators/index.d.ts +2 -0
- package/esm/endpoint-generators/index.d.ts.map +1 -1
- package/esm/endpoint-generators/index.js +2 -0
- package/esm/endpoint-generators/index.js.map +1 -1
- package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts +23 -0
- package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts.map +1 -0
- package/esm/endpoint-generators/with-schema-and-openapi-action.js +2 -0
- package/esm/endpoint-generators/with-schema-and-openapi-action.js.map +1 -0
- package/esm/openapi/auth-provider-to-security-scheme.d.ts +14 -0
- package/esm/openapi/auth-provider-to-security-scheme.d.ts.map +1 -0
- package/esm/openapi/auth-provider-to-security-scheme.js +35 -0
- package/esm/openapi/auth-provider-to-security-scheme.js.map +1 -0
- package/esm/openapi/auth-provider-to-security-scheme.spec.d.ts +2 -0
- package/esm/openapi/auth-provider-to-security-scheme.spec.d.ts.map +1 -0
- package/esm/openapi/auth-provider-to-security-scheme.spec.js +42 -0
- package/esm/openapi/auth-provider-to-security-scheme.spec.js.map +1 -0
- package/esm/openapi/generate-openapi-document.d.ts +21 -0
- package/esm/openapi/generate-openapi-document.d.ts.map +1 -0
- package/esm/openapi/generate-openapi-document.js +144 -0
- package/esm/openapi/generate-openapi-document.js.map +1 -0
- package/esm/openapi/generate-openapi-document.spec.d.ts +2 -0
- package/esm/openapi/generate-openapi-document.spec.d.ts.map +1 -0
- package/esm/openapi/generate-openapi-document.spec.js +643 -0
- package/esm/openapi/generate-openapi-document.spec.js.map +1 -0
- package/esm/openapi/openapi-round-trip.advanced-api.json +363 -0
- package/esm/openapi/openapi-round-trip.crud-api.json +115 -0
- package/esm/openapi/openapi-round-trip.example-api.json +71 -0
- package/esm/openapi/openapi-round-trip.spec.d.ts +2 -0
- package/esm/openapi/openapi-round-trip.spec.d.ts.map +1 -0
- package/esm/openapi/openapi-round-trip.spec.js +525 -0
- package/esm/openapi/openapi-round-trip.spec.js.map +1 -0
- package/esm/swagger/generate-swagger-json.spec.js +1 -1
- package/esm/swagger/generate-swagger-json.spec.js.map +1 -1
- package/esm/validate.integration.spec.js +153 -32
- package/esm/validate.integration.spec.js.map +1 -1
- package/package.json +9 -9
- package/src/api-manager.ts +7 -3
- package/src/endpoint-generators/create-get-openapi-document-action.ts +96 -0
- package/src/endpoint-generators/index.ts +2 -0
- package/src/endpoint-generators/with-schema-and-openapi-action.ts +14 -0
- package/src/openapi/auth-provider-to-security-scheme.spec.ts +50 -0
- package/src/openapi/auth-provider-to-security-scheme.ts +41 -0
- package/src/openapi/generate-openapi-document.spec.ts +733 -0
- package/src/openapi/generate-openapi-document.ts +198 -0
- package/src/openapi/openapi-round-trip.advanced-api.json +363 -0
- package/src/openapi/openapi-round-trip.crud-api.json +115 -0
- package/src/openapi/openapi-round-trip.example-api.json +71 -0
- package/src/openapi/openapi-round-trip.spec.ts +621 -0
- package/src/swagger/generate-swagger-json.spec.ts +1 -1
- package/src/validate.integration.spec.ts +184 -33
- package/esm/endpoint-generators/create-get-swagger-json-action.d.ts +0 -14
- package/esm/endpoint-generators/create-get-swagger-json-action.d.ts.map +0 -1
- package/esm/endpoint-generators/create-get-swagger-json-action.js +0 -18
- package/esm/endpoint-generators/create-get-swagger-json-action.js.map +0 -1
- package/esm/endpoint-generators/with-schema-and-swagger-action.d.ts +0 -21
- package/esm/endpoint-generators/with-schema-and-swagger-action.d.ts.map +0 -1
- package/esm/endpoint-generators/with-schema-and-swagger-action.js +0 -2
- package/esm/endpoint-generators/with-schema-and-swagger-action.js.map +0 -1
- package/esm/swagger/generate-swagger-json.d.ts +0 -14
- package/esm/swagger/generate-swagger-json.d.ts.map +0 -1
- package/esm/swagger/generate-swagger-json.js +0 -108
- package/esm/swagger/generate-swagger-json.js.map +0 -1
- package/src/endpoint-generators/create-get-swagger-json-action.ts +0 -26
- package/src/endpoint-generators/with-schema-and-swagger-action.ts +0 -11
- package/src/swagger/generate-swagger-json.ts +0 -132
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ApiEndpointDefinition,
|
|
3
|
-
ApiEndpointSchema,
|
|
4
|
-
Method,
|
|
5
|
-
Operation,
|
|
6
|
-
ParameterObject,
|
|
7
|
-
SwaggerDocument,
|
|
8
|
-
} from '@furystack/rest'
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Converts a FuryStack API schema to an OpenAPI 3.1 compatible document
|
|
12
|
-
*
|
|
13
|
-
* @param schema - The FuryStack API schema to convert
|
|
14
|
-
* @returns A SwaggerDocument in OpenAPI 3.1 format
|
|
15
|
-
*/
|
|
16
|
-
export const generateSwaggerJsonFromApiSchema = ({
|
|
17
|
-
api,
|
|
18
|
-
title = 'FuryStack API',
|
|
19
|
-
description = 'API documentation generated from FuryStack API schema',
|
|
20
|
-
version = '1.0.0',
|
|
21
|
-
}: {
|
|
22
|
-
api: ApiEndpointSchema['endpoints']
|
|
23
|
-
title?: string
|
|
24
|
-
description?: string
|
|
25
|
-
version?: string
|
|
26
|
-
}): SwaggerDocument => {
|
|
27
|
-
const swaggerJson: SwaggerDocument = {
|
|
28
|
-
openapi: '3.1.0',
|
|
29
|
-
info: {
|
|
30
|
-
title,
|
|
31
|
-
version,
|
|
32
|
-
description,
|
|
33
|
-
},
|
|
34
|
-
jsonSchemaDialect: 'https://spec.openapis.org/oas/3.1/dialect/base',
|
|
35
|
-
servers: [{ url: '/' }],
|
|
36
|
-
tags: [],
|
|
37
|
-
paths: {},
|
|
38
|
-
components: {
|
|
39
|
-
schemas: {},
|
|
40
|
-
securitySchemes: {
|
|
41
|
-
cookieAuth: {
|
|
42
|
-
type: 'apiKey',
|
|
43
|
-
in: 'cookie',
|
|
44
|
-
name: 'session',
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
for (const [methodKey, paths] of Object.entries(api) as Array<[Method, Record<string, ApiEndpointDefinition>]>) {
|
|
51
|
-
for (const [path, definition] of Object.entries(paths)) {
|
|
52
|
-
// Normalize path to OpenAPI format (convert :param to {param})
|
|
53
|
-
const normalizedPath = path.replace(/:([^/]+)/g, '{$1}')
|
|
54
|
-
if (!swaggerJson.paths![normalizedPath]) {
|
|
55
|
-
swaggerJson.paths![normalizedPath] = {}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Extract path parameters
|
|
59
|
-
const pathParams = Array.from(path.matchAll(/:([^/]+)/g), (m) => m[1])
|
|
60
|
-
const parameters: ParameterObject[] = pathParams.map((param) => ({
|
|
61
|
-
name: param,
|
|
62
|
-
in: 'path',
|
|
63
|
-
required: true,
|
|
64
|
-
description: `Path parameter: ${param}`,
|
|
65
|
-
schema: { type: 'string' },
|
|
66
|
-
}))
|
|
67
|
-
|
|
68
|
-
// Build operation
|
|
69
|
-
const method = methodKey.toLowerCase()
|
|
70
|
-
const operation: Operation = {
|
|
71
|
-
summary: `${methodKey} ${path}`,
|
|
72
|
-
description: `Endpoint for ${path}`,
|
|
73
|
-
operationId: `${method}${path.replace(/\//g, '_').replace(/:/g, '').replace(/-/g, '_')}`,
|
|
74
|
-
security: definition.isAuthenticated ? [{ cookieAuth: [] }] : [],
|
|
75
|
-
parameters,
|
|
76
|
-
responses: {
|
|
77
|
-
'200': {
|
|
78
|
-
description: 'Successful operation',
|
|
79
|
-
content: {
|
|
80
|
-
'application/json': {
|
|
81
|
-
schema: definition.schemaName
|
|
82
|
-
? { $ref: `#/components/schemas/${definition.schemaName}` }
|
|
83
|
-
: { type: 'object' },
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
'401': { description: 'Unauthorized' },
|
|
88
|
-
'500': { description: 'Internal server error' },
|
|
89
|
-
},
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Add schema to components if not already there
|
|
93
|
-
if (definition.schema && definition.schemaName) {
|
|
94
|
-
swaggerJson.components!.schemas![definition.schemaName] = definition.schema
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// Assign the operation to the correct HTTP method property of PathItem
|
|
98
|
-
const pathItem = swaggerJson.paths![normalizedPath]
|
|
99
|
-
switch (method) {
|
|
100
|
-
case 'get':
|
|
101
|
-
pathItem.get = operation
|
|
102
|
-
break
|
|
103
|
-
case 'put':
|
|
104
|
-
pathItem.put = operation
|
|
105
|
-
break
|
|
106
|
-
case 'post':
|
|
107
|
-
pathItem.post = operation
|
|
108
|
-
break
|
|
109
|
-
case 'delete':
|
|
110
|
-
pathItem.delete = operation
|
|
111
|
-
break
|
|
112
|
-
case 'options':
|
|
113
|
-
pathItem.options = operation
|
|
114
|
-
break
|
|
115
|
-
case 'head':
|
|
116
|
-
pathItem.head = operation
|
|
117
|
-
break
|
|
118
|
-
case 'patch':
|
|
119
|
-
pathItem.patch = operation
|
|
120
|
-
break
|
|
121
|
-
case 'trace':
|
|
122
|
-
pathItem.trace = operation
|
|
123
|
-
break
|
|
124
|
-
default:
|
|
125
|
-
// Ignore unknown methods
|
|
126
|
-
break
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return swaggerJson
|
|
132
|
-
}
|