import { expectType, expectAssignable, expectError, expectNotAssignable } from 'tsd' import fastify from 'fastify' import fastifySensible, { FastifySensibleOptions, httpErrors, HttpError } from '..' const app = fastify() app.register(fastifySensible) expectAssignable({}) expectAssignable({ sharedSchemaId: 'HttpError' }) expectAssignable({ sharedSchemaId: undefined }) expectNotAssignable({ notSharedSchemaId: 'HttpError' }) app.get('/', (_req, reply) => { expectAssignable(reply.badRequest()) expectAssignable(reply.unauthorized()) expectAssignable(reply.paymentRequired()) expectAssignable(reply.forbidden()) expectAssignable(reply.notFound()) expectAssignable(reply.methodNotAllowed()) expectAssignable(reply.notAcceptable()) expectAssignable(reply.proxyAuthenticationRequired()) expectAssignable(reply.requestTimeout()) expectAssignable(reply.gone()) expectAssignable(reply.lengthRequired()) expectAssignable(reply.preconditionFailed()) expectAssignable(reply.payloadTooLarge()) expectAssignable(reply.uriTooLong()) expectAssignable(reply.unsupportedMediaType()) expectAssignable(reply.rangeNotSatisfiable()) expectAssignable(reply.expectationFailed()) expectAssignable(reply.imateapot()) expectAssignable(reply.unprocessableEntity()) expectAssignable(reply.locked()) expectAssignable(reply.failedDependency()) expectAssignable(reply.tooEarly()) expectAssignable(reply.upgradeRequired()) expectAssignable(reply.preconditionFailed()) expectAssignable(reply.tooManyRequests()) expectAssignable(reply.requestHeaderFieldsTooLarge()) expectAssignable(reply.unavailableForLegalReasons()) expectAssignable(reply.internalServerError()) expectAssignable(reply.notImplemented()) expectAssignable(reply.badGateway()) expectAssignable(reply.serviceUnavailable()) expectAssignable(reply.gatewayTimeout()) expectAssignable(reply.httpVersionNotSupported()) expectAssignable(reply.variantAlsoNegotiates()) expectAssignable(reply.insufficientStorage()) expectAssignable(reply.loopDetected()) expectAssignable(reply.bandwidthLimitExceeded()) expectAssignable(reply.notExtended()) expectAssignable(reply.networkAuthenticationRequired()) }) app.get('/', (_req, reply) => { expectAssignable(reply.getHttpError(405, 'Method Not Allowed')) expectAssignable(reply.getHttpError('405', 'Method Not Allowed')) }) app.get('/', () => { expectAssignable(app.httpErrors.createError(405, 'Method Not Allowed')) }) app.get('/', () => { expectAssignable( app.httpErrors.createError(405, 'Method Not Allowed') ) expectAssignable( app.httpErrors.createError(405, 'Method Not Allowed') ) expectAssignable>(app.httpErrors.badRequest()) }) app.get('/', async () => { expectAssignable>(app.httpErrors.badRequest()) expectAssignable>(app.httpErrors.unauthorized()) expectAssignable>(app.httpErrors.paymentRequired()) expectAssignable>(app.httpErrors.forbidden()) expectAssignable>(app.httpErrors.notFound()) expectAssignable>(app.httpErrors.methodNotAllowed()) expectAssignable>(app.httpErrors.notAcceptable()) expectAssignable>(app.httpErrors.proxyAuthenticationRequired()) expectAssignable>(app.httpErrors.requestTimeout()) expectAssignable>(app.httpErrors.gone()) expectAssignable>(app.httpErrors.lengthRequired()) expectAssignable>(app.httpErrors.preconditionFailed()) expectAssignable>(app.httpErrors.payloadTooLarge()) expectAssignable>(app.httpErrors.uriTooLong()) expectAssignable>(app.httpErrors.unsupportedMediaType()) expectAssignable>(app.httpErrors.rangeNotSatisfiable()) expectAssignable>(app.httpErrors.expectationFailed()) expectAssignable>(app.httpErrors.imateapot()) expectAssignable>(app.httpErrors.unprocessableEntity()) expectAssignable>(app.httpErrors.locked()) expectAssignable>(app.httpErrors.failedDependency()) expectAssignable>(app.httpErrors.tooEarly()) expectAssignable>(app.httpErrors.upgradeRequired()) expectAssignable>(app.httpErrors.tooManyRequests()) expectAssignable>(app.httpErrors.requestHeaderFieldsTooLarge()) expectAssignable>(app.httpErrors.unavailableForLegalReasons()) expectAssignable>(app.httpErrors.internalServerError()) expectAssignable>(app.httpErrors.notImplemented()) expectAssignable>(app.httpErrors.badGateway()) expectAssignable>(app.httpErrors.serviceUnavailable()) expectAssignable>(app.httpErrors.gatewayTimeout()) expectAssignable>(app.httpErrors.httpVersionNotSupported()) expectAssignable>(app.httpErrors.variantAlsoNegotiates()) expectAssignable>(app.httpErrors.insufficientStorage()) expectAssignable>(app.httpErrors.loopDetected()) expectAssignable>(app.httpErrors.bandwidthLimitExceeded()) expectAssignable>(app.httpErrors.notExtended()) expectAssignable>(app.httpErrors.networkAuthenticationRequired()) }) app.get('/', async () => { expectType(app.assert(1)) expectType(app.assert.ok(true)) expectType(app.assert.equal(1, 1)) expectType(app.assert.notEqual(1, 2)) expectType(app.assert.strictEqual(1, 1)) expectType(app.assert.notStrictEqual(1, 2)) expectType(app.assert.deepEqual({}, {})) expectType(app.assert.notDeepEqual({}, { a: 1 })) }) app.get('/', async () => { expectType>(app.to(new Promise(resolve => resolve()))) }) app.get('/', (_req, reply) => { expectAssignable(reply.cacheControl('public')) }) app.get('/', (_req, reply) => { expectAssignable(reply.preventCache()) }) app.get('/', (_req, reply) => { expectAssignable(reply.cacheControl('max-age', 42)) }) app.get('/', (_req, reply) => { expectError(reply.cacheControl('foobar')) }) app.get('/', (_req, reply) => { expectAssignable(reply.stale('while-revalidate', 42)) }) app.get('/', async (_req, reply) => { expectType(reply.vary('test')) expectType(reply.vary(['test'])) expectType(reply.vary.append('X-Header', 'field1')) expectType(reply.vary.append('X-Header', ['field1'])) }) app.get('/', async (req) => { expectType(req.forwarded()) expectType(req.is(['foo', 'bar'])) expectType(req.is('foo', 'bar')) }) httpErrors.forbidden('This type should be also available') httpErrors.createError('MyError')