@cheruvian/stampy
v0.1.0
Published
Stamp TypeScript logs with compile-time source locations
Readme
Stampy
Stampy injects TypeScript file and line information at compile time. Runtime log events carry only a compact numeric call-site ID; a build manifest maps that ID back to the original source, even after bundling or minification.
Stamp every log with where it came from.
import { log } from "@cheruvian/stampy";
log.info("server listening", { port: 3000 });Install Stampy and compile with stampy in place of tsc:
npm install @cheruvian/stampy typescript
npx stampy -p tsconfig.jsonBy default, development builds include readable source coordinates:
[src/server.ts:3:1] server listening { port: 3000 }When NODE_ENV=production, calls contain and print only the compact symbol:
[#1n75gti] server listening { port: 3000 }Override that behavior with --location full to always retain readable locations,
or --location id to always use compact symbols. --location auto is the default.
The emitted call is equivalent to:
log.__emit("info", 3579214182, "server listening", { port: 3000 });<outDir>/stampy-manifest.json contains the reverse mapping:
{
"version": 1,
"calls": {
"3579214182": {
"file": "src/server.ts",
"line": 3,
"column": 1,
"level": "info"
}
}
}Options:
stampy -p tsconfig.json
--manifest path/to/manifest.json
--module @cheruvian/stampy
--location auto|full|id
--consoleUse --console to migrate or guard code that forgets the logger import. The
transform adds its own collision-safe import and maps calls as follows:
console.log, console.info -> info
console.debug -> debug
console.warn -> warn
console.error -> errorOther console APIs such as table, dir, time, and trace retain their native
behavior. Interception is opt-in because a locally shadowed variable named
console cannot always be distinguished from the global in isolated transforms.
The transform only rewrites debug, info, warn, and error calls on the
log named import from the configured module. Aliased imports are supported.
