@rvoh/psychic 0.37.0-beta.3 → 0.37.0-beta.5

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 (62) hide show
  1. package/dist/cjs/src/bin/index.js +2 -2
  2. package/dist/cjs/src/controller/helpers/isPaginatedResult.js +5 -2
  3. package/dist/cjs/src/error/openapi/AttemptedToDeriveDescendentSerializersFromNonSerializer.js +16 -0
  4. package/dist/cjs/src/error/openapi/ExpectedSerializerForRendersOneOrManyOption.js +36 -0
  5. package/dist/cjs/src/error/openapi/NoSerializerFoundForRendersOneAndMany.js +16 -0
  6. package/dist/cjs/src/error/openapi/NonSerializerPassedToSerializerOpenapiRenderer.js +16 -0
  7. package/dist/cjs/src/error/openapi/NonSerializerSerializerOverrideProvided.js +23 -0
  8. package/dist/cjs/src/error/openapi/ObjectSerializerRendersOneAndManyRequireClassType.js +19 -0
  9. package/dist/cjs/src/helpers/isObject.js +12 -0
  10. package/dist/cjs/src/helpers/pathifyNestedObject.js +5 -2
  11. package/dist/cjs/src/openapi-renderer/SerializerOpenapiRenderer.js +362 -0
  12. package/dist/cjs/src/openapi-renderer/body-segment.js +5 -3
  13. package/dist/cjs/src/openapi-renderer/endpoint.js +6 -5
  14. package/dist/cjs/src/openapi-renderer/helpers/allSerializersFromHandWrittenOpenapi.js +34 -0
  15. package/dist/cjs/src/openapi-renderer/helpers/allSerializersToRefsInOpenapi.js +52 -0
  16. package/dist/cjs/src/openapi-renderer/helpers/dreamAttributeOpenapiShape.js +145 -0
  17. package/dist/cjs/src/openapi-renderer/helpers/isOpenapiShorthand.js +16 -0
  18. package/dist/cjs/src/openapi-renderer/helpers/maybeNullOpenapiShorthandToOpenapiShorthand.js +17 -0
  19. package/dist/cjs/src/openapi-renderer/helpers/openapiShorthandToOpenapi.js +111 -0
  20. package/dist/cjs/src/openapi-renderer/helpers/primitiveOpenapiStatementToOpenapi.js +5 -2
  21. package/dist/cjs/src/server/params.js +4 -4
  22. package/dist/esm/src/bin/index.js +1 -1
  23. package/dist/esm/src/controller/helpers/isPaginatedResult.js +1 -1
  24. package/dist/esm/src/error/openapi/AttemptedToDeriveDescendentSerializersFromNonSerializer.js +13 -0
  25. package/dist/esm/src/error/openapi/ExpectedSerializerForRendersOneOrManyOption.js +33 -0
  26. package/dist/esm/src/error/openapi/NoSerializerFoundForRendersOneAndMany.js +13 -0
  27. package/dist/esm/src/error/openapi/NonSerializerPassedToSerializerOpenapiRenderer.js +13 -0
  28. package/dist/esm/src/error/openapi/NonSerializerSerializerOverrideProvided.js +20 -0
  29. package/dist/esm/src/error/openapi/ObjectSerializerRendersOneAndManyRequireClassType.js +16 -0
  30. package/dist/esm/src/helpers/isObject.js +9 -0
  31. package/dist/esm/src/helpers/pathifyNestedObject.js +1 -1
  32. package/dist/esm/src/openapi-renderer/SerializerOpenapiRenderer.js +356 -0
  33. package/dist/esm/src/openapi-renderer/body-segment.js +3 -1
  34. package/dist/esm/src/openapi-renderer/endpoint.js +2 -1
  35. package/dist/esm/src/openapi-renderer/helpers/allSerializersFromHandWrittenOpenapi.js +28 -0
  36. package/dist/esm/src/openapi-renderer/helpers/allSerializersToRefsInOpenapi.js +46 -0
  37. package/dist/esm/src/openapi-renderer/helpers/dreamAttributeOpenapiShape.js +136 -0
  38. package/dist/esm/src/openapi-renderer/helpers/isOpenapiShorthand.js +10 -0
  39. package/dist/esm/src/openapi-renderer/helpers/maybeNullOpenapiShorthandToOpenapiShorthand.js +14 -0
  40. package/dist/esm/src/openapi-renderer/helpers/openapiShorthandToOpenapi.js +102 -0
  41. package/dist/esm/src/openapi-renderer/helpers/primitiveOpenapiStatementToOpenapi.js +1 -1
  42. package/dist/esm/src/server/params.js +3 -3
  43. package/dist/types/src/error/openapi/AttemptedToDeriveDescendentSerializersFromNonSerializer.d.ts +5 -0
  44. package/dist/types/src/error/openapi/ExpectedSerializerForRendersOneOrManyOption.d.ts +8 -0
  45. package/dist/types/src/error/openapi/NoSerializerFoundForRendersOneAndMany.d.ts +5 -0
  46. package/dist/types/src/error/openapi/NonSerializerPassedToSerializerOpenapiRenderer.d.ts +5 -0
  47. package/dist/types/src/error/openapi/NonSerializerSerializerOverrideProvided.d.ts +6 -0
  48. package/dist/types/src/error/openapi/ObjectSerializerRendersOneAndManyRequireClassType.d.ts +5 -0
  49. package/dist/types/src/helpers/isObject.d.ts +1 -0
  50. package/dist/types/src/helpers/typeHelpers.d.ts +2 -0
  51. package/dist/types/src/openapi-renderer/SerializerOpenapiRenderer.d.ts +25 -0
  52. package/dist/types/src/openapi-renderer/endpoint.d.ts +2 -1
  53. package/dist/types/src/openapi-renderer/helpers/allSerializersFromHandWrittenOpenapi.d.ts +2 -0
  54. package/dist/types/src/openapi-renderer/helpers/allSerializersToRefsInOpenapi.d.ts +2 -0
  55. package/dist/types/src/openapi-renderer/helpers/dreamAttributeOpenapiShape.d.ts +780 -0
  56. package/dist/types/src/openapi-renderer/helpers/isOpenapiShorthand.d.ts +1 -0
  57. package/dist/types/src/openapi-renderer/helpers/maybeNullOpenapiShorthandToOpenapiShorthand.d.ts +2 -0
  58. package/dist/types/src/openapi-renderer/helpers/openapiShorthandToOpenapi.d.ts +16 -0
  59. package/package.json +2 -2
  60. package/dist/cjs/src/helpers/typechecks.js +0 -20
  61. package/dist/esm/src/helpers/typechecks.js +0 -16
  62. package/dist/types/src/helpers/typechecks.d.ts +0 -2
