Exposing zod
I'm trying to enforce jsonb types with zod.
Having
// input.ts
import { z } from "zod"
export const collection = <T>(t: z.ZodSchema<T> = z.any()) => z.object({ items: z.array(t) })
export type Collection<T> = z.infer<ReturnType<typeof collection<T>>>
const y = z.object({ name: z.string().trim().min(1).max(3) })
export function assert_y(x: unknown) {
return y.parse(x)
}
I get compilation error
✘ [ERROR] Expected ">" but found "<"
input.ts:4:64:
4 │ export type Collection<T> = z.infer<ReturnType<typeof collection<T>>>
│ ^
╵ >
/app/node_modules/yoga-layout-prebuilt/yoga-layout/build/Release/nbind.js:53
throw ex;
^
BundlerError: esbuild failed
at file:///app/node_modules/plv8ify/dist/src/impl/EsBuild.js:14:24
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async EsBuild.bundle (file:///app/node_modules/plv8ify/dist/src/impl/EsBuild.js:7:31)
at async PLV8ifyCLI.build (file:///app/node_modules/plv8ify/dist/src/impl/PLV8ifyCLI.js:28:28)
at async generateCommand (file:///app/node_modules/plv8ify/dist/src/commands/generate.js:8:23)
at async Object.handler (file:///app/node_modules/plv8ify/dist/src/index.js:30:9)
Node.js v18.18.2
Should I comment export type line I get proper
DROP FUNCTION IF EXISTS plv8ify_assert_y(x JSONB);
CREATE OR REPLACE FUNCTION plv8ify_assert_y(x JSONB) RETURNS JSONB AS $plv8ify$
return assert_y(x)
$plv8ify$ LANGUAGE plv8 IMMUTABLE STRICT;
Thank you! I will look into it, it looks like esbuild is not happy with this (plv8ify simply passes code to esbuild), we might have to create an issue there. I will create a ticket, if needed!
https://esbuild.github.io/try/#dAAwLjE5LjkAAGltcG9ydCB7IHogfSBmcm9tICJ6b2QiCgpleHBvcnQgY29uc3QgY29sbGVjdGlvbiA9IDxUPih0OiB6LlpvZFNjaGVtYTxUPiA9IHouYW55KCkpID0+IHoub2JqZWN0KHsgaXRlbXM6IHouYXJyYXkodCkgfSkKZXhwb3J0IHR5cGUgQ29sbGVjdGlvbjxUPiA9IHouaW5mZXI8UmV0dXJuVHlwZTx0eXBlb2YgY29sbGVjdGlvbjxUPj4+Cgpjb25zdCB5ID0gei5vYmplY3QoeyBuYW1lOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSkubWF4KDMpIH0pCgpleHBvcnQgZnVuY3Rpb24gYXNzZXJ0X3koeDogdW5rbm93bikgewogIHJldHVybiB5LnBhcnNlKHgpCn0
It might be worth noting that it seems the "bundle" seems mode works while "transform" does not.
https://esbuild.github.io/try/#YgAwLjE5LjkAAGUAZW50cnkudHMAaW1wb3J0IHsgeiB9IGZyb20gInpvZCIKCmV4cG9ydCBjb25zdCBjb2xsZWN0aW9uID0gPFQ+KHQ6IHouWm9kU2NoZW1hPFQ+ID0gei5hbnkoKSkgPT4gei5vYmplY3QoeyBpdGVtczogei5hcnJheSh0KSB9KQpleHBvcnQgdHlwZSBDb2xsZWN0aW9uPFQ+ID0gei5pbmZlcjxSZXR1cm5UeXBlPHR5cGVvZiBjb2xsZWN0aW9uPFQ+Pj4KCmNvbnN0IHkgPSB6Lm9iamVjdCh7IG5hbWU6IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5tYXgoMykgfSkKCmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRfeSh4OiB1bmtub3duKSB7CiAgcmV0dXJuIHkucGFyc2UoeCkKfQ
I think the esbuild playground is bugged though, because this link has the same contents but doesn't build: https://esbuild.github.io/try/#YgAwLjE5LjkAAGUAZW50cnkuanMAaW1wb3J0IHsgeiB9IGZyb20gInpvZCIKCmV4cG9ydCBjb25zdCBjb2xsZWN0aW9uID0gPFQ+KHQ6IHouWm9kU2NoZW1hPFQ+ID0gei5hbnkoKSkgPT4gei5vYmplY3QoeyBpdGVtczogei5hcnJheSh0KSB9KQpleHBvcnQgdHlwZSBDb2xsZWN0aW9uPFQ+ID0gei5pbmZlcjxSZXR1cm5UeXBlPHR5cGVvZiBjb2xsZWN0aW9uPFQ+Pj4KCmNvbnN0IHkgPSB6Lm9iamVjdCh7IG5hbWU6IHouc3RyaW5nKCkudHJpbSgpLm1pbigxKS5tYXgoMykgfSkKCmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRfeSh4OiB1bmtub3duKSB7CiAgcmV0dXJuIHkucGFyc2UoeCkKfQ