/jsext

A JavaScript extension package for building strong and modern applications.

Primary LanguageTypeScriptMIT LicenseMIT

JsExt

A JavaScript extension package for building strong and modern applications.

This package is built on top of modern web standards and provides unified 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 fashion.
  • Process 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 and Fastly Compute

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

Note for TypeScript Project

This package requires compilerOptions.moduleResolution set to Bundler or NodeNext in tsconfig.json.

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 (Experimental) Utility functions to retrieve runtime information or configure 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 unified 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.