typestrip docs glossary.md
4.1 kB · 87 lines
Markdown
at main

Glossary #

Use these words, and only these, for these things. Code, comments, docs, and commit messages all follow this list.

The product #

typestrip : The package, @nibling/typestrip. It has no other name.

mode : How typestrip treats TypeScript-only syntax. There are two: erase (the default) and downlevel. Call them "erase mode" and "downlevel mode". The ABI passes the mode as a number: 0 is erase, 1 is downlevel.

erase mode : Removes erasable syntax only and reports everything else. Every offset is preserved. See modes.md.

downlevel mode : Also down-levels non-erasable syntax. Lines are preserved, and columns are preserved outside converted constructs. See modes.md.

erase : To remove a piece of TypeScript syntax by replacing its characters with spaces. Line terminators stay. A few erased characters become ;, ( or ) to keep ASI and arrow-function semantics.

down-level : To rewrite a non-erasable construct as the JavaScript ts.transpileModule would emit for it. Only downlevel mode does this.

non-erasable syntax : TypeScript syntax that has runtime behavior, so it can't be erased: enum and const enum, instantiated namespace, parameter properties, import x = require(), export =, and legacy <T>x casts.

unsupported syntax : Syntax that the current mode can't handle. typestrip reports it through onError, or throws an UnsupportedSyntaxError when there is no onError.

The code #

engine : The WebAssembly module compiled from engine/*.zena. It has two shipped builds:

  • the erase engine, build/erase.wasm
  • the downlevel engine, build/downlevel.wasm

The debug engine, build/downlevel-debug.wasm, is the downlevel engine plus a dbg() probe for the tools in scripts/debug/.

wrapper : The JavaScript in src/. core.js holds the platform-neutral logic, and each entry adds its host hooks.

Node entry and browser entry : src/index.js (the node export condition) and src/browser.js (the default export condition, used by browsers, workers, Deno, and workerd).

ABI : The export contract between the wrapper and the engine: init, inbuf, push, outbuf, errorCount, errorsPtr, and memory. See architecture.md.

hooks : The functions in engine/hooks-downlevel.zena that engine/strip.zena calls at each non-erasable construct. The erase build compiles engine/hooks-erase.zena instead, where every hook is a no-op stub, so the downlevel code never reaches build/erase.wasm.

Zena : The language the engine is written in. zena-cli is its compiler.

Testing #

oracle : The reference implementation a mode is judged against. For erase mode it is ts-blank-space. For downlevel mode it is ts.transpileModule.

judge : The script that compares typestrip with an oracle. test/erase.mjs judges erase mode, and test/downlevel.mjs judges downlevel mode.

corpus : The test inputs. Small, checked-in cases live in corpus/. Large inputs are fetched into vendor/ by scripts/vendor.sh and scripts/oss.sh.

OSS corpus : Well-known open-source TypeScript projects, pinned at fixed commits in vendor/oss/.

regression : A minimized input for a bug that is fixed, in corpus/regressions.jsonl (erase mode) or corpus/downlevel.jsonl (downlevel mode).

finding : A minimized input for a bug that is still open, in corpus/erase-findings.jsonl or corpus/downlevel-findings.jsonl. When the bug is fixed, the input moves to the regression file.

baseline : A list of known failures in test/baselines/. A failure that isn't in the baseline fails the run. A baseline entry that now passes asks you to remove it, so the list only shrinks.

Words not to use #

Don't write Write
strip mode, strip-only erase mode
hybrid, hybrid mode, transform mode downlevel mode
lite, the lite engine the engine
ABI v2 the ABI
ts-stripper typestrip
semantic test the erase judge (test/erase.mjs)