From d7740b16bc2803556fae49587cf44f5a2a550ad3 Mon Sep 17 00:00:00 2001 From: Hajime Nagisa Date: Sun, 9 Jun 2024 23:38:42 +0900 Subject: [PATCH 1/2] chore: add type-predicates-generator --- package.json | 1 + pnpm-lock.yaml | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/package.json b/package.json index 134bc10..988e303 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "svelte-check": "^3.6.0", "testcontainers": "^10.9.0", "tslib": "^2.4.1", + "type-predicates-generator": "^0.4.1", "typescript": "^5.0.0", "typescript-eslint": "^7.12.0", "vite": "^5.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af59db6..7014e41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -102,6 +102,9 @@ importers: tslib: specifier: ^2.4.1 version: 2.6.2 + type-predicates-generator: + specifier: ^0.4.1 + version: 0.4.1(typescript@5.4.5) typescript: specifier: ^5.0.0 version: 5.4.5 @@ -1220,6 +1223,10 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + compress-commons@4.1.2: resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} engines: {node: '>= 10'} @@ -2515,6 +2522,9 @@ packages: queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + ramda@0.27.2: + resolution: {integrity: sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -2913,6 +2923,13 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} + type-predicates-generator@0.4.1: + resolution: {integrity: sha512-DzIZd8fEQye+tKH8Q3kpTLj99KmsBeXnqwVmU5s0AX2k5L7lJ3WyYdT7za+4ndZ/bINkLCBpSl+l5+vofqXStw==} + engines: {node: '>=18', npm: 'forbidden, use pnpm', pnpm: '>=8.10.5', yarn: 'forbidden, use pnpm'} + hasBin: true + peerDependencies: + typescript: '>=4.4.4' + typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -4079,6 +4096,8 @@ snapshots: commander@2.20.3: {} + commander@8.3.0: {} + compress-commons@4.1.2: dependencies: buffer-crc32: 0.2.13 @@ -5377,6 +5396,8 @@ snapshots: queue-tick@1.0.1: {} + ramda@0.27.2: {} + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -5846,6 +5867,13 @@ snapshots: type-fest@0.20.2: {} + type-predicates-generator@0.4.1(typescript@5.4.5): + dependencies: + commander: 8.3.0 + glob: 7.2.3 + ramda: 0.27.2 + typescript: 5.4.5 + typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 From c9a0aef1b44f002502f97355b60b9411bbe0ce51 Mon Sep 17 00:00:00 2001 From: Hajime Nagisa Date: Mon, 10 Jun 2024 00:26:45 +0900 Subject: [PATCH 2/2] chore: add vite plugin to run type-predicates-generator automatically --- src/generated/type-predicates.ts | 6 ++++++ vite.config.js | 26 +++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/generated/type-predicates.ts diff --git a/src/generated/type-predicates.ts b/src/generated/type-predicates.ts new file mode 100644 index 0000000..e7d3b0a --- /dev/null +++ b/src/generated/type-predicates.ts @@ -0,0 +1,6 @@ +// @ts-nocheck +/* eslint-disable */ +; + + + diff --git a/vite.config.js b/vite.config.js index 85c0907..5a2a310 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,13 +1,16 @@ import { defineConfig } from "vite"; import { sveltekit } from "@sveltejs/kit/vite"; import { internalIpV4 } from "internal-ip"; +import { exec } from "node:child_process"; +import util from "node:util"; // @ts-expect-error process is a nodejs global const mobile = !!/android|ios/.exec(process.env.TAURI_ENV_PLATFORM); // https://vitejs.dev/config/ +// @ts-expect-error no overloads matches this all export default defineConfig(async () => ({ - plugins: [sveltekit()], + plugins: [sveltekit(), typePredicates()], // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` // @@ -35,3 +38,24 @@ export default defineConfig(async () => ({ globalSetup: "./vitest.setup.ts", }, })); + +function typePredicates() { + const command = `pnpm exec type-predicates-generator -f 'src/lib/**/*.ts' -o 'src/generated/type-predicates.ts'`; + async function generate() { + const { stdout } = await util.promisify(exec)(command); + console.log(stdout); + } + + return { + name: "type-predicates-generator", + configureServer(server) { + server.watcher.unwatch("src/generated/type-predicates.ts"); + }, + async buildStart() { + await generate(); + }, + async handleHotUpdate() { + await generate(); + }, + }; +}