lib/universal/: Reusable TypeScript utilities (filesystem walk, reflect, text, spawn) with*_test.tsalongside.lib/std/: SQLPage standard library: SQL modules (index.sql,*.ddl.sql) and TS helpers underlib/std/lib/and console pages underlib/std/console/.support/assurance/e2e-prime/: End‑to‑end harness (Deno + SQLPage) withsqlpage.json,e2ectl.ts, and example pages.support/experiments/: Prototypes and spikes (e.g., Drizzle, Zod). Not production code.
- Format:
deno fmtand Lint:deno lint(run before committing). - Unit tests:
deno test -A lib(uses Deno’s built‑in test runner). - E2E harness:
deno run -A support/assurance/e2e-prime/e2ectl.ts(requires SQLPage installed; readssqlpage.json). - SQLPage preview (example):
sqlpage servefrom a directory with generated pages.
- Runtime: SQLPage executes
.sqlpages underlib/std/**(and copies), backed by SQLite/Postgres. - Tooling: Deno TypeScript utilities in
lib/universal/**provide reflection, path trees, annotations, and spawning. - Codegen/CLI:
lib/std/lib/cli.tsbuilds a CLI used bysupport/assurance/e2e-prime/e2ectl.tsto inspect routes and emit SQLPage files. - Console:
lib/std/console/**contains navigable SQLPage UI (info schema, files, actions).
- Preferred (packager script):
deno run -A support/assurance/e2e-prime/package.sql.tsemits SQLPage files, printing head DDL, generated pages, then tail DDL. - Direct CLI usage:
deno run -A support/assurance/e2e-prime/e2ectl.ts routes-treeorlsto inspect; useemitSqlPageFilesfrom the CLI when embedding in scripts. - Naming/layout: keep entrypoints as
index.sql; place actions underconsole/action/; keep schema DDL inlib/std/lib/*.ddl.sql; replacestd/prefix withspry/when publishing.
- TypeScript: 2‑space indent, no default exports, prefer small modules;
functions
camelCase, types/classesPascalCase, constantsSCREAMING_SNAKE_CASE, fileskebab-case.ts. - Tests: co‑locate as
*_test.tsnext to the code under test. - SQL: prefer
snake_caseidentifiers, keep module entrypoints asindex.sql, schema DDL as*.ddl.sql. - Run
deno fmt && deno lintto enforce style. - Use type inference and return strong types without declaring them in function
calls (do not create extraneous types, use
typeofandReturnTypeoften to get types).
- Write/extend unit tests for any new or changed behavior in
lib/**. - Use Deno’s assertions (
assertEquals, etc.). Example:deno test -A lib/universal/path-tree_test.ts. - E2E tests live under
support/assurance/e2e-prime/; keep them hermetic and deterministic. Aim to maintain or improve coverage.
- Use Conventional Commits:
feat:,fix:,refactor:,docs:,test:,chore:(e.g.,feat: introduce routes utility). - PRs must include: clear description, linked issues, scope of changes, test plan (commands run and results), and screenshots for console/UI SQL pages when helpful.
- Keep diffs focused; update docs/tests with code.
- Do not commit secrets or ephemeral databases;
.gitignorecovers common cases. Prefer env vars and local config. - Deno permissions: default to least privilege; use
-Aonly for local dev/tests and document why when required.