Skip to content

Commit f75bc1e

Browse files
committed
add TypeScript benchmarks. (#1314)
1 parent abb7e08 commit f75bc1e

File tree

7 files changed

+330
-21
lines changed

7 files changed

+330
-21
lines changed

.github/workflows/test.yml

+19
Original file line numberDiff line numberDiff line change
@@ -247,3 +247,22 @@ jobs:
247247

248248
- name: Type-check JSDocs code blocks
249249
run: npm run test:jsdocs
250+
251+
typescript-benchmarks:
252+
name: TypeScript Benchmarks
253+
runs-on: ubuntu-latest
254+
255+
steps:
256+
- uses: actions/checkout@v4
257+
258+
- name: Use Node.js
259+
uses: actions/setup-node@v4
260+
with:
261+
node-version: 22.x
262+
cache: 'npm'
263+
264+
- name: Install dependencies
265+
run: npm ci
266+
267+
- name: Run benchmarks
268+
run: npm run bench:ts

package-lock.json

+191-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
},
4848
"scripts": {
4949
"clean": "rm -rf dist & rm -rf test/node/dist & rm -rf test/browser/bundle.js & rm -rf helpers",
50+
"bench:ts": "npm run build && cd ./test/ts-benchmarks && tsx ./index.ts",
5051
"test": "npm run build && npm run test:node:build && npm run test:node:run && npm run test:typings && npm run test:esmimports && npm run test:exports",
5152
"test:node:build": "tsc -p test/node",
5253
"test:node": "npm run build && npm run test:node:build && npm run test:node:run",
@@ -82,6 +83,7 @@
8283
],
8384
"devDependencies": {
8485
"@arethetypeswrong/cli": "^0.17.0",
86+
"@ark/attest": "^0.36.0",
8587
"@types/better-sqlite3": "^7.6.11",
8688
"@types/chai": "^4.3.17",
8789
"@types/chai-as-promised": "^7.1.8",

src/parser/select-from-parser.ts

+15-16
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,18 @@ export type SelectFrom<
1111
DB,
1212
TB extends keyof DB,
1313
TE extends TableExpressionOrList<DB, TB>,
14-
> =
15-
TE extends ReadonlyArray<infer T>
16-
? SelectQueryBuilder<From<DB, T>, FromTables<DB, TB, T>, {}>
17-
: TE extends keyof DB & string
18-
? // This branch creates a good-looking type for the most common case:
19-
// selectFrom('person') --> SelectQueryBuilder<DB, 'person', {}>.
20-
// ExtractTableAlias is needed for the case where DB == any. Without it:
21-
// selectFrom('person as p') --> SelectQueryBuilder<DB, 'person as p', {}>
22-
SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>
23-
: // This branch creates a good-looking type for common aliased case:
24-
// selectFrom('person as p') --> SelectQueryBuilder<DB & { p: Person }, 'p', {}>.
25-
TE extends `${infer T} as ${infer A}`
26-
? T extends keyof DB
27-
? SelectQueryBuilder<DB & ShallowRecord<A, DB[T]>, TB | A, {}>
28-
: never
29-
: SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>
14+
> = TE extends keyof DB & string
15+
? // This branch creates a good-looking type for the most common case:
16+
// selectFrom('person') --> SelectQueryBuilder<DB, 'person', {}>.
17+
// ExtractTableAlias is needed for the case where DB == any. Without it:
18+
// selectFrom('person as p') --> SelectQueryBuilder<DB, 'person as p', {}>
19+
SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>
20+
: // This branch creates a good-looking type for common aliased case:
21+
// selectFrom('person as p') --> SelectQueryBuilder<DB & { p: Person }, 'p', {}>.
22+
TE extends `${infer T} as ${infer A}`
23+
? T extends keyof DB
24+
? SelectQueryBuilder<DB & ShallowRecord<A, DB[T]>, TB | A, {}>
25+
: never
26+
: TE extends ReadonlyArray<infer T>
27+
? SelectQueryBuilder<From<DB, T>, FromTables<DB, TB, T>, {}>
28+
: SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>

test/ts-benchmarks/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import './selectFrom.bench.js'

0 commit comments

Comments
 (0)