mirror of
https://github.com/stablyai/orca.git
synced 2026-11-02 10:08:13 +00:00
53 lines
2.1 KiB
JavaScript
53 lines
2.1 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import { createRequire } from 'node:module'
|
|
import { dirname, join } from 'node:path'
|
|
import test from 'node:test'
|
|
import { pathToFileURL } from 'node:url'
|
|
|
|
const require = createRequire(import.meta.url)
|
|
const vercelRequire = createRequire(require.resolve('vercel/package.json'))
|
|
const backendsRequire = createRequire(vercelRequire.resolve('@vercel/backends/package.json'))
|
|
const zodRoot = dirname(backendsRequire.resolve('zod/package.json'))
|
|
|
|
for (const extension of ['cjs', 'js']) {
|
|
for (const entry of ['index', 'v3/index', 'v4/index']) {
|
|
test(`Vercel Zod rejects oversized collections before parsing elements (${entry}.${extension})`, async () => {
|
|
const path = join(zodRoot, `${entry}.${extension}`)
|
|
const z = extension === 'cjs' ? require(path) : await import(pathToFileURL(path).href)
|
|
let parsed = 0
|
|
const element = z.preprocess((value) => {
|
|
parsed += 1
|
|
return value
|
|
}, z.string())
|
|
for (const [schema, value, valid] of [
|
|
[z.array(element).max(2), Array(1_000).fill(0), ['a']],
|
|
[z.array(element).length(2), Array(1_000).fill(0), ['a', 'b']],
|
|
[z.set(element).max(2), new Set([1, 2, 3]), new Set(['a'])],
|
|
[z.set(element).size(2), new Set([1, 2, 3]), new Set(['a', 'b'])]
|
|
]) {
|
|
parsed = 0
|
|
for (const result of [schema.safeParse(value), await schema.safeParseAsync(value)]) {
|
|
assert.equal(result.success, false)
|
|
assert.deepEqual(
|
|
result.error.issues.map((issue) => issue.code),
|
|
['too_big']
|
|
)
|
|
}
|
|
assert.equal(parsed, 0)
|
|
assert.deepEqual(schema.parse(valid), valid)
|
|
assert.deepEqual(await schema.parseAsync(valid), valid)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
test('docs Zod 4 keeps valid schemas working after the security upgrade', async () => {
|
|
const { z } = await import('zod')
|
|
const schema = z.array(z.string()).max(2)
|
|
assert.deepEqual(schema.parse(['a']), ['a'])
|
|
assert.deepEqual(
|
|
schema.safeParse([1, 2, 3]).error.issues.map((issue) => issue.code),
|
|
['too_big']
|
|
)
|
|
})
|