Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .github/actions/environments/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,26 @@ runs:
registry-url: "https://registry.npmjs.org"
cache: pnpm

- name: Restore ttsc native cache
uses: actions/cache@v4
with:
path: |
${{ runner.temp }}/ttsc-cache
${{ runner.temp }}/ttsc-go-build
key: ${{ runner.os }}-ttsc-native-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-ttsc-native-

- name: Install dependencies
shell: bash
env:
TTSC_CACHE_DIR: ${{ runner.temp }}/ttsc-cache
TTSC_GO_CACHE_DIR: ${{ runner.temp }}/ttsc-go-build
run: pnpm install

- name: Build schemas
shell: bash
env:
TTSC_CACHE_DIR: ${{ runner.temp }}/ttsc-cache
TTSC_GO_CACHE_DIR: ${{ runner.temp }}/ttsc-go-build
run: pnpm schemas:build
3 changes: 3 additions & 0 deletions .github/workflows/bench-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ jobs:
- name: Setup environment
uses: ./.github/actions/environments
- name: Run download benchmark
env:
TTSC_CACHE_DIR: ${{ runner.temp }}/ttsc-cache
TTSC_GO_CACHE_DIR: ${{ runner.temp }}/ttsc-go-build
run: pnpm bench:download
- name: Upload download results
uses: actions/upload-artifact@v4
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/bench.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ jobs:
- name: Setup environment
uses: ./.github/actions/environments
- name: Run download benchmark
env:
TTSC_CACHE_DIR: ${{ runner.temp }}/ttsc-cache
TTSC_GO_CACHE_DIR: ${{ runner.temp }}/ttsc-go-build
run: pnpm bench:download
- name: Upload download results
uses: actions/upload-artifact@v4
Expand Down
2 changes: 1 addition & 1 deletion bench/bench.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion bench/download.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"minified":[{"fileName":"@railway-ts/pipelines/download.ts","libraryName":"@railway-ts/pipelines","version":"0.1.29","bytes":4130,"gzipBytes":1555},{"fileName":"superstruct/download.ts","libraryName":"superstruct","version":"2.0.2","bytes":4908,"gzipBytes":1944},{"fileName":"valibot/download.ts","libraryName":"valibot","version":"1.4.2","bytes":6366,"gzipBytes":1978},{"fileName":"typia/download.ts","libraryName":"typia","version":"12.1.1","bytes":7891,"gzipBytes":1690},{"fileName":"decoders/download.ts","libraryName":"decoders","version":"2.9.3","bytes":8177,"gzipBytes":3151},{"fileName":"io-ts/download.ts","libraryName":"io-ts","version":"2.2.22","bytes":12520,"gzipBytes":3595},{"fileName":"runtypes/download.ts","libraryName":"runtypes","version":"7.0.4","bytes":15586,"gzipBytes":4797},{"fileName":"zod/mini/download.ts","libraryName":"zod/mini","version":"4.4.3","bytes":16068,"gzipBytes":5181},{"fileName":"sury/download.ts","libraryName":"sury","version":"11.0.0-alpha.9","bytes":27037,"gzipBytes":10103},{"fileName":"yup/download.ts","libraryName":"yup","version":"1.7.1","bytes":42120,"gzipBytes":13086},{"fileName":"typebox/download/schema.ts","libraryName":"typebox","version":"1.3.3","note":"schema","bytes":44213,"gzipBytes":12933},{"fileName":"zod/v3/download/index.ts","libraryName":"zod/v3","version":"4.4.3","bytes":56947,"gzipBytes":12933},{"fileName":"effect/@beta/download.ts","libraryName":"effect@beta","version":"4.0.0-beta.93","bytes":57696,"gzipBytes":18777},{"fileName":"zod/v3/download/default.ts","libraryName":"zod/v3","version":"4.4.3","note":"default","bytes":59945,"gzipBytes":14046},{"fileName":"typebox/download/schema + compile.ts","libraryName":"typebox","version":"1.3.3","note":"schema + compile","bytes":60311,"gzipBytes":17459},{"fileName":"zod/download/index.ts","libraryName":"zod","version":"4.4.3","bytes":65478,"gzipBytes":17477},{"fileName":"@sapphire/shapeshift/download.ts","libraryName":"@sapphire/shapeshift","version":"4.0.0","bytes":76597,"gzipBytes":18154},{"fileName":"typebox/download/namespace.ts","libraryName":"typebox","version":"1.3.3","note":"namespace","bytes":94434,"gzipBytes":26442},{"fileName":"typebox/download/script.ts","libraryName":"typebox","version":"1.3.3","note":"script","bytes":104868,"gzipBytes":27501},{"fileName":"typebox/download/namespace + compile.ts","libraryName":"typebox","version":"1.3.3","note":"namespace + compile","bytes":114103,"gzipBytes":31688},{"fileName":"typebox/download/index.ts","libraryName":"typebox","version":"1.3.3","bytes":121784,"gzipBytes":32166},{"fileName":"ajv/download.ts","libraryName":"ajv","version":"8.20.0","bytes":139753,"gzipBytes":39398},{"fileName":"typebox/download/compile.ts","libraryName":"typebox","version":"1.3.3","note":"compile","bytes":141467,"gzipBytes":37432},{"fileName":"arktype/download.ts","libraryName":"arktype","version":"2.2.2","bytes":152698,"gzipBytes":45691},{"fileName":"joi/download.ts","libraryName":"joi","version":"18.2.3","bytes":174490,"gzipBytes":53758},{"fileName":"ata-validator/download.ts","libraryName":"ata-validator","version":"0.21.0","bytes":178305,"gzipBytes":44002},{"fileName":"effect/download.ts","libraryName":"effect","version":"3.21.4","bytes":188133,"gzipBytes":56873},{"fileName":"zod/download/default.ts","libraryName":"zod","version":"4.4.3","note":"default","bytes":275235,"gzipBytes":62383}],"unminified":[{"fileName":"@railway-ts/pipelines/download.ts","libraryName":"@railway-ts/pipelines","version":"0.1.29","bytes":8918,"gzipBytes":2182},{"fileName":"superstruct/download.ts","libraryName":"superstruct","version":"2.0.2","bytes":12681,"gzipBytes":3880},{"fileName":"typia/download.ts","libraryName":"typia","version":"12.1.1","bytes":13249,"gzipBytes":2064},{"fileName":"valibot/download.ts","libraryName":"valibot","version":"1.4.2","bytes":15790,"gzipBytes":3209},{"fileName":"decoders/download.ts","libraryName":"decoders","version":"2.9.3","bytes":17872,"gzipBytes":4826},{"fileName":"io-ts/download.ts","libraryName":"io-ts","version":"2.2.22","bytes":27064,"gzipBytes":5745},{"fileName":"zod/mini/download.ts","libraryName":"zod/mini","version":"4.4.3","bytes":32312,"gzipBytes":7150},{"fileName":"runtypes/download.ts","libraryName":"runtypes","version":"7.0.4","bytes":35724,"gzipBytes":8140},{"fileName":"sury/download.ts","libraryName":"sury","version":"11.0.0-alpha.9","bytes":67104,"gzipBytes":16106},{"fileName":"yup/download.ts","libraryName":"yup","version":"1.7.1","bytes":74852,"gzipBytes":18567},{"fileName":"zod/v3/download/index.ts","libraryName":"zod/v3","version":"4.4.3","bytes":101136,"gzipBytes":17449},{"fileName":"zod/v3/download/default.ts","libraryName":"zod/v3","version":"4.4.3","note":"default","bytes":107184,"gzipBytes":19072},{"fileName":"typebox/download/schema.ts","libraryName":"typebox","version":"1.3.3","note":"schema","bytes":121385,"gzipBytes":20551},{"fileName":"zod/download/index.ts","libraryName":"zod","version":"4.4.3","bytes":126262,"gzipBytes":24627},{"fileName":"@sapphire/shapeshift/download.ts","libraryName":"@sapphire/shapeshift","version":"4.0.0","bytes":160487,"gzipBytes":28129},{"fileName":"typebox/download/schema + compile.ts","libraryName":"typebox","version":"1.3.3","note":"schema + compile","bytes":161069,"gzipBytes":27489},{"fileName":"joi/download.ts","libraryName":"joi","version":"18.2.3","bytes":256407,"gzipBytes":61831},{"fileName":"effect/@beta/download.ts","libraryName":"effect@beta","version":"4.0.0-beta.93","bytes":259313,"gzipBytes":63434},{"fileName":"ajv/download.ts","libraryName":"ajv","version":"8.20.0","bytes":270982,"gzipBytes":55318},{"fileName":"arktype/download.ts","libraryName":"arktype","version":"2.2.2","bytes":280268,"gzipBytes":66816},{"fileName":"ata-validator/download.ts","libraryName":"ata-validator","version":"0.21.0","bytes":291808,"gzipBytes":57739},{"fileName":"typebox/download/namespace.ts","libraryName":"typebox","version":"1.3.3","note":"namespace","bytes":293923,"gzipBytes":45423},{"fileName":"typebox/download/script.ts","libraryName":"typebox","version":"1.3.3","note":"script","bytes":307651,"gzipBytes":46071},{"fileName":"typebox/download/namespace + compile.ts","libraryName":"typebox","version":"1.3.3","note":"namespace + compile","bytes":345515,"gzipBytes":53548},{"fileName":"typebox/download/index.ts","libraryName":"typebox","version":"1.3.3","bytes":361684,"gzipBytes":54331},{"fileName":"typebox/download/compile.ts","libraryName":"typebox","version":"1.3.3","note":"compile","bytes":413502,"gzipBytes":62486},{"fileName":"zod/download/default.ts","libraryName":"zod","version":"4.4.3","note":"default","bytes":460405,"gzipBytes":78565},{"fileName":"effect/download.ts","libraryName":"effect","version":"3.21.4","bytes":575589,"gzipBytes":122314}]}
{"minified":[{"fileName":"@railway-ts/pipelines/download.ts","libraryName":"@railway-ts/pipelines","version":"0.1.29","bytes":4130,"gzipBytes":1555},{"fileName":"superstruct/download.ts","libraryName":"superstruct","version":"2.0.2","bytes":4908,"gzipBytes":1944},{"fileName":"valibot/download.ts","libraryName":"valibot","version":"1.4.2","bytes":6366,"gzipBytes":1978},{"fileName":"typia/download.ts","libraryName":"typia","version":"13.0.2","bytes":6877,"gzipBytes":1769},{"fileName":"decoders/download.ts","libraryName":"decoders","version":"2.9.3","bytes":8177,"gzipBytes":3151},{"fileName":"io-ts/download.ts","libraryName":"io-ts","version":"2.2.22","bytes":12518,"gzipBytes":3592},{"fileName":"runtypes/download.ts","libraryName":"runtypes","version":"7.0.4","bytes":15586,"gzipBytes":4797},{"fileName":"zod/mini/download.ts","libraryName":"zod/mini","version":"4.4.3","bytes":16068,"gzipBytes":5181},{"fileName":"sury/download.ts","libraryName":"sury","version":"11.0.0-alpha.9","bytes":27015,"gzipBytes":10097},{"fileName":"yup/download.ts","libraryName":"yup","version":"1.7.1","bytes":42114,"gzipBytes":13083},{"fileName":"typebox/download/schema.ts","libraryName":"typebox","version":"1.3.6","note":"schema","bytes":44257,"gzipBytes":12924},{"fileName":"zod/v3/download/index.ts","libraryName":"zod/v3","version":"4.4.3","bytes":56947,"gzipBytes":12933},{"fileName":"effect/@beta/download.ts","libraryName":"effect@beta","version":"4.0.0-beta.97","bytes":57690,"gzipBytes":18776},{"fileName":"zod/v3/download/default.ts","libraryName":"zod/v3","version":"4.4.3","note":"default","bytes":59945,"gzipBytes":14046},{"fileName":"typebox/download/schema + compile.ts","libraryName":"typebox","version":"1.3.6","note":"schema + compile","bytes":60518,"gzipBytes":17518},{"fileName":"zod/download/index.ts","libraryName":"zod","version":"4.4.3","bytes":65478,"gzipBytes":17477},{"fileName":"@sapphire/shapeshift/download.ts","libraryName":"@sapphire/shapeshift","version":"4.0.0","bytes":76595,"gzipBytes":18153},{"fileName":"typebox/download/namespace.ts","libraryName":"typebox","version":"1.3.6","note":"namespace","bytes":94475,"gzipBytes":26441},{"fileName":"typebox/download/script.ts","libraryName":"typebox","version":"1.3.6","note":"script","bytes":104908,"gzipBytes":27480},{"fileName":"typebox/download/namespace + compile.ts","libraryName":"typebox","version":"1.3.6","note":"namespace + compile","bytes":114306,"gzipBytes":31777},{"fileName":"typebox/download/index.ts","libraryName":"typebox","version":"1.3.6","bytes":121857,"gzipBytes":32168},{"fileName":"ajv/download.ts","libraryName":"ajv","version":"8.20.0","bytes":139745,"gzipBytes":39401},{"fileName":"typebox/download/compile.ts","libraryName":"typebox","version":"1.3.6","note":"compile","bytes":141702,"gzipBytes":37505},{"fileName":"arktype/download.ts","libraryName":"arktype","version":"2.2.3","bytes":152704,"gzipBytes":45694},{"fileName":"joi/download.ts","libraryName":"joi","version":"18.2.3","bytes":174490,"gzipBytes":53758},{"fileName":"ata-validator/download.ts","libraryName":"ata-validator","version":"0.21.0","bytes":178291,"gzipBytes":43996},{"fileName":"effect/download.ts","libraryName":"effect","version":"3.21.4","bytes":188120,"gzipBytes":56877},{"fileName":"zod/download/default.ts","libraryName":"zod","version":"4.4.3","note":"default","bytes":275235,"gzipBytes":62383}],"unminified":[{"fileName":"@railway-ts/pipelines/download.ts","libraryName":"@railway-ts/pipelines","version":"0.1.29","bytes":8918,"gzipBytes":2182},{"fileName":"typia/download.ts","libraryName":"typia","version":"13.0.2","bytes":11901,"gzipBytes":2217},{"fileName":"superstruct/download.ts","libraryName":"superstruct","version":"2.0.2","bytes":12681,"gzipBytes":3880},{"fileName":"valibot/download.ts","libraryName":"valibot","version":"1.4.2","bytes":15790,"gzipBytes":3209},{"fileName":"decoders/download.ts","libraryName":"decoders","version":"2.9.3","bytes":17872,"gzipBytes":4826},{"fileName":"io-ts/download.ts","libraryName":"io-ts","version":"2.2.22","bytes":27064,"gzipBytes":5745},{"fileName":"zod/mini/download.ts","libraryName":"zod/mini","version":"4.4.3","bytes":32312,"gzipBytes":7150},{"fileName":"runtypes/download.ts","libraryName":"runtypes","version":"7.0.4","bytes":35744,"gzipBytes":8144},{"fileName":"sury/download.ts","libraryName":"sury","version":"11.0.0-alpha.9","bytes":67112,"gzipBytes":16105},{"fileName":"yup/download.ts","libraryName":"yup","version":"1.7.1","bytes":74895,"gzipBytes":18561},{"fileName":"zod/v3/download/index.ts","libraryName":"zod/v3","version":"4.4.3","bytes":101136,"gzipBytes":17449},{"fileName":"zod/v3/download/default.ts","libraryName":"zod/v3","version":"4.4.3","note":"default","bytes":107184,"gzipBytes":19072},{"fileName":"typebox/download/schema.ts","libraryName":"typebox","version":"1.3.6","note":"schema","bytes":121599,"gzipBytes":20601},{"fileName":"zod/download/index.ts","libraryName":"zod","version":"4.4.3","bytes":126262,"gzipBytes":24627},{"fileName":"@sapphire/shapeshift/download.ts","libraryName":"@sapphire/shapeshift","version":"4.0.0","bytes":160727,"gzipBytes":28139},{"fileName":"typebox/download/schema + compile.ts","libraryName":"typebox","version":"1.3.6","note":"schema + compile","bytes":161600,"gzipBytes":27641},{"fileName":"joi/download.ts","libraryName":"joi","version":"18.2.3","bytes":256407,"gzipBytes":61831},{"fileName":"effect/@beta/download.ts","libraryName":"effect@beta","version":"4.0.0-beta.97","bytes":259313,"gzipBytes":63434},{"fileName":"ajv/download.ts","libraryName":"ajv","version":"8.20.0","bytes":270982,"gzipBytes":55318},{"fileName":"arktype/download.ts","libraryName":"arktype","version":"2.2.3","bytes":280294,"gzipBytes":66833},{"fileName":"ata-validator/download.ts","libraryName":"ata-validator","version":"0.21.0","bytes":291808,"gzipBytes":57739},{"fileName":"typebox/download/namespace.ts","libraryName":"typebox","version":"1.3.6","note":"namespace","bytes":294137,"gzipBytes":45473},{"fileName":"typebox/download/script.ts","libraryName":"typebox","version":"1.3.6","note":"script","bytes":307865,"gzipBytes":46119},{"fileName":"typebox/download/namespace + compile.ts","libraryName":"typebox","version":"1.3.6","note":"namespace + compile","bytes":346046,"gzipBytes":53687},{"fileName":"typebox/download/index.ts","libraryName":"typebox","version":"1.3.6","bytes":362039,"gzipBytes":54429},{"fileName":"typebox/download/compile.ts","libraryName":"typebox","version":"1.3.6","note":"compile","bytes":414174,"gzipBytes":62673},{"fileName":"zod/download/default.ts","libraryName":"zod","version":"4.4.3","note":"default","bytes":460405,"gzipBytes":78565},{"fileName":"effect/download.ts","libraryName":"effect","version":"3.21.4","bytes":575589,"gzipBytes":122314}]}
11 changes: 6 additions & 5 deletions bench/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,16 @@
"@schema-benchmarks/schemas": "workspace:*",
"@schema-benchmarks/utils": "workspace:*",
"@standard-schema/spec": "catalog:",
"@typia/unplugin": "catalog:",
"@ttsc/unplugin": "catalog:",
"gzip-size": "^7.0.0",
"rolldown": "^1.1.4",
"rolldown": "^1.1.5",
"tinybench": "^6.0.2",
"typescript": "catalog:",
"ttsc": "catalog:",
"valibot": "catalog:"
},
"devDependencies": {
"@types/node": "catalog:",
"@typescript/native-preview": "catalog:"
"@types/node": "26.1.1",
"@typescript/native-preview": "catalog:",
"typescript": "catalog:"
}
}
6 changes: 4 additions & 2 deletions bench/src/scripts/download.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import * as fs from "node:fs/promises";
import * as path from "node:path";

