transloadit / types Goto Github PK
View Code? Open in Web Editor NEWPRE-ALPHA, BROKEN, AND SUBJECT TO FUNDAMENTAL CHANGE. DO NOT USE YET--Types for Transloadit Robots, Assemblies and Templates
License: MIT License
PRE-ALPHA, BROKEN, AND SUBJECT TO FUNDAMENTAL CHANGE. DO NOT USE YET--Types for Transloadit Robots, Assemblies and Templates
License: MIT License
We would like to use Zod to define schemas for our Robots, Assembly and Template constructs, and more to come. The schemas can then be used by our customers and us to validate and type these types of data and later on by us to build editor completions and linting in our user dashboard.
In order to do that correctly, we need two features in Zod that are currently missing:
Both have been reported/requested by other users in the Zod repo in colinhacks/zod#1075 and colinhacks/zod#1618
In this repo, the schema that is currently breaking in particular is the robotSchema
, caused by the intersections here:
Lines 180 to 183 in cecd12c
These four schemas are (should be) intersections of z.object
and z.discriminatedUnion
. They themselves are used in the robotSchema
mentioned above, which is also a z.discriminatedUnion
.
A simplified example of what we want to achieve type-wise is this:
type Robots =
| { robot: "/upload/handle" }
| {
robot: "/s3/store"
use: string
key: string
bucket: string
}
| ({ robot: "/video/encode"; use: string; preset: string; result?: boolean } & (
| { ffmpeg_stack: "v3.3.3"; preset: "foo" }
| { ffmpeg_stack: "v4.3.1"; preset: "foo" | "bar" }
))
type Assembly = {
steps: Record<string, Robots & { result?: boolean }>
}
The discriminators here are robot
and ffmpeg_stack
(and we might have other discriminators nested in individual Robots as well). The /video/encode
robot is an intersection of an object and a discriminated union.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.