@igor.dvlpr/hook
TypeScript icon, indicating that this package has built-in type declarations

1.1.0ย โ€ขย Publicย โ€ขย Published

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

Install it by executing:

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

function hook(
  proto: Prototype,
  method: string,
  handler: NativeMethodHook<Prototype, Method>,
  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:

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

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<Type[Method]> 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

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.


๐Ÿชช License

Licensed under the MIT license which is available here, MIT license.


๐Ÿงฌ Related

@igor.dvlpr/jmap

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

@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

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

@igor.dvlpr/normalized-string

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

@igor.dvlpr/keppo

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



๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป Author

Created by Igor Dimitrijeviฤ‡ (@igorskyflyer).

Package Sidebar

Install

npm i @igor.dvlpr/hook

Weekly Downloads

7

Version

1.1.0

License

MIT

Unpacked Size

9.09 kB

Total Files

5

Last publish

Collaborators

  • igor.dvlpr