kopia lustrzana https://github.com/transitive-bullshit/chatgpt-api
pull/715/head
rodzic
9c3b930f34
commit
2c26a75a14
|
@ -36,7 +36,7 @@ et est aut quod aut provident voluptas autem voluptas",
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`Basic OpenAPI getPost success > 0.0: GET dev/test-basic-openapi/getPost 1`] = `
|
exports[`Basic OpenAPI getPost success > 0.0: POST dev/test-basic-openapi/getPost 1`] = `
|
||||||
{
|
{
|
||||||
"body": "quia et suscipit
|
"body": "quia et suscipit
|
||||||
suscipit recusandae consequuntur expedita et cum
|
suscipit recusandae consequuntur expedita et cum
|
||||||
|
@ -48,7 +48,7 @@ nostrum rerum est autem sunt rem eveniet architecto",
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`Basic OpenAPI getPost success > 0.1: GET dev/test-basic-openapi@b6e21206/getPost?postId=1 1`] = `
|
exports[`Basic OpenAPI getPost success > 0.1: POST dev/test-basic-openapi@latest/getPost 1`] = `
|
||||||
{
|
{
|
||||||
"body": "quia et suscipit
|
"body": "quia et suscipit
|
||||||
suscipit recusandae consequuntur expedita et cum
|
suscipit recusandae consequuntur expedita et cum
|
||||||
|
@ -60,7 +60,7 @@ nostrum rerum est autem sunt rem eveniet architecto",
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`Basic OpenAPI getPost success > 0.2: GET dev/test-basic-openapi@b6e21206/get_post?postId=1 1`] = `
|
exports[`Basic OpenAPI getPost success > 0.2: GET dev/test-basic-openapi/getPost 1`] = `
|
||||||
{
|
{
|
||||||
"body": "quia et suscipit
|
"body": "quia et suscipit
|
||||||
suscipit recusandae consequuntur expedita et cum
|
suscipit recusandae consequuntur expedita et cum
|
||||||
|
@ -72,7 +72,7 @@ nostrum rerum est autem sunt rem eveniet architecto",
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`Basic OpenAPI getPost success > 0.3: GET dev/test-basic-openapi@b6e21206/getPost 1`] = `
|
exports[`Basic OpenAPI getPost success > 0.3: GET dev/test-basic-openapi@b6e21206/getPost?postId=1 1`] = `
|
||||||
{
|
{
|
||||||
"body": "quia et suscipit
|
"body": "quia et suscipit
|
||||||
suscipit recusandae consequuntur expedita et cum
|
suscipit recusandae consequuntur expedita et cum
|
||||||
|
@ -84,7 +84,7 @@ nostrum rerum est autem sunt rem eveniet architecto",
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`Basic OpenAPI getPost success > 0.4: POST dev/test-basic-openapi/getPost 1`] = `
|
exports[`Basic OpenAPI getPost success > 0.4: GET dev/test-basic-openapi@b6e21206/get_post?postId=1 1`] = `
|
||||||
{
|
{
|
||||||
"body": "quia et suscipit
|
"body": "quia et suscipit
|
||||||
suscipit recusandae consequuntur expedita et cum
|
suscipit recusandae consequuntur expedita et cum
|
||||||
|
@ -96,7 +96,7 @@ nostrum rerum est autem sunt rem eveniet architecto",
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`Basic OpenAPI getPost success > 0.5: POST dev/test-basic-openapi@latest/getPost 1`] = `
|
exports[`Basic OpenAPI getPost success > 0.5: GET dev/test-basic-openapi@b6e21206/getPost 1`] = `
|
||||||
{
|
{
|
||||||
"body": "quia et suscipit
|
"body": "quia et suscipit
|
||||||
suscipit recusandae consequuntur expedita et cum
|
suscipit recusandae consequuntur expedita et cum
|
||||||
|
|
|
@ -48,10 +48,31 @@ export const fixtureSuites: E2ETestFixtureSuite[] = [
|
||||||
title: 'Basic OpenAPI getPost success',
|
title: 'Basic OpenAPI getPost success',
|
||||||
compareResponseBodies: true,
|
compareResponseBodies: true,
|
||||||
fixtures: [
|
fixtures: [
|
||||||
|
{
|
||||||
|
path: 'dev/test-basic-openapi/getPost',
|
||||||
|
request: {
|
||||||
|
method: 'POST',
|
||||||
|
json: {
|
||||||
|
postId: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'dev/test-basic-openapi@latest/getPost',
|
||||||
|
request: {
|
||||||
|
method: 'POST',
|
||||||
|
json: {
|
||||||
|
postId: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'dev/test-basic-openapi/getPost',
|
path: 'dev/test-basic-openapi/getPost',
|
||||||
request: {
|
request: {
|
||||||
searchParams: {
|
searchParams: {
|
||||||
|
// all of these GET requests implicitly test type coercion since
|
||||||
|
// `postId` as a query param will be a string, but the tool expects
|
||||||
|
// an integer.
|
||||||
postId: 1
|
postId: 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,24 +90,6 @@ export const fixtureSuites: E2ETestFixtureSuite[] = [
|
||||||
postId: 1
|
postId: 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'dev/test-basic-openapi/getPost',
|
|
||||||
request: {
|
|
||||||
method: 'POST',
|
|
||||||
json: {
|
|
||||||
postId: 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'dev/test-basic-openapi@latest/getPost',
|
|
||||||
request: {
|
|
||||||
method: 'POST',
|
|
||||||
json: {
|
|
||||||
postId: 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -40,6 +40,10 @@ export function cfValidateJsonSchemaObject<
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Special-case check for additional top-level properties, which is not
|
||||||
|
// currently handled by `@agentic/json-schema`.
|
||||||
|
// TODO: In the future, the underlying JSON schema validation should handle
|
||||||
|
// this for any sub-schema, not just the top-level one.
|
||||||
if (schema.properties && !schema.additionalProperties) {
|
if (schema.properties && !schema.additionalProperties) {
|
||||||
const extraProperties = Object.keys(data).filter(
|
const extraProperties = Object.keys(data).filter(
|
||||||
(key) => !schema.properties[key]
|
(key) => !schema.properties[key]
|
||||||
|
@ -56,6 +60,12 @@ export function cfValidateJsonSchemaObject<
|
||||||
const validator = new Validator({ schema, coerce })
|
const validator = new Validator({ schema, coerce })
|
||||||
const result = validator.validate(data)
|
const result = validator.validate(data)
|
||||||
if (result.valid) {
|
if (result.valid) {
|
||||||
|
// console.log('validate', {
|
||||||
|
// schema,
|
||||||
|
// data,
|
||||||
|
// result: result.instance
|
||||||
|
// })
|
||||||
|
|
||||||
// Return the (possibly) coerced data
|
// Return the (possibly) coerced data
|
||||||
return result.instance as T
|
return result.instance as T
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,7 +123,9 @@ export function validate(
|
||||||
keywordLocation,
|
keywordLocation,
|
||||||
evaluated
|
evaluated
|
||||||
)
|
)
|
||||||
if (!result.valid) {
|
if (result.valid) {
|
||||||
|
instance = result.instance
|
||||||
|
} else {
|
||||||
errors.push(
|
errors.push(
|
||||||
{
|
{
|
||||||
instanceLocation,
|
instanceLocation,
|
||||||
|
@ -160,7 +162,9 @@ export function validate(
|
||||||
keywordLocation,
|
keywordLocation,
|
||||||
evaluated
|
evaluated
|
||||||
)
|
)
|
||||||
if (!result.valid) {
|
if (result.valid) {
|
||||||
|
instance = result.instance
|
||||||
|
} else {
|
||||||
errors.push(
|
errors.push(
|
||||||
{
|
{
|
||||||
instanceLocation,
|
instanceLocation,
|
||||||
|
@ -285,6 +289,7 @@ export function validate(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: type coercion
|
||||||
if ($not !== undefined) {
|
if ($not !== undefined) {
|
||||||
const keywordLocation = `${schemaLocation}/not`
|
const keywordLocation = `${schemaLocation}/not`
|
||||||
const result = validate(
|
const result = validate(
|
||||||
|
@ -311,6 +316,7 @@ export function validate(
|
||||||
|
|
||||||
const subEvaluateds: Array<Evaluated> = []
|
const subEvaluateds: Array<Evaluated> = []
|
||||||
|
|
||||||
|
// TODO: type coercion
|
||||||
if ($anyOf !== undefined) {
|
if ($anyOf !== undefined) {
|
||||||
const keywordLocation = `${schemaLocation}/anyOf`
|
const keywordLocation = `${schemaLocation}/anyOf`
|
||||||
const errorsLength = errors.length
|
const errorsLength = errors.length
|
||||||
|
@ -347,6 +353,7 @@ export function validate(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: type coercion
|
||||||
if ($allOf !== undefined) {
|
if ($allOf !== undefined) {
|
||||||
const keywordLocation = `${schemaLocation}/allOf`
|
const keywordLocation = `${schemaLocation}/allOf`
|
||||||
const errorsLength = errors.length
|
const errorsLength = errors.length
|
||||||
|
@ -383,6 +390,7 @@ export function validate(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: type coercion
|
||||||
if ($oneOf !== undefined) {
|
if ($oneOf !== undefined) {
|
||||||
const keywordLocation = `${schemaLocation}/oneOf`
|
const keywordLocation = `${schemaLocation}/oneOf`
|
||||||
const errorsLength = errors.length
|
const errorsLength = errors.length
|
||||||
|
@ -450,7 +458,9 @@ export function validate(
|
||||||
`${schemaLocation}/then`,
|
`${schemaLocation}/then`,
|
||||||
evaluated
|
evaluated
|
||||||
)
|
)
|
||||||
if (!thenResult.valid) {
|
if (thenResult.valid) {
|
||||||
|
instance = thenResult.instance
|
||||||
|
} else {
|
||||||
errors.push(
|
errors.push(
|
||||||
{
|
{
|
||||||
instanceLocation,
|
instanceLocation,
|
||||||
|
@ -475,7 +485,9 @@ export function validate(
|
||||||
`${schemaLocation}/else`,
|
`${schemaLocation}/else`,
|
||||||
evaluated
|
evaluated
|
||||||
)
|
)
|
||||||
if (!elseResult.valid) {
|
if (elseResult.valid) {
|
||||||
|
instance = elseResult.instance
|
||||||
|
} else {
|
||||||
errors.push(
|
errors.push(
|
||||||
{
|
{
|
||||||
instanceLocation,
|
instanceLocation,
|
||||||
|
@ -670,6 +682,7 @@ export function validate(
|
||||||
)
|
)
|
||||||
if (result.valid) {
|
if (result.valid) {
|
||||||
evaluated[key] = thisEvaluated[key] = true
|
evaluated[key] = thisEvaluated[key] = true
|
||||||
|
instance[key] = result.instance
|
||||||
} else {
|
} else {
|
||||||
stop = shortCircuit
|
stop = shortCircuit
|
||||||
errors.push(
|
errors.push(
|
||||||
|
@ -709,6 +722,7 @@ export function validate(
|
||||||
)
|
)
|
||||||
if (result.valid) {
|
if (result.valid) {
|
||||||
evaluated[key] = thisEvaluated[key] = true
|
evaluated[key] = thisEvaluated[key] = true
|
||||||
|
instance[key] = result.instance
|
||||||
} else {
|
} else {
|
||||||
stop = shortCircuit
|
stop = shortCircuit
|
||||||
errors.push(
|
errors.push(
|
||||||
|
@ -745,6 +759,7 @@ export function validate(
|
||||||
)
|
)
|
||||||
if (result.valid) {
|
if (result.valid) {
|
||||||
evaluated[key] = true
|
evaluated[key] = true
|
||||||
|
instance[key] = result.instance
|
||||||
} else {
|
} else {
|
||||||
stop = shortCircuit
|
stop = shortCircuit
|
||||||
errors.push(
|
errors.push(
|
||||||
|
@ -776,6 +791,7 @@ export function validate(
|
||||||
)
|
)
|
||||||
if (result.valid) {
|
if (result.valid) {
|
||||||
evaluated[key] = true
|
evaluated[key] = true
|
||||||
|
instance[key] = result.instance
|
||||||
} else {
|
} else {
|
||||||
errors.push(
|
errors.push(
|
||||||
{
|
{
|
||||||
|
@ -862,7 +878,9 @@ export function validate(
|
||||||
`${keywordLocation}/${i}`
|
`${keywordLocation}/${i}`
|
||||||
)
|
)
|
||||||
evaluated[i] = true
|
evaluated[i] = true
|
||||||
if (!result.valid) {
|
if (result.valid) {
|
||||||
|
instance[i] = result.instance
|
||||||
|
} else {
|
||||||
stop = shortCircuit
|
stop = shortCircuit
|
||||||
errors.push(
|
errors.push(
|
||||||
{
|
{
|
||||||
|
@ -890,7 +908,9 @@ export function validate(
|
||||||
keywordLocation
|
keywordLocation
|
||||||
)
|
)
|
||||||
evaluated[i] = true
|
evaluated[i] = true
|
||||||
if (!result.valid) {
|
if (result.valid) {
|
||||||
|
instance[i] = result.instance
|
||||||
|
} else {
|
||||||
stop = shortCircuit
|
stop = shortCircuit
|
||||||
errors.push(
|
errors.push(
|
||||||
{
|
{
|
||||||
|
@ -921,7 +941,9 @@ export function validate(
|
||||||
keywordLocation
|
keywordLocation
|
||||||
)
|
)
|
||||||
evaluated[i] = true
|
evaluated[i] = true
|
||||||
if (!result.valid) {
|
if (result.valid) {
|
||||||
|
instance[i] = result.instance
|
||||||
|
} else if (!result.valid) {
|
||||||
stop = shortCircuit
|
stop = shortCircuit
|
||||||
errors.push(
|
errors.push(
|
||||||
{
|
{
|
||||||
|
@ -1027,7 +1049,9 @@ export function validate(
|
||||||
keywordLocation
|
keywordLocation
|
||||||
)
|
)
|
||||||
evaluated[i] = true
|
evaluated[i] = true
|
||||||
if (!result.valid) {
|
if (result.valid) {
|
||||||
|
instance[i] = result.instance
|
||||||
|
} else {
|
||||||
errors.push(
|
errors.push(
|
||||||
{
|
{
|
||||||
instanceLocation,
|
instanceLocation,
|
||||||
|
|
|
@ -29,7 +29,7 @@ export class Validator {
|
||||||
|
|
||||||
public validate(instance: any): ValidationResult {
|
public validate(instance: any): ValidationResult {
|
||||||
return validate(
|
return validate(
|
||||||
instance,
|
structuredClone(instance),
|
||||||
this.schema,
|
this.schema,
|
||||||
this.draft,
|
this.draft,
|
||||||
this.lookup,
|
this.lookup,
|
||||||
|
|
Ładowanie…
Reference in New Issue