diff options
author | Joel Kronqvist <joel.h.kronqvist@gmail.com> | 2022-03-05 19:02:27 +0200 |
---|---|---|
committer | Joel Kronqvist <joel.h.kronqvist@gmail.com> | 2022-03-05 19:02:27 +0200 |
commit | 5d309ff52cd399a6b71968a6b9a70c8ac0b98981 (patch) | |
tree | 360f7eb50f956e2367ef38fa1fc6ac7ac5258042 /node_modules/pirates | |
parent | b500a50f1b97d93c98b36ed9a980f8188d648147 (diff) | |
download | LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.tar.gz LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.zip |
Added node_modules for the updating to work properly.
Diffstat (limited to 'node_modules/pirates')
-rw-r--r-- | node_modules/pirates/LICENSE | 21 | ||||
-rw-r--r-- | node_modules/pirates/README.md | 69 | ||||
-rw-r--r-- | node_modules/pirates/index.d.ts | 82 | ||||
-rw-r--r-- | node_modules/pirates/lib/index.js | 159 | ||||
-rw-r--r-- | node_modules/pirates/package.json | 74 |
5 files changed, 405 insertions, 0 deletions
diff --git a/node_modules/pirates/LICENSE b/node_modules/pirates/LICENSE new file mode 100644 index 0000000..acc7a0e --- /dev/null +++ b/node_modules/pirates/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016-2018 Ari Porad + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/pirates/README.md b/node_modules/pirates/README.md new file mode 100644 index 0000000..f61065e --- /dev/null +++ b/node_modules/pirates/README.md @@ -0,0 +1,69 @@ +# Pirates [![Coverage][codecov-badge]][codecov-link] + +### Properly hijack require + +[codecov-badge]: https://img.shields.io/codecov/c/github/danez/pirates/master.svg?style=flat "codecov" +[codecov-link]: https://codecov.io/gh/danez/pirates "codecov" + +## Why? + +Two reasons: +1. Babel and istanbul were breaking each other. +2. Everyone seemed to re-invent the wheel on this, and everyone wanted a solution that was DRY, simple, easy to use, +and made everything Just Workâ˘, while allowing multiple require hooks, in a fashion similar to calling `super`. + +For some context, see [the Babel issue thread][] which started this all, then [the nyc issue thread][], where +discussion was moved (as we began to discuss just using the code nyc had developed), and finally to [#1][issue-1] +where discussion was finally moved. + +[the Babel issue thread]: https://github.com/babel/babel/pull/3062 "Babel Issue Thread" +[the nyc issue thread]: https://github.com/bcoe/nyc/issues/70 "NYC Issue Thread" +[issue-1]: https://github.com/danez/pirates/issues/1 "Issue #1" + +## Installation + + npm install --save pirates + +## Usage + +Using pirates is really easy: +```javascript +// my-module/register.js +const addHook = require('pirates').addHook; +// Or if you use ES modules +// import { addHook } from 'pirates'; + +function matcher(filename) { + // Here, you can inspect the filename to determine if it should be hooked or + // not. Just return a truthy/falsey. Files in node_modules are automatically ignored, + // unless otherwise specified in options (see below). + + // TODO: Implement your logic here + return true; +} + +const revert = addHook( + (code, filename) => code.replace('@@foo', 'console.log(\'foo\');'), + { exts: ['.js'], matcher } +); + +// And later, if you want to un-hook require, you can just do: +revert(); +``` + +## API + +### pirates.addHook(hook, [opts={ [matcher: true], [exts: ['.js']], [ignoreNodeModules: true] }]); +Add a require hook. `hook` must be a function that takes `(code, filename)`, and returns the modified code. `opts` is +an optional options object. Available options are: `matcher`, which is a function that accepts a filename, and +returns a truthy value if the file should be hooked (defaults to a function that always returns true), falsey if +otherwise; `exts`, which is an array of extensions to hook, they should begin with `.` (defaults to `['.js']`); +`ignoreNodeModules`, if true, any file in a `node_modules` folder wont be hooked (the matcher also wont be called), +if false, then the matcher will be called for any files in `node_modules` (defaults to true). + + +## Projects that use Pirates + +See the [wiki page](https://github.com/danez/pirates/wiki/Projects-using-Pirates). If you add Pirates to your project, +(And you should! It works best if everyone uses it. Then we can have a happy world full of happy require hooks!), please +add yourself to the wiki. diff --git a/node_modules/pirates/index.d.ts b/node_modules/pirates/index.d.ts new file mode 100644 index 0000000..b2d8ce6 --- /dev/null +++ b/node_modules/pirates/index.d.ts @@ -0,0 +1,82 @@ +/* (c) 2015 Ari Porad (@ariporad) <http://ariporad.com>. License: ariporad.mit-license.org */ + +/** + * The hook. Accepts the code of the module and the filename. + */ +declare type Hook = (code: string, filename: string) => string; + +/** + * A matcher function, will be called with path to a file. + * + * Should return truthy if the file should be hooked, falsy otherwise. + */ +declare type Matcher = (path: string) => boolean; + +/** + * Reverts the hook when called. + */ +declare type RevertFunction = () => void; +interface Options { + /** + * The extensions to hook. Should start with '.' (ex. ['.js']). + * + * Takes precedence over `exts`, `extension` and `ext`. + * + * @alias exts + * @alias extension + * @alias ext + * @default ['.js'] + */ + extensions?: ReadonlyArray<string> | string; + + /** + * The extensions to hook. Should start with '.' (ex. ['.js']). + * + * Takes precedence over `extension` and `ext`. + * + * @alias extension + * @alias ext + * @default ['.js'] + */ + exts?: ReadonlyArray<string> | string; + + /** + * The extensions to hook. Should start with '.' (ex. ['.js']). + * + * Takes precedence over `ext`. + * + * @alias ext + * @default ['.js'] + */ + extension?: ReadonlyArray<string> | string; + + /** + * The extensions to hook. Should start with '.' (ex. ['.js']). + * + * @default ['.js'] + */ + ext?: ReadonlyArray<string> | string; + + /** + * A matcher function, will be called with path to a file. + * + * Should return truthy if the file should be hooked, falsy otherwise. + */ + matcher?: Matcher | null; + + /** + * Auto-ignore node_modules. Independent of any matcher. + * + * @default true + */ + ignoreNodeModules?: boolean; +} + +/** + * Add a require hook. + * + * @param hook The hook. Accepts the code of the module and the filename. Required. + * @returns The `revert` function. Reverts the hook when called. + */ +export declare function addHook(hook: Hook, opts?: Options): RevertFunction; +export {}; diff --git a/node_modules/pirates/lib/index.js b/node_modules/pirates/lib/index.js new file mode 100644 index 0000000..714497b --- /dev/null +++ b/node_modules/pirates/lib/index.js @@ -0,0 +1,159 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.addHook = addHook; + +var _module = _interopRequireDefault(require("module")); + +var _path = _interopRequireDefault(require("path")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/* (c) 2015 Ari Porad (@ariporad) <http://ariporad.com>. License: ariporad.mit-license.org */ +const nodeModulesRegex = /^(?:.*[\\/])?node_modules(?:[\\/].*)?$/; // Guard against poorly mocked module constructors. + +const Module = module.constructor.length > 1 ? module.constructor : _module.default; +const HOOK_RETURNED_NOTHING_ERROR_MESSAGE = '[Pirates] A hook returned a non-string, or nothing at all! This is a' + ' violation of intergalactic law!\n' + '--------------------\n' + 'If you have no idea what this means or what Pirates is, let me explain: ' + 'Pirates is a module that makes is easy to implement require hooks. One of' + " the require hooks you're using uses it. One of these require hooks" + " didn't return anything from it's handler, so we don't know what to" + ' do. You might want to debug this.'; +/** + * @param {string} filename The filename to check. + * @param {string[]} exts The extensions to hook. Should start with '.' (ex. ['.js']). + * @param {Matcher|null} matcher A matcher function, will be called with path to a file. Should return truthy if the file should be hooked, falsy otherwise. + * @param {boolean} ignoreNodeModules Auto-ignore node_modules. Independent of any matcher. + */ + +function shouldCompile(filename, exts, matcher, ignoreNodeModules) { + if (typeof filename !== 'string') { + return false; + } + + if (exts.indexOf(_path.default.extname(filename)) === -1) { + return false; + } + + const resolvedFilename = _path.default.resolve(filename); + + if (ignoreNodeModules && nodeModulesRegex.test(resolvedFilename)) { + return false; + } + + if (matcher && typeof matcher === 'function') { + return !!matcher(resolvedFilename); + } + + return true; +} +/** + * @callback Hook The hook. Accepts the code of the module and the filename. + * @param {string} code + * @param {string} filename + * @returns {string} + */ + +/** + * @callback Matcher A matcher function, will be called with path to a file. + * + * Should return truthy if the file should be hooked, falsy otherwise. + * @param {string} path + * @returns {boolean} + */ + +/** + * @callback RevertFunction Reverts the hook when called. + * @returns {void} + */ + +/** + * @typedef {object} Options + * @property {Matcher|null} [matcher=null] A matcher function, will be called with path to a file. + * + * Should return truthy if the file should be hooked, falsy otherwise. + * + * @property {string[]} [extensions=['.js']] The extensions to hook. Should start with '.' (ex. ['.js']). + * @property {string[]} [exts=['.js']] The extensions to hook. Should start with '.' (ex. ['.js']). + * + * @property {string[]} [extension=['.js']] The extensions to hook. Should start with '.' (ex. ['.js']). + * @property {string[]} [ext=['.js']] The extensions to hook. Should start with '.' (ex. ['.js']). + * + * @property {boolean} [ignoreNodeModules=true] Auto-ignore node_modules. Independent of any matcher. + */ + +/** + * Add a require hook. + * + * @param {Hook} hook The hook. Accepts the code of the module and the filename. Required. + * @param {Options} [opts] Options + * @returns {RevertFunction} The `revert` function. Reverts the hook when called. + */ + + +function addHook(hook, opts = {}) { + let reverted = false; + const loaders = []; + const oldLoaders = []; + let exts; // We need to do this to fix #15. Basically, if you use a non-standard extension (ie. .jsx), then + // We modify the .js loader, then use the modified .js loader for as the base for .jsx. + // This prevents that. + + const originalJSLoader = Module._extensions['.js']; + const matcher = opts.matcher || null; + const ignoreNodeModules = opts.ignoreNodeModules !== false; + exts = opts.extensions || opts.exts || opts.extension || opts.ext || ['.js']; + + if (!Array.isArray(exts)) { + exts = [exts]; + } + + exts.forEach(ext => { + if (typeof ext !== 'string') { + throw new TypeError(`Invalid Extension: ${ext}`); + } + + const oldLoader = Module._extensions[ext] || originalJSLoader; + oldLoaders[ext] = Module._extensions[ext]; + + loaders[ext] = Module._extensions[ext] = function newLoader(mod, filename) { + let compile; + + if (!reverted) { + if (shouldCompile(filename, exts, matcher, ignoreNodeModules)) { + compile = mod._compile; + + mod._compile = function _compile(code) { + // reset the compile immediately as otherwise we end up having the + // compile function being changed even though this loader might be reverted + // Not reverting it here leads to long useless compile chains when doing + // addHook -> revert -> addHook -> revert -> ... + // The compile function is also anyway created new when the loader is called a second time. + mod._compile = compile; + const newCode = hook(code, filename); + + if (typeof newCode !== 'string') { + throw new Error(HOOK_RETURNED_NOTHING_ERROR_MESSAGE); + } + + return mod._compile(newCode, filename); + }; + } + } + + oldLoader(mod, filename); + }; + }); + return function revert() { + if (reverted) return; + reverted = true; + exts.forEach(ext => { + // if the current loader for the extension is our loader then unregister it and set the oldLoader again + // if not we can not do anything as we cannot remove a loader from within the loader-chain + if (Module._extensions[ext] === loaders[ext]) { + if (!oldLoaders[ext]) { + delete Module._extensions[ext]; + } else { + Module._extensions[ext] = oldLoaders[ext]; + } + } + }); + }; +}
\ No newline at end of file diff --git a/node_modules/pirates/package.json b/node_modules/pirates/package.json new file mode 100644 index 0000000..47bd384 --- /dev/null +++ b/node_modules/pirates/package.json @@ -0,0 +1,74 @@ +{ + "name": "pirates", + "description": "Properly hijack require", + "main": "lib/index.js", + "types": "index.d.ts", + "scripts": { + "clean": "rimraf lib", + "build": "babel src -d lib", + "test": "cross-env BABEL_ENV=test yarn run build && nyc ava", + "lint": "eslint --report-unused-disable-directives .", + "prepublishOnly": "yarn run build" + }, + "files": [ + "lib", + "index.d.ts" + ], + "repository": { + "type": "git", + "url": "https://github.com/danez/pirates.git" + }, + "engines": { + "node": ">= 6" + }, + "author": { + "name": "Ari Porad", + "email": "ari@ariporad.com", + "url": "http://ariporad.com" + }, + "devDependencies": { + "@babel/cli": "7.16.7", + "@babel/core": "7.16.7", + "@babel/preset-env": "7.16.7", + "ava": "1.4.1", + "babel-core": "7.0.0-bridge.0", + "babel-eslint": "10.1.0", + "babel-plugin-istanbul": "5.2.0", + "cross-env": "5.2.1", + "decache": "4.6.1", + "eslint": "5.16.0", + "eslint-config-prettier": "4.3.0", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-prettier": "3.4.1", + "mock-require": "3.0.3", + "nyc": "13.3.0", + "prettier": "1.19.1", + "rewire": "4.0.1", + "rimraf": "3.0.2" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/danez/pirates/issues" + }, + "homepage": "https://github.com/danez/pirates#readme", + "ava": { + "files": [ + "test/*.js" + ], + "sources": [ + "lib/**/*.js" + ] + }, + "nyc": { + "include": [ + "src/*.js" + ], + "reporter": [ + "json", + "text" + ], + "sourceMap": false, + "instrument": false + }, + "version": "4.0.5" +} |