Skip to content

Commit a52f590

Browse files
committed
refactor(types): migrate from tsd to tstyche
1 parent b140ab8 commit a52f590

4 files changed

Lines changed: 97 additions & 91 deletions

File tree

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"scripts": {
1616
"test": "npm run test:unit && npm run test:typescript",
1717
"test:unit": "c8 --100 node --test",
18-
"test:typescript": "tsd",
18+
"test:typescript": "tstyche",
1919
"lint": "eslint",
2020
"lint:fix": "eslint --fix"
2121
},
@@ -29,7 +29,7 @@
2929
"fastify": "^5.0.0",
3030
"neostandard": "^0.13.0",
3131
"superagent": "^10.0.0",
32-
"tsd": "^0.33.0"
32+
"tstyche": "^7.0.0"
3333
},
3434
"homepage": "http://github.com/fastify/fastify-request-context",
3535
"funding": [
@@ -71,4 +71,4 @@
7171
"publishConfig": {
7272
"access": "public"
7373
}
74-
}
74+
}

tsconfig.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
{
22
"compilerOptions": {
33
"outDir": "dist",
4-
"module": "commonjs",
4+
"rootDir": ".",
5+
"module": "node16",
56
"target": "es2022",
67
"sourceMap": true,
78
"declaration": true,
89
"declarationMap": false,
9-
"types": ["node"],
1010
"strict": true,
11-
"moduleResolution": "node",
11+
"moduleResolution": "node16",
1212
"noUnusedLocals": false,
1313
"noUnusedParameters": false,
1414
"noFallthroughCasesInSwitch": true,
@@ -20,7 +20,9 @@
2020
"allowSyntheticDefaultImports": true,
2121
"esModuleInterop": true,
2222
"forceConsistentCasingInFileNames": true,
23-
"exactOptionalPropertyTypes": true
23+
"exactOptionalPropertyTypes": true,
24+
"types": ["node"]
2425
},
26+
"include": ["types/**/*", "index.d.ts"],
2527
"exclude": ["node_modules", "test", "dist"]
2628
}

types/index.test-d.ts

Lines changed: 0 additions & 84 deletions
This file was deleted.

types/index.tst.ts

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import {
2+
requestContext,
3+
asyncLocalStorage,
4+
fastifyRequestContext,
5+
FastifyRequestContextOptions,
6+
RequestContext,
7+
RequestContextDataFactory,
8+
} from '..'
9+
import { expect } from 'tstyche'
10+
import { fastify, FastifyBaseLogger, FastifyInstance, RouteHandlerMethod, FastifyRequest } from 'fastify'
11+
import { AsyncLocalStorage } from 'node:async_hooks'
12+
13+
const app: FastifyInstance = fastify()
14+
app.register(fastifyRequestContext)
15+
16+
declare module '..' {
17+
interface RequestContextData {
18+
a?: string
19+
log?: FastifyBaseLogger
20+
}
21+
}
22+
23+
expect({}).type.toBeAssignableTo<FastifyRequestContextOptions>()
24+
25+
expect({
26+
defaultStoreValues: { a: 'dummy' },
27+
}).type.toBeAssignableTo<FastifyRequestContextOptions>()
28+
29+
expect({
30+
hook: 'preValidation' as const,
31+
defaultStoreValues: { a: 'dummy' },
32+
}).type.toBeAssignableTo<FastifyRequestContextOptions>()
33+
34+
expect({
35+
defaultStoreValues: () => ({
36+
a: 'dummy',
37+
}),
38+
}).type.toBeAssignableTo<FastifyRequestContextOptions>()
39+
40+
expect({
41+
defaultStoreValues: { bar: 'dummy' },
42+
}).type.not.toBeAssignableTo<FastifyRequestContextOptions>()
43+
44+
expect({
45+
defaultStoreValues: { log: 'dummy' },
46+
}).type.not.toBeAssignableTo<FastifyRequestContextOptions>()
47+
48+
expect(() => ({
49+
a: 'dummy',
50+
})).type.toBeAssignableTo<RequestContextDataFactory>()
51+
52+
expect({
53+
defaultStoreValues: (req: FastifyRequest) => ({
54+
log: req.log.child({ childLog: true }),
55+
}),
56+
}).type.toBeAssignableTo<FastifyRequestContextOptions>()
57+
58+
expect((req: FastifyRequest) => ({
59+
log: req.log.child({ childLog: true }),
60+
})).type.toBeAssignableTo<RequestContextDataFactory>()
61+
62+
expect(() => ({ bar: 'dummy' })).type.not.toBeAssignableTo<RequestContextDataFactory>()
63+
64+
expect(() => ({ log: 'dummy' })).type.not.toBeAssignableTo<RequestContextDataFactory>()
65+
66+
expect(app.requestContext).type.toBe<RequestContext>()
67+
expect(requestContext).type.toBe<RequestContext>()
68+
expect(asyncLocalStorage).type.toBe<AsyncLocalStorage<RequestContext>>()
69+
70+
const getHandler: RouteHandlerMethod = function (request, _reply) {
71+
expect(request.requestContext).type.toBe<RequestContext>()
72+
}
73+
expect(getHandler).type.toBe<RouteHandlerMethod>()
74+
75+
expect(requestContext.get('a')).type.toBe<string | undefined>()
76+
expect(requestContext.get('log')).type.toBe<FastifyBaseLogger | undefined>()
77+
78+
// @ts-expect-error: Argument of type '"bar"' is not assignable
79+
requestContext.get('bar')
80+
81+
requestContext.set('a', undefined)
82+
83+
// @ts-expect-error: Argument of type 'number' is not assignable
84+
requestContext.set('a', 123)
85+
86+
expect({
87+
defaultStoreValues: { a: undefined },
88+
}).type.not.toBeAssignableTo<FastifyRequestContextOptions>()

0 commit comments

Comments
 (0)