docs(adr): ADR-0011: TypeScript for Reference Implementation Scripts
@aRustyDev ci sta già lavorando.
Dal 5/1/2026.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
ADR-0011: TypeScript for Reference Implementation Scripts
Status
Accepted
Context
ADR-0010 establishes that mdbook-htmx generates server-side reference scripts. This ADR addresses the language choice: TypeScript vs JavaScript.
Decision Drivers
- Self-Documentation - Types describe manifest schema without separate docs
- Error Prevention - Catch type mismatches at compile time
- IDE Support - Autocomplete, refactoring, go-to-definition
- Runtime Compatibility - Must work in Workers, Node, Deno, Bun
- User Accessibility - Not all users know TypeScript
Options Considered
Option A: JavaScript Only
Plain JavaScript with JSDoc comments for types.
/**
* @param {import('./types').User | null} user
* @param {import('./types').Page} page
* @returns {boolean}
*/
function isAuthorized(user, page) {
return page.auth.access === 'public' || user !== null;
}
Pros:
- No build step
- Universally understood
- Runs directly in Node
Cons:
- Types are comments, not enforced
- Verbose JSDoc for complex types
- Less IDE support than native TS
Option B: TypeScript (Recommended)
TypeScript with explicit types.
import type { User, Page } from './types';
function isAuthorized(user: User | null, page: Page): boolean {
return page.auth.access === 'public' || user !== null;
}
Pros:
- Types are enforced
- Self-documenting
- Excellent IDE support
- Catches errors before runtime
- Industry standard for server-side code
Cons:
- Requires build step
- Learning curve for some users
Option C: Both (Generate TS, Transpile to JS)
Generate TypeScript, also include transpiled JavaScript.
book/htmx/scripts/
├── src/ # TypeScript source
│ └── *.ts
├── dist/ # Transpiled JavaScript
│ └── *.js
└── types/ # Declaration files
└── *.d.ts
Pros:
- TypeScript users get native TS
- JavaScript users get working code
- Type definitions available for both
Cons:
- Larger output
- Two versions to maintain conceptually
Decision
TypeScript as default, with JavaScript output option.
Default configuration:
[output.htmx.scripts]
language = "typescript"
emit-js = false # Also emit transpiled JS
emit-declarations = true # Emit .d.ts files
Users can set language = "javascript" for plain JS output with JSDoc.
Rationale
-
Types Document the Manifest
// Types ARE the documentation interface Page { auth: { access: 'public' | 'authenticated' | 'roles'; roles?: string[]; }; }Users reading the code understand the manifest structure without separate docs.
-
Cloudflare Workers Natively Supports TypeScript
# wrangler handles TypeScript automatically wrangler deployNo separate build step for the primary deployment target.
-
Error Prevention
// Caught at compile time if (page.auth.access === 'admin') { // Error: 'admin' not in union type -
Modern Standard
TypeScript is the de facto standard for:
- Cloudflare Workers
- Deno (native support)
- Node.js server applications
- Most modern web frameworks
Bundle Size Considerations
TypeScript transpiles to JavaScript with zero runtime overhead:
| Metric | TypeScript | Transpiled JS |
|---|---|---|
| Bundle size | N/A (source) | Same as hand-written JS |
| Runtime perf | N/A | Identical |
| Types at runtime | Erased | None |
The type imports are completely removed:
// Source
import type { Page } from './types';
// Transpiled - import disappears
Configuration
[output.htmx.scripts]
enabled = true
language = "typescript" # typescript | javascript
# TypeScript options
target = "es2022" # ECMAScript target
module = "esm" # esm | commonjs
strict = true # Strict type checking
emit-js = false # Also generate .js files
emit-declarations = true # Generate .d.ts files
Consequences
Positive
- Types serve as schema documentation
- Compile-time error catching
- Better IDE experience
- Industry-standard choice
- Native Workers/Deno support
Negative
- Some users unfamiliar with TypeScript
- Build step required for Node.js (unless using ts-node)
Mitigation
- Include transpiled JS as option (
emit-js = true) - Provide tsconfig.json with recommended settings
- Document common TypeScript patterns
References
- Lingua principale
- Rust
- Stelle
- 0
- Fork
- 1
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di aRustyDev/mdbook-htmx
-
feat(ci): Implement cross-repo-validate compliance for docs syncForse di nuovo libera @aRustyDev l’ha presa 284 giorni fa e non c’è nessuna pull request aperta. Apertaci enhancement
aRustyDev/mdbook-htmx#58 · 1 commento · 1 assegnatario ·
-
docs(htmx): Explain how HTMX worksForse di nuovo libera @aRustyDev l’ha presa 287 giorni fa e non c’è nessuna pull request aperta. Aperta
aRustyDev/mdbook-htmx#48 · 3 commenti · 1 assegnatario ·
-
docs(mdbook-htmx): Parent Issue for documentationForse di nuovo libera @aRustyDev l’ha presa 287 giorni fa e non c’è nessuna pull request aperta. Apertadocumentation
aRustyDev/mdbook-htmx#47 · 1 assegnatario ·
-
docs(examples): Secure Self-Hosted Meilisearch via CloudflareForse di nuovo libera @aRustyDev l’ha presa 287 giorni fa e non c’è nessuna pull request aperta. Apertadocumentation
aRustyDev/mdbook-htmx#46 · 1 assegnatario ·
-
docs(examples): Kubernetes with MeilisearchForse di nuovo libera @aRustyDev l’ha presa 287 giorni fa e non c’è nessuna pull request aperta. Apertadocumentation
aRustyDev/mdbook-htmx#45 · 1 assegnatario ·
Tutte le issue di aRustyDev/mdbook-htmx
Issue simili
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
charles-hood/DiagramCraft#73 ·
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 78/100
ontologyportal/sigma-rs#200 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
chipsalliance/caliptra-sw#4311 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
`image_generation`: `max_retries` is ignored for OpenAI-compatible providers (always 2 retries)Forse già presa @ericz7900 l’ha presa oggi. Apertallm translation
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
I maintainer di solito rispondono entro 1 giorno