Add ROADMAP.md, StackBlitz playground, and ts-plugin recording demo#15
Conversation
…demo Public roadmap covering shipped features, bigger help-wanted items (scalar subqueries, ts-plugin v2, typed params gaps), and a pointer to issues labeled good first issue - 7 filed on GitHub (#7-#13) with exact file/line references and acceptance criteria. examples/playground: a StackBlitz-openable project (no install, no database) for exploring the type inference interactively - verified against a real local build before committing (temporary local install + tsc --noEmit, then cleaned up). examples/ts-plugin-demo: a ready-to-open VSCode project for recording the editor-autocomplete GIF referenced from the README. Real screen recording couldn't be automated end-to-end in this environment - IDE/terminal apps are restricted from receiving simulated keystrokes, confirmed by explicitly requesting that access twice. What was verified instead: launched a real VSCode session, trusted the workspace (Restricted Mode disables plugins by default - documented as a gotcha), and confirmed tsserver loaded the project and analyzed the demo file with zero errors. The demo project and step-by-step recording instructions are ready for a human to finish in under a minute rather than shipping something fabricated. All new content already uses the OwlSQL (@owlsql/core) naming from the rename that landed alongside this work.
📝 WalkthroughWalkthroughAdds a browser playground and TypeScript plugin demo, updates plugin module settings and CI TypeScript versions, and expands README and roadmap documentation with usage, compatibility, contribution, and project-status details. ChangesExamples and documentation
Estimated code review effort: 3 (Moderate) | ~20 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
TypeScript 7.0's native (Go) compiler removed the classic JS Compiler API
entirely (no ts.Node/ts.forEachChild/ts.createProgram in the package
anymore), and CI's 'latest' matrix leg silently started resolving to it.
Two effects, one fixable and one not:
- tsconfig.ts-plugin.json used moduleResolution: node10, which TS 7 hard-
removed (deprecated in 6.0, removed in 7.0). Fixed by switching to
module: NodeNext (implies the modern node16/nodenext resolution, and
correctly restores .cts extension-driven CJS detection that CommonJS-
without-NodeNext never actually enabled - the original reason for
choosing .cts in the first place).
- The ts-plugin itself (src/ts-plugin/*.cts) cannot work against TypeScript
7 at all: the classic Compiler API it's built on doesn't exist in the
package anymore, replaced by a still-`unstable/`-prefixed AST API. This
isn't specific to this project - it breaks every tsserver plugin built
the classic way (verified by inspecting node_modules/typescript/lib/
directly: only version.cjs and the CLI entry point remain). Not
reasonable to chase an API Microsoft itself marks unstable days after a
from-scratch rewrite shipped. Documented in README (Editor autocomplete
limitations) and ROADMAP.md instead of silently breaking.
Also traced (independently, not fully reproduced locally) a second TS 7
issue: kysely's package.json conditional export
("types@<5.4": "./outdated-typescript.d.ts") appears to misresolve under
TS 7, serving the "your TypeScript is too old" stub instead of the real
types even though 7.0 is newer than 5.4 - matches the exact reported errors
(CompiledQuery missing, Kysely used as a value). This reproduced under
Bundler resolution in this environment but not under NodeNext; likely
environment/resolution-mode-dependent. Same root cause either way: TS 7 is
days old and still has real rough edges, not something to design around yet.
CI matrix: 'latest' -> '6.0', the last release before the native-compiler
architecture change. Keeps the matrix meaningful (catches real, addressable
deprecations - this is exactly how the node10 removal got caught) without
chasing an architecturally incompatible moving target that provides no
actionable signal right now.
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
examples/ts-plugin-demo/README.md (1)
38-40: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueSpecify a language for the fenced code block.
Adding a language identifier improves syntax highlighting and resolves the
markdownlintwarning.📝 Proposed fix to add a language identifier
- ``` + ```sh ffmpeg -i recording.mp4 -vf "fps=12,scale=800:-1:flags=lanczos" -loop 0 autocomplete.gif</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@examples/ts-plugin-demo/README.mdaround lines 38 - 40, Update the fenced
code block in the README around the ffmpeg command to include the sh language
identifier, preserving the command and its formatting unchanged.</details> <!-- cr-comment:v1:d1571724588de97da5a02364 --> _Source: Linters/SAST tools_ </blockquote></details> </blockquote></details> <details> <summary>🤖 Prompt for all review comments with AI agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.Inline comments:
In@examples/playground/index.ts:
- Around line 1-2: Update the imports in the playground module to include the
existing StrictQuery type alongside Query, so the documented uncommented example
resolves correctly and produces the intended compile-time QueryTypeError for an
invalid column.
Nitpick comments:
In@examples/ts-plugin-demo/README.md:
- Around line 38-40: Update the fenced code block in the README around the
ffmpeg command to include the sh language identifier, preserving the command and
its formatting unchanged.</details> <details> <summary>🪄 Autofix (Beta)</summary> Fix all unresolved CodeRabbit comments on this PR: - [ ] <!-- {"checkboxId": "4b0d0e0a-96d7-4f10-b296-3a18ea78f0b9"} --> Push a commit to this branch (recommended) - [ ] <!-- {"checkboxId": "ff5b1114-7d8c-49e6-8ac1-43f82af23a33"} --> Create a new PR with the fixes </details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: defaults **Review profile**: CHILL **Plan**: Pro **Run ID**: `9505f64e-db49-4813-a611-fc4c2571f963` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 3b7c4b1164fd52b2fdd81b39369b0f298df60765 and c6505197c5c4fab8923e440cd8aec34c48379ee0. </details> <details> <summary>📒 Files selected for processing (13)</summary> * `.github/workflows/ci.yml` * `README.md` * `ROADMAP.md` * `examples/playground/README.md` * `examples/playground/index.ts` * `examples/playground/package.json` * `examples/playground/schema.ts` * `examples/playground/tsconfig.json` * `examples/ts-plugin-demo/README.md` * `examples/ts-plugin-demo/demo.ts` * `examples/ts-plugin-demo/package.json` * `examples/ts-plugin-demo/tsconfig.json` * `tsconfig.ts-plugin.json` </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
| import { createTypedDb, ResultStatus, type Query } from '@owlsql/core'; | ||
| import type { DB } from './schema.js'; |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Import StrictQuery so the playground instruction works.
If the user uncomments StrictQuery (as instructed on line 28), they will see a Cannot find name 'StrictQuery' TypeScript error instead of the intended compile-time QueryTypeError for the misspelled column.
🐛 Proposed fix to import `StrictQuery`
-import { createTypedDb, ResultStatus, type Query } from '`@owlsql/core`';
+import { createTypedDb, ResultStatus, type Query, type StrictQuery } from '`@owlsql/core`';
import type { DB } from './schema.js';📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| import { createTypedDb, ResultStatus, type Query } from '@owlsql/core'; | |
| import type { DB } from './schema.js'; | |
| import { createTypedDb, ResultStatus, type Query, type StrictQuery } from '`@owlsql/core`'; | |
| import type { DB } from './schema.js'; |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@examples/playground/index.ts` around lines 1 - 2, Update the imports in the
playground module to include the existing StrictQuery type alongside Query, so
the documented uncommented example resolves correctly and produces the intended
compile-time QueryTypeError for an invalid column.
Summary
ROADMAP.md: shipped features, bigger help-wanted items (scalar subqueries, ts-plugin v2, typed params gaps), and a pointer to issues labeledgood first issue. 7 issues already filed on GitHub (Add more SQL functions to the type registry #7-Typed parameters inside INSERT ... VALUES and WITH CTE bodies #13) with exact file/line references and acceptance criteria for each.examples/playground: a StackBlitz-openable project (no install, no database) for exploring the type inference interactively — verified against a real local build before committing (temporary local install +tsc --noEmit, then cleaned up so nothing spurious got committed).examples/ts-plugin-demo: a ready-to-open VSCode project for recording the editor-autocomplete GIF referenced from the README.All new content uses the OwlSQL (
@owlsql/core) naming from the rename in #14 (already merged).On the GIF specifically
Real screen recording couldn't be automated end-to-end in this environment — IDE/terminal apps are restricted from receiving simulated keystrokes (confirmed by explicitly requesting that access twice, both denied at the "click only" tier). What was verified instead:
tsserverloaded the project and analyzeddemo.tswith zero errors (the plugin didn't crash the language service)Couldn't trigger/prove the completion popup itself since that needs real typing. Rather than fabricate something that looks like a demo, the project + step-by-step recording instructions (Xbox Game Bar/ScreenToGif + an
ffmpegconversion command) are ready for a human to finish in under a minute.Test plan
npm test— full suite green (47 tests)Summary by CodeRabbit
New Features
Documentation
Chores