From 1ba4db5ff755f6d4b97d3a97c66e734f175aa19c Mon Sep 17 00:00:00 2001 From: Tony133 Date: Mon, 27 Apr 2026 18:14:57 +0200 Subject: [PATCH] refactor(types): migrate from tsd to tstyche --- package.json | 6 ++-- types/index.test-d.ts | 67 ---------------------------------------- types/index.tst.ts | 71 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 70 deletions(-) delete mode 100644 types/index.test-d.ts create mode 100644 types/index.tst.ts diff --git a/package.json b/package.json index 121969b..11464b2 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "lint:fix": "eslint --fix", "test": "npm run test:unit && npm run test:typescript", "test:unit": "c8 --100 node --test", - "test:typescript": "tsd" + "test:typescript": "tstyche" }, "repository": { "type": "git", @@ -68,7 +68,7 @@ "eslint": "^9.17.0", "fastify": "^5.0.0", "neostandard": "^0.13.0", - "tsd": "^0.33.0" + "tstyche": "^7.0.0" }, "dependencies": { "@fastify/cookie": "^11.0.1", @@ -78,4 +78,4 @@ "publishConfig": { "access": "public" } -} +} \ No newline at end of file diff --git a/types/index.test-d.ts b/types/index.test-d.ts deleted file mode 100644 index deaad62..0000000 --- a/types/index.test-d.ts +++ /dev/null @@ -1,67 +0,0 @@ -import SecureSessionPlugin, { Session, SessionData } from '..' -import fastify, { - FastifyRequest, - FastifyInstance, - FastifyReply, -} from 'fastify' -import { expectType } from 'tsd' - -const app: FastifyInstance = fastify() -app.register(SecureSessionPlugin, { key: 'foobar' }) -app.register(SecureSessionPlugin, { key: Buffer.from('foo') }) -app.register(SecureSessionPlugin, { key: ['foo', 'bar'] }) -app.register(SecureSessionPlugin, { secret: 'foo', salt: 'bar' }) -app.register(SecureSessionPlugin, { sessionName: 'foo', key: 'bar' }) -app.register(SecureSessionPlugin, { expiry: 24 * 60 * 60, key: 'bar' }) -app.register(SecureSessionPlugin, [{ sessionName: 'foo', key: 'bar' }, { sessionName: 'bar', key: 'bar' }]) - -declare module '..' { - interface SessionData { - foo: string; - } -} - -interface FooSessionData { - foo: string; -} - -declare module 'fastify' { - interface FastifyRequest { - foo: Session; - } -} - -app.get('/not-websockets', async (request, reply) => { - expectType(request) - expectType(reply) - expectType(request.session) - request.session.set('foo', 'bar') - expectType(request.session.get('foo')) - expectType(request.session.get('baz')) - expectType(request.session.foo) - expectType(request.session.data()) - request.session.delete() - request.session.options({ maxAge: 42 }) - request.session.touch() - - request.foo.set('foo', 'bar') - expectType(request.foo.get('foo')) - expectType(request.foo.get('baz')) - request.foo.delete() - request.foo.options({ maxAge: 42 }) - request.foo.touch() - - // @ts-expect-error: set undefined key - request.session.set('baz', 'bar') - // @ts-expect-error: invoke undefined key - expectType(request.session.baz) - // @ts-expect-error: invoke undefined key - request.baz.touch() -}) - -expectType(app.decodeSecureSession('some cookie')) -let session = app.createSecureSession({ foo: 'bar' }) -expectType(session) -session = app.createSecureSession() -expectType(session) -expectType(app.encodeSecureSession(session)) diff --git a/types/index.tst.ts b/types/index.tst.ts new file mode 100644 index 0000000..8ca8d6a --- /dev/null +++ b/types/index.tst.ts @@ -0,0 +1,71 @@ +import SecureSessionPlugin, { Session, SessionData } from '.' +import fastify, { + FastifyRequest, + FastifyInstance, + FastifyReply +} from 'fastify' +import { expect } from 'tstyche' + +const app: FastifyInstance = fastify() +app.register(SecureSessionPlugin, { key: 'foobar' }) +app.register(SecureSessionPlugin, { key: Buffer.from('foo') }) +app.register(SecureSessionPlugin, { key: ['foo', 'bar'] }) +app.register(SecureSessionPlugin, { secret: 'foo', salt: 'bar' }) +app.register(SecureSessionPlugin, { sessionName: 'foo', key: 'bar' }) +app.register(SecureSessionPlugin, { expiry: 24 * 60 * 60, key: 'bar' }) +app.register(SecureSessionPlugin, [ + { sessionName: 'foo', key: 'bar' }, + { sessionName: 'bar', key: 'bar' } +]) + +declare module '..' { + interface SessionData { + foo: string; + } +} + +interface FooSessionData { + foo: string; +} + +declare module 'fastify' { + interface FastifyRequest { + foo: Session; + } +} + +app.get('/not-websockets', async (request, reply) => { + expect(request).type.toBeAssignableTo() + expect(reply).type.toBeAssignableTo() + expect(request.session).type.toBe() + request.session.set('foo', 'bar') + expect(request.session.get('foo')).type.toBe() + expect(request.session.get('baz')).type.toBe() + expect(request.session.foo).type.toBe() + expect(request.session.data()).type.toBe< + SessionData | undefined + >() + request.session.delete() + request.session.options({ maxAge: 42 }) + request.session.touch() + + request.foo.set('foo', 'bar') + expect(request.foo.get('foo')).type.toBe() + expect(request.foo.get('baz')).type.toBe() + request.foo.delete() + request.foo.options({ maxAge: 42 }) + request.foo.touch() + + expect(request.session.set).type.not.toBeCallableWith('baz', 'bar') + expect(request.session).type.not.toHaveProperty('baz') + expect(request).type.not.toHaveProperty('baz') +}) + +expect(app.decodeSecureSession('some cookie')).type.toBe() +let session = app.createSecureSession({ foo: 'bar' }) +expect(session).type.toBe() + +session = app.createSecureSession() +expect(session).type.toBe() + +expect(app.encodeSecureSession(session)).type.toBe()