@rvoh/psychic 0.36.0-beta.1 → 0.37.0-beta.3
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/dist/cjs/src/controller/index.js +18 -12
- package/dist/cjs/src/openapi-renderer/app.js +16 -15
- package/dist/cjs/src/openapi-renderer/body-segment.js +3 -6
- package/dist/cjs/src/openapi-renderer/endpoint.js +56 -103
- package/dist/cjs/src/openapi-renderer/helpers/{suppressResponseEnums.js → suppressResponseEnumsConfig.js} +2 -2
- package/dist/cjs/src/psychic-app/index.js +0 -1
- package/dist/cjs/src/server/index.js +1 -35
- package/dist/esm/src/controller/index.js +19 -13
- package/dist/esm/src/openapi-renderer/app.js +17 -16
- package/dist/esm/src/openapi-renderer/body-segment.js +3 -6
- package/dist/esm/src/openapi-renderer/endpoint.js +57 -104
- package/dist/esm/src/openapi-renderer/helpers/{suppressResponseEnums.js → suppressResponseEnumsConfig.js} +1 -1
- package/dist/esm/src/psychic-app/index.js +0 -1
- package/dist/esm/src/server/index.js +1 -35
- package/dist/types/src/controller/index.d.ts +3 -1
- package/dist/types/src/openapi-renderer/body-segment.d.ts +4 -7
- package/dist/types/src/openapi-renderer/endpoint.d.ts +17 -21
- package/dist/types/src/openapi-renderer/helpers/{schemaDelimiter.d.ts → suppressResponseEnumsConfig.d.ts} +1 -1
- package/dist/types/src/psychic-app/index.d.ts +0 -53
- package/dist/types/src/server/index.d.ts +0 -1
- package/package.json +2 -5
- package/dist/cjs/src/openapi-renderer/helpers/schemaDelimiter.js +0 -13
- package/dist/esm/src/openapi-renderer/helpers/schemaDelimiter.js +0 -7
- package/dist/types/src/openapi-renderer/helpers/suppressResponseEnums.d.ts +0 -4
|
@@ -4,14 +4,25 @@ import { HttpStatusCode, HttpStatusCodeNumber } from '../error/http/status-codes
|
|
|
4
4
|
import { RouteConfig } from '../router/route-manager.js';
|
|
5
5
|
import { HttpMethod } from '../router/types.js';
|
|
6
6
|
import { OpenapiBodySegment, ReferencedSerializersAndOpenapiEndpointResponse, SerializerArray } from './body-segment.js';
|
|
7
|
+
export interface OpenapiRenderOpts {
|
|
8
|
+
casing: SerializerCasing;
|
|
9
|
+
suppressResponseEnums: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ToPathObjectOpts {
|
|
12
|
+
openapiName: string;
|
|
13
|
+
renderOpts: OpenapiRenderOpts;
|
|
14
|
+
}
|
|
15
|
+
export interface ToSchemaObjectOpts {
|
|
16
|
+
openapiName: string;
|
|
17
|
+
renderOpts: OpenapiRenderOpts;
|
|
18
|
+
alreadyExtractedDescendantSerializers: Record<string, boolean>;
|
|
19
|
+
renderedSchemasOpenapi: Record<string, OpenapiSchemaBody>;
|
|
20
|
+
serializersAppearingInHandWrittenOpenapi: SerializerArray;
|
|
21
|
+
}
|
|
7
22
|
export default class OpenapiEndpointRenderer<DreamsOrSerializersOrViewModels extends DreamSerializable | DreamSerializableArray> {
|
|
8
23
|
private dreamsOrSerializers;
|
|
9
24
|
private controllerClass;
|
|
10
25
|
private action;
|
|
11
|
-
private openapiName;
|
|
12
|
-
private casing;
|
|
13
|
-
private schemaDelimiter;
|
|
14
|
-
private suppressResponseEnums;
|
|
15
26
|
private many;
|
|
16
27
|
private paginate;
|
|
17
28
|
private responses;
|
|
@@ -57,12 +68,7 @@ export default class OpenapiEndpointRenderer<DreamsOrSerializersOrViewModels ext
|
|
|
57
68
|
* `#toPathObject` specifically builds the `paths` portion of the
|
|
58
69
|
* final openapi.json output
|
|
59
70
|
*/
|
|
60
|
-
toPathObject(routes: RouteConfig[], { openapiName,
|
|
61
|
-
openapiName: string;
|
|
62
|
-
casing: SerializerCasing;
|
|
63
|
-
schemaDelimiter: string;
|
|
64
|
-
suppressResponseEnums: boolean;
|
|
65
|
-
}): ReferencedSerializersAndOpenapiEndpointResponse;
|
|
71
|
+
toPathObject(routes: RouteConfig[], { openapiName, renderOpts }: ToPathObjectOpts): ReferencedSerializersAndOpenapiEndpointResponse;
|
|
66
72
|
/**
|
|
67
73
|
* @internal
|
|
68
74
|
*
|
|
@@ -78,17 +84,7 @@ export default class OpenapiEndpointRenderer<DreamsOrSerializersOrViewModels ext
|
|
|
78
84
|
* final openapi.json output, adding any relevant entries that were uncovered
|
|
79
85
|
* while parsing the responses and provided callback function.
|
|
80
86
|
*/
|
|
81
|
-
toSchemaObject({ openapiName,
|
|
82
|
-
openapiName: string;
|
|
83
|
-
casing: SerializerCasing;
|
|
84
|
-
schemaDelimiter: string;
|
|
85
|
-
suppressResponseEnums: boolean;
|
|
86
|
-
processedSchemas: Record<string, boolean>;
|
|
87
|
-
serializersAppearingInHandWrittenOpenapi: SerializerArray;
|
|
88
|
-
}): {
|
|
89
|
-
processedSchemas: Record<string, boolean>;
|
|
90
|
-
renderedSchemas: Record<string, OpenapiSchemaBody>;
|
|
91
|
-
};
|
|
87
|
+
toSchemaObject({ openapiName, renderOpts, alreadyExtractedDescendantSerializers, renderedSchemasOpenapi, serializersAppearingInHandWrittenOpenapi, }: ToSchemaObjectOpts): void;
|
|
92
88
|
/**
|
|
93
89
|
* @internal
|
|
94
90
|
*
|
|
@@ -3,7 +3,6 @@ import * as bodyParser from 'body-parser';
|
|
|
3
3
|
import { Command } from 'commander';
|
|
4
4
|
import { CorsOptions } from 'cors';
|
|
5
5
|
import { Request, Response } from 'express';
|
|
6
|
-
import * as OpenApiValidator from 'express-openapi-validator';
|
|
7
6
|
import * as http from 'node:http';
|
|
8
7
|
import { OpenapiContent, OpenapiHeaders, OpenapiResponses, OpenapiSecurity, OpenapiSecuritySchemes, OpenapiServer } from '../openapi-renderer/endpoint.js';
|
|
9
8
|
import PsychicRouter from '../router/index.js';
|
|
@@ -169,10 +168,6 @@ interface PsychicOpenapiBaseOptions {
|
|
|
169
168
|
* ```
|
|
170
169
|
*/
|
|
171
170
|
servers?: OpenapiServer[];
|
|
172
|
-
/**
|
|
173
|
-
* DEPRECATED. TODO: remove schemaDelimiter
|
|
174
|
-
*/
|
|
175
|
-
schemaDelimiter?: string;
|
|
176
171
|
/**
|
|
177
172
|
* When true, all response fields utilizing openapi enums
|
|
178
173
|
* will be converted strictly to strings, with a description
|
|
@@ -221,54 +216,6 @@ interface PsychicOpenapiBaseOptions {
|
|
|
221
216
|
* ```
|
|
222
217
|
*/
|
|
223
218
|
syncTypes?: boolean;
|
|
224
|
-
/**
|
|
225
|
-
* provide validation for this file. If this is set, Psychic will
|
|
226
|
-
* automatically bootstrap your server upon starting using the
|
|
227
|
-
* `express-openapi-validator` package, which will create validation
|
|
228
|
-
* rules out of each endpoint in accordance with the corresponding
|
|
229
|
-
* openapi file.
|
|
230
|
-
*
|
|
231
|
-
* ```ts
|
|
232
|
-
* const ignorePaths = [
|
|
233
|
-
* 'webhooks',
|
|
234
|
-
* 'account/security-code',
|
|
235
|
-
* 'central/v1/salesforce/twilio-proxy/*',
|
|
236
|
-
* 'central/v1/salesforce/twilio-media-proxy/*',
|
|
237
|
-
* ]
|
|
238
|
-
*
|
|
239
|
-
* const datetimeValidator: OpenAPIValidatorFormat = {
|
|
240
|
-
* type: 'string',
|
|
241
|
-
* validate: (value: DateTime | string) => {
|
|
242
|
-
* return value instanceof DateTime ? value?.isValid : DateTime.fromISO(value).isValid
|
|
243
|
-
* },
|
|
244
|
-
* }
|
|
245
|
-
*
|
|
246
|
-
* psy.set('openapi', {
|
|
247
|
-
* validation: {
|
|
248
|
-
* validateRequests: true,
|
|
249
|
-
* validateSecurity: false,
|
|
250
|
-
* validateResponses: AppEnv.isTest,
|
|
251
|
-
* ignoreUndocumented: true,
|
|
252
|
-
* formats: {
|
|
253
|
-
* 'date-time': datetimeValidator,
|
|
254
|
-
* decimal: {
|
|
255
|
-
* type: 'string',
|
|
256
|
-
* validate: (value: string) => /^-?(\d+\.?\d*|\d*\.?\d+)$/.test(value),
|
|
257
|
-
* },
|
|
258
|
-
* },
|
|
259
|
-
* serDes: [
|
|
260
|
-
* {
|
|
261
|
-
* format: 'date-time',
|
|
262
|
-
* deserialize: s => DateTime.fromISO(s),
|
|
263
|
-
* serialize: (o: unknown) => (o instanceof DateTime ? o.toISO() : o)! as string,
|
|
264
|
-
* },
|
|
265
|
-
* ],
|
|
266
|
-
* ignorePaths: ignorePaths.length ? new RegExp(ignorePaths.join('|')) : undefined,
|
|
267
|
-
* }
|
|
268
|
-
* })
|
|
269
|
-
* ```
|
|
270
|
-
*/
|
|
271
|
-
validation?: Partial<Parameters<(typeof OpenApiValidator)['middleware']>[0]>;
|
|
272
219
|
/**
|
|
273
220
|
* an object containing default values for all endpoints,
|
|
274
221
|
* like headers and responses.
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@rvoh/psychic",
|
|
4
4
|
"description": "Typescript web framework",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.37.0-beta.3",
|
|
6
6
|
"author": "RVOHealth",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
@@ -46,8 +46,6 @@
|
|
|
46
46
|
"cookie-parser": "^1.4.7",
|
|
47
47
|
"cors": "^2.8.5",
|
|
48
48
|
"dotenv": "^16.4.5",
|
|
49
|
-
"express-openapi-validator": "^5.4.3",
|
|
50
|
-
"lodash-es": "^4.17.21",
|
|
51
49
|
"pluralize-esm": "^9.0.5",
|
|
52
50
|
"yoctocolors": "^2.1.1"
|
|
53
51
|
},
|
|
@@ -60,11 +58,10 @@
|
|
|
60
58
|
"devDependencies": {
|
|
61
59
|
"@eslint/js": "^9.19.0",
|
|
62
60
|
"@jest-mock/express": "^3.0.0",
|
|
63
|
-
"@rvoh/dream": "^0.43.0-beta.
|
|
61
|
+
"@rvoh/dream": "^0.43.0-beta.4",
|
|
64
62
|
"@rvoh/dream-spec-helpers": "^0.2.4",
|
|
65
63
|
"@rvoh/psychic-spec-helpers": "^0.6.0",
|
|
66
64
|
"@types/express": "^5.0.1",
|
|
67
|
-
"@types/lodash-es": "^4",
|
|
68
65
|
"@types/node": "^22.5.1",
|
|
69
66
|
"@types/pg": "^8.11.8",
|
|
70
67
|
"@types/supertest": "^6.0.3",
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.default = schemaDelimiter;
|
|
7
|
-
const openapiOpts_js_1 = __importDefault(require("./openapiOpts.js"));
|
|
8
|
-
/**
|
|
9
|
-
* returns either the delimiter set in the app config, or else a blank string
|
|
10
|
-
*/
|
|
11
|
-
function schemaDelimiter(openapiName) {
|
|
12
|
-
return (0, openapiOpts_js_1.default)(openapiName)?.schemaDelimiter || '';
|
|
13
|
-
}
|