MailSlurp logo

blog

Convert Zapier plugin schemas to Typescript definitions

How to convert Zapier plugin schemas to Typescript definitions using the official zapier schemas package

Recently I had to work on the MailSlurp zapier email plugin and realised we didn't have strong typescript definitions for our schemas. So I created this basic script to convert the official zapier schemas into Typescript.

The code

You'll need to set the WD environment variable to your working directory when running the script:

const wd = process.env.WD;
const fs = require("fs");
const { compile } = require("json-schema-to-typescript");
const zapierSchema = require("zapier-platform-schema/exported-schema.json");
const { join } = require("path");

const exportedSchema = JSON.parse(
  JSON.stringify(zapierSchema).replace(/"$ref":\s+"\//g, '"$ref":"#/definitions/'),
);

const schema = {
  $schema: "http://json-schema.org/draft-07/schema#",
  $id: "http://json-schema.org/draft-07/schema#",
  name: "AppSchema",
  definitions: Object.entries(exportedSchema.schemas).reduce((acc, obj) => {
    acc[obj[1].id.replace("/", "")] = obj[1];
    return acc;
  }, {}),
  ...{ ...exportedSchema.schemas.AppSchema, id: undefined },
};

compile(schema, {})
  .then((ts) => fs.writeFileSync(join(wd, "types.d.ts"), ts))
  .then(() => console.log("Types written"))
  .catch((err) => {
    console.error(err);
    process.exit(1);
  });