Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/igorskyflyer/npm-hook

๐Ÿช Hooks onto a JavaScript prototype, either extending or changing its behavior or replacing it completely. ๐Ÿ‘บ
https://github.com/igorskyflyer/npm-hook

back-end biome function hook igorskyflyer javascript js method node npm prototype ts typescript utility vitest

Last synced: 2 months ago
JSON representation

๐Ÿช Hooks onto a JavaScript prototype, either extending or changing its behavior or replacing it completely. ๐Ÿ‘บ

Awesome Lists containing this project

README

        

Hook



๐Ÿช Hooks onto a JavaScript prototype, either extending or changing its

behavior or replacing it completely ๐Ÿ‘บ








๐Ÿ’– Support further development


I work hard for every project, including this one and your support means a lot to me!


Consider buying me a coffee. โ˜•


Thank you for supporting my efforts! ๐Ÿ™๐Ÿ˜Š





Donate to igorskyflyer




@igorskyflyer










## ๐Ÿ“ƒ Table of contents

- [Usage](#-usage)
- [API](#-api)
- [hook()](#hook-boolean)
- [Examples](#-examples)
- [Changelog](#-changelog)
- [License](#-license)
- [Related](#-related)
- [Author](#-author)

---




## ๐Ÿ•ต๐Ÿผ Usage

Install it by executing:

```shell
npm i "@igor.dvlpr/hook"
```


## ๐Ÿคน๐Ÿผ API


> [!CAUTION]
> This package provides ways of modifying the native prototype(s) of built-in JavaScript objects, use it only if you know what you're doing and with **caution** as it may cause unexpected results!
>


### hook(): boolean

```ts
function hook(
proto: Prototype,
method: string,
handler: NativeMethodHook,
replace: boolean = false
): boolean
```

Hooks onto a JavaScript prototype in order to extend, modify or completely replace a given method of it.


#### `proto`

A prototype, e.g. `Array.prototype`, `Number.prototype`, etc.


#### `method`

A method to hook onto, e.g. `push` of `Array.prototype`.


#### `handler`

A custom function to run when the hooked method is called.
The function has the following signature:

```ts
(
this: Type,
native: Type[Method],
...args: any[]
) => ReturnType
```


`this` will be resolved to the provided prototype.

`native` is the native method that's being overridden, with its original signature.

`...args: any[]` all other arguments passed after the `native` method.

`ReturnType` the return type of the handler is the same as the `native` method is.


#### `replace`

A Boolean indicating whether the prototype method should be replaced completely.
Defaults to **false**.


Returns a Boolean whether the hooking onto was successful.

---

## โœจ Examples

```ts
import { hook } from '@igor.dvlpr/hook'

hook(Array.prototype, 'unshift', function (native, x) {
// any code can be here,
// not just owned by the prototype
// you're hooking/replacing

native(512)
this.push(x / 2)

// must adhere to the original method's
// return type
// see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift#return_value
return this.length // returns 3
})

const array: number[] = []

array.unshift(256)
console.log(array) // [512, 256, 128]
```

---

## ๐Ÿ“ Changelog

๐Ÿ“‘ Changelog is available here: [CHANGELOG.md](https://github.com/igorskyflyer/npm-hook/blob/main/CHANGELOG.md).

---

## ๐Ÿชช License

Licensed under the MIT license which is available here, [MIT license](https://github.com/igorskyflyer/npm-hook/blob/main/LICENSE).

---

## ๐Ÿงฌ Related

[@igor.dvlpr/jmap](https://www.npmjs.com/package/@igor.dvlpr/jmap)

> _๐Ÿ•ถ๏ธ Reads a JSON file into a Map. ๐ŸŒป_

[@igor.dvlpr/strip-html](https://www.npmjs.com/package/@igor.dvlpr/strip-html)

> _๐Ÿฅž Removes HTML code from the given string. Can even extract text-only from the given an HTML string. โœจ_

[@igor.dvlpr/comment-it](https://www.npmjs.com/package/@igor.dvlpr/comment-it)

> _๐Ÿ“œ Formats the provided string as a comment, either a single or a multi line comment for the given programming language. ๐Ÿ’ป_

[@igor.dvlpr/normalized-string](https://www.npmjs.com/package/@igor.dvlpr/normalized-string)

> _๐Ÿ’Š NormalizedString provides you with a String type with consistent line-endings, guaranteed. ๐Ÿ“ฎ_

[@igor.dvlpr/keppo](https://www.npmjs.com/package/@igor.dvlpr/keppo)

> _๐ŸŽก Parse, manage, compare and output SemVer-compatible version numbers. ๐Ÿ›ก_

---


### ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป Author
Created by **Igor Dimitrijeviฤ‡** ([*@igorskyflyer*](https://github.com/igorskyflyer/)).