Skip to content

Add ROADMAP.md, StackBlitz playground, and ts-plugin recording demo#15

Merged
tiagolauer merged 2 commits into
masterfrom
github-polish
Jul 18, 2026
Merged

Add ROADMAP.md, StackBlitz playground, and ts-plugin recording demo#15
tiagolauer merged 2 commits into
masterfrom
github-polish

Conversation

@tiagolauer

@tiagolauer tiagolauer commented Jul 18, 2026

Copy link
Copy Markdown
Owner

Summary

  • ROADMAP.md: shipped features, bigger help-wanted items (scalar subqueries, ts-plugin v2, typed params gaps), and a pointer to issues labeled good 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:

  • Launched a real VSCode session pointed at the demo project
  • Trusted the workspace (VSCode's Restricted Mode disables extensions/plugins by default in untrusted folders — undocumented gotcha until now, written up in the demo's README)
  • Confirmed via screenshot that tsserver loaded the project and analyzed demo.ts with 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 ffmpeg conversion command) are ready for a human to finish in under a minute.

Test plan

  • npm test — full suite green (47 tests)
  • Rebased onto the (now-merged) rename so there's no naming drift

Summary by CodeRabbit

  • New Features

    • Added a browser-based playground demonstrating typed SQL queries and inference.
    • Added a TypeScript plugin demo for editor autocomplete.
    • Added a project roadmap covering shipped features, ongoing work, and future compatibility.
  • Documentation

    • Added setup and usage guidance for the playground and plugin demo.
    • Added links to the browser playground, contribution resources, and roadmap.
    • Documented current TypeScript version compatibility.
  • Chores

    • CI now tests against TypeScript 5.0, 5.3, 5.6, and 6.0.

…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.
@coderabbitai

coderabbitai Bot commented Jul 18, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds 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.

Changes

Examples and documentation

Layer / File(s) Summary
Typed SQL playground
examples/playground/*
Adds a typed database schema, query inference examples, fake execution flow, local typecheck configuration, package metadata, and browser-playground documentation.
TypeScript plugin demo
examples/ts-plugin-demo/*, tsconfig.ts-plugin.json
Adds a VSCode autocomplete demo with plugin configuration and setup instructions, and changes the plugin compiler module mode to NodeNext.
Project documentation and CI coverage
README.md, ROADMAP.md, .github/workflows/ci.yml
Links the new examples, documents TypeScript compatibility and contribution paths, adds the project roadmap, and replaces the CI TypeScript latest entry with explicit versions including 6.0.

Estimated code review effort: 3 (Moderate) | ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main additions: a roadmap, a browser playground, and a ts-plugin demo.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch github-polish

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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.
@tiagolauer
tiagolauer merged commit 0fa6da6 into master Jul 18, 2026
3 of 6 checks passed
@tiagolauer
tiagolauer deleted the github-polish branch July 18, 2026 15:51

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
examples/ts-plugin-demo/README.md (1)

38-40: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Specify a language for the fenced code block.

Adding a language identifier improves syntax highlighting and resolves the markdownlint warning.

📝 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.md around 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 -->

Comment on lines +1 to +2
import { createTypedDb, ResultStatus, type Query } from '@owlsql/core';
import type { DB } from './schema.js';

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 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.

Suggested change
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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant