コフス技術ブログ

複数あるJSON SchemaをAjvでスタンドアロン化されたValidatorとして生成する

複数あるJSON SchemaをAjvを用いてスタンドアロン化済みのValidatorとして生成する方法です。
以前CLI経由で生成する方法を書きましたが今回はスクリプトで複数生成に対応してみます。

まずはAjvをインストールします。

node -v
v16.5.0

npm -v
7.19.1

npm install ajv

Ajvを用いてJSON Schemaを生成を生成するスクリプト例です。

genValidator.js
const fs = require('fs')
const path = require('path')
const Ajv = require('ajv')
const standaloneCode = require('ajv/dist/standalone').default

const rootDir = 'src'
const distDir = 'dist'

const schemas = [
  {
    name: 'foo',
    path: path.join(__dirname, `${rootDir}/schema-foo.json`),
  },
  {
    name: 'bar',
    path: path.join(__dirname, `${rootDir}/schema-bar.json`),
  },
]

schemas.forEach((item) => {
  const file = JSON.parse(fs.readFileSync(item.path, 'utf8'))

  const ajv = new Ajv({ code: { source: true } })
  const validate = ajv.compile(file)
  const moduleCode = standaloneCode(ajv, validate)

  fs.writeFileSync(
    path.join(__dirname, `${distDir}/${item.name}Validator.js`),
    moduleCode
  );
})

以下で実行すると、dist/配下にbarValidator.jsfooValidator.jsが生成されます。

node genValidator.js