@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.
Files changed (24) hide show
  1. package/dist/cjs/src/controller/index.js +18 -12
  2. package/dist/cjs/src/openapi-renderer/app.js +16 -15
  3. package/dist/cjs/src/openapi-renderer/body-segment.js +3 -6
  4. package/dist/cjs/src/openapi-renderer/endpoint.js +56 -103
  5. package/dist/cjs/src/openapi-renderer/helpers/{suppressResponseEnums.js → suppressResponseEnumsConfig.js} +2 -2
  6. package/dist/cjs/src/psychic-app/index.js +0 -1
  7. package/dist/cjs/src/server/index.js +1 -35
  8. package/dist/esm/src/controller/index.js +19 -13
  9. package/dist/esm/src/openapi-renderer/app.js +17 -16
  10. package/dist/esm/src/openapi-renderer/body-segment.js +3 -6
  11. package/dist/esm/src/openapi-renderer/endpoint.js +57 -104
  12. package/dist/esm/src/openapi-renderer/helpers/{suppressResponseEnums.js → suppressResponseEnumsConfig.js} +1 -1
  13. package/dist/esm/src/psychic-app/index.js +0 -1
  14. package/dist/esm/src/server/index.js +1 -35
  15. package/dist/types/src/controller/index.d.ts +3 -1
  16. package/dist/types/src/openapi-renderer/body-segment.d.ts +4 -7
  17. package/dist/types/src/openapi-renderer/endpoint.d.ts +17 -21
  18. package/dist/types/src/openapi-renderer/helpers/{schemaDelimiter.d.ts → suppressResponseEnumsConfig.d.ts} +1 -1
  19. package/dist/types/src/psychic-app/index.d.ts +0 -53
  20. package/dist/types/src/server/index.d.ts +0 -1
  21. package/package.json +2 -5
  22. package/dist/cjs/src/openapi-renderer/helpers/schemaDelimiter.js +0 -13
  23. package/dist/esm/src/openapi-renderer/helpers/schemaDelimiter.js +0 -7
  24. 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, casing, schemaDelimiter, suppressResponseEnums, }: {
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, casing, schemaDelimiter, suppressResponseEnums, processedSchemas, serializersAppearingInHandWrittenOpenapi, }: {
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
  *
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * returns either the delimiter set in the app config, or else a blank string
3
3
  */
4
- export default function schemaDelimiter(openapiName: string): string;
4
+ export default function suppressResponseEnumsConfig(openapiName: string): boolean;
@@ -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.
@@ -24,6 +24,5 @@ export default class PsychicServer {
24
24
  buildApp(): void;
25
25
  private initializeCors;
26
26
  private initializeJSON;
27
- private initializeOpenapiValidation;
28
27
  private buildRoutes;
29
28
  }
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.36.0-beta.1",
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.1",
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
- }
@@ -1,7 +0,0 @@
1
- import openapiOpts from './openapiOpts.js';
2
- /**
3
- * returns either the delimiter set in the app config, or else a blank string
4
- */
5
- export default function schemaDelimiter(openapiName) {
6
- return openapiOpts(openapiName)?.schemaDelimiter || '';
7
- }
@@ -1,4 +0,0 @@
1
- /**
2
- * returns either the delimiter set in the app config, or else a blank string
3
- */
4
- export default function suppressResponseEnums(openapiName: string): boolean;