@rvoh/psychic 3.8.5 → 3.8.6
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/openapi-renderer/body-segment.js +29 -6
- package/dist/cjs/src/openapi-renderer/helpers/allSerializersFromHandWrittenOpenapi.js +2 -3
- package/dist/cjs/src/openapi-renderer/helpers/allSerializersToRefsInOpenapi.js +3 -8
- package/dist/cjs/src/openapi-renderer/helpers/serializersAndRefsFromSerializableRef.js +17 -0
- package/dist/esm/src/openapi-renderer/body-segment.js +29 -6
- package/dist/esm/src/openapi-renderer/helpers/allSerializersFromHandWrittenOpenapi.js +2 -3
- package/dist/esm/src/openapi-renderer/helpers/allSerializersToRefsInOpenapi.js +3 -8
- package/dist/esm/src/openapi-renderer/helpers/serializersAndRefsFromSerializableRef.js +17 -0
- package/dist/types/src/openapi-renderer/helpers/serializersAndRefsFromSerializableRef.d.ts +9 -0
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@ import isBlankDescription from './helpers/isBlankDescription.js';
|
|
|
8
8
|
import maybeNullOpenapiShorthandToOpenapiShorthand from './helpers/maybeNullOpenapiShorthandToOpenapiShorthand.js';
|
|
9
9
|
import primitiveOpenapiStatementToOpenapi from './helpers/primitiveOpenapiStatementToOpenapi.js';
|
|
10
10
|
import schemaToRef from './helpers/schemaToRef.js';
|
|
11
|
+
import serializersAndRefsFromSerializableRef from './helpers/serializersAndRefsFromSerializableRef.js';
|
|
11
12
|
import SerializerOpenapiRenderer from './SerializerOpenapiRenderer.js';
|
|
12
13
|
/**
|
|
13
14
|
* @internal
|
|
@@ -494,13 +495,35 @@ The following values will be allowed:
|
|
|
494
495
|
serializableStatement(bodySegment) {
|
|
495
496
|
const serializableRef = bodySegment;
|
|
496
497
|
const key = serializableRef.$serializableSerializerKey || serializableRef.key || 'default';
|
|
497
|
-
const
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
return this.serializerStatement({
|
|
501
|
-
$serializer: serializer,
|
|
502
|
-
...serializableRef,
|
|
498
|
+
const { serializers, refs } = serializersAndRefsFromSerializableRef(serializableRef, {
|
|
499
|
+
casing: this.casing,
|
|
500
|
+
suppressResponseEnums: this.suppressResponseEnums,
|
|
503
501
|
});
|
|
502
|
+
if (serializers.length === 0)
|
|
503
|
+
throw new Error(`Failed to locate serializers getter from: ${serializableRef.$serializable.name} using key: ${key}`);
|
|
504
|
+
if (serializers.length === 1) {
|
|
505
|
+
return this.serializerStatement({
|
|
506
|
+
$serializer: serializers[0],
|
|
507
|
+
...serializableRef,
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
const serializerAnyOf = { anyOf: refs };
|
|
511
|
+
if (serializableRef.many) {
|
|
512
|
+
return {
|
|
513
|
+
referencedSerializers: serializers,
|
|
514
|
+
openapi: {
|
|
515
|
+
type: serializableRef.maybeNull ? ['array', 'null'] : 'array',
|
|
516
|
+
items: serializerAnyOf,
|
|
517
|
+
},
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
if (serializableRef.maybeNull) {
|
|
521
|
+
return {
|
|
522
|
+
referencedSerializers: serializers,
|
|
523
|
+
openapi: { anyOf: [...refs, { type: 'null' }] },
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
return { referencedSerializers: serializers, openapi: serializerAnyOf };
|
|
504
527
|
}
|
|
505
528
|
/**
|
|
506
529
|
* @internal
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DreamApp } from '@rvoh/dream';
|
|
2
1
|
import isObject from '../../helpers/isObject.js';
|
|
2
|
+
import serializersAndRefsFromSerializableRef from './serializersAndRefsFromSerializableRef.js';
|
|
3
3
|
/**
|
|
4
4
|
* @internal
|
|
5
5
|
*
|
|
@@ -54,8 +54,7 @@ value, serializers) {
|
|
|
54
54
|
//
|
|
55
55
|
}
|
|
56
56
|
else if (value.$serializable) {
|
|
57
|
-
|
|
58
|
-
foundSerializers.forEach(serializer => serializers.add(serializer));
|
|
57
|
+
serializersAndRefsFromSerializableRef(value).serializers.forEach(serializer => serializers.add(serializer));
|
|
59
58
|
//
|
|
60
59
|
}
|
|
61
60
|
else if (isObject(value)) {
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
5
|
-
import { DreamApp } from '@rvoh/dream';
|
|
6
1
|
import isObject from '../../helpers/isObject.js';
|
|
7
2
|
import SerializerOpenapiRenderer from '../SerializerOpenapiRenderer.js';
|
|
3
|
+
import serializersAndRefsFromSerializableRef from './serializersAndRefsFromSerializableRef.js';
|
|
8
4
|
/**
|
|
9
5
|
* @internal
|
|
10
6
|
*
|
|
@@ -69,9 +65,8 @@ function transformValue(value) {
|
|
|
69
65
|
//
|
|
70
66
|
}
|
|
71
67
|
else if (value.$serializable) {
|
|
72
|
-
const { $serializable, $serializableSerializerKey, ...rest } = value;
|
|
73
|
-
const
|
|
74
|
-
const refs = foundSerializers.map(serializer => new SerializerOpenapiRenderer(serializer).serializerRef);
|
|
68
|
+
const { $serializable, $serializableSerializerKey, key, ...rest } = value;
|
|
69
|
+
const { refs } = serializersAndRefsFromSerializableRef({ $serializable, $serializableSerializerKey, key });
|
|
75
70
|
if (refs.length === 0)
|
|
76
71
|
return rest;
|
|
77
72
|
if (refs.length === 1) {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DreamApp } from '@rvoh/dream';
|
|
2
|
+
import { sortBy, uniq } from '@rvoh/dream/utils';
|
|
3
|
+
import SerializerOpenapiRenderer from '../SerializerOpenapiRenderer.js';
|
|
4
|
+
export default function serializersAndRefsFromSerializableRef(serializableRef, { casing = 'camel', suppressResponseEnums = false, } = {}) {
|
|
5
|
+
const key = serializableRef.$serializableSerializerKey || serializableRef.key || 'default';
|
|
6
|
+
const serializerRefs = sortBy(uniq(DreamApp.system.inferSerializersFromDreamClassOrViewModelClass(serializableRef.$serializable, key)).map(serializer => ({
|
|
7
|
+
serializer,
|
|
8
|
+
ref: new SerializerOpenapiRenderer(serializer, {
|
|
9
|
+
casing,
|
|
10
|
+
suppressResponseEnums,
|
|
11
|
+
}).serializerRef,
|
|
12
|
+
})), ({ ref }) => ref.$ref);
|
|
13
|
+
return {
|
|
14
|
+
serializers: serializerRefs.map(({ serializer }) => serializer),
|
|
15
|
+
refs: serializerRefs.map(({ ref }) => ref),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -8,6 +8,7 @@ import isBlankDescription from './helpers/isBlankDescription.js';
|
|
|
8
8
|
import maybeNullOpenapiShorthandToOpenapiShorthand from './helpers/maybeNullOpenapiShorthandToOpenapiShorthand.js';
|
|
9
9
|
import primitiveOpenapiStatementToOpenapi from './helpers/primitiveOpenapiStatementToOpenapi.js';
|
|
10
10
|
import schemaToRef from './helpers/schemaToRef.js';
|
|
11
|
+
import serializersAndRefsFromSerializableRef from './helpers/serializersAndRefsFromSerializableRef.js';
|
|
11
12
|
import SerializerOpenapiRenderer from './SerializerOpenapiRenderer.js';
|
|
12
13
|
/**
|
|
13
14
|
* @internal
|
|
@@ -494,13 +495,35 @@ The following values will be allowed:
|
|
|
494
495
|
serializableStatement(bodySegment) {
|
|
495
496
|
const serializableRef = bodySegment;
|
|
496
497
|
const key = serializableRef.$serializableSerializerKey || serializableRef.key || 'default';
|
|
497
|
-
const
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
return this.serializerStatement({
|
|
501
|
-
$serializer: serializer,
|
|
502
|
-
...serializableRef,
|
|
498
|
+
const { serializers, refs } = serializersAndRefsFromSerializableRef(serializableRef, {
|
|
499
|
+
casing: this.casing,
|
|
500
|
+
suppressResponseEnums: this.suppressResponseEnums,
|
|
503
501
|
});
|
|
502
|
+
if (serializers.length === 0)
|
|
503
|
+
throw new Error(`Failed to locate serializers getter from: ${serializableRef.$serializable.name} using key: ${key}`);
|
|
504
|
+
if (serializers.length === 1) {
|
|
505
|
+
return this.serializerStatement({
|
|
506
|
+
$serializer: serializers[0],
|
|
507
|
+
...serializableRef,
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
const serializerAnyOf = { anyOf: refs };
|
|
511
|
+
if (serializableRef.many) {
|
|
512
|
+
return {
|
|
513
|
+
referencedSerializers: serializers,
|
|
514
|
+
openapi: {
|
|
515
|
+
type: serializableRef.maybeNull ? ['array', 'null'] : 'array',
|
|
516
|
+
items: serializerAnyOf,
|
|
517
|
+
},
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
if (serializableRef.maybeNull) {
|
|
521
|
+
return {
|
|
522
|
+
referencedSerializers: serializers,
|
|
523
|
+
openapi: { anyOf: [...refs, { type: 'null' }] },
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
return { referencedSerializers: serializers, openapi: serializerAnyOf };
|
|
504
527
|
}
|
|
505
528
|
/**
|
|
506
529
|
* @internal
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DreamApp } from '@rvoh/dream';
|
|
2
1
|
import isObject from '../../helpers/isObject.js';
|
|
2
|
+
import serializersAndRefsFromSerializableRef from './serializersAndRefsFromSerializableRef.js';
|
|
3
3
|
/**
|
|
4
4
|
* @internal
|
|
5
5
|
*
|
|
@@ -54,8 +54,7 @@ value, serializers) {
|
|
|
54
54
|
//
|
|
55
55
|
}
|
|
56
56
|
else if (value.$serializable) {
|
|
57
|
-
|
|
58
|
-
foundSerializers.forEach(serializer => serializers.add(serializer));
|
|
57
|
+
serializersAndRefsFromSerializableRef(value).serializers.forEach(serializer => serializers.add(serializer));
|
|
59
58
|
//
|
|
60
59
|
}
|
|
61
60
|
else if (isObject(value)) {
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
5
|
-
import { DreamApp } from '@rvoh/dream';
|
|
6
1
|
import isObject from '../../helpers/isObject.js';
|
|
7
2
|
import SerializerOpenapiRenderer from '../SerializerOpenapiRenderer.js';
|
|
3
|
+
import serializersAndRefsFromSerializableRef from './serializersAndRefsFromSerializableRef.js';
|
|
8
4
|
/**
|
|
9
5
|
* @internal
|
|
10
6
|
*
|
|
@@ -69,9 +65,8 @@ function transformValue(value) {
|
|
|
69
65
|
//
|
|
70
66
|
}
|
|
71
67
|
else if (value.$serializable) {
|
|
72
|
-
const { $serializable, $serializableSerializerKey, ...rest } = value;
|
|
73
|
-
const
|
|
74
|
-
const refs = foundSerializers.map(serializer => new SerializerOpenapiRenderer(serializer).serializerRef);
|
|
68
|
+
const { $serializable, $serializableSerializerKey, key, ...rest } = value;
|
|
69
|
+
const { refs } = serializersAndRefsFromSerializableRef({ $serializable, $serializableSerializerKey, key });
|
|
75
70
|
if (refs.length === 0)
|
|
76
71
|
return rest;
|
|
77
72
|
if (refs.length === 1) {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DreamApp } from '@rvoh/dream';
|
|
2
|
+
import { sortBy, uniq } from '@rvoh/dream/utils';
|
|
3
|
+
import SerializerOpenapiRenderer from '../SerializerOpenapiRenderer.js';
|
|
4
|
+
export default function serializersAndRefsFromSerializableRef(serializableRef, { casing = 'camel', suppressResponseEnums = false, } = {}) {
|
|
5
|
+
const key = serializableRef.$serializableSerializerKey || serializableRef.key || 'default';
|
|
6
|
+
const serializerRefs = sortBy(uniq(DreamApp.system.inferSerializersFromDreamClassOrViewModelClass(serializableRef.$serializable, key)).map(serializer => ({
|
|
7
|
+
serializer,
|
|
8
|
+
ref: new SerializerOpenapiRenderer(serializer, {
|
|
9
|
+
casing,
|
|
10
|
+
suppressResponseEnums,
|
|
11
|
+
}).serializerRef,
|
|
12
|
+
})), ({ ref }) => ref.$ref);
|
|
13
|
+
return {
|
|
14
|
+
serializers: serializerRefs.map(({ serializer }) => serializer),
|
|
15
|
+
refs: serializerRefs.map(({ ref }) => ref),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OpenapiSchemaExpressionRef, OpenapiSchemaShorthandExpressionSerializableRef } from '@rvoh/dream/openapi';
|
|
2
|
+
import { DreamModelSerializerType, SerializerCasing, SimpleObjectSerializerType } from '@rvoh/dream/types';
|
|
3
|
+
export default function serializersAndRefsFromSerializableRef(serializableRef: OpenapiSchemaShorthandExpressionSerializableRef, { casing, suppressResponseEnums, }?: {
|
|
4
|
+
casing?: SerializerCasing;
|
|
5
|
+
suppressResponseEnums?: boolean;
|
|
6
|
+
}): {
|
|
7
|
+
serializers: (DreamModelSerializerType | SimpleObjectSerializerType)[];
|
|
8
|
+
refs: OpenapiSchemaExpressionRef[];
|
|
9
|
+
};
|