Skip to content

Commit 0835545

Browse files
authored
feat(formats): jsonSchemaLoose format should search for enum keyword (#2551)
1 parent 2fdc5a4 commit 0835545

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

packages/formats/src/__tests__/jsonSchema.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,15 @@ describe('JSON Schema format', () => {
8080
expect(jsonSchemaLoose({ not: {} }, null)).toBe(true);
8181
});
8282

83+
it('recognizes by the presence of valid "enum"', () => {
84+
expect(jsonSchemaLoose({ enum: ['1'] }, null)).toBe(true);
85+
expect(jsonSchemaLoose({ enum: [] }, null)).toBe(true);
86+
87+
expect(jsonSchemaLoose({ enum: 2 }, null)).toBe(false);
88+
expect(jsonSchemaLoose({ enum: {} }, null)).toBe(false);
89+
expect(jsonSchemaLoose({ enum: null }, null)).toBe(false);
90+
});
91+
8392
describe('mixed', () => {
8493
it('invalid type but valid combiner', () => {
8594
expect(jsonSchemaLoose({ type: 'foo', allOf: [] }, null)).toBe(true);

packages/formats/src/jsonSchema.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ const hasValidJSONSchemaType = (document: Partial<{ type?: unknown }>): boolean
1717
return Array.isArray(document.type) && document.type.every(type => KNOWN_JSON_SCHEMA_TYPES.includes(type));
1818
};
1919

20+
const hasValidJSONSchemaEnumKeyword = (document: Record<string, unknown>): boolean => Array.isArray(document['enum']);
21+
2022
const hasValidJSONSchemaCompoundKeyword = (document: Record<string, unknown>): boolean =>
2123
KNOWN_JSON_SCHEMA_COMPOUND_KEYWORDS.some(
2224
combiner => combiner in document && typeof document[combiner] === 'object' && document[combiner] !== null,
@@ -43,7 +45,10 @@ export const jsonSchemaLoose: Format<Record<string, unknown>> = (
4345
document: unknown,
4446
): document is Record<string, unknown> =>
4547
isPlainObject(document) &&
46-
(isJsonSchema(document) || hasValidJSONSchemaType(document) || hasValidJSONSchemaCompoundKeyword(document));
48+
(isJsonSchema(document) ||
49+
hasValidJSONSchemaType(document) ||
50+
hasValidJSONSchemaEnumKeyword(document) ||
51+
hasValidJSONSchemaCompoundKeyword(document));
4752

4853
jsonSchemaLoose.displayName = 'JSON Schema (loose)';
4954

0 commit comments

Comments
 (0)