@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.
Files changed (74) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/esm/api-manager.d.ts +1 -1
  3. package/esm/api-manager.d.ts.map +1 -1
  4. package/esm/api-manager.js +3 -2
  5. package/esm/api-manager.js.map +1 -1
  6. package/esm/endpoint-generators/create-get-openapi-document-action.d.ts +29 -0
  7. package/esm/endpoint-generators/create-get-openapi-document-action.d.ts.map +1 -0
  8. package/esm/endpoint-generators/create-get-openapi-document-action.js +61 -0
  9. package/esm/endpoint-generators/create-get-openapi-document-action.js.map +1 -0
  10. package/esm/endpoint-generators/index.d.ts +2 -0
  11. package/esm/endpoint-generators/index.d.ts.map +1 -1
  12. package/esm/endpoint-generators/index.js +2 -0
  13. package/esm/endpoint-generators/index.js.map +1 -1
  14. package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts +23 -0
  15. package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts.map +1 -0
  16. package/esm/endpoint-generators/with-schema-and-openapi-action.js +2 -0
  17. package/esm/endpoint-generators/with-schema-and-openapi-action.js.map +1 -0
  18. package/esm/openapi/auth-provider-to-security-scheme.d.ts +14 -0
  19. package/esm/openapi/auth-provider-to-security-scheme.d.ts.map +1 -0
  20. package/esm/openapi/auth-provider-to-security-scheme.js +35 -0
  21. package/esm/openapi/auth-provider-to-security-scheme.js.map +1 -0
  22. package/esm/openapi/auth-provider-to-security-scheme.spec.d.ts +2 -0
  23. package/esm/openapi/auth-provider-to-security-scheme.spec.d.ts.map +1 -0
  24. package/esm/openapi/auth-provider-to-security-scheme.spec.js +42 -0
  25. package/esm/openapi/auth-provider-to-security-scheme.spec.js.map +1 -0
  26. package/esm/openapi/generate-openapi-document.d.ts +21 -0
  27. package/esm/openapi/generate-openapi-document.d.ts.map +1 -0
  28. package/esm/openapi/generate-openapi-document.js +144 -0
  29. package/esm/openapi/generate-openapi-document.js.map +1 -0
  30. package/esm/openapi/generate-openapi-document.spec.d.ts +2 -0
  31. package/esm/openapi/generate-openapi-document.spec.d.ts.map +1 -0
  32. package/esm/openapi/generate-openapi-document.spec.js +643 -0
  33. package/esm/openapi/generate-openapi-document.spec.js.map +1 -0
  34. package/esm/openapi/openapi-round-trip.advanced-api.json +363 -0
  35. package/esm/openapi/openapi-round-trip.crud-api.json +115 -0
  36. package/esm/openapi/openapi-round-trip.example-api.json +71 -0
  37. package/esm/openapi/openapi-round-trip.spec.d.ts +2 -0
  38. package/esm/openapi/openapi-round-trip.spec.d.ts.map +1 -0
  39. package/esm/openapi/openapi-round-trip.spec.js +525 -0
  40. package/esm/openapi/openapi-round-trip.spec.js.map +1 -0
  41. package/esm/swagger/generate-swagger-json.spec.js +1 -1
  42. package/esm/swagger/generate-swagger-json.spec.js.map +1 -1
  43. package/esm/validate.integration.spec.js +153 -32
  44. package/esm/validate.integration.spec.js.map +1 -1
  45. package/package.json +9 -9
  46. package/src/api-manager.ts +7 -3
  47. package/src/endpoint-generators/create-get-openapi-document-action.ts +96 -0
  48. package/src/endpoint-generators/index.ts +2 -0
  49. package/src/endpoint-generators/with-schema-and-openapi-action.ts +14 -0
  50. package/src/openapi/auth-provider-to-security-scheme.spec.ts +50 -0
  51. package/src/openapi/auth-provider-to-security-scheme.ts +41 -0
  52. package/src/openapi/generate-openapi-document.spec.ts +733 -0
  53. package/src/openapi/generate-openapi-document.ts +198 -0
  54. package/src/openapi/openapi-round-trip.advanced-api.json +363 -0
  55. package/src/openapi/openapi-round-trip.crud-api.json +115 -0
  56. package/src/openapi/openapi-round-trip.example-api.json +71 -0
  57. package/src/openapi/openapi-round-trip.spec.ts +621 -0
  58. package/src/swagger/generate-swagger-json.spec.ts +1 -1
  59. package/src/validate.integration.spec.ts +184 -33
  60. package/esm/endpoint-generators/create-get-swagger-json-action.d.ts +0 -14
  61. package/esm/endpoint-generators/create-get-swagger-json-action.d.ts.map +0 -1
  62. package/esm/endpoint-generators/create-get-swagger-json-action.js +0 -18
  63. package/esm/endpoint-generators/create-get-swagger-json-action.js.map +0 -1
  64. package/esm/endpoint-generators/with-schema-and-swagger-action.d.ts +0 -21
  65. package/esm/endpoint-generators/with-schema-and-swagger-action.d.ts.map +0 -1
  66. package/esm/endpoint-generators/with-schema-and-swagger-action.js +0 -2
  67. package/esm/endpoint-generators/with-schema-and-swagger-action.js.map +0 -1
  68. package/esm/swagger/generate-swagger-json.d.ts +0 -14
  69. package/esm/swagger/generate-swagger-json.d.ts.map +0 -1
  70. package/esm/swagger/generate-swagger-json.js +0 -108
  71. package/esm/swagger/generate-swagger-json.js.map +0 -1
  72. package/src/endpoint-generators/create-get-swagger-json-action.ts +0 -26
  73. package/src/endpoint-generators/with-schema-and-swagger-action.ts +0 -11
  74. 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
- }