From c7fe624092a9fb476e6336c0df286a44ae0fa1e9 Mon Sep 17 00:00:00 2001 From: skulidropek <66840575+skulidropek@users.noreply.github.com> Date: Fri, 19 Jun 2026 13:13:34 +0000 Subject: [PATCH 1/4] fix(app): emit declaration files and fix package type exports for external consumers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add tsconfig.build.json that emits .d.ts only from src/ (excludes examples with test fixture imports) - Change build script to vite build && tsc -p tsconfig.build.json so declarations survive Vite's dist clean - Point exports.types from ./src/index.ts to ./dist/index.d.ts so consumers get compiled declarations - Remove src/ from published files — only dist/ is shipped - Add tests/consumer/ fixture with strict tsconfig and proof-obligation import to pass tsc --noEmit Closes #25 Co-Authored-By: Claude Sonnet 4.6 --- packages/app/package.json | 10 +++++----- packages/app/tests/consumer/index.ts | 23 +++++++++++++++++++++++ packages/app/tests/consumer/tsconfig.json | 15 +++++++++++++++ packages/app/tsconfig.build.json | 18 ++++++++++++++++++ 4 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 packages/app/tests/consumer/index.ts create mode 100644 packages/app/tests/consumer/tsconfig.json create mode 100644 packages/app/tsconfig.build.json diff --git a/packages/app/package.json b/packages/app/package.json index b5cd992..f1a6bab 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -6,20 +6,19 @@ "main": "dist/index.js", "exports": { ".": { - "types": "./src/index.ts", + "types": "./dist/index.d.ts", "import": "./dist/index.js", "default": "./dist/index.js" } }, "files": [ - "dist", - "src" + "dist" ], "publishConfig": { "access": "public" }, "scripts": { - "build": "vite build", + "build": "vite build && tsc -p tsconfig.build.json", "dev": "vite build --watch", "lint": "npx @ton-ai-core/vibecode-linter src/", "lint:tests": "npx @ton-ai-core/vibecode-linter tests/", @@ -27,7 +26,8 @@ "lint:types": "./scripts/lint-types.sh", "check": "tsc --noEmit", "test": "vitest run", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit", + "test:consumer": "tsc -p tests/consumer/tsconfig.json" }, "repository": { "type": "git", diff --git a/packages/app/tests/consumer/index.ts b/packages/app/tests/consumer/index.ts new file mode 100644 index 0000000..c1a1c7b --- /dev/null +++ b/packages/app/tests/consumer/index.ts @@ -0,0 +1,23 @@ +// Consumer proof: external project imports createClientEffect and compiles with tsc --noEmit. +// This file must compile cleanly with no local module declaration overrides. +import { createClientEffect } from "@prover-coder-ai/openapi-effect" + +type Paths = { + "/health": { + get: { + responses: { + 200: { + content: { + "application/json": { ok: boolean } + } + } + } + } + } +} + +const client = createClientEffect() + +// Verify .GET exists and returns something (compile-time check only) +const _result = client.GET("/health") +void _result diff --git a/packages/app/tests/consumer/tsconfig.json b/packages/app/tests/consumer/tsconfig.json new file mode 100644 index 0000000..2575b46 --- /dev/null +++ b/packages/app/tests/consumer/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "strict": true, + "noEmit": true, + "module": "NodeNext", + "moduleResolution": "NodeNext", + "target": "ES2022", + "lib": ["ES2022", "DOM"], + "verbatimModuleSyntax": true, + "paths": { + "@prover-coder-ai/openapi-effect": ["../../dist/index.d.ts"] + } + }, + "include": ["index.ts"] +} diff --git a/packages/app/tsconfig.build.json b/packages/app/tsconfig.build.json new file mode 100644 index 0000000..c95717d --- /dev/null +++ b/packages/app/tsconfig.build.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "types": ["node"] + }, + "include": ["src/**/*"], + "exclude": [ + "src/examples/**/*", + "node_modules", + "dist" + ] +} From fff5520cbd1cebfb631e3ae4b0fa4763d745c9cd Mon Sep 17 00:00:00 2001 From: skulidropek <66840575+skulidropek@users.noreply.github.com> Date: Fri, 19 Jun 2026 13:16:31 +0000 Subject: [PATCH 2/4] fix(tests): remove void operator from consumer fixture (sonarjs/void-use) Co-Authored-By: Claude Sonnet 4.6 --- packages/app/tests/consumer/index.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/app/tests/consumer/index.ts b/packages/app/tests/consumer/index.ts index c1a1c7b..5797482 100644 --- a/packages/app/tests/consumer/index.ts +++ b/packages/app/tests/consumer/index.ts @@ -18,6 +18,5 @@ type Paths = { const client = createClientEffect() -// Verify .GET exists and returns something (compile-time check only) -const _result = client.GET("/health") -void _result +// Verify .GET exists and returns something (compile-time only) +client.GET("/health") From c8a00467fe0ef5ec4f86149e57048506dd907c5d Mon Sep 17 00:00:00 2001 From: skulidropek <66840575+skulidropek@users.noreply.github.com> Date: Fri, 19 Jun 2026 13:21:54 +0000 Subject: [PATCH 3/4] fix(tsconfig): exclude tests/consumer from main typecheck tests/consumer has its own tsconfig.json with paths mapping for @prover-coder-ai/openapi-effect. Including it in the main tsc --noEmit causes TS2307 since the package isn't resolved in the monorepo context. Co-Authored-By: Claude Sonnet 4.6 --- packages/app/tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/app/tsconfig.json b/packages/app/tsconfig.json index d24d47e..ff63b63 100644 --- a/packages/app/tsconfig.json +++ b/packages/app/tsconfig.json @@ -28,6 +28,7 @@ ], "exclude": [ "dist", - "node_modules" + "node_modules", + "tests/consumer" ] } From 0eb9ca7835d08ca6c2d15120a6c6ca57f3db2d82 Mon Sep 17 00:00:00 2001 From: skulidropek <66840575+skulidropek@users.noreply.github.com> Date: Fri, 19 Jun 2026 13:23:31 +0000 Subject: [PATCH 4/4] =?UTF-8?q?fix(consumer):=20address=20CodeRabbit=20rev?= =?UTF-8?q?iew=20=E2=80=94=20build=20before=20consumer=20check,=20add=20ba?= =?UTF-8?q?seUrl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - test:consumer now runs tsc -p tsconfig.build.json first so the script works on a clean checkout without a pre-built dist/ - Add baseUrl: "." to tests/consumer/tsconfig.json alongside paths so TypeScript module resolution follows the standard paths protocol Co-Authored-By: Claude Sonnet 4.6 --- packages/app/package.json | 2 +- packages/app/tests/consumer/tsconfig.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/app/package.json b/packages/app/package.json index f1a6bab..7e8fd23 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -27,7 +27,7 @@ "check": "tsc --noEmit", "test": "vitest run", "typecheck": "tsc --noEmit", - "test:consumer": "tsc -p tests/consumer/tsconfig.json" + "test:consumer": "tsc -p tsconfig.build.json && tsc -p tests/consumer/tsconfig.json" }, "repository": { "type": "git", diff --git a/packages/app/tests/consumer/tsconfig.json b/packages/app/tests/consumer/tsconfig.json index 2575b46..2e80c8b 100644 --- a/packages/app/tests/consumer/tsconfig.json +++ b/packages/app/tests/consumer/tsconfig.json @@ -7,6 +7,7 @@ "target": "ES2022", "lib": ["ES2022", "DOM"], "verbatimModuleSyntax": true, + "baseUrl": ".", "paths": { "@prover-coder-ai/openapi-effect": ["../../dist/index.d.ts"] }