@spinajs/http-swagger 2.0.470 → 2.0.472

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 (71) hide show
  1. package/lib/cjs/cli/GenerateSwaggerCache.d.ts +10 -0
  2. package/lib/cjs/cli/GenerateSwaggerCache.d.ts.map +1 -0
  3. package/lib/cjs/cli/GenerateSwaggerCache.js +43 -0
  4. package/lib/cjs/cli/GenerateSwaggerCache.js.map +1 -0
  5. package/lib/cjs/config/http-swagger.d.ts +42 -0
  6. package/lib/cjs/config/http-swagger.d.ts.map +1 -0
  7. package/lib/cjs/config/http-swagger.js +84 -0
  8. package/lib/cjs/config/http-swagger.js.map +1 -0
  9. package/lib/cjs/controllers/SwaggerController.d.ts +26 -0
  10. package/lib/cjs/controllers/SwaggerController.d.ts.map +1 -0
  11. package/lib/cjs/controllers/SwaggerController.js +74 -0
  12. package/lib/cjs/controllers/SwaggerController.js.map +1 -0
  13. package/lib/cjs/index.d.ts +7 -0
  14. package/lib/cjs/index.d.ts.map +1 -0
  15. package/lib/cjs/index.js +23 -0
  16. package/lib/cjs/index.js.map +1 -0
  17. package/lib/cjs/interfaces.d.ts +211 -0
  18. package/lib/cjs/interfaces.d.ts.map +1 -0
  19. package/lib/cjs/interfaces.js +3 -0
  20. package/lib/cjs/interfaces.js.map +1 -0
  21. package/lib/cjs/openapi-builder.d.ts +153 -0
  22. package/lib/cjs/openapi-builder.d.ts.map +1 -0
  23. package/lib/cjs/openapi-builder.js +844 -0
  24. package/lib/cjs/openapi-builder.js.map +1 -0
  25. package/lib/cjs/package.json +1 -0
  26. package/lib/cjs/swagger-cache.d.ts +18 -0
  27. package/lib/cjs/swagger-cache.d.ts.map +1 -0
  28. package/lib/cjs/swagger-cache.js +110 -0
  29. package/lib/cjs/swagger-cache.js.map +1 -0
  30. package/lib/cjs/swagger-service.d.ts +24 -0
  31. package/lib/cjs/swagger-service.d.ts.map +1 -0
  32. package/lib/cjs/swagger-service.js +88 -0
  33. package/lib/cjs/swagger-service.js.map +1 -0
  34. package/lib/mjs/cli/GenerateSwaggerCache.d.ts +10 -0
  35. package/lib/mjs/cli/GenerateSwaggerCache.d.ts.map +1 -0
  36. package/lib/mjs/cli/GenerateSwaggerCache.js +40 -0
  37. package/lib/mjs/cli/GenerateSwaggerCache.js.map +1 -0
  38. package/lib/mjs/config/http-swagger.d.ts +42 -0
  39. package/lib/mjs/config/http-swagger.d.ts.map +1 -0
  40. package/lib/mjs/config/http-swagger.js +82 -0
  41. package/lib/mjs/config/http-swagger.js.map +1 -0
  42. package/lib/mjs/controllers/SwaggerController.d.ts +26 -0
  43. package/lib/mjs/controllers/SwaggerController.d.ts.map +1 -0
  44. package/lib/mjs/controllers/SwaggerController.js +71 -0
  45. package/lib/mjs/controllers/SwaggerController.js.map +1 -0
  46. package/lib/mjs/index.d.ts +7 -0
  47. package/lib/mjs/index.d.ts.map +1 -0
  48. package/lib/mjs/index.js +7 -0
  49. package/lib/mjs/index.js.map +1 -0
  50. package/lib/mjs/interfaces.d.ts +211 -0
  51. package/lib/mjs/interfaces.d.ts.map +1 -0
  52. package/lib/mjs/interfaces.js +2 -0
  53. package/lib/mjs/interfaces.js.map +1 -0
  54. package/lib/mjs/openapi-builder.d.ts +153 -0
  55. package/lib/mjs/openapi-builder.d.ts.map +1 -0
  56. package/lib/mjs/openapi-builder.js +840 -0
  57. package/lib/mjs/openapi-builder.js.map +1 -0
  58. package/lib/mjs/package.json +1 -0
  59. package/lib/mjs/swagger-cache.d.ts +18 -0
  60. package/lib/mjs/swagger-cache.d.ts.map +1 -0
  61. package/lib/mjs/swagger-cache.js +107 -0
  62. package/lib/mjs/swagger-cache.js.map +1 -0
  63. package/lib/mjs/swagger-service.d.ts +24 -0
  64. package/lib/mjs/swagger-service.d.ts.map +1 -0
  65. package/lib/mjs/swagger-service.js +85 -0
  66. package/lib/mjs/swagger-service.js.map +1 -0
  67. package/lib/tsconfig.cjs.tsbuildinfo +1 -0
  68. package/lib/tsconfig.mjs.tsbuildinfo +1 -0
  69. package/lib/views/swagger-ui-init.js +11 -0
  70. package/lib/views/swagger.pug +16 -0
  71. package/package.json +15 -11
