diff --git a/.changeset/docs-seo-enrichment.md b/.changeset/docs-seo-enrichment.md
new file mode 100644
index 0000000..c503e29
--- /dev/null
+++ b/.changeset/docs-seo-enrichment.md
@@ -0,0 +1,15 @@
+---
+'@deessejs/errors': patch
+---
+
+Refresh the README and package.json metadata for the npm listing.
+
+README:
+- Adopt the shared ecosystem layout (badges block, What is included table, Quick start, Compatibility, Project structure, Publishing, Architecture notes, Contributing, Acknowledgements).
+- Credit `deessejs/package-template` and `deessejs/fp` in the new Acknowledgements section.
+- Surface the `addNote()` (PEP 678), `raise()`, `causes()`, and the `Result`/`Try` interop story in both the root and the package README.
+
+Package metadata:
+- Replace the placeholder description with a more searchable summary (Python-style, ESM, `@deessejs/fp` interop).
+- Add `bugs.url`, `files`, `sideEffects: false`, `engines.node`, and `funding` (GitHub Sponsors).
+- Refresh `keywords`: drop `npm-package`, add `standard-schema`, `esm`, `monorepo`.
diff --git a/README.md b/README.md
index 0de1045..5594d3d 100644
--- a/README.md
+++ b/README.md
@@ -1,184 +1,218 @@
-# @deessejs/errors
+
+
@deessejs/errors
+
-[](https://www.npmjs.com/package/@deessejs/errors)
-[](https://www.typescriptlang.org/)
-[](https://opensource.org/licenses/MIT)
+
+ Lightweight, type-safe error handling for TypeScript — Python-style. Function-based API, exception chaining, hierarchical inheritance, and rich error semantics. ESM-only, designed for first-class interoperability with @deessejs/fp's Result and Try.
+
-A TypeScript error handling library with exception chaining, hierarchical inheritance, and rich error semantics — inspired by Python's error system.
+
+
+
+
+
+
-## Features
+
+
+
-- **Exception Chaining** — Preserve the full context of errors with cause chains via `.from()`
-- **Hierarchical Inheritance** — Organize errors in meaningful hierarchies with single or multiple inheritance
-- **Rich Error Semantics** — Attach structured data, templates, and notes to errors
-- **TypeScript First** — Full type safety with comprehensive type definitions
+> **Sibling projects:** [@deessejs/fp](https://github.com/deessejs/fp) provides `Result` and `Try` types that integrate natively with [@deessejs/errors](https://github.com/deessejs/errors) error factories. Install them together to get a complete error-handling story without glue code.
-## Installation
+---
+
+## What is included
+
+| Layer | What you get | Why it matters |
+| ---------------------------------------------------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
+| **`error()`** | Define error factories with name, message templates, fields, and inheritance. | Python-style error definitions without classes. |
+| **`.from()` chaining** | Cause chain via `.from()` + `causes()` traversal. | Link errors together while preserving the full chain context. |
+| **Single or multiple inheritance** | `inherits:` accepts a factory or an array. | Organize error hierarchies that match your domain. |
+| **`is()` type checking** | Runtime and type-safe classifier with inheritance support. | Discriminate errors without brittle `instanceof`. |
+| **`.addNote()`** | Attach runtime context to error instances. | Python 3.11-style notes (PEP 678) for trail-of-breadcrumbs debugging. |
+| **Message templates** | `{field}` placeholders with `:upper`, `:lower`, `:json` modifiers. | Readable messages composed from structured fields at construction time. |
+| **Standard Schema fields** | Accepts Zod / Valibot / ArkType schemas. | Validated structured data on every error instance, no hand-rolled guards. |
+| **`raise()`** | Idiomatic throw helper. | Type-narrowed (`never`) `raise(err)` for control-flow readability. |
+| [@deessejs/fp](https://github.com/deessejs/fp) integration | `Result`/`Try` accept `ErrorInstance` directly. | Type-safe error pipelines end-to-end, no string-error footguns. |
+
+## Why this library
+
+- **Simple by default.** No class hierarchies to manage, no decorators under reflection. Just factory functions and chained calls.
+- **ESM-only.** Modern packaging, no CJS shim, no `module`/`main` duplication.
+- **Minimal runtime.** The only runtime dependency is `@standard-schema/spec`.
+- **TypeScript first-class.** Strict types, no `any` leakages, full inference. JSDoc on every public symbol.
+- **Real testing.** Vitest with type-level and runtime tests, including cause-chain traversal.
+
+## Quick start
+
+### Prerequisites
+
+- Node.js 22.x for consumers (the package emits ESM)
+- pnpm 10+ for development (`corepack enable` if not installed)
+- TypeScript 5.x for consumers (`dist/*.d.ts` is published)
+
+### Install
```bash
npm install @deessejs/errors
-# or
-pnpm add @deessejs/errors
-# or
-yarn add @deessejs/errors
```
-## Quick Start
+[@deessejs/fp](https://github.com/deessejs/fp) is optional - install it if you want to compose `Result`/`Try` types around `ErrorInstance`.
-### Creating Errors
+### Usage
```typescript
-import { error } from '@deessejs/errors';
+import { error, raise, is, causes } from '@deessejs/errors';
-// Simple error
-const ValidationError = error({ name: 'ValidationError' });
-const err = ValidationError();
-
-// Error with message template
+// Define an error factory with a templated message
const ValidationError = error({
name: 'ValidationError',
message: 'Field "{field}" is invalid: {reason}',
});
+// Construct a typed error
const err = ValidationError({ field: 'email', reason: 'invalid format' });
// err.message === 'Field "email" is invalid: invalid format'
-```
-### Exception Chaining
+// Chain a cause
+const cause = error({ name: 'NetworkError' })();
+err.from(cause);
-```typescript
-import { error } from '@deessejs/errors';
-
-const ValidationError = error({ name: 'ValidationError' });
-const ProcessingError = error({ name: 'ProcessingError' });
-
-const validationErr = ValidationError({ field: 'email' });
-const processingErr = ProcessingError();
+// Throw it
+raise(err);
-// Chain errors with .from()
-processingErr.from(validationErr);
-
-console.log(processingErr.message); // "ProcessingError"
-console.log(processingErr.cause); // validationErr
-console.log(processingErr.causes); // [validationErr]
+// Later, type-check and walk the chain
+is(err, ValidationError); // true
+causes(err); // [cause]
```
-### Hierarchical Inheritance
+### Engine compatibility
-```typescript
-import { error } from '@deessejs/errors';
+| Runtime | Minimum version |
+| ---------- | -------------------- |
+| Node.js | 22.0.0 |
+| pnpm | 10 (for development) |
+| TypeScript | 5.x |
-// Single inheritance
-const AppError = error({ name: 'AppError' });
-const ValidationError = error({
- name: 'ValidationError',
- inherits: AppError,
-});
+ESM-only. Consumers using a CJS resolver need to use dynamic `import()` or migrate to ESM.
-// Multiple inheritance
-const NetworkError = error({ name: 'NetworkError' });
-const StorageError = error({ name: 'StorageError' });
-const CombinedError = error({
- name: 'CombinedError',
- inherits: [NetworkError, StorageError],
-});
-```
+## Available commands
-### Type Checking
+### Package: `@deessejs/errors`
-```typescript
-import { error, is } from '@deessejs/errors';
+| Command | What it does |
+| ------------------------------------------- | -------------------------------------------- |
+| `pnpm --filter @deessejs/errors build` | Build `dist/` (`tsc -p tsconfig.build.json`) |
+| `pnpm --filter @deessejs/errors test` | Run vitest in watch mode |
+| `pnpm --filter @deessejs/errors test:run` | Run vitest once |
+| `pnpm --filter @deessejs/errors type-check` | `tsc --noEmit` |
+| `pnpm --filter @deessejs/errors lint` | Run ESLint |
-const AppError = error({ name: 'AppError' });
-const ValidationError = error({
- name: 'ValidationError',
- inherits: AppError,
-});
+### Root (monorepo)
-const err = ValidationError();
+| Command | What it does |
+| ----------------- | -------------------------- |
+| `pnpm build` | Build via Turborepo |
+| `pnpm test` | Run all tests |
+| `pnpm lint` | Lint every workspace |
+| `pnpm type-check` | Type-check every workspace |
+| `pnpm format` | Format with Prettier |
-is(err, ValidationError); // true
-is(err, AppError); // true (inherits from AppError)
-```
+### App: `web` (documentation site)
-### Traverse Cause Chain
+| Command | What it does |
+| ------------------------- | ---------------------------------- |
+| `pnpm --filter web dev` | Start the docs site in dev mode |
+| `pnpm --filter web build` | Build the docs site for production |
-```typescript
-import { error, causes } from '@deessejs/errors';
+## Compatibility
-const Err1 = error({ name: 'Err1' });
-const Err2 = error({ name: 'Err2' });
-const Err3 = error({ name: 'Err3' });
+### Runtime dependency
-const err1 = Err1();
-const err2 = Err2().from(err1);
-const err3 = Err3().from(err2);
+| Package | Required | Notes |
+| ----------------------- | -------------- | -------------------------------------------------------------------------------------------------------- |
+| `@standard-schema/spec` | Yes, `>=1.0.0` | The interface used by `fields`. Schema implementations (Zod, Valibot, ArkType) are passed by the caller. |
-// Iterate through the cause chain
-for (const cause of causes(err3)) {
- console.log(cause.name);
-}
-// Output: Err2, Err1
-```
+### Peer dependencies
-## Why @deessejs/errors?
+| Package | Required | Notes |
+| ---------------------------------------------- | ------------------------ | --------------------------------------------------------------------------------------------------------------------- |
+| [@deessejs/fp](https://github.com/deessejs/fp) | Optional, peer `>=1.0.0` | Recommended if you want `Result`/`Try` types around `ErrorInstance`. Not required for using `@deessejs/errors` alone. |
-Built-in JavaScript errors are limited. `@deessejs/errors` brings Python-style error handling to TypeScript.
+### Engines
-| Feature | Built-in `Error` | @deessejs/errors |
-| ------------------------ | ---------------- | ---------------- |
-| Exception chaining | ❌ | ✅ |
-| Hierarchical inheritance | ❌ | ✅ |
-| Message templates | ❌ | ✅ |
-| Type-safe fields | ❌ | ✅ |
-| Standard Schema support | ❌ | ✅ |
+| Field | Value |
+| ---------------- | -------------- |
+| `engines.node` | `>=22.14.0` |
+| `packageManager` | `pnpm@10.34.5` |
-```typescript
-// Traditional approach — limited context
-throw new Error('Validation failed'); // ❌ Generic, no structure
+## Project structure
-// @deessejs/errors — rich, maintainable errors
-const err = ValidationError({ field: 'email', reason: 'invalid format' });
-err.from(originalError); // ✅ Chain exceptions, preserve context
+```
+.
+├── packages/
+│ └── errors/ # The library — @deessejs/errors on npm
+│ ├── src/ # Source code (ESM)
+│ ├── tests/ # Vitest suites
+│ ├── dist/ # Build output (gitignored)
+│ └── tsconfig.build.json
+├── apps/
+│ └── web/ # Documentation site (Next.js + Fumadocs)
+├── docs/
+│ ├── internal/ # Engineering plans, runbooks
+│ │ ├── product/
+│ │ └── versions/
+│ └── engineering/
+├── pnpm-workspace.yaml
+├── turbo.json # Turborepo pipelines
+├── .changeset/ # Changesets for versioning
+└── README.md
```
-## FAQ
+## Publishing
-### How do I create a custom error type?
+Releases are fully automated via Changesets + npm Trusted Publishing (OIDC). No long-lived `NPM_TOKEN` is required.
-```typescript
-import { error } from '@deessejs/errors';
+| What | How |
+| ------------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| Bump version | Add a `.changeset/.md` file with semver and description on a PR to `staging` |
+| Open the release PR | Cherry-pick selected commits from `staging` into `release/vX.Y.Z` and PR to `main` |
+| Publish | Merge to `main` - `release.yml` detects changesets and publishes via Trusted Publishing to npm with provenance attestation |
+| Hotfix | Branch from `main` as `release/hotfix-`, open PR directly to `main` with `[hotfix]` label. Same workflow fires. |
+| Rollback | Use `pnpm changeset version` then revert the merge. npm deprecations: `pnpm npm deprecate @deessejs/errors@ ''` |
-const ValidationError = error({ name: 'ValidationError' });
-const err = ValidationError({ field: 'email' });
-```
+For the full release runbook, see [`docs/internal/engineering/process/releasing-a-new-version.md`](docs/internal/engineering/process/releasing-a-new-version.md).
-### How do I chain exceptions?
+## Architecture notes
-```typescript
-import { error } from '@deessejs/errors';
+- **ESM-only.** The package exports ES modules. Consumers using legacy CJS resolvers must use dynamic `import()`.
+- **Strict types.** `error()` returns a typed factory; `is()` narrows. No `any` leakages.
+- **Composition over inheritance.** All error primitives compose via instance methods (`.from()`, `.addNote()`, `inherits`). No class hierarchy on the consumer side.
+- **Zero decorators.** Pure factory functions. The library is straightforward to read in DevTools and `node --prof`.
+- **Smoke-tested before publish.** The release workflow imports the built artifact and verifies key exports are present. A broken build fails the publish step before reaching npm.
+- **Symmetric interop with [@deessejs/fp](https://github.com/deessejs/fp).** `Result` constructors accept `ErrorInstance` so you never have to coerce a typed error to a string.
-const validationErr = ValidationError({ field: 'email' });
-const processingErr = ProcessingError().from(validationErr);
+## Contributing
-console.log(processingErr.cause); // validationErr
-```
+Open an issue to discuss larger changes. For typos, broken links, and small fixes, PRs are welcome.
-### How do I check if an error is of a specific type?
+Before submitting a PR:
-```typescript
-import { error, is } from '@deessejs/errors';
+1. Run `pnpm --filter @deessejs/errors test:run` and `pnpm --filter @deessejs/errors lint`.
+2. Add a `.changeset/.md` if the change is user-facing (patch / minor / major).
+3. Update `docs/internal/product/README.md` if the API surface changes.
-const AppError = error({ name: 'AppError' });
-const ValidationError = error({ name: 'ValidationError', inherits: AppError });
+## Acknowledgements
-is(err, AppError); // true if err is ValidationError or any descendant
-```
+The README layout and monorepo tooling for this project are based on the [deessejs/package-template](https://github.com/deessejs/package-template). The shipped README borrows its structure from the [deessejs/fp README](https://github.com/deessejs/fp), adapted for the @deessejs/errors API surface.
-## Documentation
+## License
-For full documentation, visit [errors.deessejs.com](https://errors.deessejs.com)
+[MIT](./LICENSE). See the LICENSE file for details.
-## License
+## Support
-MIT
+- Issues: [github.com/deessejs/errors/issues](https://github.com/deessejs/errors/issues)
+- Discussions: [github.com/deessejs/errors/discussions](https://github.com/deessejs/errors/discussions)
+- Email: [support@deessejs.com](mailto:support@deessejs.com)
+- Documentation: [errors.deessejs.com](https://errors.deessejs.com)
diff --git a/packages/errors/README.md b/packages/errors/README.md
index 0de1045..13b825e 100644
--- a/packages/errors/README.md
+++ b/packages/errors/README.md
@@ -2,183 +2,106 @@
[](https://www.npmjs.com/package/@deessejs/errors)
[](https://www.typescriptlang.org/)
-[](https://opensource.org/licenses/MIT)
+[](https://github.com/deessejs/errors/actions/workflows/ci.yml)
+[](./LICENSE)
-A TypeScript error handling library with exception chaining, hierarchical inheritance, and rich error semantics — inspired by Python's error system.
+Lightweight, type-safe error handling for TypeScript — Python-style. Function-based API, exception chaining, hierarchical inheritance, and rich error semantics. ESM-only, designed for first-class interoperability with [`@deessejs/fp`](https://github.com/deessejs/fp)'s Result and Try.
-## Features
+> **Sibling projects:** [`@deessejs/fp`](https://github.com/deessejs/fp) provides `Result` and `Try` types that integrate natively with [`@deessejs/errors`](https://github.com/deessejs/errors) error factories. Install them together to get a complete error-handling story without glue code.
-- **Exception Chaining** — Preserve the full context of errors with cause chains via `.from()`
-- **Hierarchical Inheritance** — Organize errors in meaningful hierarchies with single or multiple inheritance
-- **Rich Error Semantics** — Attach structured data, templates, and notes to errors
-- **TypeScript First** — Full type safety with comprehensive type definitions
+---
-## Installation
+## What is included
+
+| Layer | What you get | Why it matters |
+| ------------------------------------------------------------ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
+| **`error()`** | Define error factories with name, message templates, fields, and inheritance. | Python-style error definitions without classes. |
+| **`.from()` chaining** | Cause chain via `.from()` + `causes()` traversal. | Link errors together while preserving the full chain context. |
+| **Single or multiple inheritance** | `inherits:` accepts a factory or an array. | Organize error hierarchies that match your domain. |
+| **`is()` type checking** | Runtime and type-safe classifier with inheritance support. | Discriminate errors without brittle `instanceof`. |
+| **`.addNote()`** | Attach runtime context to error instances. | Python 3.11-style notes (PEP 678) for trail-of-breadcrumbs debugging. |
+| **Message templates** | `{field}` placeholders with `:upper`, `:lower`, `:json` modifiers. | Readable messages composed from structured fields at construction time. |
+| **Standard Schema fields** | Accepts Zod / Valibot / ArkType schemas. | Validated structured data on every error instance, no hand-rolled guards. |
+| **`raise()`** | Idiomatic throw helper. | Type-narrowed (`never`) `raise(err)` for control-flow readability. |
+| [`@deessejs/fp`](https://github.com/deessejs/fp) integration | `Result`/`Try` accept `ErrorInstance` directly. | Type-safe error pipelines end-to-end, no string-error footguns. |
+
+## Install
```bash
npm install @deessejs/errors
-# or
-pnpm add @deessejs/errors
-# or
-yarn add @deessejs/errors
```
-## Quick Start
+[`@deessejs/fp`](https://github.com/deessejs/fp) is optional - install it if you want to compose `Result`/`Try` types around `ErrorInstance`.
-### Creating Errors
+## Usage
```typescript
-import { error } from '@deessejs/errors';
+import { error, raise, is, causes } from '@deessejs/errors';
-// Simple error
-const ValidationError = error({ name: 'ValidationError' });
-const err = ValidationError();
-
-// Error with message template
+// Define an error factory with a templated message
const ValidationError = error({
name: 'ValidationError',
message: 'Field "{field}" is invalid: {reason}',
});
+// Construct a typed error
const err = ValidationError({ field: 'email', reason: 'invalid format' });
// err.message === 'Field "email" is invalid: invalid format'
-```
-
-### Exception Chaining
-
-```typescript
-import { error } from '@deessejs/errors';
-
-const ValidationError = error({ name: 'ValidationError' });
-const ProcessingError = error({ name: 'ProcessingError' });
-
-const validationErr = ValidationError({ field: 'email' });
-const processingErr = ProcessingError();
-
-// Chain errors with .from()
-processingErr.from(validationErr);
-
-console.log(processingErr.message); // "ProcessingError"
-console.log(processingErr.cause); // validationErr
-console.log(processingErr.causes); // [validationErr]
-```
-
-### Hierarchical Inheritance
-```typescript
-import { error } from '@deessejs/errors';
-
-// Single inheritance
-const AppError = error({ name: 'AppError' });
-const ValidationError = error({
- name: 'ValidationError',
- inherits: AppError,
-});
-
-// Multiple inheritance
-const NetworkError = error({ name: 'NetworkError' });
-const StorageError = error({ name: 'StorageError' });
-const CombinedError = error({
- name: 'CombinedError',
- inherits: [NetworkError, StorageError],
-});
-```
-
-### Type Checking
-
-```typescript
-import { error, is } from '@deessejs/errors';
-
-const AppError = error({ name: 'AppError' });
-const ValidationError = error({
- name: 'ValidationError',
- inherits: AppError,
-});
+// Chain a cause
+const cause = error({ name: 'NetworkError' })();
+err.from(cause);
-const err = ValidationError();
+// Throw it
+raise(err);
+// Later, type-check and walk the chain
is(err, ValidationError); // true
-is(err, AppError); // true (inherits from AppError)
-```
-
-### Traverse Cause Chain
-
-```typescript
-import { error, causes } from '@deessejs/errors';
-
-const Err1 = error({ name: 'Err1' });
-const Err2 = error({ name: 'Err2' });
-const Err3 = error({ name: 'Err3' });
-
-const err1 = Err1();
-const err2 = Err2().from(err1);
-const err3 = Err3().from(err2);
-
-// Iterate through the cause chain
-for (const cause of causes(err3)) {
- console.log(cause.name);
-}
-// Output: Err2, Err1
-```
-
-## Why @deessejs/errors?
-
-Built-in JavaScript errors are limited. `@deessejs/errors` brings Python-style error handling to TypeScript.
-
-| Feature | Built-in `Error` | @deessejs/errors |
-| ------------------------ | ---------------- | ---------------- |
-| Exception chaining | ❌ | ✅ |
-| Hierarchical inheritance | ❌ | ✅ |
-| Message templates | ❌ | ✅ |
-| Type-safe fields | ❌ | ✅ |
-| Standard Schema support | ❌ | ✅ |
-
-```typescript
-// Traditional approach — limited context
-throw new Error('Validation failed'); // ❌ Generic, no structure
-
-// @deessejs/errors — rich, maintainable errors
-const err = ValidationError({ field: 'email', reason: 'invalid format' });
-err.from(originalError); // ✅ Chain exceptions, preserve context
+causes(err); // [cause]
```
-## FAQ
+## Why this library
-### How do I create a custom error type?
+- **Simple by default.** No class hierarchies, no decorators under reflection.
+- **ESM-only.** Modern packaging, no CJS shim, no `module`/`main` duplication.
+- **Minimal runtime.** The only runtime dependency is `@standard-schema/spec`.
+- **TypeScript first-class.** Strict types, no `any` leakages, full inference. JSDoc on every public symbol.
+- **Real testing.** Vitest with type-level and runtime tests, including cause-chain traversal.
-```typescript
-import { error } from '@deessejs/errors';
+## Engine compatibility
-const ValidationError = error({ name: 'ValidationError' });
-const err = ValidationError({ field: 'email' });
-```
+| Runtime | Required |
+| ---------- | -------------------- |
+| Node.js | `>=22.14.0` |
+| pnpm | `10` for development |
+| TypeScript | `5.x` |
-### How do I chain exceptions?
+ESM-only. Consumers using a CJS resolver need to use dynamic `import()` or migrate to ESM.
-```typescript
-import { error } from '@deessejs/errors';
+## Available commands
-const validationErr = ValidationError({ field: 'email' });
-const processingErr = ProcessingError().from(validationErr);
+| Command | What it does |
+| ----------------- | -------------------------------------------- |
+| `pnpm build` | Build `dist/` (`tsc -p tsconfig.build.json`) |
+| `pnpm test` | Run vitest in watch mode |
+| `pnpm test:run` | Run vitest once |
+| `pnpm type-check` | `tsc --noEmit` |
+| `pnpm lint` | Run ESLint |
-console.log(processingErr.cause); // validationErr
-```
-
-### How do I check if an error is of a specific type?
+## Contributing
-```typescript
-import { error, is } from '@deessejs/errors';
+Open an issue to discuss larger changes. For typos, broken links, and small fixes, PRs are welcome.
-const AppError = error({ name: 'AppError' });
-const ValidationError = error({ name: 'ValidationError', inherits: AppError });
+Before submitting a PR:
-is(err, AppError); // true if err is ValidationError or any descendant
-```
+1. Run `pnpm test:run` and `pnpm lint`.
+2. Add a `.changeset/.md` if the change is user-facing (patch / minor / major).
+3. Update `docs/internal/product/README.md` if the API surface changes.
-## Documentation
+## License
-For full documentation, visit [errors.deessejs.com](https://errors.deessejs.com)
+[MIT](./LICENSE). See the LICENSE file for details.
-## License
+## Acknowledgements
-MIT
+The README layout is based on the [deessejs/package-template](https://github.com/deessejs/package-template) and borrows its structure from the [deessejs/fp README](https://github.com/deessejs/fp), adapted for the `@deessejs/errors` API surface.
diff --git a/packages/errors/package.json b/packages/errors/package.json
index b7dd70e..08df779 100644
--- a/packages/errors/package.json
+++ b/packages/errors/package.json
@@ -1,12 +1,15 @@
{
"name": "@deessejs/errors",
"version": "1.3.2",
- "description": "TypeScript error handling library inspired by Python — function-based API, exception chaining, hierarchical inheritance",
+ "description": "Lightweight, type-safe error handling for TypeScript — Python-style exception chaining, hierarchical inheritance, and rich error semantics. Function-based API, ESM-only, designed for first-class interoperability with @deessejs/fp.",
"homepage": "https://errors.deessejs.com",
"repository": {
"type": "git",
"url": "https://github.com/deessejs/errors.git"
},
+ "bugs": {
+ "url": "https://github.com/deessejs/errors/issues"
+ },
"type": "module",
"main": "./dist/index.js",
"module": "./dist/index.js",
@@ -17,6 +20,12 @@
"types": "./dist/index.d.ts"
}
},
+ "files": [
+ "dist",
+ "README.md",
+ "LICENSE"
+ ],
+ "sideEffects": false,
"scripts": {
"test": "vitest",
"test:run": "vitest run",
@@ -28,13 +37,15 @@
"typescript",
"errors",
"exception",
- "error-handling",
"exception-chaining",
+ "error-handling",
"hierarchical-errors",
"python-style-errors",
"custom-error-types",
- "nodejs",
- "npm-package"
+ "standard-schema",
+ "esm",
+ "monorepo",
+ "nodejs"
],
"author": "Nesalia Inc. ",
"license": "MIT",
@@ -42,6 +53,13 @@
"access": "public",
"provenance": true
},
+ "engines": {
+ "node": ">=22.14.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/deessejs"
+ },
"devDependencies": {
"@eslint/js": "^9.0.0",
"@types/node": "^25.9.1",