@agentuity/schema 0.1.38 → 0.1.40
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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/json-schema.d.ts +18 -1
- package/dist/json-schema.d.ts.map +1 -1
- package/dist/json-schema.js +15 -7
- package/dist/json-schema.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +1 -1
- package/src/json-schema.ts +29 -7
package/dist/index.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export { LiteralSchema, literal } from './utils/literal';
|
|
|
14
14
|
export { OptionalSchema, optional } from './utils/optional';
|
|
15
15
|
export { NullableSchema, nullable } from './utils/nullable';
|
|
16
16
|
export { UnionSchema, union } from './utils/union';
|
|
17
|
-
export { toJSONSchema, fromJSONSchema, type JSONSchema } from './json-schema';
|
|
17
|
+
export { toJSONSchema, fromJSONSchema, type JSONSchema, type ToJSONSchemaOptions } from './json-schema';
|
|
18
18
|
export { CoerceStringSchema, coerceString } from './coerce/string';
|
|
19
19
|
export { CoerceNumberSchema, coerceNumber } from './coerce/number';
|
|
20
20
|
export { CoerceBooleanSchema, coerceBoolean } from './coerce/boolean';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,MAAM,EACN,KAAK,EACL,UAAU,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,cAAc,GACd,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErF,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErF,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/json-schema.d.ts
CHANGED
|
@@ -14,12 +14,25 @@ export interface JSONSchema {
|
|
|
14
14
|
anyOf?: JSONSchema[];
|
|
15
15
|
oneOf?: JSONSchema[];
|
|
16
16
|
allOf?: JSONSchema[];
|
|
17
|
+
additionalProperties?: JSONSchema | boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Options for toJSONSchema conversion.
|
|
21
|
+
*/
|
|
22
|
+
export interface ToJSONSchemaOptions {
|
|
23
|
+
/**
|
|
24
|
+
* When true, adds `additionalProperties: false` to all object schemas.
|
|
25
|
+
* Required for LLM structured output compatibility (OpenAI, Groq, etc.).
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
strict?: boolean;
|
|
17
29
|
}
|
|
18
30
|
/**
|
|
19
31
|
* Convert a schema to JSON Schema format.
|
|
20
32
|
* Supports primitives, objects, arrays, unions, literals, optional, and nullable types.
|
|
21
33
|
*
|
|
22
34
|
* @param schema - The schema to convert
|
|
35
|
+
* @param options - Conversion options
|
|
23
36
|
* @returns JSON Schema object
|
|
24
37
|
*
|
|
25
38
|
* @example
|
|
@@ -31,9 +44,13 @@ export interface JSONSchema {
|
|
|
31
44
|
*
|
|
32
45
|
* const jsonSchema = s.toJSONSchema(userSchema);
|
|
33
46
|
* // { type: 'object', properties: {...}, required: [...] }
|
|
47
|
+
*
|
|
48
|
+
* // For LLM structured output compatibility (OpenAI, Groq, etc.):
|
|
49
|
+
* const strictSchema = s.toJSONSchema(userSchema, { strict: true });
|
|
50
|
+
* // { type: 'object', properties: {...}, required: [...], additionalProperties: false }
|
|
34
51
|
* ```
|
|
35
52
|
*/
|
|
36
|
-
export declare function toJSONSchema(schema: Schema<any, any
|
|
53
|
+
export declare function toJSONSchema(schema: Schema<any, any>, options?: ToJSONSchemaOptions): JSONSchema;
|
|
37
54
|
/**
|
|
38
55
|
* Convert a JSON Schema object to a schema.
|
|
39
56
|
* Supports round-trip conversion with toJSONSchema.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../src/json-schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAsBrC;;;GAGG;AACH,MAAM,WAAW,UAAU;IAC1B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAClC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../src/json-schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAsBrC;;;GAGG;AACH,MAAM,WAAW,UAAU;IAC1B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACjF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAClC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,oBAAoB,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,UAAU,CAyIhG;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAoJvE"}
|
package/dist/json-schema.js
CHANGED
|
@@ -22,6 +22,7 @@ function isSchemaType(schema, typeName) {
|
|
|
22
22
|
* Supports primitives, objects, arrays, unions, literals, optional, and nullable types.
|
|
23
23
|
*
|
|
24
24
|
* @param schema - The schema to convert
|
|
25
|
+
* @param options - Conversion options
|
|
25
26
|
* @returns JSON Schema object
|
|
26
27
|
*
|
|
27
28
|
* @example
|
|
@@ -33,9 +34,13 @@ function isSchemaType(schema, typeName) {
|
|
|
33
34
|
*
|
|
34
35
|
* const jsonSchema = s.toJSONSchema(userSchema);
|
|
35
36
|
* // { type: 'object', properties: {...}, required: [...] }
|
|
37
|
+
*
|
|
38
|
+
* // For LLM structured output compatibility (OpenAI, Groq, etc.):
|
|
39
|
+
* const strictSchema = s.toJSONSchema(userSchema, { strict: true });
|
|
40
|
+
* // { type: 'object', properties: {...}, required: [...], additionalProperties: false }
|
|
36
41
|
* ```
|
|
37
42
|
*/
|
|
38
|
-
export function toJSONSchema(schema) {
|
|
43
|
+
export function toJSONSchema(schema, options) {
|
|
39
44
|
const result = {};
|
|
40
45
|
// Add description if available
|
|
41
46
|
if (schema.description) {
|
|
@@ -85,7 +90,7 @@ export function toJSONSchema(schema) {
|
|
|
85
90
|
result.properties = {};
|
|
86
91
|
result.required = [];
|
|
87
92
|
for (const [key, fieldSchema] of Object.entries(shape)) {
|
|
88
|
-
result.properties[key] = toJSONSchema(fieldSchema);
|
|
93
|
+
result.properties[key] = toJSONSchema(fieldSchema, options);
|
|
89
94
|
// If the field is not optional, add it to required
|
|
90
95
|
if (!isSchemaType(fieldSchema, 'OptionalSchema')) {
|
|
91
96
|
result.required.push(key);
|
|
@@ -95,26 +100,29 @@ export function toJSONSchema(schema) {
|
|
|
95
100
|
if (result.required.length === 0) {
|
|
96
101
|
delete result.required;
|
|
97
102
|
}
|
|
103
|
+
if (options?.strict) {
|
|
104
|
+
result.additionalProperties = false;
|
|
105
|
+
}
|
|
98
106
|
return result;
|
|
99
107
|
}
|
|
100
108
|
// Array types
|
|
101
109
|
if (isSchemaType(schema, 'ArraySchema')) {
|
|
102
110
|
result.type = 'array';
|
|
103
111
|
const itemSchema = schema.itemSchema;
|
|
104
|
-
result.items = toJSONSchema(itemSchema);
|
|
112
|
+
result.items = toJSONSchema(itemSchema, options);
|
|
105
113
|
return result;
|
|
106
114
|
}
|
|
107
115
|
// Optional types
|
|
108
116
|
if (isSchemaType(schema, 'OptionalSchema')) {
|
|
109
117
|
const innerSchema = schema.schema;
|
|
110
|
-
const innerJSON = toJSONSchema(innerSchema);
|
|
118
|
+
const innerJSON = toJSONSchema(innerSchema, options);
|
|
111
119
|
// Optional is typically handled at the object level via required array
|
|
112
120
|
return innerJSON;
|
|
113
121
|
}
|
|
114
122
|
// Nullable types
|
|
115
123
|
if (isSchemaType(schema, 'NullableSchema')) {
|
|
116
124
|
const innerSchema = schema.schema;
|
|
117
|
-
const innerJSON = toJSONSchema(innerSchema);
|
|
125
|
+
const innerJSON = toJSONSchema(innerSchema, options);
|
|
118
126
|
// Nullable can be represented as anyOf with null
|
|
119
127
|
return {
|
|
120
128
|
anyOf: [innerJSON, { type: 'null' }],
|
|
@@ -124,7 +132,7 @@ export function toJSONSchema(schema) {
|
|
|
124
132
|
// Union types
|
|
125
133
|
if (isSchemaType(schema, 'UnionSchema')) {
|
|
126
134
|
const schemas = schema.schemas;
|
|
127
|
-
result.anyOf = schemas.map((schema) => toJSONSchema(schema));
|
|
135
|
+
result.anyOf = schemas.map((schema) => toJSONSchema(schema, options));
|
|
128
136
|
return result;
|
|
129
137
|
}
|
|
130
138
|
// Record types (object with string keys and typed values)
|
|
@@ -133,7 +141,7 @@ export function toJSONSchema(schema) {
|
|
|
133
141
|
// Record schemas have additionalProperties
|
|
134
142
|
const valueSchema = schema.valueSchema;
|
|
135
143
|
if (valueSchema) {
|
|
136
|
-
result.additionalProperties = toJSONSchema(valueSchema);
|
|
144
|
+
result.additionalProperties = toJSONSchema(valueSchema, options);
|
|
137
145
|
}
|
|
138
146
|
return result;
|
|
139
147
|
}
|
package/dist/json-schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../src/json-schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC;;;;GAIG;AACH,SAAS,YAAY,CAAC,MAAW,EAAE,QAAgB;IAClD,OAAO,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC;AAC3C,CAAC;
|
|
1
|
+
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../src/json-schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/schema",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.40",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"type": "module",
|
|
@@ -26,10 +26,10 @@
|
|
|
26
26
|
"prepublishOnly": "bun run clean && bun run build"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@agentuity/core": "0.1.
|
|
29
|
+
"@agentuity/core": "0.1.40"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@agentuity/test-utils": "0.1.
|
|
32
|
+
"@agentuity/test-utils": "0.1.40",
|
|
33
33
|
"@types/bun": "latest",
|
|
34
34
|
"bun-types": "latest",
|
|
35
35
|
"typescript": "^5.9.0"
|
package/src/index.ts
CHANGED
|
@@ -28,7 +28,7 @@ export { OptionalSchema, optional } from './utils/optional';
|
|
|
28
28
|
export { NullableSchema, nullable } from './utils/nullable';
|
|
29
29
|
export { UnionSchema, union } from './utils/union';
|
|
30
30
|
|
|
31
|
-
export { toJSONSchema, fromJSONSchema, type JSONSchema } from './json-schema';
|
|
31
|
+
export { toJSONSchema, fromJSONSchema, type JSONSchema, type ToJSONSchemaOptions } from './json-schema';
|
|
32
32
|
|
|
33
33
|
export { CoerceStringSchema, coerceString } from './coerce/string';
|
|
34
34
|
export { CoerceNumberSchema, coerceNumber } from './coerce/number';
|
package/src/json-schema.ts
CHANGED
|
@@ -36,6 +36,19 @@ export interface JSONSchema {
|
|
|
36
36
|
anyOf?: JSONSchema[];
|
|
37
37
|
oneOf?: JSONSchema[];
|
|
38
38
|
allOf?: JSONSchema[];
|
|
39
|
+
additionalProperties?: JSONSchema | boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Options for toJSONSchema conversion.
|
|
44
|
+
*/
|
|
45
|
+
export interface ToJSONSchemaOptions {
|
|
46
|
+
/**
|
|
47
|
+
* When true, adds `additionalProperties: false` to all object schemas.
|
|
48
|
+
* Required for LLM structured output compatibility (OpenAI, Groq, etc.).
|
|
49
|
+
* @default false
|
|
50
|
+
*/
|
|
51
|
+
strict?: boolean;
|
|
39
52
|
}
|
|
40
53
|
|
|
41
54
|
/**
|
|
@@ -43,6 +56,7 @@ export interface JSONSchema {
|
|
|
43
56
|
* Supports primitives, objects, arrays, unions, literals, optional, and nullable types.
|
|
44
57
|
*
|
|
45
58
|
* @param schema - The schema to convert
|
|
59
|
+
* @param options - Conversion options
|
|
46
60
|
* @returns JSON Schema object
|
|
47
61
|
*
|
|
48
62
|
* @example
|
|
@@ -54,9 +68,13 @@ export interface JSONSchema {
|
|
|
54
68
|
*
|
|
55
69
|
* const jsonSchema = s.toJSONSchema(userSchema);
|
|
56
70
|
* // { type: 'object', properties: {...}, required: [...] }
|
|
71
|
+
*
|
|
72
|
+
* // For LLM structured output compatibility (OpenAI, Groq, etc.):
|
|
73
|
+
* const strictSchema = s.toJSONSchema(userSchema, { strict: true });
|
|
74
|
+
* // { type: 'object', properties: {...}, required: [...], additionalProperties: false }
|
|
57
75
|
* ```
|
|
58
76
|
*/
|
|
59
|
-
export function toJSONSchema(schema: Schema<any, any
|
|
77
|
+
export function toJSONSchema(schema: Schema<any, any>, options?: ToJSONSchemaOptions): JSONSchema {
|
|
60
78
|
const result: JSONSchema = {};
|
|
61
79
|
|
|
62
80
|
// Add description if available
|
|
@@ -113,7 +131,7 @@ export function toJSONSchema(schema: Schema<any, any>): JSONSchema {
|
|
|
113
131
|
result.required = [];
|
|
114
132
|
|
|
115
133
|
for (const [key, fieldSchema] of Object.entries(shape) as Array<[string, Schema<any, any>]>) {
|
|
116
|
-
result.properties[key] = toJSONSchema(fieldSchema);
|
|
134
|
+
result.properties[key] = toJSONSchema(fieldSchema, options);
|
|
117
135
|
|
|
118
136
|
// If the field is not optional, add it to required
|
|
119
137
|
if (!isSchemaType(fieldSchema, 'OptionalSchema')) {
|
|
@@ -126,6 +144,10 @@ export function toJSONSchema(schema: Schema<any, any>): JSONSchema {
|
|
|
126
144
|
delete result.required;
|
|
127
145
|
}
|
|
128
146
|
|
|
147
|
+
if (options?.strict) {
|
|
148
|
+
result.additionalProperties = false;
|
|
149
|
+
}
|
|
150
|
+
|
|
129
151
|
return result;
|
|
130
152
|
}
|
|
131
153
|
|
|
@@ -133,14 +155,14 @@ export function toJSONSchema(schema: Schema<any, any>): JSONSchema {
|
|
|
133
155
|
if (isSchemaType(schema, 'ArraySchema')) {
|
|
134
156
|
result.type = 'array';
|
|
135
157
|
const itemSchema = (schema as any).itemSchema;
|
|
136
|
-
result.items = toJSONSchema(itemSchema);
|
|
158
|
+
result.items = toJSONSchema(itemSchema, options);
|
|
137
159
|
return result;
|
|
138
160
|
}
|
|
139
161
|
|
|
140
162
|
// Optional types
|
|
141
163
|
if (isSchemaType(schema, 'OptionalSchema')) {
|
|
142
164
|
const innerSchema = (schema as any).schema;
|
|
143
|
-
const innerJSON = toJSONSchema(innerSchema);
|
|
165
|
+
const innerJSON = toJSONSchema(innerSchema, options);
|
|
144
166
|
// Optional is typically handled at the object level via required array
|
|
145
167
|
return innerJSON;
|
|
146
168
|
}
|
|
@@ -148,7 +170,7 @@ export function toJSONSchema(schema: Schema<any, any>): JSONSchema {
|
|
|
148
170
|
// Nullable types
|
|
149
171
|
if (isSchemaType(schema, 'NullableSchema')) {
|
|
150
172
|
const innerSchema = (schema as any).schema;
|
|
151
|
-
const innerJSON = toJSONSchema(innerSchema);
|
|
173
|
+
const innerJSON = toJSONSchema(innerSchema, options);
|
|
152
174
|
// Nullable can be represented as anyOf with null
|
|
153
175
|
return {
|
|
154
176
|
anyOf: [innerJSON, { type: 'null' }],
|
|
@@ -159,7 +181,7 @@ export function toJSONSchema(schema: Schema<any, any>): JSONSchema {
|
|
|
159
181
|
// Union types
|
|
160
182
|
if (isSchemaType(schema, 'UnionSchema')) {
|
|
161
183
|
const schemas = (schema as any).schemas as Schema<any, any>[];
|
|
162
|
-
result.anyOf = schemas.map((schema) => toJSONSchema(schema));
|
|
184
|
+
result.anyOf = schemas.map((schema) => toJSONSchema(schema, options));
|
|
163
185
|
return result;
|
|
164
186
|
}
|
|
165
187
|
|
|
@@ -169,7 +191,7 @@ export function toJSONSchema(schema: Schema<any, any>): JSONSchema {
|
|
|
169
191
|
// Record schemas have additionalProperties
|
|
170
192
|
const valueSchema = (schema as any).valueSchema;
|
|
171
193
|
if (valueSchema) {
|
|
172
|
-
(result as any).additionalProperties = toJSONSchema(valueSchema);
|
|
194
|
+
(result as any).additionalProperties = toJSONSchema(valueSchema, options);
|
|
173
195
|
}
|
|
174
196
|
return result;
|
|
175
197
|
}
|