1.0.0 • Published 14 days ago

@saoviettest/placeat-voluptates-neque-fugit v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
14 days ago

Fastify Type Provider Zod

NPM Version NPM Downloads Build Status

How to use?

import Fastify from "fastify";
import { serializerCompiler, validatorCompiler, ZodTypeProvider } from "fastify-type-provider-zod";
import z from "zod";

const app = Fastify()

// Add schema validator and serializer
app.setValidatorCompiler(validatorCompiler);
app.setSerializerCompiler(serializerCompiler);

app.withTypeProvider<ZodTypeProvider>().route({
  method: "GET",
  url: "/",
  // Define your schema
  schema: {
    querystring: z.object({
      name: z.string().min(4),
    }),
    response: {
      200: z.string(),
    },
  },
  handler: (req, res) => {
    res.send(req.query.name);
  },
});

app.listen({ port: 4949 });

How to use together with @fastify/swagger

import fastify from 'fastify';
import fastifySwagger from '@fastify/swagger';
import fastifySwaggerUI from '@fastify/swagger-ui';
import { z } from 'zod';

import {
  jsonSchemaTransform,
  createJsonSchemaTransform,
  serializerCompiler,
  validatorCompiler,
  ZodTypeProvider,
} from 'fastify-type-provider-zod';

const app = fastify();
app.setValidatorCompiler(validatorCompiler);
app.setSerializerCompiler(serializerCompiler);

app.register(fastifySwagger, {
  openapi: {
    info: {
      title: 'SampleApi',
      description: 'Sample backend service',
      version: '1.0.0',
    },
    servers: [],
  },
  transform: jsonSchemaTransform,
  // You can also create transform with custom skiplist of endpoints that should not be included in the specification:
  //
  // transform: createJsonSchemaTransform({
  //   skipList: [ '/documentation/static/*' ]
  // })
});

app.register(fastifySwaggerUI, {
  routePrefix: '/documentation',
});

const LOGIN_SCHEMA = z.object({
  username: z.string().max(32).describe('Some description for username'),
  password: z.string().max(32),
});

app.after(() => {
  app.withTypeProvider<ZodTypeProvider>().route({
    method: 'POST',
    url: '/login',
    schema: { body: LOGIN_SCHEMA },
    handler: (req, res) => {
      res.send('ok');
    },
  });
});

async function run() {
  await app.ready();

  await app.listen({
    port: 4949,
  });

  console.log(`Documentation running at http://localhost:4949/documentation`);
}

run();

How to create a plugin?

import { z } from 'zod';
import { FastifyPluginAsyncZod } from 'fastify-type-provider-zod';