@@ -0,0 +1,102 @@
1
+ import isObject from '../../helpers/isObject.js';
2
+ import isOpenapiShorthand from './isOpenapiShorthand.js';
3
+ import maybeNullOpenapiShorthandToOpenapiShorthand from './maybeNullOpenapiShorthandToOpenapiShorthand.js';
4
+ export default function openapiShorthandToOpenapi(openapi, options = {}) {
5
+ if (isOpenapiShorthand(openapi)) {
6
+ return _openapiShorthandToOpenapi(openapi, options);
7
+ }
8
+ else if (isObject(openapi)) {
9
+ return openapi;
10
+ }
11
+ else {
12
+ throw new UnrecognizedOpenapiShape(openapi);
13
+ }
14
+ }
15
+ function _openapiShorthandToOpenapi(shorthand, options) {
16
+ const shorthandString = maybeNullOpenapiShorthandToOpenapiShorthand(shorthand);
17
+ if (!shorthandString)
18
+ return { type: 'null' };
19
+ const openapi = simpleOpenapiShorthandToOpenapi(shorthandString);
20
+ if (options.maybeNull || openapiShorthandIncludesNull(shorthand))
21
+ return { ...openapi, type: [openapi.type, 'null'] };
22
+ return openapi;
23
+ }
24
+ function simpleOpenapiShorthandToOpenapi(shorthand) {
25
+ switch (shorthand) {
26
+ case 'string':
27
+ return { type: 'string' };
28
+ case 'boolean':
29
+ return { type: 'boolean' };
30
+ case 'number':
31
+ return { type: 'number' };
32
+ case 'date':
33
+ return { type: 'string', format: 'date' };
34
+ case 'date-time':
35
+ return { type: 'string', format: 'date-time' };
36
+ case 'decimal':
37
+ return { type: 'number', format: 'decimal' };
38
+ case 'integer':
39
+ return { type: 'integer' };
40
+ case 'null':
41
+ return { type: 'null' };
42
+ case 'string[]':
43
+ return { type: 'array', items: { type: 'string' } };
44
+ case 'boolean[]':
45
+ return { type: 'array', items: { type: 'boolean' } };
46
+ case 'number[]':
47
+ return { type: 'array', items: { type: 'number' } };
48
+ case 'date[]':
49
+ return { type: 'array', items: { type: 'string', format: 'date' } };
50
+ case 'date-time[]':
51
+ return { type: 'array', items: { type: 'string', format: 'date-time' } };
52
+ case 'decimal[]':
53
+ return { type: 'array', items: { type: 'number', format: 'decimal' } };
54
+ case 'integer[]':
55
+ return { type: 'array', items: { type: 'integer' } };
56
+ case 'json':
57
+ return { type: 'json' };
58
+ default: {
59
+ // protection so that if a new OpenapiShorthandPrimitiveBaseTypes is ever added, this will throw a type error at build time
60
+ const _never = shorthand;
61
+ throw new UnrecognizedOpenapiShorthand(_never);
62
+ }
63
+ }
64
+ }
65
+ function openapiShorthandIncludesNull(openapi) {
66
+ if (openapi === undefined)
67
+ return false;
68
+ if (typeof openapi === 'string')
69
+ return false;
70
+ if (!Array.isArray(openapi))
71
+ return false;
72
+ if (openapi.length !== 2)
73
+ return false;
74
+ if (openapi[1] === 'null')
75
+ return true;
76
+ if (openapi[0] === 'null')
77
+ return true;
78
+ return false;
79
+ }
80
+ export class UnrecognizedOpenapiShorthand extends Error {
81
+ shorthand;
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ constructor(shorthand) {
84
+ super();
85
+ this.shorthand = shorthand;
86
+ }
87
+ get message() {
88
+ return `Unrecognized OpenAPI shorthand: ${JSON.stringify(this.shorthand)}`;
89
+ }
90
+ }
91
+ export class UnrecognizedOpenapiShape extends Error {
92
+ openapi;
93
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
94
+ constructor(openapi) {
95
+ super();
96
+ this.openapi = openapi;
97
+ }
98
+ get message() {
99
+ return `Unrecognized OpenAPI shape:
100
+ ${JSON.stringify(this.openapi)}`;
101
+ }
102
+ }
@@ -1,4 +1,4 @@
1
- import { openapiShorthandToOpenapi, } from '@rvoh/dream';
1
+ import openapiShorthandToOpenapi from './openapiShorthandToOpenapi.js';
2
2
  /**
3
3
  * @internal
4
4
  *
@@ -1,10 +1,10 @@
1
1
  import { CalendarDate, camelize, compact, DateTime, snakeify, } from '@rvoh/dream';
2
2
  import ParamValidationError from '../error/controller/ParamValidationError.js';
3
3
  import ParamValidationErrors from '../error/controller/ParamValidationErrors.js';
4
- import isUuid from '../helpers/isUuid.js';
5
- import { isObject } from '../helpers/typechecks.js';
6
- import isArrayParamName from '../helpers/isArrayParamName.js';
7
4
  import alternateParamName from '../helpers/alternateParamName.js';
5
+ import isArrayParamName from '../helpers/isArrayParamName.js';
6
+ import isObject from '../helpers/isObject.js';
7
+ import isUuid from '../helpers/isUuid.js';
8
8
  export default class Params {
9
9
  $params;
10
10
  /**
@@ -0,0 +1,5 @@
1
+ export default class AttemptedToDeriveDescendentSerializersFromNonSerializer extends Error {
2
+ private serializer;
3
+ constructor(serializer: any);
4
+ get message(): string;
5
+ }
@@ -0,0 +1,8 @@
1
+ import { InternalAnyTypedSerializerRendersMany, InternalAnyTypedSerializerRendersOne } from '@rvoh/dream';
2
+ export default class ExpectedSerializerForRendersOneOrManyOption extends Error {
3
+ private rendersOneOrMany;
4
+ private referencingSerializerName;
5
+ private attribute;
6
+ constructor(rendersOneOrMany: 'rendersOne' | 'rendersMany', referencingSerializerName: string, attribute: InternalAnyTypedSerializerRendersOne<any, string> | InternalAnyTypedSerializerRendersMany<any, string>);
7
+ get message(): string;
8
+ }
@@ -0,0 +1,5 @@
1
+ export default class NoSerializerFoundForRendersOneAndMany extends Error {
2
+ private associationName;
3
+ constructor(associationName: string);
4
+ get message(): string;
5
+ }
@@ -0,0 +1,5 @@
1
+ export default class NonSerializerPassedToSerializerOpenapiRenderer extends Error {
2
+ private serializer;
3
+ constructor(serializer: any);
4
+ get message(): string;
5
+ }
@@ -0,0 +1,6 @@
1
+ export default class NonSerializerSerializerOverrideProvided extends Error {
2
+ private rendersAssociation;
3
+ private serializer;
4
+ constructor(rendersAssociation: any, serializer: any);
5
+ get message(): string;
6
+ }
@@ -0,0 +1,5 @@
1
+ export default class ObjectSerializerRendersOneAndManyRequireClassType extends Error {
2
+ private associationName;
3
+ constructor(associationName: string);
4
+ get message(): string;
5
+ }
@@ -0,0 +1 @@
1
+ export default function isObject(x: any): boolean;
@@ -1,5 +1,7 @@
1
+ import { Dream, DreamOrViewModelClassSerializerKey, DreamSerializableArray, ViewModelClass } from '@rvoh/dream';
1
2
  export type FunctionProperties<T> = {
2
3
  [K in keyof T as T[K] extends (...args: any[]) => any ? K : never]: T[K];
3
4
  };
4
5
  export type FunctionPropertyNames<T> = keyof FunctionProperties<T> & string;
5
6
  export type StringToInt<T extends string> = T extends `${infer N extends number}` ? N : never;
7
+ export type DreamOrViewModelClassSerializerArrayKeys<T extends DreamSerializableArray> = T['length'] extends 0 ? string : T[0] extends typeof Dream | ViewModelClass ? DreamOrViewModelClassSerializerKey<T[0]> & DreamOrViewModelClassSerializerArrayKeys<T extends [any, ...infer Rest] ? Rest : never> : DreamOrViewModelClassSerializerArrayKeys<T extends [any, ...infer Rest] ? Rest : never>;
@@ -0,0 +1,25 @@
1
+ import { DreamModelSerializerType, OpenapiSchemaBodyShorthand, OpenapiSchemaExpressionRef, SerializerCasing, SimpleObjectSerializerType } from '@rvoh/dream';
2
+ export default class SerializerOpenapiRenderer {
3
+ private serializer;
4
+ private casing;
5
+ private suppressResponseEnums;
6
+ private allOfSiblings;
7
+ constructor(serializer: DreamModelSerializerType | SimpleObjectSerializerType, { casing, suppressResponseEnums, }?: {
8
+ casing?: SerializerCasing;
9
+ suppressResponseEnums?: boolean;
10
+ });
11
+ get globalName(): string;
12
+ get openapiName(): string;
13
+ get serializerRef(): OpenapiSchemaExpressionRef;
14
+ private _serializerBuilder;
15
+ private get serializerBuilder();
16
+ renderedOpenapi(alreadyExtractedDescendantSerializers?: Record<string, boolean>): ReferencedSerializersAndOpenapiSchemaBodyShorthand;
17
+ private _renderedOpenapi;
18
+ private renderedOpenapiAttributes;
19
+ private setCase;
20
+ }
21
+ interface ReferencedSerializersAndOpenapiSchemaBodyShorthand {
22
+ referencedSerializers: (DreamModelSerializerType | SimpleObjectSerializerType)[];
23
+ openapi: OpenapiSchemaBodyShorthand;
24
+ }
25
+ export {};
@@ -1,6 +1,7 @@
1
- import { Dream, DreamOrViewModelClassSerializerArrayKeys, DreamOrViewModelClassSerializerKey, DreamSerializable, DreamSerializableArray, OpenapiAllTypes, OpenapiFormats, OpenapiSchemaArray, OpenapiSchemaBody, OpenapiSchemaBodyShorthand, OpenapiSchemaExpressionAllOf, OpenapiSchemaExpressionAnyOf, OpenapiSchemaExpressionOneOf, OpenapiSchemaExpressionRef, OpenapiSchemaObject, OpenapiSchemaProperties, SerializerCasing, ViewModelClass } from '@rvoh/dream';
1
+ import { Dream, DreamOrViewModelClassSerializerKey, DreamSerializable, DreamSerializableArray, OpenapiAllTypes, OpenapiFormats, OpenapiSchemaArray, OpenapiSchemaBody, OpenapiSchemaBodyShorthand, OpenapiSchemaExpressionAllOf, OpenapiSchemaExpressionAnyOf, OpenapiSchemaExpressionOneOf, OpenapiSchemaExpressionRef, OpenapiSchemaObject, OpenapiSchemaProperties, SerializerCasing, ViewModelClass } from '@rvoh/dream';
2
2
  import PsychicController from '../controller/index.js';
3
3
  import { HttpStatusCode, HttpStatusCodeNumber } from '../error/http/status-codes.js';
4
+ import { DreamOrViewModelClassSerializerArrayKeys } from '../helpers/typeHelpers.js';
4
5
  import { RouteConfig } from '../router/route-manager.js';
5
6
  import { HttpMethod } from '../router/types.js';
6
7
  import { OpenapiBodySegment, ReferencedSerializersAndOpenapiEndpointResponse, SerializerArray } from './body-segment.js';
@@ -0,0 +1,2 @@
1
+ import { DreamModelSerializerType, OpenapiSchemaBodyShorthand, OpenapiShorthandPrimitiveTypes, SimpleObjectSerializerType } from '@rvoh/dream';
2
+ export default function allSerializersFromHandWrittenOpenapi(openapi: OpenapiSchemaBodyShorthand | OpenapiShorthandPrimitiveTypes | undefined): (DreamModelSerializerType | SimpleObjectSerializerType)[];
@@ -0,0 +1,2 @@
1
+ import { OpenapiSchemaBodyShorthand, OpenapiShorthandPrimitiveTypes } from '@rvoh/dream';
2
+ export default function allSerializersToRefsInOpenapi(openapi: OpenapiSchemaBodyShorthand | OpenapiShorthandPrimitiveTypes | undefined): OpenapiSchemaBodyShorthand;