import { getSigintSignal, getVersion } from "@schema-benchmarks/utils/node";
import UnpluginTypia from "@typia/unplugin/rolldown";
import _ttsc from "@ttsc/unplugin/rolldown";
import { gzipSize } from "gzip-size";
import { rolldown } from "rolldown";

Expand All @@ -13,6 +13,8 @@ import {
minifyTypeSchema,
} from "../results/types.ts";

const ttsc = _ttsc.default ? _ttsc.default : (_ttsc as never); // Fix for ESM/CJS interop

const sigintSignal = getSigintSignal();

interface FileDescription {
Expand Down Expand Up @@ -43,7 +45,7 @@ function getPackageName(libraryName: string) {
async function measureFile(file: FileDescription, minify: MinifyType): Promise<DownloadResult> {
const bundle = await rolldown({
input: file.path,
plugins: file.path.includes("typia") ? [UnpluginTypia({ log: false })] : [],
plugins: file.path.includes("typia") ? [ttsc()] : [],
external: [/node:/],
});
const output = await bundle.generate({
Expand Down
2 changes: 1 addition & 1 deletion bench/stack.json

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@
},
"devDependencies": {
"@types/node": "catalog:",
"knip": "^6.24.0",
"lefthook": "^2.1.9",
"oxfmt": "0.56.0",
"oxlint": "^1.72.0",
"knip": "^6.26.0",
"lefthook": "^2.1.10",
"oxfmt": "0.58.0",
"oxlint": "^1.73.0",
"oxlint-tsgolint": "^0.24.0",
"playwright": "catalog:",
"typescript": "catalog:"
Expand Down
Loading