| I haven't written anything up - maybe one day - but our stack is `ts-morph` to get some basic metadata out of our "service definition" typescript files, `ts-json-schema-generator` to go from there to JSON Schema, `quicktype-core` to go to other languages. Schema validation and type generation vary by language. When we need to validate schemas in JS/TS land, we're using `ajv`. Our generation step exports the JSON Schema to a valid JS file, and we load that up with AJV and grab schemas for specific types using `getSchema`. I evaluated (shallowly) for our use case (TS/JS services, PHP monolith, several deployment platforms): - typespec.io (didn't like having a new IDL, mixes transport concerns with service definition) - trpc (focused on TS-only codebases, not multi language) - OpenAPI (too verbose to write by hand, too focused on HTTP) - protobuf/thrift/etc (too heavy, we just want JSON) I feel like I came across some others, but I didn't see anyone just using TypeScript as the IDL. I think it's quite good for that purpose, but of course it is a bit too powerful. I have yet to put in guardrails that will error out when you get a bit too type happy, or use generics, etc. |