JsExt

A JavaScript extension package for building strong and modern applications.

This package is built on top of modern web standards and provides universal high-level APIs that can work across different runtime environments, whether it's Node.js, Deno, Bun, Cloudflare Workers, browsers, Windows, macOS or Linux.

Outstanding Features

  • Various useful functions for built-in data types that are not built-in.
  • Various utility functions to extend the ability of flow control.
  • Multi-threaded JavaScript with parallel threads.
  • File system APIs for both server and browser environments.
  • Open dialogs in both CLI and web applications.
  • Serve HTTP requests, SSE and WebSockets for all server runtimes.
  • Manipulate file system paths and URLs in the same way.
  • Handle byte arrays and readable streams effortlessly.
  • Create, extract and preview archives in all runtimes.
  • And many more...

Import

The recommended way is to only import the ones that are needed:

// Universal
import _try from "@ayonli/jsext/try";
import func from "@ayonli/jsext/func";
// ...

// Deno (URL)
import _try from "https://lib.deno.dev/x/ayonli_jsext@latest/try.ts";
import func from "https://lib.deno.dev/x/ayonli_jsext@latest/func.ts";
// ...

// Browsers (URL)
import _try from "https://ayonli.github.io/jsext/esm/try.js";
import func from "https://ayonli.github.io/jsext/esm/func.js";
// ...

There is also a bundled version that can be loaded via a <script> tag in the browser.

<script src="https://ayonli.github.io/jsext/bundle/jsext.js">
    // this will also include the sub-modules and augmentations
</script>

Note for Cloudflare Workers

For applications run in Cloudflare Workers, install the NPM version of this package instead of the JSR version.

Language-enhancing Functions

  • _try Calls a function safely and return errors when captured.
  • func Declares a function along with a defer keyword, inspired by Golang.
  • wrap Wraps a function for decorator pattern but keep its signature.
  • mixin Declares a class that combines all methods from the base classes.
  • throttle Throttles function calls for frequent access.
  • debounce Debounces function calls for frequent access.
  • queue Handles tasks sequentially and prevent concurrency conflicts.
  • lock Provides mutual exclusion for concurrent operations.
  • chan Creates a channel that transfers data across routines, even across multiple threads, inspired by Golang.
  • parallel Runs functions in parallel threads and take advantage of multi-core CPUs, inspired by Golang.
  • run Runs a script in another thread and abort at any time.
  • deprecate Marks a function as deprecated and emit warnings when it is called.
  • pipe Performs pipe operations through a series of functions upon a value.

Subcategories

Each of these modules includes specific functions and classes for their target categories:

  • archive (Experimental) Collecting files into an archive file, or extracting files from a archive file.
  • array Functions for dealing with arrays.
  • async Functions for async/promise context handling.
    • Historically, this module was named promise, but that name has been deprecated.
  • bytes Functions for dealing with byte arrays (Uint8Array).
    • Historically, this module was named uint8array, but that name has been deprecated.
  • class Functions for dealing with classes.
  • cli (Experimental) Useful utility functions for interacting with the terminal.
  • collections Additional collection data types.
  • dialog (Experimental) Asynchronous dialog functions for both browsers and terminals.
  • encoding Utilities for encoding and decoding binary representations like hex and base64 strings.
  • error Functions for converting errors to/from other types of objects.
  • event Functions for working with events.
  • filetype Functions to get file types in different fashions.
  • fs (Experimental) Universal file system APIs for both server and browser applications.
  • hash Simplified hash functions for various data types.
  • http (Experimental) functions for handling HTTP related tasks, such as parsing headers and serving HTTP requests.
  • json Functions for parsing JSONs to specific structures.
  • math Functions for mathematical calculations.
  • module Utility functions for working with JavaScript modules.
  • number Functions for dealing with numbers.
  • object Functions for dealing with objects.
  • path (Experimental) Platform-independent utility functions for dealing with file system paths and URLs.
  • reader Utility functions for reading data from various types of source into various forms.
    • Historically, there was a read module and a realAll module, but they have been merged into this module as the toAsyncIterable function and the readAsArray function.
  • runtime Utility functions to retrieve runtime information or modify runtime behaviors.
  • sse (Experimental) Tools for processing Server-sent Events requests and handling message events.
  • string Functions for dealing with strings.
  • types The missing builtin classes of JavaScript and utility types for TypeScript.
  • ws (Experimental) A universal WebSocket server interface for Node.js, Deno, Bun and Cloudflare Workers.

Augmentation

This package supports augmenting some functions to the corresponding built-in types/namespaces, but they should only be used for application development, don't use them when developing libraries.

NOTE: this feature is only available by the NPM package, they don't work by the JSR package.

For more details, please check this document.