Socket
Socket
Sign inDemoInstall

@toomuchdesign/ajv-type-provider-json-schema-to-ts

Package Overview
Dependencies
10
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @toomuchdesign/ajv-type-provider-json-schema-to-ts

An ajv type provider based on json-schema-to-ts


Version published
Maintainers
1
Install size
8.88 kB
Created

Changelog

Source

0.3.0

Minor Changes

  • e47eef0: Rename API as enhanceCompileWithTypeInference and enhanceValidateWithTypeInference
  • e47eef0: Support ajv.validate method

Readme

Source

@toomuchdesign/ajv-type-provider-json-schema-to-ts

Build Status Npm version Coveralls

An ajv type provider based on json-schema-to-ts.

import Ajv from 'ajv';
import { enhanceCompileWithTypeInference } from '@toomuchdesign/ajv-type-provider-json-schema-to-ts';

const ajv = new Ajv();
const compile = enhanceCompileWithTypeInference(ajv.compile.bind(ajv));

const schema = {
  type: 'object',
  properties: {
    foo: { type: 'integer' },
    bar: { type: 'string' },
  },
  required: ['foo'],
  additionalProperties: false,
} as const;

const validate = compile(schema);
let data: unknown = { foo: 6 };

if (validate(data)) {
  // data type inferred from schema
  console.log('Validation ok', data);
} else {
  // validate is the usual AJV validate function
  console.log('Validation ko', validate.errors);
}

Installation

npm i @toomuchdesign/ajv-type-provider-json-schema-to-ts

API

enhanceCompileWithTypeInference

Enhance Ajv compile method with type inference:

import Ajv from 'ajv';
import { enhanceCompileWithTypeInference } from '@toomuchdesign/ajv-type-provider-json-schema-to-ts';

const ajv = new Ajv();
const compile = enhanceCompileWithTypeInference(ajv.compile.bind(ajv));

enhanceValidateWithTypeInference

Enhance Ajv validate method with type inference:

import Ajv from 'ajv';
import { enhanceValidateWithTypeInference } from '@toomuchdesign/ajv-type-provider-json-schema-to-ts';

const ajv = new Ajv();
const validate = enhanceValidateWithTypeInference(ajv.validate.bind(ajv));

Type provider options

enhanceCompileWithTypeInference and enhanceValidateWithTypeInference accept a json-schema-to-ts FromSchema option object to configure inferred types output:

const compile = enhanceCompileWithTypeInference<{ parseNotKeyword: true }>(
  ajv.compile.bind(ajv),
);

const validate = enhanceValidateWithTypeInference<{ parseNotKeyword: true }>(
  ajv.validate.bind(ajv),
);

references option can be used to resolve $ref schema types:

const userSchema = {
  $id: 'http://example.com/schemas/user.json',
  type: 'object',
  properties: {
    name: { type: 'string' },
    age: { type: 'integer' },
  },
  required: ['name', 'age'],
  additionalProperties: false,
} as const;

const usersSchema = {
  type: 'array',
  items: {
    $ref: 'http://example.com/schemas/user.json',
  },
} as const;

// Register ref schema in ajv
ajv.addSchema(userSchema);

const compile = enhanceCompileWithTypeInference<{
  // Register ref schema type provider
  references: [typeof userSchema];
}>(ajv.compile.bind(ajv));

const validate = compile(schema);

if (validate(data)) {
  // Inferred data with resolved $ref schemas
  const expectedData: { name: string; age: number }[] = data;
}

Developer notes

The current API is completely decoupled from Ajv. This means enhancing Ajv methods singularly, bypassing their original type implementation.

A different approach could consist of Ajv exposing a hook to provide external type inference implementation, as done with Fastify's type providers:

import Ajv from 'ajv';
import type { JsonSchemaToTsProvider } from '@toomuchdesign/ajv-type-provider-json-schema-to-ts';

const ajv = new Ajv();
const typedAjv = ajv.withTypeProvider<JsonSchemaToTsProvider>();

Contributing

Any contribution should be provided with a changesets update:

npx changeset

Keywords

FAQs

Last updated on 01 Apr 2024

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc