JSPM

@igor.dvlpr/hook

1.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 16
  • Score
    100M100P100Q15246F
  • License MIT

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

Package Exports

  • @igor.dvlpr/hook
  • @igor.dvlpr/hook/dist/index.mjs

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@igor.dvlpr/hook) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

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

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.


@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).