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 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.
- Historically, this module was named
- bytes Functions for dealing with
byte arrays (
Uint8Array
).- Historically, this module was named
uint8array
, but that name has been deprecated.
- Historically, this module was named
- 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 arealAll
module, but they have been merged into this module as thetoAsyncIterable
function and thereadAsArray
function.
- Historically, there was a
- 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 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.