After this lesson, you will be able to: Build, test, type, and publish a zero-dependency JS/TS utility library to npm that shows off closures, functional composition, and the event loop knowledge from this subtrack.
Passion project per Curriculum-Upgrade.md. A published npm package is the public artifact that proves deep JS to a hiring panel. Pick something small you'd actually reuse.
Options: a debounce/throttle/once toolkit, an async retry-with-backoff helper, a tiny LRU cache, or an EventEmitter. One focused package, done well.
M1: scaffold with TS + tsup (or Vite library mode). Configure package.json `exports`, `types`, dual ESM+CJS output.
M2: implement the core. Use closures for private state, function composition where it fits, real generics so consumers get inference.
M3: handle the edge cases that prove you understand the event loop (timers, microtask ordering, cancellation).
M4: tests with Vitest. 90%+ coverage. Include the tricky async timing cases (use vi.useFakeTimers).
M5: tooling: ESLint + Prettier + a GitHub Actions CI that lints, type-checks, and tests on every push.
M6: write a README with install, usage, API table, and a 'why this exists' line. Add JSDoc on every export.
M7: `npm publish` (scoped @your-name/lib is fine). Tag a v0.1.0 GitHub release.
Shipping JS with no types (consumers get no inference). No CJS build, so older tooling can't import it. Skipping the async timing tests, which are exactly what proves the deep knowledge. A README with no usage example. Publishing then never tagging a release.
Sign in and purchase access to unlock this lesson.