Skip to content

Philosophy — v1 (archived)

Each helper does exactly one thing. No Swiss-army functions, no optional behaviors controlled by a flag that silently changes the return type. If you import combine, you get a function that combines two observables — nothing more, nothing hidden.

Every function lives in its own file. There are no side effects at the module level.

There was never a single @helpers4/everything mega-bundle including every category at once — that came later, in v2. In v1, you installed exactly the category packages you needed.

Each category (observable, promise, string, url) was its own npm package with its own scope, so you could install only what you needed without pulling in the rest. With only 9 functions across 4 categories, v1 never ran into a name collision between categories.

Each package shipped with a basic unit test suite (*.spec.ts, colocated with the implementation). None of the current testing gauntlet — property-based tests, contract tests, mutation testing, security edge cases, OpenSSF Scorecard — existed yet; that infrastructure was built for v2.

All v1 code was licensed under AGPL-3.0. You could use it, study it, and modify it — but AGPL’s lack of a linking exception made it a poor fit for closed-source use, which is why v2 onward moved to LGPL-3.0-or-later. See the v1 License page for details.