@@ -0,0 +1,153 @@
1
+ import { ClassInfo } from '@spinajs/di';
2
+ import { BaseController } from '@spinajs/http';
3
+ import { IOpenApiDocument, ISwaggerCacheEntry, ISwaggerConfig } from './interfaces.js';
4
+ export declare class OpenApiBuilder {
5
+ private config;
6
+ private document;
7
+ private tags;
8
+ private registeredResponses;
9
+ private errorSchemaRegistered;
10
+ private registeredPolicies;
11
+ private policySectionEntries;
12
+ private infoDescriptionBase;
13
+ constructor(config: ISwaggerConfig);
14
+ /**
15
+ * Add a controller's routes to the OpenAPI document.
16
+ */
17
+ addController(controller: ClassInfo<BaseController>, docCache: ISwaggerCacheEntry): void;
18
+ /**
19
+ * Surface policy information on an operation:
20
+ * - merge controller-level and route-level policies (controller policies run first)
21
+ * - vendor extension `x-policies` for tooling
22
+ * - human-readable line appended to `description`; each policy links to the
23
+ * reusable "Policies" section appended to `info.description`
24
+ *
25
+ * The JSDoc descriptions for each unique policy are registered once on the
26
+ * document via `registerPolicyReference()`.
27
+ */
28
+ private applyPolicies;
29
+ /**
30
+ * Lazily register a policy in the document-level "Policies" section.
31
+ * OpenAPI 3.0 has no first-class "policies" components bucket, so we render
32
+ * them into `info.description` as a markdown anchor that Swagger UI can
33
+ * link to from operation descriptions.
34
+ */
35
+ private registerPolicyReference;
36
+ private policyAnchor;
37
+ private firstSentence;
38
+ /**
39
+ * Read rbac-http's controller descriptor via the global metadata symbol.
40
+ * Returns undefined when the controller isn't RBAC-decorated.
41
+ */
42
+ private readRbacDescriptor;
43
+ /**
44
+ * Attach RBAC info to an operation:
45
+ * - vendor extensions `x-rbac-resource` and `x-rbac-permissions` for
46
+ * tooling / code-gen consumers
47
+ * - a human-readable line appended to the description for Swagger UI
48
+ */
49
+ private applyRbac;
50
+ /**
51
+ * Build the final OpenAPI document.
52
+ */
53
+ build(): IOpenApiDocument;
54
+ /**
55
+ * Build the full URL path for a route.
56
+ */
57
+ private buildPath;
58
+ /**
59
+ * Map SpineJS RouteType to OpenAPI HTTP method string.
60
+ */
61
+ private mapRouteType;
62
+ /**
63
+ * Build an OpenAPI operation from a route and its documentation.
64
+ */
65
+ private buildOperation;
66
+ /**
67
+ * Describe the JSON filter envelope used by orm-http's @Filter decorator.
68
+ *
69
+ * @Filter accepts either:
70
+ * - a Model constructor — @Filterable on its columns stores the filterable
71
+ * column map on the model descriptor (Reflect metadata under
72
+ * Symbol.for('MODEL_DESCRIPTOR')) at class-load time. We read it directly
73
+ * so the schema is available even before orm-http's runtime mixin attaches.
74
+ * - an IColumnFilter[] — we build the same envelope shape inline from the
75
+ * column descriptors.
76
+ *
77
+ * Both cases produce the same { op, filters: [...] } envelope as the runtime
78
+ * builder in packages/orm-http/src/{model.ts,route-arg.ts}.
79
+ */
80
+ private buildFilterSchema;
81
+ /**
82
+ * Read the FilterableColumns map from a model constructor via the orm model
83
+ * descriptor metadata. Keeps http-swagger free of a hard @spinajs/orm dep —
84
+ * the symbol is global (`Symbol.for('MODEL_DESCRIPTOR')`).
85
+ */
86
+ private extractFilterableColumns;
87
+ /**
88
+ * Build the { op, filters: [...] } envelope schema given a list of filterable columns.
89
+ *
90
+ * OAS 3.0.3 (the doc version we emit) does NOT support multi-type arrays for
91
+ * `type` — that's an OAS 3.1 feature. Swagger UI renders such schemas as
92
+ * "Unknown Type: ...". We emit `oneOf` for the Value union and single-typed
93
+ * sub-schemas for everything else.
94
+ */
95
+ private filterEnvelopeSchema;
96
+ /**
97
+ * Resolve the effective OpenAPI location for orm-http's @FromModel param.
98
+ * Mirrors FromDbModel.extract(): paramType decides where the PK is read from
99
+ * (defaults to path/req.params).
100
+ */
101
+ private fromDbModelLocation;
102
+ /**
103
+ * Build an OpenAPI parameter from route parameter info.
104
+ */
105
+ private buildParameter;
106
+ /**
107
+ * Resolve the best schema for a route parameter.
108
+ * Priority: JSDoc type → decorator schema (param.Schema) → auto-detected primitive (param.RouteParamSchema) → @Schema metadata on DTO class → runtime type inference
109
+ */
110
+ private schemaFromParam;
111
+ /**
112
+ * Convert a JSON Schema object to an OpenAPI schema, mapping known keywords.
113
+ */
114
+ private convertJsonSchema;
115
+ /**
116
+ * Build an OpenAPI request body from body-type parameters.
117
+ */
118
+ private buildRequestBody;
119
+ /**
120
+ * Build response definitions from JSDoc @returns and @response tags.
121
+ * Only responses explicitly documented in JSDoc are included.
122
+ */
123
+ private buildResponses;
124
+ /**
125
+ * Lazily register a reusable response component for a standard HTTP status
126
+ * code (e.g. 401 → `#/components/responses/Unauthorized`) and the shared
127
+ * Error schema. Returns the component name to $ref, or undefined if the code
128
+ * isn't in our standard set.
129
+ *
130
+ * JSDoc description overrides the default; first JSDoc description wins per
131
+ * status code so the component stays stable across operations.
132
+ */
133
+ private registerStandardResponse;
134
+ /**
135
+ * Register the shared Error schema once. Matches the runtime error envelope
136
+ * built in packages/http/src/error.ts (spread of the Error instance + message,
137
+ * with optional stack in dev).
138
+ */
139
+ private ensureErrorSchema;
140
+ /**
141
+ * Infer an OpenAPI schema from a TypeScript runtime type.
142
+ */
143
+ private inferSchema;
144
+ /**
145
+ * Infer schema from a JSDoc type string like {string}, {number}, {MyDto}
146
+ */
147
+ private inferSchemaFromString;
148
+ /**
149
+ * Try to parse a string as JSON, return as-is if not valid JSON.
150
+ */
151
+ private tryParseJson;
152
+ }
153
+ //# sourceMappingURL=openapi-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-builder.d.ts","sourceRoot":"","sources":["../../src/openapi-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAc,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,cAAc,EAAqD,MAAM,eAAe,CAAC;AAElG,OAAO,EACL,gBAAgB,EAOhB,kBAAkB,EAClB,cAAc,EAEf,MAAM,iBAAiB,CAAC;AA6FzB,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,mBAAmB,CAAc;gBAE7B,MAAM,EAAE,cAAc;IA2BlC;;OAEG;IACI,aAAa,CAClB,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,EACrC,QAAQ,EAAE,kBAAkB,GAC3B,IAAI;IAgDP;;;;;;;;;OASG;IACH,OAAO,CAAC,aAAa;IAqBrB;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,aAAa;IAMrB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAqBjB;;OAEG;IACI,KAAK,IAAI,gBAAgB;IAKhC;;OAEG;IACH,OAAO,CAAC,SAAS;IAuBjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAoBpB;;OAEG;IACH,OAAO,CAAC,cAAc;IA4FtB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,iBAAiB;IAuCzB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAkBhC;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAsC5B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAsCvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA8DzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgDxB;;;OAGG;IACH,OAAO,CAAC,cAAc;IA2CtB;;;;;;;;OAQG;IACH,OAAO,CAAC,wBAAwB;IAqBhC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAwBnB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACH,OAAO,CAAC,YAAY;CAQrB"}