const plugin: FastifyPluginAsyncZod = async function (fastify, _opts) {
  fastify.route({
    method: 'GET',
    url: '/',
    // Define your schema
    schema: {
      querystring: z.object({
        name: z.string().min(4),
      }),
      response: {
        200: z.string(),
      },
    },
    handler: (req, res) => {
      res.send(req.query.name);
    },
  });
};
omitfastcopyvalueUint32Arrayfull-widthflagJSON-SchemalocationzerohashECMAScript 2017ES3traverseuuidlistenersespreees2017argvSymbol.toStringTagpreprocessorcolourless csstaps3serializerpatchunicodeuninstallloggingspinnerscompile lessHyBiwebquoteArrayBuffer.prototype.slicepushECMAScript 2023css nestinglazyemrdirsesgroupBywritewordwrapinternal slotprotofsregular expressionoffsetArray.prototype.flatMapstyleclassnamesconsolecloudformationescapedefineyamlformsairbnbroutingxtermlogzodloadingsuperagentlimitprivateprettyString.prototype.trimES2015es-shimsperformancedependency managerArray.prototype.includeslimitedeast-asian-widthnested cssmkdirpfunctioneslintsomedirectoryString.prototype.matchAllweakset0whatwgsetPrototypeOfes2015command-linel10npasswordworkerES2016guidArrayBufferfolderdropreadablestreamfastcacheInt8Arrayvalidationfpsdataawsargslesscssexpressobjectcloneec2pyyamliambusyObject.isamazonArrayrmpathjavascriptPushArrayBuffer#slicelivebrowseriterationtypanionhigher-orderTypedArrayArray.prototype.filterstreams2io-tsthroatstreamsdeep-clonebindlibphonenumbertextvaluesutilitypropertyratelimitES2017jsonpnpm9namesstaterecursiveschemesortedkinesisdeep-copyconfigcharacterskeyscomparedataviewvariables in cssawaitpolyfillloggerreact-hook-formquerystringauthrmdirpropertiestyped arrayimmertypeerrorfast-cloneArray.prototype.findLastreduceeslint-pluginfixed-widthmake dirpredictableauthenticationJSONstylesrandomnegativeUint8ArrayobjswfconsumedeletequeuestablesetterbcryptschemawarningObject.keyslockfilewordbreakassignmapstylesheetfilterincludesstreamtapejestES2023reactspectypedarrayssafe-0filettyECMAScript 7symbolsmergeasciifseventsnumber256ECMAScript 2021formes-abstracturlawesomesaucewgetdayjsStreamswatcherECMAScript 5requestdataViewargparsestylingdeepcopyemojishebangaccessibilityinputoptimizerdateReactiveExtensionschromeCSSStyleDeclarationesjasmineObject.entriesRxJSajvserializationsettingsObject.getPrototypeOfelasticachemobilesimpledbtypedarrayArray.prototype.flatdescriptornoperm -rfcharactercomputed-typescall-boundfullwidth[[Prototype]]Object.definePropertytc39graphqlfindLastIndexbootstrap cssqsmakeBigInt64ArraymiddlewaresetBigUint64ArrayenvrangeerrorfindLastbrowserslistequalansitoStringTagfast-deep-copygetcollectioninlinewrapsorttrimStartmatchesimportexportgradients cssclientbyteLengthreal-timergbfetchArray.prototype.findLastIndexFloat64Arrayfast-copyphonelookregexpmime-dbshimstdlibcheckbytequeryregular expressionsECMAScript 2016internalparseregularkarmaiswalkingownsequenceutil.inspectparentsrfc4122loadbalancingcloudsearcha11ycompilerpromisestimetakegetterrapidIteratorECMAScript 2020iterateshellterminalECMAScript 6utiles2016workspace:*getOwnPropertyDescriptorFunction.prototype.nametoSortedfiglettypeseventDispatcherWeakSetes7throttleES2022censorexpressionviewnamequeueMicrotaskdebuggerdebugerroravatypescriptObject.fromEntriesdatastructurewatchmomentwatchingtaskpositivedeepcloneefficientconfigurablechaicss__proto__speedsetImmediatelengthESnexttouchframeworkextraentriesencryptioniecoerciblelrutoolsform-validationconcatgenericsmocha_.extendimportmrulesses2018buffersbrowserlistprotobufMapfindupRegExp.prototype.flagslanguageassertsprogressInt32ArrayhttpsresolveformattingenvironmentECMAScript 2018astgdprstartermonoreporateroutecore-jsPromiseObservablecorecode pointschinesekoreanextendInt16ArraysyntaxemitdifflinkcliprototypeSymbolhookformtestmimetypesdom-testing-libraryslicereusepackagessymlinkssymbolcloudtrailarraycodesimmutableparser.envrdsassertionArray.prototype.flattenStyleSheetnegative zeroinstallerless mixinsscheme-validationcallbindredux-toolkitpackage.jsonreplaybundlervestelmshamautoscalingstyleguideTypeScriptRegExp#flagssqsECMAScript 3idwidthAsyncIteratorgetintrinsicprotocol-buffersjsxreduxsameValueZeroES6bootstrap lessfromcommanderduplexcreateeveryjsUint8ClampedArrayapiintrinsicbyteOffsetrequireconcatMapinspectclassnamedefinePropertyES5fastifystatelessreduceroptiontermnativedeterministicES2021accessormodulesStreamsidepackage managerfullhooksMicrosoftgetoptxhrcommandtoArraycolorsinvariantenumerablegetPrototypeOfgroupspinnerReactiveXcloudfrontjapanesecall-bindnodedependencies@@toStringTagwhichvariablesjoicryptomkdirselbmimeweakmapmovei18ntypeofObservablesassertfunctionsprefixindicatorpruneWebSocketpackageES7es-shim APIESequalitymatchonceopenmkdires8ebscolorSetproppromisekeyhardlinkswritablecallboundbeanstalktrimLeftRxconcurrencybundlingcss lessregexstoragegatewayformatcorsECMAScript 2022mixinsbdd
1.0.0

14 days ago