Skip to content

ArnavK-09/unwrap-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

94 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🫧 unwrap-go 🫧

Go-like Error Handling for TypeScript/JavaScript

hero

Note

unwrap-go brings Go-style error handling to TypeScript and JavaScript, offering a clean and predictable way to handle errors using Result tuples. This approach eliminates the need for try-catch blocks and provides a more functional approach to error management.

🌟 Features

unwrap-go features intro:

  • Go-Style Error Handling – Uses tuple returns ([data, error]) similar to Go's approach, making error handling more explicit and predictable
  • Promise Support – Built-in support for handling asynchronous operations with the same elegant syntax
  • Type Safety – Full TypeScript support with generic types for both success and error cases
  • Zero Dependencies – Lightweight implementation with no external dependencies
  • Synchronous Support – Handle both async and sync operations with consistent patterns

🧨 Registries

πŸ’» Installation

You can add unwrap-go with one command via:

terminal
npm install @arnavk-09/unwrap-go
deno add jsr:@arnavk-09/unwrap-go
bun add @arnavk-09/unwrap-go
pnpm add @arnavk-09/unwrap-go
yarn add @arnavk-09/unwrap-go

OR

Deno
deno add jsr:@arnavk-09/unwrap-go
Npx
npm install @arnavk-09/unwrap-go
Bun
bun add @arnavk-09/unwrap-go
Pnpm
pnpm add @arnavk-09/unwrap-go
Yarn
yarn add @arnavk-09/unwrap-go

πŸš€ Usage

import { unwrapPromise, unwrapSync } from "@arnavk-09/unwrap-go";

// Async example
async function fetchData() {
  const [data, err] = await unwrapPromise(
    fetch("https://api.example.com/data"),
  );
  if (err) {
    console.error("Failed to fetch:", err);
    return;
  }
  console.log("Data:", data);
}

// Sync example
function divide(a: number, b: number) {
  const [result, err] = unwrapSync(() => {
    if (b === 0) throw new Error("Division by zero");
    return a / b;
  });
  if (err) {
    console.error("Division failed:", err);
    return;
  }
  console.log("Result:", result);
}

πŸ“š API Reference

Function Description Parameters Return Type
unwrapPromise<T, E> Wraps a promise to return a Result tuple promise: Promise<T> Promise<Result<T, E>>
unwrapSync<T, E> Executes a synchronous function and returns a Result tuple fn: () => T Result<T, E>
Result<T, E> Type representing either success (T) or error (E) T: Success type
E: Error type
[T, null] | [null, E]

πŸ›£οΈ Roadmap

Task Status
πŸ§ͺ Add tests πŸ”΄
πŸ§ͺ Publish To JSR 🟒
πŸ§ͺ Publish To NPM 🟒

πŸ’» Contributing

Tip

We welcome contributions to improve unwrap-go! If you have suggestions, bug fixes, or new feature ideas, follow these steps:

  1. Fork the Repository you Click the Fork button at the top-right of the repo page.

  2. Clone Your Fork
    Clone the repo locally: YOU

    git clone https://github.com/ArnavK-09/unwrap-go.git
  3. Create a Branch
    Create a new branch for your changes:

    git checkout -b your-feature-branch
  4. Make Changes
    Implement your changes (bug fixes, features, etc.).

  5. Commit and Push
    Commit your changes and push the branch:

    git commit -m "feat(scope): description"
    git push origin your-feature-branch
  6. Open a Pull Request
    Open a PR with a detailed description of your changes.

  7. Collaborate and Merge
    The maintainers will review your PR, request changes if needed, and merge it once approved.

πŸ™‹β€β™‚οΈ Issues

Found a bug or need help? Please create an issue on the GitHub repository with a detailed description.

πŸ‘€ Author

Arnav K
Arnav K

πŸ“„ License

unwrap-go is licensed under the Unlicense License. See the LICENSE file for more details.


🌟 If you find this project helpful, please give it a star on GitHub! 🌟