From d2061a8bdc0934d411dc890b56b5d901c74bbc37 Mon Sep 17 00:00:00 2001 From: Peter Leonov Date: Sun, 12 Jan 2025 11:54:45 +0100 Subject: [PATCH 1/6] npm i type-predicate-generator --- package-lock.json | 44 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 45 insertions(+) diff --git a/package-lock.json b/package-lock.json index 7650474c8..efaf55d15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,6 +69,7 @@ "ts-json-validator": "0.7.1", "ts-node": "10.9.2", "ts-runtime-checks": "0.6.3", + "type-predicate-generator": "0.1.10", "typescript": "5.6.3", "typia": "7.5.1", "undici": "7.2.1", @@ -9572,6 +9573,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-predicate-generator": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/type-predicate-generator/-/type-predicate-generator-0.1.10.tgz", + "integrity": "sha512-9TQnl80v1o/1NZTUsc+qgxWHC6Pi8FTKzIQSlxDsVJX7oImVooMiy9HbxkO9FvwyslOSnxOWGTQKlJjIbBJtIQ==", + "license": "MIT", + "dependencies": { + "typescript": ">=5.7.0 <5.8.0" + }, + "bin": { + "type-predicate-generator": "dist/cli.js" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/type-predicate-generator/node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/typescript": { "version": "5.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", @@ -17120,6 +17149,21 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, + "type-predicate-generator": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/type-predicate-generator/-/type-predicate-generator-0.1.10.tgz", + "integrity": "sha512-9TQnl80v1o/1NZTUsc+qgxWHC6Pi8FTKzIQSlxDsVJX7oImVooMiy9HbxkO9FvwyslOSnxOWGTQKlJjIbBJtIQ==", + "requires": { + "typescript": ">=5.7.0 <5.8.0" + }, + "dependencies": { + "typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==" + } + } + }, "typescript": { "version": "5.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", diff --git a/package.json b/package.json index 1400f01ca..84d22b30c 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "ts-json-validator": "0.7.1", "ts-node": "10.9.2", "ts-runtime-checks": "0.6.3", + "type-predicate-generator": "0.1.10", "typescript": "5.6.3", "typia": "7.5.1", "undici": "7.2.1", From 2a0378004a4a241a3a7cd44097d53037bcd9bdf8 Mon Sep 17 00:00:00 2001 From: Peter Leonov Date: Sun, 12 Jan 2025 12:12:21 +0100 Subject: [PATCH 2/6] add type-predicate-generator to the suite --- .gitignore | 5 ++++- README.md | 1 + cases/index.ts | 1 + cases/type-predicate-generator/index.ts | 7 +++++++ cases/type-predicate-generator/src/index.ts | 13 +++++++++++++ cases/type-predicate-generator/tsconfig.json | 10 ++++++++++ download-packages-popularity.ts | 4 ++++ index.ts | 5 +++++ package.json | 1 + test/benchmarks.test.ts | 1 + 10 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 cases/type-predicate-generator/index.ts create mode 100644 cases/type-predicate-generator/src/index.ts create mode 100644 cases/type-predicate-generator/tsconfig.json diff --git a/.gitignore b/.gitignore index 2f9c9d893..fabf7a07a 100644 --- a/.gitignore +++ b/.gitignore @@ -164,4 +164,7 @@ cases/typia/build # ts-auto-guard build artifacts cases/ts-auto-guard/build -cases/ts-auto-guard/src/index.guard.ts \ No newline at end of file +cases/ts-auto-guard/src/index.guard.ts + +# type-predicate-generator build artifacts +cases/type-predicate-generator/src/index_guards.ts diff --git a/README.md b/README.md index 6c0b2ef4a..8b0862196 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,7 @@ * [ts-runtime-checks](https://github.com/GoogleFeud/ts-runtime-checks) * [tson](https://github.com/skarab42/tson) * [ts-utils](https://github.com/ai-labs-team/ts-utils) +* [type-predicate-generator](https://github.com/peter-leonov/typescript-predicate-generator) * [typia](https://github.com/samchon/typia) * [@typeofweb/schema](https://github.com/typeofweb/schema) * [unknownutil](https://github.com/lambdalisue/deno-unknownutil) diff --git a/cases/index.ts b/cases/index.ts index b0878e07d..eb46cfc9c 100644 --- a/cases/index.ts +++ b/cases/index.ts @@ -51,6 +51,7 @@ export const cases = [ 'deepkit', 'effect-schema', 'ts-auto-guard', + 'type-predicate-generator', 'jet-schema', ] as const; diff --git a/cases/type-predicate-generator/index.ts b/cases/type-predicate-generator/index.ts new file mode 100644 index 000000000..ded389b22 --- /dev/null +++ b/cases/type-predicate-generator/index.ts @@ -0,0 +1,7 @@ +import { isLoose } from './src/index_guards.ts'; +import { addCase } from '../../benchmarks'; + +addCase('type-predicate-generator', 'assertLoose', data => { + if (!isLoose(data)) throw new Error('wrong type.'); + return true; +}); diff --git a/cases/type-predicate-generator/src/index.ts b/cases/type-predicate-generator/src/index.ts new file mode 100644 index 000000000..bc5f50177 --- /dev/null +++ b/cases/type-predicate-generator/src/index.ts @@ -0,0 +1,13 @@ +export type Loose = { + number: number; + negNumber: number; + maxNumber: number; + string: string; + longString: string; + boolean: boolean; + deeplyNested: { + foo: string; + num: number; + bool: boolean; + }; +}; diff --git a/cases/type-predicate-generator/tsconfig.json b/cases/type-predicate-generator/tsconfig.json new file mode 100644 index 000000000..c6917813c --- /dev/null +++ b/cases/type-predicate-generator/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "outDir": "build", + "strict": true, + "strictNullChecks": true + }, + "include": ["src/index.ts", "src/index_guards.ts"] +} diff --git a/download-packages-popularity.ts b/download-packages-popularity.ts index 71de17ad6..f3c51c7b3 100644 --- a/download-packages-popularity.ts +++ b/download-packages-popularity.ts @@ -210,6 +210,10 @@ export const packages = [ name: 'ts-auto-guard', packageName: 'ts-auto-guard', }, + { + name: 'type-predicate-generator', + packageName: 'type-predicate-generator', + }, ] as const; interface BodyWeeklyDownloads { diff --git a/index.ts b/index.ts index 19602d056..0c7e75d3b 100644 --- a/index.ts +++ b/index.ts @@ -46,6 +46,11 @@ async function main() { stdio: 'inherit', }); } + if (c === 'type-predicate-generator') { + childProcess.execSync('npm run compile:type-predicate-generator', { + stdio: 'inherit', + }); + } const cmd = [...process.argv.slice(0, 2), 'run-internal', c]; diff --git a/package.json b/package.json index 84d22b30c..436c20df3 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "compile:typebox": "ts-node cases/typebox/index.ts cases/typebox/build", "compile:typia": "rimraf cases/typia/build && tsc -p cases/typia/tsconfig.json", "compile:ts-auto-guard": "rimraf cases/ts-auto-guard/build && ts-auto-guard --project cases/ts-auto-guard/tsconfig.json && tsc -p cases/ts-auto-guard/tsconfig.json", + "compile:type-predicate-generator": "rimraf cases/type-predicate-generator/src/index_guards.ts && (cd cases/type-predicate-generator && type-predicate-generator src/index.ts) && tsc -p cases/type-predicate-generator/tsconfig.json", "prepare": "ts-patch install", "download-packages-popularity": "ts-node download-packages-popularity.ts" }, diff --git a/test/benchmarks.test.ts b/test/benchmarks.test.ts index bb332a589..1fe2db8ec 100644 --- a/test/benchmarks.test.ts +++ b/test/benchmarks.test.ts @@ -55,6 +55,7 @@ import '../cases/zod'; import '../cases/deepkit'; import '../cases/effect-schema'; import '../cases/ts-auto-guard'; +import '../cases/type-predicate-generator'; import '../cases/tiny-schema-validator'; import '../cases/jet-schema'; From 32adfdac6313613947ff5b5f9513442484ea02c1 Mon Sep 17 00:00:00 2001 From: Peter Leonov Date: Sun, 12 Jan 2025 11:42:48 +0000 Subject: [PATCH 3/6] make it work --- .gitignore | 1 + cases/type-predicate-generator/index.ts | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index fabf7a07a..0fa4a5612 100644 --- a/.gitignore +++ b/.gitignore @@ -167,4 +167,5 @@ cases/ts-auto-guard/build cases/ts-auto-guard/src/index.guard.ts # type-predicate-generator build artifacts +cases/type-predicate-generator/build cases/type-predicate-generator/src/index_guards.ts diff --git a/cases/type-predicate-generator/index.ts b/cases/type-predicate-generator/index.ts index ded389b22..f803fb5a2 100644 --- a/cases/type-predicate-generator/index.ts +++ b/cases/type-predicate-generator/index.ts @@ -1,4 +1,4 @@ -import { isLoose } from './src/index_guards.ts'; +import { isLoose } from './src/index_guards'; import { addCase } from '../../benchmarks'; addCase('type-predicate-generator', 'assertLoose', data => { diff --git a/package.json b/package.json index 436c20df3..852781bc6 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "compile:typebox": "ts-node cases/typebox/index.ts cases/typebox/build", "compile:typia": "rimraf cases/typia/build && tsc -p cases/typia/tsconfig.json", "compile:ts-auto-guard": "rimraf cases/ts-auto-guard/build && ts-auto-guard --project cases/ts-auto-guard/tsconfig.json && tsc -p cases/ts-auto-guard/tsconfig.json", - "compile:type-predicate-generator": "rimraf cases/type-predicate-generator/src/index_guards.ts && (cd cases/type-predicate-generator && type-predicate-generator src/index.ts) && tsc -p cases/type-predicate-generator/tsconfig.json", + "compile:type-predicate-generator": "rimraf cases/type-predicate-generator/src/index_guards.ts && (cd cases/type-predicate-generator/src && type-predicate-generator ./index.ts) && tsc -p cases/type-predicate-generator/tsconfig.json", "prepare": "ts-patch install", "download-packages-popularity": "ts-node download-packages-popularity.ts" }, From 25f9d010b04b97398be7148cb73e29eccc264d22 Mon Sep 17 00:00:00 2001 From: Peter Leonov Date: Sun, 12 Jan 2025 17:25:52 +0000 Subject: [PATCH 4/6] include the build script in the CI build step --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 852781bc6..c12b0020b 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,8 @@ "lint": "gts check", "lint:fix": "gts fix", "start": "ts-node index.ts", - "test:build": "npm run compile:spectypes && npm run compile:ts-runtime-checks && npm run compile:typebox && npm run compile:typia && npm run compile:deepkit && npm run compile:ts-auto-guard && tsc --noEmit", - "test": "npm run compile:spectypes && npm run compile:ts-runtime-checks && npm run compile:typebox && npm run compile:typia && npm run compile:deepkit && npm run compile:ts-auto-guard && vitest run", + "test:build": "npm run compile:spectypes && npm run compile:ts-runtime-checks && npm run compile:typebox && npm run compile:typia && npm run compile:deepkit && npm run compile:ts-auto-guard && npm run compile:type-predicate-generator && tsc --noEmit", + "test": "npm run compile:spectypes && npm run compile:ts-runtime-checks && npm run compile:typebox && npm run compile:typia && npm run compile:deepkit && npm run compile:ts-auto-guard && npm run compile:type-predicate-generator && vitest run", "docs:serve": "serve docs", "docs:watch": "tsc --project tsconfig.docs.json --watch --preserveWatchOutput & serve docs", "docs:build": "tsc --project tsconfig.docs.json", From 9d4b8848214b9ad09f746eb6e3c33dd85b908100 Mon Sep 17 00:00:00 2001 From: Peter Leonov Date: Sun, 12 Jan 2025 17:47:35 +0000 Subject: [PATCH 5/6] bump type-predicate-generator to 0.1.11 --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index efaf55d15..0d31a56c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,7 +69,7 @@ "ts-json-validator": "0.7.1", "ts-node": "10.9.2", "ts-runtime-checks": "0.6.3", - "type-predicate-generator": "0.1.10", + "type-predicate-generator": "0.1.11", "typescript": "5.6.3", "typia": "7.5.1", "undici": "7.2.1", @@ -9574,9 +9574,9 @@ } }, "node_modules/type-predicate-generator": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/type-predicate-generator/-/type-predicate-generator-0.1.10.tgz", - "integrity": "sha512-9TQnl80v1o/1NZTUsc+qgxWHC6Pi8FTKzIQSlxDsVJX7oImVooMiy9HbxkO9FvwyslOSnxOWGTQKlJjIbBJtIQ==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/type-predicate-generator/-/type-predicate-generator-0.1.11.tgz", + "integrity": "sha512-gXQOmmLUvQMKyIp7buXTS20EsnNwNvNgO5EyW03PIrvbFlIj/vTs0I+ZM+wiwRytv2d7lI4MdeH/hXWuBmPh4A==", "license": "MIT", "dependencies": { "typescript": ">=5.7.0 <5.8.0" @@ -9585,7 +9585,7 @@ "type-predicate-generator": "dist/cli.js" }, "engines": { - "node": ">=22" + "node": ">=16" } }, "node_modules/type-predicate-generator/node_modules/typescript": { @@ -17150,9 +17150,9 @@ "dev": true }, "type-predicate-generator": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/type-predicate-generator/-/type-predicate-generator-0.1.10.tgz", - "integrity": "sha512-9TQnl80v1o/1NZTUsc+qgxWHC6Pi8FTKzIQSlxDsVJX7oImVooMiy9HbxkO9FvwyslOSnxOWGTQKlJjIbBJtIQ==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/type-predicate-generator/-/type-predicate-generator-0.1.11.tgz", + "integrity": "sha512-gXQOmmLUvQMKyIp7buXTS20EsnNwNvNgO5EyW03PIrvbFlIj/vTs0I+ZM+wiwRytv2d7lI4MdeH/hXWuBmPh4A==", "requires": { "typescript": ">=5.7.0 <5.8.0" }, diff --git a/package.json b/package.json index c12b0020b..480c7c2f2 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "ts-json-validator": "0.7.1", "ts-node": "10.9.2", "ts-runtime-checks": "0.6.3", - "type-predicate-generator": "0.1.10", + "type-predicate-generator": "0.1.11", "typescript": "5.6.3", "typia": "7.5.1", "undici": "7.2.1", From ebb59e0f90aeabb278645b05e9b31d05314a924b Mon Sep 17 00:00:00 2001 From: Peter Leonov Date: Sun, 12 Jan 2025 17:53:24 +0000 Subject: [PATCH 6/6] make eslint ignore type-predicate-generator output --- .eslintignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.eslintignore b/.eslintignore index b5617cdb9..479cf4cc3 100644 --- a/.eslintignore +++ b/.eslintignore @@ -6,3 +6,5 @@ cases/typia/build cases/deepkit/build cases/ts-auto-guard/build cases/ts-auto-guard/src/index.guard.ts +cases/type-predicate-generator/build +cases/type-predicate-generator/src/index_guards.ts