new license file version [CI SKIP]
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 209 B |
@@ -0,0 +1,269 @@
|
||||
/* eslint-env browser */
|
||||
|
||||
/**
|
||||
* This is the web browser implementation of `debug()`.
|
||||
*/
|
||||
|
||||
exports.formatArgs = formatArgs;
|
||||
exports.save = save;
|
||||
exports.load = load;
|
||||
exports.useColors = useColors;
|
||||
exports.storage = localstorage();
|
||||
exports.destroy = (() => {
|
||||
let warned = false;
|
||||
|
||||
return () => {
|
||||
if (!warned) {
|
||||
warned = true;
|
||||
console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
/**
|
||||
* Colors.
|
||||
*/
|
||||
|
||||
exports.colors = [
|
||||
'#0000CC',
|
||||
'#0000FF',
|
||||
'#0033CC',
|
||||
'#0033FF',
|
||||
'#0066CC',
|
||||
'#0066FF',
|
||||
'#0099CC',
|
||||
'#0099FF',
|
||||
'#00CC00',
|
||||
'#00CC33',
|
||||
'#00CC66',
|
||||
'#00CC99',
|
||||
'#00CCCC',
|
||||
'#00CCFF',
|
||||
'#3300CC',
|
||||
'#3300FF',
|
||||
'#3333CC',
|
||||
'#3333FF',
|
||||
'#3366CC',
|
||||
'#3366FF',
|
||||
'#3399CC',
|
||||
'#3399FF',
|
||||
'#33CC00',
|
||||
'#33CC33',
|
||||
'#33CC66',
|
||||
'#33CC99',
|
||||
'#33CCCC',
|
||||
'#33CCFF',
|
||||
'#6600CC',
|
||||
'#6600FF',
|
||||
'#6633CC',
|
||||
'#6633FF',
|
||||
'#66CC00',
|
||||
'#66CC33',
|
||||
'#9900CC',
|
||||
'#9900FF',
|
||||
'#9933CC',
|
||||
'#9933FF',
|
||||
'#99CC00',
|
||||
'#99CC33',
|
||||
'#CC0000',
|
||||
'#CC0033',
|
||||
'#CC0066',
|
||||
'#CC0099',
|
||||
'#CC00CC',
|
||||
'#CC00FF',
|
||||
'#CC3300',
|
||||
'#CC3333',
|
||||
'#CC3366',
|
||||
'#CC3399',
|
||||
'#CC33CC',
|
||||
'#CC33FF',
|
||||
'#CC6600',
|
||||
'#CC6633',
|
||||
'#CC9900',
|
||||
'#CC9933',
|
||||
'#CCCC00',
|
||||
'#CCCC33',
|
||||
'#FF0000',
|
||||
'#FF0033',
|
||||
'#FF0066',
|
||||
'#FF0099',
|
||||
'#FF00CC',
|
||||
'#FF00FF',
|
||||
'#FF3300',
|
||||
'#FF3333',
|
||||
'#FF3366',
|
||||
'#FF3399',
|
||||
'#FF33CC',
|
||||
'#FF33FF',
|
||||
'#FF6600',
|
||||
'#FF6633',
|
||||
'#FF9900',
|
||||
'#FF9933',
|
||||
'#FFCC00',
|
||||
'#FFCC33'
|
||||
];
|
||||
|
||||
/**
|
||||
* Currently only WebKit-based Web Inspectors, Firefox >= v31,
|
||||
* and the Firebug extension (any Firefox version) are known
|
||||
* to support "%c" CSS customizations.
|
||||
*
|
||||
* TODO: add a `localStorage` variable to explicitly enable/disable colors
|
||||
*/
|
||||
|
||||
// eslint-disable-next-line complexity
|
||||
function useColors() {
|
||||
// NB: In an Electron preload script, document will be defined but not fully
|
||||
// initialized. Since we know we're in Chrome, we'll just detect this case
|
||||
// explicitly
|
||||
if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Internet Explorer and Edge do not support colors.
|
||||
if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Is webkit? http://stackoverflow.com/a/16459606/376773
|
||||
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
|
||||
return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
|
||||
// Is firebug? http://stackoverflow.com/a/398120/376773
|
||||
(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
|
||||
// Is firefox >= v31?
|
||||
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
|
||||
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
|
||||
// Double check webkit in userAgent just in case we are in a worker
|
||||
(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
|
||||
}
|
||||
|
||||
/**
|
||||
* Colorize log arguments if enabled.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function formatArgs(args) {
|
||||
args[0] = (this.useColors ? '%c' : '') +
|
||||
this.namespace +
|
||||
(this.useColors ? ' %c' : ' ') +
|
||||
args[0] +
|
||||
(this.useColors ? '%c ' : ' ') +
|
||||
'+' + module.exports.humanize(this.diff);
|
||||
|
||||
if (!this.useColors) {
|
||||
return;
|
||||
}
|
||||
|
||||
const c = 'color: ' + this.color;
|
||||
args.splice(1, 0, c, 'color: inherit');
|
||||
|
||||
// The final "%c" is somewhat tricky, because there could be other
|
||||
// arguments passed either before or after the %c, so we need to
|
||||
// figure out the correct index to insert the CSS into
|
||||
let index = 0;
|
||||
let lastC = 0;
|
||||
args[0].replace(/%[a-zA-Z%]/g, match => {
|
||||
if (match === '%%') {
|
||||
return;
|
||||
}
|
||||
index++;
|
||||
if (match === '%c') {
|
||||
// We only are interested in the *last* %c
|
||||
// (the user may have provided their own)
|
||||
lastC = index;
|
||||
}
|
||||
});
|
||||
|
||||
args.splice(lastC, 0, c);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes `console.debug()` when available.
|
||||
* No-op when `console.debug` is not a "function".
|
||||
* If `console.debug` is not available, falls back
|
||||
* to `console.log`.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
exports.log = console.debug || console.log || (() => {});
|
||||
|
||||
/**
|
||||
* Save `namespaces`.
|
||||
*
|
||||
* @param {String} namespaces
|
||||
* @api private
|
||||
*/
|
||||
function save(namespaces) {
|
||||
try {
|
||||
if (namespaces) {
|
||||
exports.storage.setItem('debug', namespaces);
|
||||
} else {
|
||||
exports.storage.removeItem('debug');
|
||||
}
|
||||
} catch (error) {
|
||||
// Swallow
|
||||
// XXX (@Qix-) should we be logging these?
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load `namespaces`.
|
||||
*
|
||||
* @return {String} returns the previously persisted debug modes
|
||||
* @api private
|
||||
*/
|
||||
function load() {
|
||||
let r;
|
||||
try {
|
||||
r = exports.storage.getItem('debug');
|
||||
} catch (error) {
|
||||
// Swallow
|
||||
// XXX (@Qix-) should we be logging these?
|
||||
}
|
||||
|
||||
// If debug isn't set in LS, and we're in Electron, try to load $DEBUG
|
||||
if (!r && typeof process !== 'undefined' && 'env' in process) {
|
||||
r = process.env.DEBUG;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* Localstorage attempts to return the localstorage.
|
||||
*
|
||||
* This is necessary because safari throws
|
||||
* when a user disables cookies/localstorage
|
||||
* and you attempt to access it.
|
||||
*
|
||||
* @return {LocalStorage}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function localstorage() {
|
||||
try {
|
||||
// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
|
||||
// The Browser also has localStorage in the global context.
|
||||
return localStorage;
|
||||
} catch (error) {
|
||||
// Swallow
|
||||
// XXX (@Qix-) should we be logging these?
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = require('./common')(exports);
|
||||
|
||||
const {formatters} = module.exports;
|
||||
|
||||
/**
|
||||
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
|
||||
*/
|
||||
|
||||
formatters.j = function (v) {
|
||||
try {
|
||||
return JSON.stringify(v);
|
||||
} catch (error) {
|
||||
return '[UnexpectedJSONParseError]: ' + error.message;
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.count = void 0;
|
||||
var reduce_1 = require("./reduce");
|
||||
function count(predicate) {
|
||||
return reduce_1.reduce(function (total, value, i) { return (!predicate || predicate(value, i) ? total + 1 : total); }, 0);
|
||||
}
|
||||
exports.count = count;
|
||||
//# sourceMappingURL=count.js.map
|
||||
@@ -0,0 +1,97 @@
|
||||
let FractionJs = require('fraction.js')
|
||||
|
||||
let Prefixer = require('./prefixer')
|
||||
let utils = require('./utils')
|
||||
|
||||
const REGEXP = /(min|max)-resolution\s*:\s*\d*\.?\d+(dppx|dpcm|dpi|x)/gi
|
||||
const SPLIT = /(min|max)-resolution(\s*:\s*)(\d*\.?\d+)(dppx|dpcm|dpi|x)/i
|
||||
|
||||
class Resolution extends Prefixer {
|
||||
/**
|
||||
* Return prefixed query name
|
||||
*/
|
||||
prefixName(prefix, name) {
|
||||
if (prefix === '-moz-') {
|
||||
return name + '--moz-device-pixel-ratio'
|
||||
} else {
|
||||
return prefix + name + '-device-pixel-ratio'
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return prefixed query
|
||||
*/
|
||||
prefixQuery(prefix, name, colon, value, units) {
|
||||
value = new FractionJs(value)
|
||||
|
||||
// 1dpcm = 2.54dpi
|
||||
// 1dppx = 96dpi
|
||||
if (units === 'dpi') {
|
||||
value = value.div(96)
|
||||
} else if (units === 'dpcm') {
|
||||
value = value.mul(2.54).div(96)
|
||||
}
|
||||
value = value.simplify()
|
||||
|
||||
if (prefix === '-o-') {
|
||||
value = value.n + '/' + value.d
|
||||
}
|
||||
return this.prefixName(prefix, name) + colon + value
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove prefixed queries
|
||||
*/
|
||||
clean(rule) {
|
||||
if (!this.bad) {
|
||||
this.bad = []
|
||||
for (let prefix of this.prefixes) {
|
||||
this.bad.push(this.prefixName(prefix, 'min'))
|
||||
this.bad.push(this.prefixName(prefix, 'max'))
|
||||
}
|
||||
}
|
||||
|
||||
rule.params = utils.editList(rule.params, queries => {
|
||||
return queries.filter(query => this.bad.every(i => !query.includes(i)))
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Add prefixed queries
|
||||
*/
|
||||
process(rule) {
|
||||
let parent = this.parentPrefix(rule)
|
||||
let prefixes = parent ? [parent] : this.prefixes
|
||||
|
||||
rule.params = utils.editList(rule.params, (origin, prefixed) => {
|
||||
for (let query of origin) {
|
||||
if (
|
||||
!query.includes('min-resolution') &&
|
||||
!query.includes('max-resolution')
|
||||
) {
|
||||
prefixed.push(query)
|
||||
continue
|
||||
}
|
||||
|
||||
for (let prefix of prefixes) {
|
||||
let processed = query.replace(REGEXP, str => {
|
||||
let parts = str.match(SPLIT)
|
||||
return this.prefixQuery(
|
||||
prefix,
|
||||
parts[1],
|
||||
parts[2],
|
||||
parts[3],
|
||||
parts[4]
|
||||
)
|
||||
})
|
||||
prefixed.push(processed)
|
||||
}
|
||||
prefixed.push(query)
|
||||
}
|
||||
|
||||
return utils.uniq(prefixed)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Resolution
|
||||
@@ -0,0 +1,51 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.forkJoin = void 0;
|
||||
var Observable_1 = require("../Observable");
|
||||
var argsArgArrayOrObject_1 = require("../util/argsArgArrayOrObject");
|
||||
var innerFrom_1 = require("./innerFrom");
|
||||
var args_1 = require("../util/args");
|
||||
var OperatorSubscriber_1 = require("../operators/OperatorSubscriber");
|
||||
var mapOneOrManyArgs_1 = require("../util/mapOneOrManyArgs");
|
||||
var createObject_1 = require("../util/createObject");
|
||||
function forkJoin() {
|
||||
var args = [];
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
args[_i] = arguments[_i];
|
||||
}
|
||||
var resultSelector = args_1.popResultSelector(args);
|
||||
var _a = argsArgArrayOrObject_1.argsArgArrayOrObject(args), sources = _a.args, keys = _a.keys;
|
||||
var result = new Observable_1.Observable(function (subscriber) {
|
||||
var length = sources.length;
|
||||
if (!length) {
|
||||
subscriber.complete();
|
||||
return;
|
||||
}
|
||||
var values = new Array(length);
|
||||
var remainingCompletions = length;
|
||||
var remainingEmissions = length;
|
||||
var _loop_1 = function (sourceIndex) {
|
||||
var hasValue = false;
|
||||
innerFrom_1.innerFrom(sources[sourceIndex]).subscribe(OperatorSubscriber_1.createOperatorSubscriber(subscriber, function (value) {
|
||||
if (!hasValue) {
|
||||
hasValue = true;
|
||||
remainingEmissions--;
|
||||
}
|
||||
values[sourceIndex] = value;
|
||||
}, function () { return remainingCompletions--; }, undefined, function () {
|
||||
if (!remainingCompletions || !hasValue) {
|
||||
if (!remainingEmissions) {
|
||||
subscriber.next(keys ? createObject_1.createObject(keys, values) : values);
|
||||
}
|
||||
subscriber.complete();
|
||||
}
|
||||
}));
|
||||
};
|
||||
for (var sourceIndex = 0; sourceIndex < length; sourceIndex++) {
|
||||
_loop_1(sourceIndex);
|
||||
}
|
||||
});
|
||||
return resultSelector ? result.pipe(mapOneOrManyArgs_1.mapOneOrManyArgs(resultSelector)) : result;
|
||||
}
|
||||
exports.forkJoin = forkJoin;
|
||||
//# sourceMappingURL=forkJoin.js.map
|
||||
@@ -0,0 +1,34 @@
|
||||
"use strict";;
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
var tslib_1 = require("tslib");
|
||||
var es6_1 = tslib_1.__importDefault(require("./es6"));
|
||||
var types_1 = tslib_1.__importDefault(require("../lib/types"));
|
||||
var shared_1 = tslib_1.__importDefault(require("../lib/shared"));
|
||||
function default_1(fork) {
|
||||
fork.use(es6_1.default);
|
||||
var types = fork.use(types_1.default);
|
||||
var def = types.Type.def;
|
||||
var or = types.Type.or;
|
||||
var defaults = fork.use(shared_1.default).defaults;
|
||||
def("Function")
|
||||
.field("async", Boolean, defaults["false"]);
|
||||
def("SpreadProperty")
|
||||
.bases("Node")
|
||||
.build("argument")
|
||||
.field("argument", def("Expression"));
|
||||
def("ObjectExpression")
|
||||
.field("properties", [or(def("Property"), def("SpreadProperty"), def("SpreadElement"))]);
|
||||
def("SpreadPropertyPattern")
|
||||
.bases("Pattern")
|
||||
.build("argument")
|
||||
.field("argument", def("Pattern"));
|
||||
def("ObjectPattern")
|
||||
.field("properties", [or(def("Property"), def("PropertyPattern"), def("SpreadPropertyPattern"))]);
|
||||
def("AwaitExpression")
|
||||
.bases("Expression")
|
||||
.build("argument", "all")
|
||||
.field("argument", or(def("Expression"), null))
|
||||
.field("all", Boolean, defaults["false"]);
|
||||
}
|
||||
exports.default = default_1;
|
||||
module.exports = exports["default"];
|
||||
@@ -0,0 +1,61 @@
|
||||
# toidentifier
|
||||
|
||||
[![NPM Version][npm-image]][npm-url]
|
||||
[![NPM Downloads][downloads-image]][downloads-url]
|
||||
[![Build Status][github-actions-ci-image]][github-actions-ci-url]
|
||||
[![Test Coverage][codecov-image]][codecov-url]
|
||||
|
||||
> Convert a string of words to a JavaScript identifier
|
||||
|
||||
## Install
|
||||
|
||||
This is a [Node.js](https://nodejs.org/en/) module available through the
|
||||
[npm registry](https://www.npmjs.com/). Installation is done using the
|
||||
[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
|
||||
|
||||
```bash
|
||||
$ npm install toidentifier
|
||||
```
|
||||
|
||||
## Example
|
||||
|
||||
```js
|
||||
var toIdentifier = require('toidentifier')
|
||||
|
||||
console.log(toIdentifier('Bad Request'))
|
||||
// => "BadRequest"
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
This CommonJS module exports a single default function: `toIdentifier`.
|
||||
|
||||
### toIdentifier(string)
|
||||
|
||||
Given a string as the argument, it will be transformed according to
|
||||
the following rules and the new string will be returned:
|
||||
|
||||
1. Split into words separated by space characters (`0x20`).
|
||||
2. Upper case the first character of each word.
|
||||
3. Join the words together with no separator.
|
||||
4. Remove all non-word (`[0-9a-z_]`) characters.
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE)
|
||||
|
||||
[codecov-image]: https://img.shields.io/codecov/c/github/component/toidentifier.svg
|
||||
[codecov-url]: https://codecov.io/gh/component/toidentifier
|
||||
[downloads-image]: https://img.shields.io/npm/dm/toidentifier.svg
|
||||
[downloads-url]: https://npmjs.org/package/toidentifier
|
||||
[github-actions-ci-image]: https://img.shields.io/github/workflow/status/component/toidentifier/ci/master?label=ci
|
||||
[github-actions-ci-url]: https://github.com/component/toidentifier?query=workflow%3Aci
|
||||
[npm-image]: https://img.shields.io/npm/v/toidentifier.svg
|
||||
[npm-url]: https://npmjs.org/package/toidentifier
|
||||
|
||||
|
||||
##
|
||||
|
||||
[npm]: https://www.npmjs.com/
|
||||
|
||||
[yarn]: https://yarnpkg.com/
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"webSocket.js","sourceRoot":"","sources":["../../../../../src/internal/observable/dom/webSocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA0B,MAAM,oBAAoB,CAAC;AA+J9E,MAAM,UAAU,SAAS,CAAI,iBAAqD;IAChF,OAAO,IAAI,gBAAgB,CAAI,iBAAiB,CAAC,CAAC;AACpD,CAAC"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"windowWhen.js","sourceRoot":"","sources":["../../../../src/internal/operators/windowWhen.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AA8CpD,MAAM,UAAU,UAAU,CAAI,eAA2C;IACvE,OAAO,OAAO,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;QACpC,IAAI,MAAyB,CAAC;QAC9B,IAAI,iBAA8C,CAAC;QAMnD,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAE,EAAE;YAC/B,MAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC,CAAC;QAQF,MAAM,UAAU,GAAG,GAAG,EAAE;YAGtB,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,WAAW,EAAE,CAAC;YAGjC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,EAAE,CAAC;YAGnB,MAAM,GAAG,IAAI,OAAO,EAAK,CAAC;YAC1B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YAGvC,IAAI,eAAgC,CAAC;YACrC,IAAI;gBACF,eAAe,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC,CAAC;aAChD;YAAC,OAAO,GAAG,EAAE;gBACZ,WAAW,CAAC,GAAG,CAAC,CAAC;gBACjB,OAAO;aACR;YAMD,eAAe,CAAC,SAAS,CAAC,CAAC,iBAAiB,GAAG,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAC7H,CAAC,CAAC;QAGF,UAAU,EAAE,CAAC;QAGb,MAAM,CAAC,SAAS,CACd,wBAAwB,CACtB,UAAU,EACV,CAAC,KAAK,EAAE,EAAE,CAAC,MAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAC9B,GAAG,EAAE;YAEH,MAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC,EACD,WAAW,EACX,GAAG,EAAE;YAGH,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,WAAW,EAAE,CAAC;YACjC,MAAM,GAAG,IAAK,CAAC;QACjB,CAAC,CACF,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
||||
@@ -0,0 +1,41 @@
|
||||
// Helper type. Not useful on its own.
|
||||
type Without<FirstType, SecondType> = {[KeyType in Exclude<keyof FirstType, keyof SecondType>]?: never};
|
||||
|
||||
/**
|
||||
Create a type that has mutually exclusive keys.
|
||||
|
||||
This type was inspired by [this comment](https://github.com/Microsoft/TypeScript/issues/14094#issuecomment-373782604).
|
||||
|
||||
This type works with a helper type, called `Without`. `Without<FirstType, SecondType>` produces a type that has only keys from `FirstType` which are not present on `SecondType` and sets the value type for these keys to `never`. This helper type is then used in `MergeExclusive` to remove keys from either `FirstType` or `SecondType`.
|
||||
|
||||
@example
|
||||
```
|
||||
import {MergeExclusive} from 'type-fest';
|
||||
|
||||
interface ExclusiveVariation1 {
|
||||
exclusive1: boolean;
|
||||
}
|
||||
|
||||
interface ExclusiveVariation2 {
|
||||
exclusive2: string;
|
||||
}
|
||||
|
||||
type ExclusiveOptions = MergeExclusive<ExclusiveVariation1, ExclusiveVariation2>;
|
||||
|
||||
let exclusiveOptions: ExclusiveOptions;
|
||||
|
||||
exclusiveOptions = {exclusive1: true};
|
||||
//=> Works
|
||||
exclusiveOptions = {exclusive2: 'hi'};
|
||||
//=> Works
|
||||
exclusiveOptions = {exclusive1: true, exclusive2: 'hi'};
|
||||
//=> Error
|
||||
```
|
||||
|
||||
@category Utilities
|
||||
*/
|
||||
export type MergeExclusive<FirstType, SecondType> =
|
||||
(FirstType | SecondType) extends object ?
|
||||
(Without<FirstType, SecondType> & SecondType) | (Without<SecondType, FirstType> & FirstType) :
|
||||
FirstType | SecondType;
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
'use strict';
|
||||
const {constants: BufferConstants} = require('buffer');
|
||||
const stream = require('stream');
|
||||
const {promisify} = require('util');
|
||||
const bufferStream = require('./buffer-stream');
|
||||
|
||||
const streamPipelinePromisified = promisify(stream.pipeline);
|
||||
|
||||
class MaxBufferError extends Error {
|
||||
constructor() {
|
||||
super('maxBuffer exceeded');
|
||||
this.name = 'MaxBufferError';
|
||||
}
|
||||
}
|
||||
|
||||
async function getStream(inputStream, options) {
|
||||
if (!inputStream) {
|
||||
throw new Error('Expected a stream');
|
||||
}
|
||||
|
||||
options = {
|
||||
maxBuffer: Infinity,
|
||||
...options
|
||||
};
|
||||
|
||||
const {maxBuffer} = options;
|
||||
const stream = bufferStream(options);
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
const rejectPromise = error => {
|
||||
// Don't retrieve an oversized buffer.
|
||||
if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {
|
||||
error.bufferedData = stream.getBufferedValue();
|
||||
}
|
||||
|
||||
reject(error);
|
||||
};
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
await streamPipelinePromisified(inputStream, stream);
|
||||
resolve();
|
||||
} catch (error) {
|
||||
rejectPromise(error);
|
||||
}
|
||||
})();
|
||||
|
||||
stream.on('data', () => {
|
||||
if (stream.getBufferedLength() > maxBuffer) {
|
||||
rejectPromise(new MaxBufferError());
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return stream.getBufferedValue();
|
||||
}
|
||||
|
||||
module.exports = getStream;
|
||||
module.exports.buffer = (stream, options) => getStream(stream, {...options, encoding: 'buffer'});
|
||||
module.exports.array = (stream, options) => getStream(stream, {...options, array: true});
|
||||
module.exports.MaxBufferError = MaxBufferError;
|
||||
@@ -0,0 +1,10 @@
|
||||
"use strict";
|
||||
|
||||
if (!require("./is-implemented")()) {
|
||||
Object.defineProperty(Math, "fround", {
|
||||
value: require("./shim"),
|
||||
configurable: true,
|
||||
enumerable: false,
|
||||
writable: true
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013-2014 Jonathan Ong <me@jongleberry.com>
|
||||
Copyright (c) 2014-2022 Douglas Christopher Wilson <doug@somethingdoug.com>
|
||||
|
||||
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.
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"throttleTime.js","sourceRoot":"","sources":["../../../../src/internal/operators/throttleTime.ts"],"names":[],"mappings":";;;AAAA,4CAAoD;AACpD,uCAA6D;AAE7D,6CAA4C;AAmD5C,SAAgB,YAAY,CAC1B,QAAgB,EAChB,SAAyC,EACzC,MAA8B;IAD9B,0BAAA,EAAA,YAA2B,sBAAc;IACzC,uBAAA,EAAA,SAAS,gCAAqB;IAE9B,IAAM,SAAS,GAAG,aAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC7C,OAAO,mBAAQ,CAAC,cAAM,OAAA,SAAS,EAAT,CAAS,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAPD,oCAOC"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"regex.generated.d.ts","sourceRoot":"","sources":["../../../../../../packages/icu-skeleton-parser/regex.generated.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,iBAAiB,QAA0C,CAAA"}
|
||||
@@ -0,0 +1,2 @@
|
||||
import { EndpointInterface, RequestParameters, EndpointDefaults } from "@octokit/types";
|
||||
export declare function withDefaults(oldDefaults: EndpointDefaults | null, newDefaults: RequestParameters): EndpointInterface;
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"Converter.js","sourceRoot":"","sources":["../src/Converter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iCAA+D;AAC/D,2CAA0D;AAC1D,+CAAgE;AAChE,sDAAyB;AAOzB,iDAAiD;AACjD,mDAAkD;AAClD,mCAAkC;AAMlC;IAA+B,6BAAS;IAuFtC,mBAAY,KAA8B,EAAS,OAA8B;QAA9B,wBAAA,EAAA,YAA8B;QAAjF,YACE,kBAAM,OAAO,CAAC,SAuBf;QAxBkD,aAAO,GAAP,OAAO,CAAuB;QAE/E,KAAI,CAAC,MAAM,GAAG,wBAAW,CAAC,KAAK,CAAC,CAAC;QACjC,KAAI,CAAC,OAAO,GAAG,+BAAgB,CAAC,KAAI,CAAC,CAAC;QACtC,KAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,KAAI,CAAC,CAAC;QAC/B,0BAA0B;QAC1B,8CAA8C;QAC9C,WAAW;QACX,KAAI,CAAC,SAAS,GAAG,IAAI,+BAAc,CAAC,KAAI,CAAC,CAAC;QAC1C,IAAI;QACJ,KAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAC,GAAQ;YAC1B,sBAAsB;YACtB,yCAAyC;YACzC,YAAY,CAAC;gBACX,KAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC9B,KAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;QAEL,CAAC,CAAC,CAAC;QACH,KAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,KAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAA;QAEF,OAAO,KAAI,CAAC;IACd,CAAC;IA9GD,8BAAU,GAAV,UAAW,SAA6B;QACtC,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,+BAAW,GAAX,UAAY,UAA+B;QACzC,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,UAAU,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,6BAAS,GAAT,UACE,MAAoE,EACpE,OAAiC,EACjC,WAAwB;QACxB,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG;YAC5B,MAAM,QAAA;YACN,OAAO,SAAA;YACP,WAAW,aAAA;SACZ,CAAA;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,4BAAQ,GAAR,UAAS,QAAgB,EAAE,OAAqD;QAAhF,iBAiBC;QAhBC,IAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,iBAAiB;QACjB,sCAAsC;QACtC,4BAA4B;QAC5B,oBAAoB;QACpB,MAAM;QACN,MAAM;QACN,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAC,KAAK;YACxB,IAAI,KAAK,EAAE;gBACT,IAAM,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAClD,EAAE,CAAC,IAAI,CAAC,KAAI,CAAC,CAAC;aACf;iBAAM;gBACL,KAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC,CAAC;aAChH;QACH,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,8BAAU,GAAV,UAAW,UAAoB;QAC7B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,8BAAU,GAAV,UAAW,SAAiB;QAC1B,IAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QACjC,IAAM,IAAI,GAAG,IAAI,iBAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,GAAG,UAAU,IAAI;YACzB,IAAI,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE;gBAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACjB;iBAAM;gBACL,IAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACf,GAAG,IAAI,IAAI,CAAC;aACb;QACH,CAAC,CAAA;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,wBAAI,GAAJ,UAAyC,WAAgE,EAAE,UAA8D;QAAzK,iBAmBC;QAlBC,OAAO,IAAI,kBAAC,CAAC,UAAC,OAAO,EAAE,MAAM;YAC3B,KAAI,CAAC,YAAY,CAAC,IAAI,GAAG;gBACvB,WAAW,EAAE,UAAC,KAAY;oBACxB,IAAI,WAAW,EAAE;wBACf,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;qBAC7B;yBAAM;wBACL,OAAO,CAAC,KAAY,CAAC,CAAC;qBACvB;gBACH,CAAC;gBACD,UAAU,EAAE,UAAC,GAAU;oBACrB,IAAI,UAAU,EAAE;wBACd,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;qBAC1B;yBAAM;wBACL,MAAM,CAAC,GAAG,CAAC,CAAC;qBACb;gBACH,CAAC;aACF,CAAA;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,sBAAW,iCAAU;aAArB;YACE,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;;;OAAA;IACD,sBAAW,mCAAY;aAAvB;YACE,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;;;OAAA;IA8BD,8BAAU,GAAV,UAAW,KAAU,EAAE,QAAgB,EAAE,EAAY;QAArD,iBAmBC;QAlBC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;aAC1B,IAAI,CAAC,UAAC,MAAM;YACX,uBAAuB;YACvB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,KAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;gBAE5B,OAAO,KAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;aAC1C;QACH,CAAC,CAAC;aACD,IAAI,CAAC;YACJ,KAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrB,EAAE,EAAE,CAAC;QACP,CAAC,EAAE,UAAC,KAAK;YACP,KAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC7B,KAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YAC3B,KAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC1B,EAAE,EAAE,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IACD,0BAAM,GAAN,UAAO,EAAY;QAAnB,iBAcC;QAbC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;aACnB,IAAI,CAAC,UAAC,IAAI;YACT,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBAEnB,OAAO,KAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aACxC;QACH,CAAC,CAAC;aACD,IAAI,CAAC;YACJ,KAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC,EAAE,UAAC,GAAG;YACL,KAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACxB,EAAE,EAAE,CAAC;QACP,CAAC,CAAC,CAAA;IACN,CAAC;IACO,8BAAU,GAAlB,UAAmB,EAAE;QACnB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,EAAE,EAAE,CAAC;IACP,CAAC;IACD,sBAAI,uCAAgB;aAApB;YACE,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACvC,CAAC;;;OAAA;IACH,gBAAC;AAAD,CAAC,AA3JD,CAA+B,kBAAS,GA2JvC;AA3JY,8BAAS"}
|
||||
@@ -0,0 +1,77 @@
|
||||
'use strict';
|
||||
|
||||
var forEach = require('for-each');
|
||||
var callBind = require('call-bind');
|
||||
|
||||
var typedArrays = [
|
||||
'Float32Array',
|
||||
'Float64Array',
|
||||
'Int8Array',
|
||||
'Int16Array',
|
||||
'Int32Array',
|
||||
'Uint8Array',
|
||||
'Uint8ClampedArray',
|
||||
'Uint16Array',
|
||||
'Uint32Array',
|
||||
'BigInt64Array',
|
||||
'BigUint64Array'
|
||||
];
|
||||
|
||||
var getters = {};
|
||||
var hasProto = [].__proto__ === Array.prototype; // eslint-disable-line no-proto
|
||||
var gOPD = Object.getOwnPropertyDescriptor;
|
||||
var oDP = Object.defineProperty;
|
||||
if (gOPD) {
|
||||
var getLength = function (x) {
|
||||
return x.length;
|
||||
};
|
||||
forEach(typedArrays, function (typedArray) {
|
||||
// In Safari 7, Typed Array constructors are typeof object
|
||||
if (typeof global[typedArray] === 'function' || typeof global[typedArray] === 'object') {
|
||||
var Proto = global[typedArray].prototype;
|
||||
var descriptor = gOPD(Proto, 'length');
|
||||
if (!descriptor && hasProto) {
|
||||
var superProto = Proto.__proto__; // eslint-disable-line no-proto
|
||||
descriptor = gOPD(superProto, 'length');
|
||||
}
|
||||
// Opera 12.16 has a magic length data property on instances AND on Proto
|
||||
if (descriptor && descriptor.get) {
|
||||
getters[typedArray] = callBind(descriptor.get);
|
||||
} else if (oDP) {
|
||||
// this is likely an engine where instances have a magic length data property
|
||||
var arr = new global[typedArray](2);
|
||||
descriptor = gOPD(arr, 'length');
|
||||
if (descriptor && descriptor.configurable) {
|
||||
oDP(arr, 'length', { value: 3 });
|
||||
}
|
||||
if (arr.length === 2) {
|
||||
getters[typedArray] = getLength;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var tryTypedArrays = function tryAllTypedArrays(value) {
|
||||
var foundLength;
|
||||
forEach(getters, function (getter) {
|
||||
if (typeof foundLength !== 'number') {
|
||||
try {
|
||||
var length = getter(value);
|
||||
if (typeof length === 'number') {
|
||||
foundLength = length;
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
});
|
||||
return foundLength;
|
||||
};
|
||||
|
||||
var isTypedArray = require('is-typed-array');
|
||||
|
||||
module.exports = function typedArrayLength(value) {
|
||||
if (!isTypedArray(value)) {
|
||||
return false;
|
||||
}
|
||||
return tryTypedArrays(value);
|
||||
};
|
||||
@@ -0,0 +1,120 @@
|
||||
import { BLAKE2, SIGMA } from './_blake2.js';
|
||||
import u64 from './_u64.js';
|
||||
import { rotr, toBytes, wrapConstructorWithOpts, u32 } from './utils.js';
|
||||
// Initial state:
|
||||
// first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19)
|
||||
// same as SHA-256
|
||||
// prettier-ignore
|
||||
export const IV = new Uint32Array([
|
||||
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
|
||||
]);
|
||||
// Mixing function G splitted in two halfs
|
||||
function G1(a, b, c, d, x) {
|
||||
a = (a + b + x) | 0;
|
||||
d = rotr(d ^ a, 16);
|
||||
c = (c + d) | 0;
|
||||
b = rotr(b ^ c, 12);
|
||||
return { a, b, c, d };
|
||||
}
|
||||
function G2(a, b, c, d, x) {
|
||||
a = (a + b + x) | 0;
|
||||
d = rotr(d ^ a, 8);
|
||||
c = (c + d) | 0;
|
||||
b = rotr(b ^ c, 7);
|
||||
return { a, b, c, d };
|
||||
}
|
||||
// prettier-ignore
|
||||
export function compress(s, offset, msg, rounds, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) {
|
||||
let j = 0;
|
||||
for (let i = 0; i < rounds; i++) {
|
||||
({ a: v0, b: v4, c: v8, d: v12 } = G1(v0, v4, v8, v12, msg[offset + s[j++]]));
|
||||
({ a: v0, b: v4, c: v8, d: v12 } = G2(v0, v4, v8, v12, msg[offset + s[j++]]));
|
||||
({ a: v1, b: v5, c: v9, d: v13 } = G1(v1, v5, v9, v13, msg[offset + s[j++]]));
|
||||
({ a: v1, b: v5, c: v9, d: v13 } = G2(v1, v5, v9, v13, msg[offset + s[j++]]));
|
||||
({ a: v2, b: v6, c: v10, d: v14 } = G1(v2, v6, v10, v14, msg[offset + s[j++]]));
|
||||
({ a: v2, b: v6, c: v10, d: v14 } = G2(v2, v6, v10, v14, msg[offset + s[j++]]));
|
||||
({ a: v3, b: v7, c: v11, d: v15 } = G1(v3, v7, v11, v15, msg[offset + s[j++]]));
|
||||
({ a: v3, b: v7, c: v11, d: v15 } = G2(v3, v7, v11, v15, msg[offset + s[j++]]));
|
||||
({ a: v0, b: v5, c: v10, d: v15 } = G1(v0, v5, v10, v15, msg[offset + s[j++]]));
|
||||
({ a: v0, b: v5, c: v10, d: v15 } = G2(v0, v5, v10, v15, msg[offset + s[j++]]));
|
||||
({ a: v1, b: v6, c: v11, d: v12 } = G1(v1, v6, v11, v12, msg[offset + s[j++]]));
|
||||
({ a: v1, b: v6, c: v11, d: v12 } = G2(v1, v6, v11, v12, msg[offset + s[j++]]));
|
||||
({ a: v2, b: v7, c: v8, d: v13 } = G1(v2, v7, v8, v13, msg[offset + s[j++]]));
|
||||
({ a: v2, b: v7, c: v8, d: v13 } = G2(v2, v7, v8, v13, msg[offset + s[j++]]));
|
||||
({ a: v3, b: v4, c: v9, d: v14 } = G1(v3, v4, v9, v14, msg[offset + s[j++]]));
|
||||
({ a: v3, b: v4, c: v9, d: v14 } = G2(v3, v4, v9, v14, msg[offset + s[j++]]));
|
||||
}
|
||||
return { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 };
|
||||
}
|
||||
class BLAKE2s extends BLAKE2 {
|
||||
constructor(opts = {}) {
|
||||
super(64, opts.dkLen === undefined ? 32 : opts.dkLen, opts, 32, 8, 8);
|
||||
// Internal state, same as SHA-256
|
||||
this.v0 = IV[0] | 0;
|
||||
this.v1 = IV[1] | 0;
|
||||
this.v2 = IV[2] | 0;
|
||||
this.v3 = IV[3] | 0;
|
||||
this.v4 = IV[4] | 0;
|
||||
this.v5 = IV[5] | 0;
|
||||
this.v6 = IV[6] | 0;
|
||||
this.v7 = IV[7] | 0;
|
||||
const keyLength = opts.key ? opts.key.length : 0;
|
||||
this.v0 ^= this.outputLen | (keyLength << 8) | (0x01 << 16) | (0x01 << 24);
|
||||
if (opts.salt) {
|
||||
const salt = u32(toBytes(opts.salt));
|
||||
this.v4 ^= salt[0];
|
||||
this.v5 ^= salt[1];
|
||||
}
|
||||
if (opts.personalization) {
|
||||
const pers = u32(toBytes(opts.personalization));
|
||||
this.v6 ^= pers[0];
|
||||
this.v7 ^= pers[1];
|
||||
}
|
||||
if (opts.key) {
|
||||
// Pad to blockLen and update
|
||||
const tmp = new Uint8Array(this.blockLen);
|
||||
tmp.set(toBytes(opts.key));
|
||||
this.update(tmp);
|
||||
}
|
||||
}
|
||||
get() {
|
||||
const { v0, v1, v2, v3, v4, v5, v6, v7 } = this;
|
||||
return [v0, v1, v2, v3, v4, v5, v6, v7];
|
||||
}
|
||||
// prettier-ignore
|
||||
set(v0, v1, v2, v3, v4, v5, v6, v7) {
|
||||
this.v0 = v0 | 0;
|
||||
this.v1 = v1 | 0;
|
||||
this.v2 = v2 | 0;
|
||||
this.v3 = v3 | 0;
|
||||
this.v4 = v4 | 0;
|
||||
this.v5 = v5 | 0;
|
||||
this.v6 = v6 | 0;
|
||||
this.v7 = v7 | 0;
|
||||
}
|
||||
compress(msg, offset, isLast) {
|
||||
const { h, l } = u64.fromBig(BigInt(this.length));
|
||||
// prettier-ignore
|
||||
const { v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15 } = compress(SIGMA, offset, msg, 10, this.v0, this.v1, this.v2, this.v3, this.v4, this.v5, this.v6, this.v7, IV[0], IV[1], IV[2], IV[3], l ^ IV[4], h ^ IV[5], isLast ? ~IV[6] : IV[6], IV[7]);
|
||||
this.v0 ^= v0 ^ v8;
|
||||
this.v1 ^= v1 ^ v9;
|
||||
this.v2 ^= v2 ^ v10;
|
||||
this.v3 ^= v3 ^ v11;
|
||||
this.v4 ^= v4 ^ v12;
|
||||
this.v5 ^= v5 ^ v13;
|
||||
this.v6 ^= v6 ^ v14;
|
||||
this.v7 ^= v7 ^ v15;
|
||||
}
|
||||
destroy() {
|
||||
this.destroyed = true;
|
||||
this.buffer32.fill(0);
|
||||
this.set(0, 0, 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* BLAKE2s - optimized for 32-bit platforms. JS doesn't have uint64, so it's faster than BLAKE2b.
|
||||
* @param msg - message that would be hashed
|
||||
* @param opts - dkLen, key, salt, personalization
|
||||
*/
|
||||
export const blake2s = wrapConstructorWithOpts((opts) => new BLAKE2s(opts));
|
||||
//# sourceMappingURL=blake2s.js.map
|
||||
@@ -0,0 +1,10 @@
|
||||
"use strict";
|
||||
|
||||
if (!require("./is-implemented")()) {
|
||||
Object.defineProperty(Array.prototype, "find", {
|
||||
value: require("./shim"),
|
||||
configurable: true,
|
||||
enumerable: false,
|
||||
writable: true
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
Copyright (C) 2012-2015 Mariusz Nowak (www.medikoo.com)
|
||||
|
||||
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.
|
||||
@@ -0,0 +1,5 @@
|
||||
if (process.env.OXIDE) {
|
||||
module.exports = require('./oxide/postcss-plugin')
|
||||
} else {
|
||||
module.exports = require('./plugin')
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"window.js","sourceRoot":"","sources":["../../../../src/internal/operators/window.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AA8CpD,MAAM,UAAU,MAAM,CAAI,gBAAsC;IAC9D,OAAO,OAAO,CAAC,UAAC,MAAM,EAAE,UAAU;QAChC,IAAI,aAAa,GAAe,IAAI,OAAO,EAAK,CAAC;QAEjD,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;QAE9C,IAAM,YAAY,GAAG,UAAC,GAAQ;YAC5B,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzB,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC,CAAC;QAGF,MAAM,CAAC,SAAS,CACd,wBAAwB,CACtB,UAAU,EACV,UAAC,KAAK,IAAK,OAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,CAAC,KAAK,CAAC,EAA1B,CAA0B,EACrC;YACE,aAAa,CAAC,QAAQ,EAAE,CAAC;YACzB,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC,EACD,YAAY,CACb,CACF,CAAC;QAGF,SAAS,CAAC,gBAAgB,CAAC,CAAC,SAAS,CACnC,wBAAwB,CACtB,UAAU,EACV;YACE,aAAa,CAAC,QAAQ,EAAE,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;QACnD,CAAC,EACD,IAAI,EACJ,YAAY,CACb,CACF,CAAC;QAEF,OAAO;YAIL,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,WAAW,EAAE,CAAC;YAC7B,aAAa,GAAG,IAAK,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
||||
@@ -0,0 +1 @@
|
||||
module.exports={A:{A:{"2":"CC","8":"J D E","129":"F A B"},B:{"1":"N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H","129":"C K L G M"},C:{"1":"0 1 2 3 4 5 6 7 8 9 I v J D E F A B C K L G M N O w g x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB h lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H xB yB","8":"DC tB EC FC"},D:{"1":"0 1 2 3 4 5 6 7 8 9 D E F A B C K L G M N O w g x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB h lB mB nB oB pB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H xB yB GC","8":"I v J"},E:{"1":"F A B C K L G LC 0B qB rB 1B MC NC 2B 3B 4B 5B sB 6B 7B 8B 9B OC","8":"I v HC zB","129":"J D E IC JC KC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 C G M N O w g x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB h lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d e TC rB","2":"B SC qB AC","8":"F PC QC RC"},G:{"1":"ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC 2B 3B 4B 5B sB 6B 7B 8B 9B","8":"zB UC BC","129":"E VC WC XC YC"},H:{"1":"oC"},I:{"1":"f tC uC","2":"pC qC rC","129":"tB I sC BC"},J:{"1":"A","129":"D"},K:{"1":"C h rB","8":"A B qB AC"},L:{"1":"H"},M:{"1":"H"},N:{"129":"A B"},O:{"1":"vC"},P:{"1":"I g wC xC yC zC 0C 0B 1C 2C 3C 4C 5C sB 6C 7C 8C"},Q:{"1":"1B"},R:{"1":"9C"},S:{"1":"AD BD"}},B:1,C:"Inline SVG in HTML5"};
|
||||
@@ -0,0 +1 @@
|
||||
{"name":"decompress-response","version":"6.0.0","files":{"license":{"checkedAt":1678883669302,"integrity":"sha512-0fM2/ycrxrltyaBKfQ748Ck23VlPUUBgNAR47ldf4B1V/HoXTfWBSk+vcshGKwEpmOynu4mOP5o+hyBfuRNa8g==","mode":420,"size":1117},"package.json":{"checkedAt":1678883671053,"integrity":"sha512-AgrCmtMwCLKuA+OTklEtlVRdHdwpEDfCzXfO+40mU4DN+QQS25T4mF6ubDlKSDSf0eQBqc7wr8WBK/L902cmRA==","mode":420,"size":985},"readme.md":{"checkedAt":1678883671053,"integrity":"sha512-x6P4uLBNpNGoDmgVoyqbHUMhOJ7oiEWlnEM8/DtSopGMO5vxD/j96WN4hfVT340MjYHLye2I/xT779HuD8rwHw==","mode":420,"size":1508},"index.d.ts":{"checkedAt":1678883671053,"integrity":"sha512-WnLvjH482p9G8Wg56o5Na1JJIDOvxfCfe2TVwDK40zks0QRh8Gd+faIRGhcTDqUB/TZyypYyS+WR9ijCUed+Og==","mode":420,"size":542},"index.js":{"checkedAt":1678883671053,"integrity":"sha512-2NzruRqpMM+qwkt+mxUO9qZqc7Op3NuAv2ct8dWsDeFSG25c6jUbKcNGlDkev8zpta5KqIoe7/mG5/7TPr6ZNA==","mode":420,"size":1320}}}
|
||||
@@ -0,0 +1 @@
|
||||
module.exports={A:{A:{"2":"J D E F A B CC"},B:{"2":"C K L G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H"},C:{"2":"0 1 2 3 4 5 6 7 8 9 DC tB I v J D E F A B C K L G M N O w g x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB h lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H xB yB EC FC"},D:{"2":"0 1 2 3 4 5 6 7 8 9 I v J D E F A B C K L G M N O w g x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB h lB mB nB oB pB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H xB yB GC"},E:{"1":"A B C K L G 0B qB rB 1B MC NC 2B 3B 4B 5B sB 6B 7B 8B 9B OC","2":"I v J D E F HC zB IC JC KC LC"},F:{"2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O w g x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB h lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d e PC QC RC SC qB AC TC rB"},G:{"1":"bC cC dC eC fC gC hC iC jC kC lC mC nC 2B 3B 4B 5B sB 6B 7B 8B 9B","2":"E zB UC BC VC WC XC YC ZC aC"},H:{"2":"oC"},I:{"2":"tB I f pC qC rC sC BC tC uC"},J:{"2":"D A"},K:{"2":"A B C h qB AC rB"},L:{"2":"H"},M:{"2":"H"},N:{"2":"A B"},O:{"2":"vC"},P:{"2":"I g wC xC yC zC 0C 0B 1C 2C 3C 4C 5C sB 6C 7C 8C"},Q:{"2":"1B"},R:{"2":"9C"},S:{"2":"AD BD"}},B:4,C:"CSS hanging-punctuation"};
|
||||
@@ -0,0 +1,79 @@
|
||||
import { concatMap } from './concatMap';
|
||||
import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';
|
||||
import { isFunction } from '../util/isFunction';
|
||||
|
||||
/** @deprecated Will be removed in v9. Use {@link concatMap} instead: `concatMap(() => result)` */
|
||||
export function concatMapTo<O extends ObservableInput<unknown>>(observable: O): OperatorFunction<unknown, ObservedValueOf<O>>;
|
||||
/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */
|
||||
export function concatMapTo<O extends ObservableInput<unknown>>(
|
||||
observable: O,
|
||||
resultSelector: undefined
|
||||
): OperatorFunction<unknown, ObservedValueOf<O>>;
|
||||
/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */
|
||||
export function concatMapTo<T, R, O extends ObservableInput<unknown>>(
|
||||
observable: O,
|
||||
resultSelector: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R
|
||||
): OperatorFunction<T, R>;
|
||||
|
||||
/**
|
||||
* Projects each source value to the same Observable which is merged multiple
|
||||
* times in a serialized fashion on the output Observable.
|
||||
*
|
||||
* <span class="informal">It's like {@link concatMap}, but maps each value
|
||||
* always to the same inner Observable.</span>
|
||||
*
|
||||
* 
|
||||
*
|
||||
* Maps each source value to the given Observable `innerObservable` regardless
|
||||
* of the source value, and then flattens those resulting Observables into one
|
||||
* single Observable, which is the output Observable. Each new `innerObservable`
|
||||
* instance emitted on the output Observable is concatenated with the previous
|
||||
* `innerObservable` instance.
|
||||
*
|
||||
* __Warning:__ if source values arrive endlessly and faster than their
|
||||
* corresponding inner Observables can complete, it will result in memory issues
|
||||
* as inner Observables amass in an unbounded buffer waiting for their turn to
|
||||
* be subscribed to.
|
||||
*
|
||||
* Note: `concatMapTo` is equivalent to `mergeMapTo` with concurrency parameter
|
||||
* set to `1`.
|
||||
*
|
||||
* ## Example
|
||||
*
|
||||
* For each click event, tick every second from 0 to 3, with no concurrency
|
||||
*
|
||||
* ```ts
|
||||
* import { fromEvent, concatMapTo, interval, take } from 'rxjs';
|
||||
*
|
||||
* const clicks = fromEvent(document, 'click');
|
||||
* const result = clicks.pipe(
|
||||
* concatMapTo(interval(1000).pipe(take(4)))
|
||||
* );
|
||||
* result.subscribe(x => console.log(x));
|
||||
*
|
||||
* // Results in the following:
|
||||
* // (results are not concurrent)
|
||||
* // For every click on the "document" it will emit values 0 to 3 spaced
|
||||
* // on a 1000ms interval
|
||||
* // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3
|
||||
* ```
|
||||
*
|
||||
* @see {@link concat}
|
||||
* @see {@link concatAll}
|
||||
* @see {@link concatMap}
|
||||
* @see {@link mergeMapTo}
|
||||
* @see {@link switchMapTo}
|
||||
*
|
||||
* @param {ObservableInput} innerObservable An Observable to replace each value from
|
||||
* the source Observable.
|
||||
* @return A function that returns an Observable of values merged together by
|
||||
* joining the passed Observable with itself, one after the other, for each
|
||||
* value emitted from the source.
|
||||
* @deprecated Will be removed in v9. Use {@link concatMap} instead: `concatMap(() => result)`
|
||||
*/
|
||||
export function concatMapTo<T, R, O extends ObservableInput<unknown>>(
|
||||
innerObservable: O,
|
||||
resultSelector?: (outerValue: T, innerValue: ObservedValueOf<O>, outerIndex: number, innerIndex: number) => R
|
||||
): OperatorFunction<T, ObservedValueOf<O> | R> {
|
||||
return isFunction(resultSelector) ? concatMap(() => innerObservable, resultSelector) : concatMap(() => innerObservable);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import { ArgumentOutOfRangeError } from '../util/ArgumentOutOfRangeError';
|
||||
import { filter } from './filter';
|
||||
import { throwIfEmpty } from './throwIfEmpty';
|
||||
import { defaultIfEmpty } from './defaultIfEmpty';
|
||||
import { take } from './take';
|
||||
export function elementAt(index, defaultValue) {
|
||||
if (index < 0) {
|
||||
throw new ArgumentOutOfRangeError();
|
||||
}
|
||||
const hasDefaultValue = arguments.length >= 2;
|
||||
return (source) => source.pipe(filter((v, i) => i === index), take(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(() => new ArgumentOutOfRangeError()));
|
||||
}
|
||||
//# sourceMappingURL=elementAt.js.map
|
||||
@@ -0,0 +1,88 @@
|
||||
/* eslint no-bitwise: "off" */
|
||||
// Credit: https://github.com/paulmillr/es6-shim/
|
||||
|
||||
"use strict";
|
||||
|
||||
var abs = Math.abs
|
||||
, floor = Math.floor
|
||||
, log = Math.log
|
||||
, min = Math.min
|
||||
, pow = Math.pow
|
||||
, LN2 = Math.LN2
|
||||
, roundToEven;
|
||||
|
||||
roundToEven = function (num) {
|
||||
var whole = floor(num), fraction = num - whole;
|
||||
if (fraction < 0.5) return whole;
|
||||
if (fraction > 0.5) return whole + 1;
|
||||
return whole % 2 ? whole + 1 : whole;
|
||||
};
|
||||
|
||||
// eslint-disable-next-line max-statements, max-lines-per-function
|
||||
module.exports = function (value, ebits, fbits) {
|
||||
var bias = (1 << (ebits - 1)) - 1, sign, e, fraction, i, bits, str, bytes;
|
||||
|
||||
// Compute sign, exponent, fraction
|
||||
if (isNaN(value)) {
|
||||
// NaN
|
||||
// http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping
|
||||
e = (1 << ebits) - 1;
|
||||
fraction = pow(2, fbits - 1);
|
||||
sign = 0;
|
||||
} else if (value === Infinity || value === -Infinity) {
|
||||
e = (1 << ebits) - 1;
|
||||
fraction = 0;
|
||||
sign = value < 0 ? 1 : 0;
|
||||
} else if (value === 0) {
|
||||
e = 0;
|
||||
fraction = 0;
|
||||
sign = 1 / value === -Infinity ? 1 : 0;
|
||||
} else {
|
||||
sign = value < 0;
|
||||
value = abs(value);
|
||||
|
||||
if (value >= pow(2, 1 - bias)) {
|
||||
e = min(floor(log(value) / LN2), 1023);
|
||||
fraction = roundToEven((value / pow(2, e)) * pow(2, fbits));
|
||||
if (fraction / pow(2, fbits) >= 2) {
|
||||
e += 1;
|
||||
fraction = 1;
|
||||
}
|
||||
if (e > bias) {
|
||||
// Overflow
|
||||
e = (1 << ebits) - 1;
|
||||
fraction = 0;
|
||||
} else {
|
||||
// Normal
|
||||
e += bias;
|
||||
fraction -= pow(2, fbits);
|
||||
}
|
||||
} else {
|
||||
// Subnormal
|
||||
e = 0;
|
||||
fraction = roundToEven(value / pow(2, 1 - bias - fbits));
|
||||
}
|
||||
}
|
||||
|
||||
// Pack sign, exponent, fraction
|
||||
bits = [];
|
||||
for (i = fbits; i; i -= 1) {
|
||||
bits.push(fraction % 2 ? 1 : 0);
|
||||
fraction = floor(fraction / 2);
|
||||
}
|
||||
for (i = ebits; i; i -= 1) {
|
||||
bits.push(e % 2 ? 1 : 0);
|
||||
e = floor(e / 2);
|
||||
}
|
||||
bits.push(sign ? 1 : 0);
|
||||
bits.reverse();
|
||||
str = bits.join("");
|
||||
|
||||
// Bits to bytes
|
||||
bytes = [];
|
||||
while (str.length) {
|
||||
bytes.push(parseInt(str.substring(0, 8), 2));
|
||||
str = str.substring(8);
|
||||
}
|
||||
return bytes;
|
||||
};
|
||||
@@ -0,0 +1,6 @@
|
||||
var async = require('./lib/async');
|
||||
async.core = require('./lib/core');
|
||||
async.isCore = require('./lib/is-core');
|
||||
async.sync = require('./lib/sync');
|
||||
|
||||
module.exports = async;
|
||||
@@ -0,0 +1,20 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = isPort;
|
||||
|
||||
var _isInt = _interopRequireDefault(require("./isInt"));
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
function isPort(str) {
|
||||
return (0, _isInt.default)(str, {
|
||||
min: 0,
|
||||
max: 65535
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = exports.default;
|
||||
module.exports.default = exports.default;
|
||||
@@ -0,0 +1,72 @@
|
||||
# defined <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
|
||||
|
||||
[![github actions][actions-image]][actions-url]
|
||||
[![coverage][codecov-image]][codecov-url]
|
||||
[![License][license-image]][license-url]
|
||||
[![Downloads][downloads-image]][downloads-url]
|
||||
|
||||
[![npm badge][npm-badge-png]][package-url]
|
||||
|
||||
return the first argument that is `!== undefined`
|
||||
|
||||
Most of the time when I chain together `||`s, I actually just want the first
|
||||
item that is not `undefined`, not the first non-falsy item.
|
||||
|
||||
This module is like the defined-or (`//`) operator in perl 5.10+.
|
||||
|
||||
# example
|
||||
|
||||
``` js
|
||||
var defined = require('defined');
|
||||
var opts = { y : false, w : 4 };
|
||||
var x = defined(opts.x, opts.y, opts.w, 100);
|
||||
console.log(x);
|
||||
```
|
||||
|
||||
```
|
||||
$ node example/defined.js
|
||||
false
|
||||
```
|
||||
|
||||
The return value is `false` because `false` is the first item that is
|
||||
`!== undefined`.
|
||||
|
||||
# methods
|
||||
|
||||
``` js
|
||||
var defined = require('defined')
|
||||
```
|
||||
|
||||
## var x = defined(a, b, c...)
|
||||
|
||||
Return the first item in the argument list `a, b, c...` that is `!== undefined`.
|
||||
|
||||
If all the items are `=== undefined`, return undefined.
|
||||
|
||||
# install
|
||||
|
||||
With [npm](https://npmjs.org) do:
|
||||
|
||||
```
|
||||
npm install defined
|
||||
```
|
||||
|
||||
# license
|
||||
|
||||
MIT
|
||||
|
||||
[package-url]: https://npmjs.org/package/defined
|
||||
[npm-version-svg]: https://versionbadg.es/inspect-js/defined.svg
|
||||
[deps-svg]: https://david-dm.org/inspect-js/defined.svg
|
||||
[deps-url]: https://david-dm.org/inspect-js/defined
|
||||
[dev-deps-svg]: https://david-dm.org/inspect-js/defined/dev-status.svg
|
||||
[dev-deps-url]: https://david-dm.org/inspect-js/defined#info=devDependencies
|
||||
[npm-badge-png]: https://nodei.co/npm/defined.png?downloads=true&stars=true
|
||||
[license-image]: https://img.shields.io/npm/l/defined.svg
|
||||
[license-url]: LICENSE
|
||||
[downloads-image]: https://img.shields.io/npm/dm/defined.svg
|
||||
[downloads-url]: https://npm-stat.com/charts.html?package=defined
|
||||
[codecov-image]: https://codecov.io/gh/inspect-js/defined/branch/main/graphs/badge.svg
|
||||
[codecov-url]: https://app.codecov.io/gh/inspect-js/defined/
|
||||
[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/defined
|
||||
[actions-url]: https://github.com/inspect-js/defined/actions
|
||||
@@ -0,0 +1,72 @@
|
||||
var SetCache = require('./_SetCache'),
|
||||
arrayIncludes = require('./_arrayIncludes'),
|
||||
arrayIncludesWith = require('./_arrayIncludesWith'),
|
||||
cacheHas = require('./_cacheHas'),
|
||||
createSet = require('./_createSet'),
|
||||
setToArray = require('./_setToArray');
|
||||
|
||||
/** Used as the size to enable large array optimizations. */
|
||||
var LARGE_ARRAY_SIZE = 200;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.uniqBy` without support for iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to inspect.
|
||||
* @param {Function} [iteratee] The iteratee invoked per element.
|
||||
* @param {Function} [comparator] The comparator invoked per element.
|
||||
* @returns {Array} Returns the new duplicate free array.
|
||||
*/
|
||||
function baseUniq(array, iteratee, comparator) {
|
||||
var index = -1,
|
||||
includes = arrayIncludes,
|
||||
length = array.length,
|
||||
isCommon = true,
|
||||
result = [],
|
||||
seen = result;
|
||||
|
||||
if (comparator) {
|
||||
isCommon = false;
|
||||
includes = arrayIncludesWith;
|
||||
}
|
||||
else if (length >= LARGE_ARRAY_SIZE) {
|
||||
var set = iteratee ? null : createSet(array);
|
||||
if (set) {
|
||||
return setToArray(set);
|
||||
}
|
||||
isCommon = false;
|
||||
includes = cacheHas;
|
||||
seen = new SetCache;
|
||||
}
|
||||
else {
|
||||
seen = iteratee ? [] : result;
|
||||
}
|
||||
outer:
|
||||
while (++index < length) {
|
||||
var value = array[index],
|
||||
computed = iteratee ? iteratee(value) : value;
|
||||
|
||||
value = (comparator || value !== 0) ? value : 0;
|
||||
if (isCommon && computed === computed) {
|
||||
var seenIndex = seen.length;
|
||||
while (seenIndex--) {
|
||||
if (seen[seenIndex] === computed) {
|
||||
continue outer;
|
||||
}
|
||||
}
|
||||
if (iteratee) {
|
||||
seen.push(computed);
|
||||
}
|
||||
result.push(value);
|
||||
}
|
||||
else if (!includes(seen, computed, comparator)) {
|
||||
if (seen !== result) {
|
||||
seen.push(computed);
|
||||
}
|
||||
result.push(value);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = baseUniq;
|
||||
@@ -0,0 +1,4 @@
|
||||
import type Settings from '../settings';
|
||||
import type { ErrnoException, Stats } from '../types';
|
||||
export declare type AsyncCallback = (error: ErrnoException, stats: Stats) => void;
|
||||
export declare function read(path: string, settings: Settings, callback: AsyncCallback): void;
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"pairwise.js","sourceRoot":"","sources":["../../../../src/internal/operators/pairwise.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AA6ChE,MAAM,UAAU,QAAQ;IACtB,OAAO,OAAO,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;QACpC,IAAI,IAAO,CAAC;QACZ,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,CAAC,SAAS,CACd,wBAAwB,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;YAC7C,MAAM,CAAC,GAAG,IAAI,CAAC;YACf,IAAI,GAAG,KAAK,CAAC;YACb,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACvC,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
||||
@@ -0,0 +1,129 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.ExplorerSync = void 0;
|
||||
|
||||
var _path = _interopRequireDefault(require("path"));
|
||||
|
||||
var _cacheWrapper = require("./cacheWrapper");
|
||||
|
||||
var _ExplorerBase = require("./ExplorerBase");
|
||||
|
||||
var _getDirectory = require("./getDirectory");
|
||||
|
||||
var _readFile = require("./readFile");
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
class ExplorerSync extends _ExplorerBase.ExplorerBase {
|
||||
constructor(options) {
|
||||
super(options);
|
||||
}
|
||||
|
||||
searchSync(searchFrom = process.cwd()) {
|
||||
if (this.config.metaConfigFilePath) {
|
||||
const config = this._loadFileSync(this.config.metaConfigFilePath, true);
|
||||
|
||||
if (config && !config.isEmpty) {
|
||||
return config;
|
||||
}
|
||||
}
|
||||
|
||||
return this.searchFromDirectorySync((0, _getDirectory.getDirectorySync)(searchFrom));
|
||||
}
|
||||
|
||||
searchFromDirectorySync(dir) {
|
||||
const absoluteDir = _path.default.resolve(process.cwd(), dir);
|
||||
|
||||
const run = () => {
|
||||
const result = this.searchDirectorySync(absoluteDir);
|
||||
const nextDir = this.nextDirectoryToSearch(absoluteDir, result);
|
||||
|
||||
if (nextDir) {
|
||||
return this.searchFromDirectorySync(nextDir);
|
||||
}
|
||||
|
||||
return this.config.transform(result);
|
||||
};
|
||||
|
||||
if (this.searchCache) {
|
||||
return (0, _cacheWrapper.cacheWrapperSync)(this.searchCache, absoluteDir, run);
|
||||
}
|
||||
|
||||
return run();
|
||||
}
|
||||
|
||||
searchDirectorySync(dir) {
|
||||
for (const place of this.config.searchPlaces) {
|
||||
const placeResult = this.loadSearchPlaceSync(dir, place);
|
||||
|
||||
if (this.shouldSearchStopWithResult(placeResult)) {
|
||||
return placeResult;
|
||||
}
|
||||
} // config not found
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
loadSearchPlaceSync(dir, place) {
|
||||
const filepath = _path.default.join(dir, place);
|
||||
|
||||
const content = (0, _readFile.readFileSync)(filepath);
|
||||
return this.createCosmiconfigResultSync(filepath, content, false);
|
||||
}
|
||||
|
||||
loadFileContentSync(filepath, content) {
|
||||
if (content === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (content.trim() === '') {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const loader = this.getLoaderEntryForFile(filepath);
|
||||
|
||||
try {
|
||||
return loader(filepath, content);
|
||||
} catch (e) {
|
||||
e.filepath = filepath;
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
createCosmiconfigResultSync(filepath, content, forceProp) {
|
||||
const fileContent = this.loadFileContentSync(filepath, content);
|
||||
return this.loadedContentToCosmiconfigResult(filepath, fileContent, forceProp);
|
||||
}
|
||||
|
||||
loadSync(filepath) {
|
||||
return this._loadFileSync(filepath, false);
|
||||
}
|
||||
|
||||
_loadFileSync(filepath, forceProp) {
|
||||
this.validateFilePath(filepath);
|
||||
|
||||
const absoluteFilePath = _path.default.resolve(process.cwd(), filepath);
|
||||
|
||||
const runLoadSync = () => {
|
||||
const content = (0, _readFile.readFileSync)(absoluteFilePath, {
|
||||
throwNotFound: true
|
||||
});
|
||||
const cosmiconfigResult = this.createCosmiconfigResultSync(absoluteFilePath, content, forceProp);
|
||||
return this.config.transform(cosmiconfigResult);
|
||||
};
|
||||
|
||||
if (this.loadCache) {
|
||||
return (0, _cacheWrapper.cacheWrapperSync)(this.loadCache, absoluteFilePath, runLoadSync);
|
||||
}
|
||||
|
||||
return runLoadSync();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
exports.ExplorerSync = ExplorerSync;
|
||||
//# sourceMappingURL=ExplorerSync.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../../src/internal/util/identity.ts"],"names":[],"mappings":";;;AA0CA,SAAgB,QAAQ,CAAI,CAAI;IAC9B,OAAO,CAAC,CAAC;AACX,CAAC;AAFD,4BAEC"}
|
||||
@@ -0,0 +1,32 @@
|
||||
var arrayLikeKeys = require('./_arrayLikeKeys'),
|
||||
baseKeysIn = require('./_baseKeysIn'),
|
||||
isArrayLike = require('./isArrayLike');
|
||||
|
||||
/**
|
||||
* Creates an array of the own and inherited enumerable property names of `object`.
|
||||
*
|
||||
* **Note:** Non-object values are coerced to objects.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
* @since 3.0.0
|
||||
* @category Object
|
||||
* @param {Object} object The object to query.
|
||||
* @returns {Array} Returns the array of property names.
|
||||
* @example
|
||||
*
|
||||
* function Foo() {
|
||||
* this.a = 1;
|
||||
* this.b = 2;
|
||||
* }
|
||||
*
|
||||
* Foo.prototype.c = 3;
|
||||
*
|
||||
* _.keysIn(new Foo);
|
||||
* // => ['a', 'b', 'c'] (iteration order is not guaranteed)
|
||||
*/
|
||||
function keysIn(object) {
|
||||
return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
|
||||
}
|
||||
|
||||
module.exports = keysIn;
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"name": "strip-final-newline",
|
||||
"version": "3.0.0",
|
||||
"description": "Strip the final newline character from a string/buffer",
|
||||
"license": "MIT",
|
||||
"repository": "sindresorhus/strip-final-newline",
|
||||
"funding": "https://github.com/sponsors/sindresorhus",
|
||||
"author": {
|
||||
"name": "Sindre Sorhus",
|
||||
"email": "sindresorhus@gmail.com",
|
||||
"url": "https://sindresorhus.com"
|
||||
},
|
||||
"type": "module",
|
||||
"exports": "./index.js",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "xo && ava"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"keywords": [
|
||||
"strip",
|
||||
"trim",
|
||||
"remove",
|
||||
"delete",
|
||||
"final",
|
||||
"last",
|
||||
"end",
|
||||
"file",
|
||||
"newline",
|
||||
"linebreak",
|
||||
"character",
|
||||
"string",
|
||||
"buffer"
|
||||
],
|
||||
"devDependencies": {
|
||||
"ava": "^3.15.0",
|
||||
"xo": "^0.39.1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,625 @@
|
||||
/**
|
||||
* This module provides an implementation of a subset of the W3C [Web Performance APIs](https://w3c.github.io/perf-timing-primer/) as well as additional APIs for
|
||||
* Node.js-specific performance measurements.
|
||||
*
|
||||
* Node.js supports the following [Web Performance APIs](https://w3c.github.io/perf-timing-primer/):
|
||||
*
|
||||
* * [High Resolution Time](https://www.w3.org/TR/hr-time-2)
|
||||
* * [Performance Timeline](https://w3c.github.io/performance-timeline/)
|
||||
* * [User Timing](https://www.w3.org/TR/user-timing/)
|
||||
*
|
||||
* ```js
|
||||
* const { PerformanceObserver, performance } = require('perf_hooks');
|
||||
*
|
||||
* const obs = new PerformanceObserver((items) => {
|
||||
* console.log(items.getEntries()[0].duration);
|
||||
* performance.clearMarks();
|
||||
* });
|
||||
* obs.observe({ type: 'measure' });
|
||||
* performance.measure('Start to Now');
|
||||
*
|
||||
* performance.mark('A');
|
||||
* doSomeLongRunningProcess(() => {
|
||||
* performance.measure('A to Now', 'A');
|
||||
*
|
||||
* performance.mark('B');
|
||||
* performance.measure('A to B', 'A', 'B');
|
||||
* });
|
||||
* ```
|
||||
* @see [source](https://github.com/nodejs/node/blob/v18.0.0/lib/perf_hooks.js)
|
||||
*/
|
||||
declare module 'perf_hooks' {
|
||||
import { AsyncResource } from 'node:async_hooks';
|
||||
type EntryType = 'node' | 'mark' | 'measure' | 'gc' | 'function' | 'http2' | 'http';
|
||||
interface NodeGCPerformanceDetail {
|
||||
/**
|
||||
* When `performanceEntry.entryType` is equal to 'gc', `the performance.kind` property identifies
|
||||
* the type of garbage collection operation that occurred.
|
||||
* See perf_hooks.constants for valid values.
|
||||
*/
|
||||
readonly kind?: number | undefined;
|
||||
/**
|
||||
* When `performanceEntry.entryType` is equal to 'gc', the `performance.flags`
|
||||
* property contains additional information about garbage collection operation.
|
||||
* See perf_hooks.constants for valid values.
|
||||
*/
|
||||
readonly flags?: number | undefined;
|
||||
}
|
||||
/**
|
||||
* @since v8.5.0
|
||||
*/
|
||||
class PerformanceEntry {
|
||||
protected constructor();
|
||||
/**
|
||||
* The total number of milliseconds elapsed for this entry. This value will not
|
||||
* be meaningful for all Performance Entry types.
|
||||
* @since v8.5.0
|
||||
*/
|
||||
readonly duration: number;
|
||||
/**
|
||||
* The name of the performance entry.
|
||||
* @since v8.5.0
|
||||
*/
|
||||
readonly name: string;
|
||||
/**
|
||||
* The high resolution millisecond timestamp marking the starting time of the
|
||||
* Performance Entry.
|
||||
* @since v8.5.0
|
||||
*/
|
||||
readonly startTime: number;
|
||||
/**
|
||||
* The type of the performance entry. It may be one of:
|
||||
*
|
||||
* * `'node'` (Node.js only)
|
||||
* * `'mark'` (available on the Web)
|
||||
* * `'measure'` (available on the Web)
|
||||
* * `'gc'` (Node.js only)
|
||||
* * `'function'` (Node.js only)
|
||||
* * `'http2'` (Node.js only)
|
||||
* * `'http'` (Node.js only)
|
||||
* @since v8.5.0
|
||||
*/
|
||||
readonly entryType: EntryType;
|
||||
/**
|
||||
* Additional detail specific to the `entryType`.
|
||||
* @since v16.0.0
|
||||
*/
|
||||
readonly detail?: NodeGCPerformanceDetail | unknown | undefined; // TODO: Narrow this based on entry type.
|
||||
toJSON(): any;
|
||||
}
|
||||
class PerformanceMark extends PerformanceEntry {
|
||||
readonly duration: 0;
|
||||
readonly entryType: 'mark';
|
||||
}
|
||||
class PerformanceMeasure extends PerformanceEntry {
|
||||
readonly entryType: 'measure';
|
||||
}
|
||||
/**
|
||||
* _This property is an extension by Node.js. It is not available in Web browsers._
|
||||
*
|
||||
* Provides timing details for Node.js itself. The constructor of this class
|
||||
* is not exposed to users.
|
||||
* @since v8.5.0
|
||||
*/
|
||||
class PerformanceNodeTiming extends PerformanceEntry {
|
||||
/**
|
||||
* The high resolution millisecond timestamp at which the Node.js process
|
||||
* completed bootstrapping. If bootstrapping has not yet finished, the property
|
||||
* has the value of -1.
|
||||
* @since v8.5.0
|
||||
*/
|
||||
readonly bootstrapComplete: number;
|
||||
/**
|
||||
* The high resolution millisecond timestamp at which the Node.js environment was
|
||||
* initialized.
|
||||
* @since v8.5.0
|
||||
*/
|
||||
readonly environment: number;
|
||||
/**
|
||||
* The high resolution millisecond timestamp of the amount of time the event loop
|
||||
* has been idle within the event loop's event provider (e.g. `epoll_wait`). This
|
||||
* does not take CPU usage into consideration. If the event loop has not yet
|
||||
* started (e.g., in the first tick of the main script), the property has the
|
||||
* value of 0.
|
||||
* @since v14.10.0, v12.19.0
|
||||
*/
|
||||
readonly idleTime: number;
|
||||
/**
|
||||
* The high resolution millisecond timestamp at which the Node.js event loop
|
||||
* exited. If the event loop has not yet exited, the property has the value of -1\.
|
||||
* It can only have a value of not -1 in a handler of the `'exit'` event.
|
||||
* @since v8.5.0
|
||||
*/
|
||||
readonly loopExit: number;
|
||||
/**
|
||||
* The high resolution millisecond timestamp at which the Node.js event loop
|
||||
* started. If the event loop has not yet started (e.g., in the first tick of the
|
||||
* main script), the property has the value of -1.
|
||||
* @since v8.5.0
|
||||
*/
|
||||
readonly loopStart: number;
|
||||
/**
|
||||
* The high resolution millisecond timestamp at which the V8 platform was
|
||||
* initialized.
|
||||
* @since v8.5.0
|
||||
*/
|
||||
readonly v8Start: number;
|
||||
}
|
||||
interface EventLoopUtilization {
|
||||
idle: number;
|
||||
active: number;
|
||||
utilization: number;
|
||||
}
|
||||
/**
|
||||
* @param util1 The result of a previous call to eventLoopUtilization()
|
||||
* @param util2 The result of a previous call to eventLoopUtilization() prior to util1
|
||||
*/
|
||||
type EventLoopUtilityFunction = (util1?: EventLoopUtilization, util2?: EventLoopUtilization) => EventLoopUtilization;
|
||||
interface MarkOptions {
|
||||
/**
|
||||
* Additional optional detail to include with the mark.
|
||||
*/
|
||||
detail?: unknown | undefined;
|
||||
/**
|
||||
* An optional timestamp to be used as the mark time.
|
||||
* @default `performance.now()`.
|
||||
*/
|
||||
startTime?: number | undefined;
|
||||
}
|
||||
interface MeasureOptions {
|
||||
/**
|
||||
* Additional optional detail to include with the mark.
|
||||
*/
|
||||
detail?: unknown | undefined;
|
||||
/**
|
||||
* Duration between start and end times.
|
||||
*/
|
||||
duration?: number | undefined;
|
||||
/**
|
||||
* Timestamp to be used as the end time, or a string identifying a previously recorded mark.
|
||||
*/
|
||||
end?: number | string | undefined;
|
||||
/**
|
||||
* Timestamp to be used as the start time, or a string identifying a previously recorded mark.
|
||||
*/
|
||||
start?: number | string | undefined;
|
||||
}
|
||||
interface TimerifyOptions {
|
||||
/**
|
||||
* A histogram object created using
|
||||
* `perf_hooks.createHistogram()` that will record runtime durations in
|
||||
* nanoseconds.
|
||||
*/
|
||||
histogram?: RecordableHistogram | undefined;
|
||||
}
|
||||
interface Performance {
|
||||
/**
|
||||
* If name is not provided, removes all PerformanceMark objects from the Performance Timeline.
|
||||
* If name is provided, removes only the named mark.
|
||||
* @param name
|
||||
*/
|
||||
clearMarks(name?: string): void;
|
||||
/**
|
||||
* If name is not provided, removes all PerformanceMeasure objects from the Performance Timeline.
|
||||
* If name is provided, removes only the named measure.
|
||||
* @param name
|
||||
* @since v16.7.0
|
||||
*/
|
||||
clearMeasures(name?: string): void;
|
||||
/**
|
||||
* Returns a list of `PerformanceEntry` objects in chronological order with respect to `performanceEntry.startTime`.
|
||||
* If you are only interested in performance entries of certain types or that have certain names, see
|
||||
* `performance.getEntriesByType()` and `performance.getEntriesByName()`.
|
||||
* @since v16.7.0
|
||||
*/
|
||||
getEntries(): PerformanceEntry[];
|
||||
/**
|
||||
* Returns a list of `PerformanceEntry` objects in chronological order with respect to `performanceEntry.startTime`
|
||||
* whose `performanceEntry.name` is equal to `name`, and optionally, whose `performanceEntry.entryType` is equal to `type`.
|
||||
* @param name
|
||||
* @param type
|
||||
* @since v16.7.0
|
||||
*/
|
||||
getEntriesByName(name: string, type?: EntryType): PerformanceEntry[];
|
||||
/**
|
||||
* Returns a list of `PerformanceEntry` objects in chronological order with respect to `performanceEntry.startTime`
|
||||
* whose `performanceEntry.entryType` is equal to `type`.
|
||||
* @param type
|
||||
* @since v16.7.0
|
||||
*/
|
||||
getEntriesByType(type: EntryType): PerformanceEntry[];
|
||||
/**
|
||||
* Creates a new PerformanceMark entry in the Performance Timeline.
|
||||
* A PerformanceMark is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'mark',
|
||||
* and whose performanceEntry.duration is always 0.
|
||||
* Performance marks are used to mark specific significant moments in the Performance Timeline.
|
||||
* @param name
|
||||
* @return The PerformanceMark entry that was created
|
||||
*/
|
||||
mark(name?: string, options?: MarkOptions): PerformanceMark;
|
||||
/**
|
||||
* Creates a new PerformanceMeasure entry in the Performance Timeline.
|
||||
* A PerformanceMeasure is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'measure',
|
||||
* and whose performanceEntry.duration measures the number of milliseconds elapsed since startMark and endMark.
|
||||
*
|
||||
* The startMark argument may identify any existing PerformanceMark in the the Performance Timeline, or may identify
|
||||
* any of the timestamp properties provided by the PerformanceNodeTiming class. If the named startMark does not exist,
|
||||
* then startMark is set to timeOrigin by default.
|
||||
*
|
||||
* The endMark argument must identify any existing PerformanceMark in the the Performance Timeline or any of the timestamp
|
||||
* properties provided by the PerformanceNodeTiming class. If the named endMark does not exist, an error will be thrown.
|
||||
* @param name
|
||||
* @param startMark
|
||||
* @param endMark
|
||||
* @return The PerformanceMeasure entry that was created
|
||||
*/
|
||||
measure(name: string, startMark?: string, endMark?: string): PerformanceMeasure;
|
||||
measure(name: string, options: MeasureOptions): PerformanceMeasure;
|
||||
/**
|
||||
* An instance of the PerformanceNodeTiming class that provides performance metrics for specific Node.js operational milestones.
|
||||
*/
|
||||
readonly nodeTiming: PerformanceNodeTiming;
|
||||
/**
|
||||
* @return the current high resolution millisecond timestamp
|
||||
*/
|
||||
now(): number;
|
||||
/**
|
||||
* The timeOrigin specifies the high resolution millisecond timestamp from which all performance metric durations are measured.
|
||||
*/
|
||||
readonly timeOrigin: number;
|
||||
/**
|
||||
* Wraps a function within a new function that measures the running time of the wrapped function.
|
||||
* A PerformanceObserver must be subscribed to the 'function' event type in order for the timing details to be accessed.
|
||||
* @param fn
|
||||
*/
|
||||
timerify<T extends (...params: any[]) => any>(fn: T, options?: TimerifyOptions): T;
|
||||
/**
|
||||
* eventLoopUtilization is similar to CPU utilization except that it is calculated using high precision wall-clock time.
|
||||
* It represents the percentage of time the event loop has spent outside the event loop's event provider (e.g. epoll_wait).
|
||||
* No other CPU idle time is taken into consideration.
|
||||
*/
|
||||
eventLoopUtilization: EventLoopUtilityFunction;
|
||||
}
|
||||
interface PerformanceObserverEntryList {
|
||||
/**
|
||||
* Returns a list of `PerformanceEntry` objects in chronological order
|
||||
* with respect to `performanceEntry.startTime`.
|
||||
*
|
||||
* ```js
|
||||
* const {
|
||||
* performance,
|
||||
* PerformanceObserver
|
||||
* } = require('perf_hooks');
|
||||
*
|
||||
* const obs = new PerformanceObserver((perfObserverList, observer) => {
|
||||
* console.log(perfObserverList.getEntries());
|
||||
*
|
||||
* * [
|
||||
* * PerformanceEntry {
|
||||
* * name: 'test',
|
||||
* * entryType: 'mark',
|
||||
* * startTime: 81.465639,
|
||||
* * duration: 0
|
||||
* * },
|
||||
* * PerformanceEntry {
|
||||
* * name: 'meow',
|
||||
* * entryType: 'mark',
|
||||
* * startTime: 81.860064,
|
||||
* * duration: 0
|
||||
* * }
|
||||
* * ]
|
||||
*
|
||||
*
|
||||
* performance.clearMarks();
|
||||
* performance.clearMeasures();
|
||||
* observer.disconnect();
|
||||
* });
|
||||
* obs.observe({ type: 'mark' });
|
||||
*
|
||||
* performance.mark('test');
|
||||
* performance.mark('meow');
|
||||
* ```
|
||||
* @since v8.5.0
|
||||
*/
|
||||
getEntries(): PerformanceEntry[];
|
||||
/**
|
||||
* Returns a list of `PerformanceEntry` objects in chronological order
|
||||
* with respect to `performanceEntry.startTime` whose `performanceEntry.name` is
|
||||
* equal to `name`, and optionally, whose `performanceEntry.entryType` is equal to`type`.
|
||||
*
|
||||
* ```js
|
||||
* const {
|
||||
* performance,
|
||||
* PerformanceObserver
|
||||
* } = require('perf_hooks');
|
||||
*
|
||||
* const obs = new PerformanceObserver((perfObserverList, observer) => {
|
||||
* console.log(perfObserverList.getEntriesByName('meow'));
|
||||
*
|
||||
* * [
|
||||
* * PerformanceEntry {
|
||||
* * name: 'meow',
|
||||
* * entryType: 'mark',
|
||||
* * startTime: 98.545991,
|
||||
* * duration: 0
|
||||
* * }
|
||||
* * ]
|
||||
*
|
||||
* console.log(perfObserverList.getEntriesByName('nope')); // []
|
||||
*
|
||||
* console.log(perfObserverList.getEntriesByName('test', 'mark'));
|
||||
*
|
||||
* * [
|
||||
* * PerformanceEntry {
|
||||
* * name: 'test',
|
||||
* * entryType: 'mark',
|
||||
* * startTime: 63.518931,
|
||||
* * duration: 0
|
||||
* * }
|
||||
* * ]
|
||||
*
|
||||
* console.log(perfObserverList.getEntriesByName('test', 'measure')); // []
|
||||
*
|
||||
* performance.clearMarks();
|
||||
* performance.clearMeasures();
|
||||
* observer.disconnect();
|
||||
* });
|
||||
* obs.observe({ entryTypes: ['mark', 'measure'] });
|
||||
*
|
||||
* performance.mark('test');
|
||||
* performance.mark('meow');
|
||||
* ```
|
||||
* @since v8.5.0
|
||||
*/
|
||||
getEntriesByName(name: string, type?: EntryType): PerformanceEntry[];
|
||||
/**
|
||||
* Returns a list of `PerformanceEntry` objects in chronological order
|
||||
* with respect to `performanceEntry.startTime` whose `performanceEntry.entryType`is equal to `type`.
|
||||
*
|
||||
* ```js
|
||||
* const {
|
||||
* performance,
|
||||
* PerformanceObserver
|
||||
* } = require('perf_hooks');
|
||||
*
|
||||
* const obs = new PerformanceObserver((perfObserverList, observer) => {
|
||||
* console.log(perfObserverList.getEntriesByType('mark'));
|
||||
*
|
||||
* * [
|
||||
* * PerformanceEntry {
|
||||
* * name: 'test',
|
||||
* * entryType: 'mark',
|
||||
* * startTime: 55.897834,
|
||||
* * duration: 0
|
||||
* * },
|
||||
* * PerformanceEntry {
|
||||
* * name: 'meow',
|
||||
* * entryType: 'mark',
|
||||
* * startTime: 56.350146,
|
||||
* * duration: 0
|
||||
* * }
|
||||
* * ]
|
||||
*
|
||||
* performance.clearMarks();
|
||||
* performance.clearMeasures();
|
||||
* observer.disconnect();
|
||||
* });
|
||||
* obs.observe({ type: 'mark' });
|
||||
*
|
||||
* performance.mark('test');
|
||||
* performance.mark('meow');
|
||||
* ```
|
||||
* @since v8.5.0
|
||||
*/
|
||||
getEntriesByType(type: EntryType): PerformanceEntry[];
|
||||
}
|
||||
type PerformanceObserverCallback = (list: PerformanceObserverEntryList, observer: PerformanceObserver) => void;
|
||||
class PerformanceObserver extends AsyncResource {
|
||||
constructor(callback: PerformanceObserverCallback);
|
||||
/**
|
||||
* Disconnects the `PerformanceObserver` instance from all notifications.
|
||||
* @since v8.5.0
|
||||
*/
|
||||
disconnect(): void;
|
||||
/**
|
||||
* Subscribes the `PerformanceObserver` instance to notifications of new `PerformanceEntry` instances identified either by `options.entryTypes`or `options.type`:
|
||||
*
|
||||
* ```js
|
||||
* const {
|
||||
* performance,
|
||||
* PerformanceObserver
|
||||
* } = require('perf_hooks');
|
||||
*
|
||||
* const obs = new PerformanceObserver((list, observer) => {
|
||||
* // Called once asynchronously. `list` contains three items.
|
||||
* });
|
||||
* obs.observe({ type: 'mark' });
|
||||
*
|
||||
* for (let n = 0; n < 3; n++)
|
||||
* performance.mark(`test${n}`);
|
||||
* ```
|
||||
* @since v8.5.0
|
||||
*/
|
||||
observe(
|
||||
options:
|
||||
| {
|
||||
entryTypes: ReadonlyArray<EntryType>;
|
||||
buffered?: boolean | undefined;
|
||||
}
|
||||
| {
|
||||
type: EntryType;
|
||||
buffered?: boolean | undefined;
|
||||
}
|
||||
): void;
|
||||
}
|
||||
namespace constants {
|
||||
const NODE_PERFORMANCE_GC_MAJOR: number;
|
||||
const NODE_PERFORMANCE_GC_MINOR: number;
|
||||
const NODE_PERFORMANCE_GC_INCREMENTAL: number;
|
||||
const NODE_PERFORMANCE_GC_WEAKCB: number;
|
||||
const NODE_PERFORMANCE_GC_FLAGS_NO: number;
|
||||
const NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED: number;
|
||||
const NODE_PERFORMANCE_GC_FLAGS_FORCED: number;
|
||||
const NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING: number;
|
||||
const NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE: number;
|
||||
const NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY: number;
|
||||
const NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE: number;
|
||||
}
|
||||
const performance: Performance;
|
||||
interface EventLoopMonitorOptions {
|
||||
/**
|
||||
* The sampling rate in milliseconds.
|
||||
* Must be greater than zero.
|
||||
* @default 10
|
||||
*/
|
||||
resolution?: number | undefined;
|
||||
}
|
||||
interface Histogram {
|
||||
/**
|
||||
* Returns a `Map` object detailing the accumulated percentile distribution.
|
||||
* @since v11.10.0
|
||||
*/
|
||||
readonly percentiles: Map<number, number>;
|
||||
/**
|
||||
* The number of times the event loop delay exceeded the maximum 1 hour event
|
||||
* loop delay threshold.
|
||||
* @since v11.10.0
|
||||
*/
|
||||
readonly exceeds: number;
|
||||
/**
|
||||
* The minimum recorded event loop delay.
|
||||
* @since v11.10.0
|
||||
*/
|
||||
readonly min: number;
|
||||
/**
|
||||
* The maximum recorded event loop delay.
|
||||
* @since v11.10.0
|
||||
*/
|
||||
readonly max: number;
|
||||
/**
|
||||
* The mean of the recorded event loop delays.
|
||||
* @since v11.10.0
|
||||
*/
|
||||
readonly mean: number;
|
||||
/**
|
||||
* The standard deviation of the recorded event loop delays.
|
||||
* @since v11.10.0
|
||||
*/
|
||||
readonly stddev: number;
|
||||
/**
|
||||
* Resets the collected histogram data.
|
||||
* @since v11.10.0
|
||||
*/
|
||||
reset(): void;
|
||||
/**
|
||||
* Returns the value at the given percentile.
|
||||
* @since v11.10.0
|
||||
* @param percentile A percentile value in the range (0, 100].
|
||||
*/
|
||||
percentile(percentile: number): number;
|
||||
}
|
||||
interface IntervalHistogram extends Histogram {
|
||||
/**
|
||||
* Enables the update interval timer. Returns `true` if the timer was
|
||||
* started, `false` if it was already started.
|
||||
* @since v11.10.0
|
||||
*/
|
||||
enable(): boolean;
|
||||
/**
|
||||
* Disables the update interval timer. Returns `true` if the timer was
|
||||
* stopped, `false` if it was already stopped.
|
||||
* @since v11.10.0
|
||||
*/
|
||||
disable(): boolean;
|
||||
}
|
||||
interface RecordableHistogram extends Histogram {
|
||||
/**
|
||||
* @since v15.9.0, v14.18.0
|
||||
* @param val The amount to record in the histogram.
|
||||
*/
|
||||
record(val: number | bigint): void;
|
||||
/**
|
||||
* Calculates the amount of time (in nanoseconds) that has passed since the
|
||||
* previous call to `recordDelta()` and records that amount in the histogram.
|
||||
*
|
||||
* ## Examples
|
||||
* @since v15.9.0, v14.18.0
|
||||
*/
|
||||
recordDelta(): void;
|
||||
/**
|
||||
* Adds the values from other to this histogram.
|
||||
* @since v17.4.0, v16.14.0
|
||||
* @param other Recordable Histogram to combine with
|
||||
*/
|
||||
add(other: RecordableHistogram): void;
|
||||
}
|
||||
/**
|
||||
* _This property is an extension by Node.js. It is not available in Web browsers._
|
||||
*
|
||||
* Creates an `IntervalHistogram` object that samples and reports the event loop
|
||||
* delay over time. The delays will be reported in nanoseconds.
|
||||
*
|
||||
* Using a timer to detect approximate event loop delay works because the
|
||||
* execution of timers is tied specifically to the lifecycle of the libuv
|
||||
* event loop. That is, a delay in the loop will cause a delay in the execution
|
||||
* of the timer, and those delays are specifically what this API is intended to
|
||||
* detect.
|
||||
*
|
||||
* ```js
|
||||
* const { monitorEventLoopDelay } = require('perf_hooks');
|
||||
* const h = monitorEventLoopDelay({ resolution: 20 });
|
||||
* h.enable();
|
||||
* // Do something.
|
||||
* h.disable();
|
||||
* console.log(h.min);
|
||||
* console.log(h.max);
|
||||
* console.log(h.mean);
|
||||
* console.log(h.stddev);
|
||||
* console.log(h.percentiles);
|
||||
* console.log(h.percentile(50));
|
||||
* console.log(h.percentile(99));
|
||||
* ```
|
||||
* @since v11.10.0
|
||||
*/
|
||||
function monitorEventLoopDelay(options?: EventLoopMonitorOptions): IntervalHistogram;
|
||||
interface CreateHistogramOptions {
|
||||
/**
|
||||
* The minimum recordable value. Must be an integer value greater than 0.
|
||||
* @default 1
|
||||
*/
|
||||
min?: number | bigint | undefined;
|
||||
/**
|
||||
* The maximum recordable value. Must be an integer value greater than min.
|
||||
* @default Number.MAX_SAFE_INTEGER
|
||||
*/
|
||||
max?: number | bigint | undefined;
|
||||
/**
|
||||
* The number of accuracy digits. Must be a number between 1 and 5.
|
||||
* @default 3
|
||||
*/
|
||||
figures?: number | undefined;
|
||||
}
|
||||
/**
|
||||
* Returns a `RecordableHistogram`.
|
||||
* @since v15.9.0, v14.18.0
|
||||
*/
|
||||
function createHistogram(options?: CreateHistogramOptions): RecordableHistogram;
|
||||
|
||||
import { performance as _performance } from 'perf_hooks';
|
||||
global {
|
||||
/**
|
||||
* `performance` is a global reference for `require('perf_hooks').performance`
|
||||
* https://nodejs.org/api/globals.html#performance
|
||||
* @since v16.0.0
|
||||
*/
|
||||
var performance: typeof globalThis extends {
|
||||
onmessage: any;
|
||||
performance: infer T;
|
||||
}
|
||||
? T
|
||||
: typeof _performance;
|
||||
}
|
||||
}
|
||||
declare module 'node:perf_hooks' {
|
||||
export * from 'perf_hooks';
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"ArgumentOutOfRangeError.d.ts","sourceRoot":"","sources":["../../../../src/internal/util/ArgumentOutOfRangeError.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,uBAAwB,SAAQ,KAAK;CAAG;AAEzD,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,QAAQ,uBAAuB,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,EAAE,2BAOrC,CAAC"}
|
||||
@@ -0,0 +1,5 @@
|
||||
var convert = require('./convert'),
|
||||
func = convert('partialRight', require('../partialRight'));
|
||||
|
||||
func.placeholder = require('./placeholder');
|
||||
module.exports = func;
|
||||
@@ -0,0 +1,42 @@
|
||||
// It's actually "debounce"
|
||||
|
||||
"use strict";
|
||||
|
||||
var isValue = require("es5-ext/object/is-value")
|
||||
, callable = require("es5-ext/object/valid-callable")
|
||||
, nextTick = require("next-tick")
|
||||
, validTimeout = require("./valid-timeout");
|
||||
|
||||
var apply = Function.prototype.apply;
|
||||
|
||||
module.exports = function (fn/*, timeout*/) {
|
||||
var scheduled, run, context, args, delay, timeout = arguments[1], handle;
|
||||
callable(fn);
|
||||
if (isValue(timeout)) {
|
||||
timeout = validTimeout(timeout);
|
||||
delay = setTimeout;
|
||||
} else {
|
||||
delay = nextTick;
|
||||
}
|
||||
run = function () {
|
||||
if (!scheduled) return; // IE8 tends to not clear immediate timeouts properly
|
||||
scheduled = false;
|
||||
handle = null;
|
||||
apply.call(fn, context, args);
|
||||
context = null;
|
||||
args = null;
|
||||
};
|
||||
return function () {
|
||||
if (scheduled) {
|
||||
if (!isValue(handle)) {
|
||||
// 'nextTick' based, no room for debounce
|
||||
return;
|
||||
}
|
||||
clearTimeout(handle);
|
||||
}
|
||||
scheduled = true;
|
||||
context = this;
|
||||
args = arguments;
|
||||
handle = delay(run, timeout);
|
||||
};
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
import registerInline from './decorators/inline';
|
||||
|
||||
export function registerDefaultDecorators(instance) {
|
||||
registerInline(instance);
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"name":"merge-stream","version":"2.0.0","files":{"index.js":{"checkedAt":1678883670751,"integrity":"sha512-hSSuFlnYZ4MCI4x7lm+HfqVFvu6cLeiDfGo3CjyGMSvm4xnPJ0aZ6h+az19Aria6tEgIbVZuRNrszovKr17qGQ==","mode":420,"size":885},"README.md":{"checkedAt":1678883670751,"integrity":"sha512-rpz1ucBVTSLQmVvaA8idV+YKrta4aBG0RxDHkZD+JYTzBAXsSyDGuXeAWM8pa3brYIUTEBzz84Hq2CSfECBpyQ==","mode":420,"size":1813},"package.json":{"checkedAt":1678883670751,"integrity":"sha512-VXnU6KlTLqMxL4tGT7t8JWVnK0i/QXVGcwwhdPGeHKvOMuOwrEAi3uXRUIPgk1Zl7VIj9AX/Kb8BMpfmkipHZw==","mode":420,"size":489},"LICENSE":{"checkedAt":1678883670751,"integrity":"sha512-dvixUqB0/rLlvbbzQv+TkiRlEv25SPWrcEpYP4pkXZhfY2l11cxYHJJLFa2hYeNCyMgVPVqaNvugKieiKeb/Cg==","mode":420,"size":1119}}}
|
||||
@@ -0,0 +1,30 @@
|
||||
'use strict';
|
||||
|
||||
var defineProperties = require('define-properties');
|
||||
var isEnumerable = Object.prototype.propertyIsEnumerable;
|
||||
var functionsHaveNames = require('functions-have-names')();
|
||||
|
||||
var runTests = require('./tests');
|
||||
|
||||
module.exports = function (t) {
|
||||
t.equal(Promise.allSettled.length, 1, 'Promise.allSettled has a length of 1');
|
||||
t.test('Function name', { skip: !functionsHaveNames }, function (st) {
|
||||
st.equal(Promise.allSettled.name, 'allSettled', 'Promise.allSettled has name "allSettled"');
|
||||
st.end();
|
||||
});
|
||||
|
||||
t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) {
|
||||
et.equal(false, isEnumerable.call(Promise, 'allSettled'), 'Promise.allSettled is not enumerable');
|
||||
et.end();
|
||||
});
|
||||
|
||||
var supportsStrictMode = (function () { return typeof this === 'undefined'; }());
|
||||
|
||||
t.test('bad object value', { skip: !supportsStrictMode }, function (st) {
|
||||
st['throws'](function () { return Promise.allSettled.call(undefined); }, TypeError, 'undefined is not an object');
|
||||
st['throws'](function () { return Promise.allSettled.call(null); }, TypeError, 'null is not an object');
|
||||
st.end();
|
||||
});
|
||||
|
||||
runTests(function allSettled(iterable) { return Promise.allSettled.call(typeof this === 'undefined' ? Promise : this, iterable); }, t);
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"devtools.module.js","sources":["../src/index.js","../src/devtools.js"],"sourcesContent":["import { options } from 'preact';\nimport { initDevTools } from './devtools';\n\ninitDevTools();\n\n/**\n * Display a custom label for a custom hook for the devtools panel\n * @type {<T>(value: T, name: string) => T}\n */\nexport function addHookName(value, name) {\n\tif (options._addHookName) {\n\t\toptions._addHookName(name);\n\t}\n\treturn value;\n}\n","import { options, Fragment, Component } from 'preact';\n\nexport function initDevTools() {\n\tif (typeof window != 'undefined' && window.__PREACT_DEVTOOLS__) {\n\t\twindow.__PREACT_DEVTOOLS__.attachPreact('10.12.1', options, {\n\t\t\tFragment,\n\t\t\tComponent\n\t\t});\n\t}\n}\n"],"names":["addHookName","value","name","options","__a","window","__PREACT_DEVTOOLS__","attachPreact","Fragment","Component"],"mappings":"8DASO,SAASA,EAAYC,EAAOC,GAIlC,OAHIC,EAAsBC,KACzBD,EAAOC,IAAcF,GAEfD,CACP,CCXqB,oBAAVI,QAAyBA,OAAOC,qBAC1CD,OAAOC,oBAAoBC,aAAa,UAAWJ,EAAS,CAC3DK,SAAAA,EACAC,UAAAA"}
|
||||
@@ -0,0 +1,674 @@
|
||||
'use strict';
|
||||
// rfc7231 6.1
|
||||
const statusCodeCacheableByDefault = new Set([
|
||||
200,
|
||||
203,
|
||||
204,
|
||||
206,
|
||||
300,
|
||||
301,
|
||||
308,
|
||||
404,
|
||||
405,
|
||||
410,
|
||||
414,
|
||||
501,
|
||||
]);
|
||||
|
||||
// This implementation does not understand partial responses (206)
|
||||
const understoodStatuses = new Set([
|
||||
200,
|
||||
203,
|
||||
204,
|
||||
300,
|
||||
301,
|
||||
302,
|
||||
303,
|
||||
307,
|
||||
308,
|
||||
404,
|
||||
405,
|
||||
410,
|
||||
414,
|
||||
501,
|
||||
]);
|
||||
|
||||
const errorStatusCodes = new Set([
|
||||
500,
|
||||
502,
|
||||
503,
|
||||
504,
|
||||
]);
|
||||
|
||||
const hopByHopHeaders = {
|
||||
date: true, // included, because we add Age update Date
|
||||
connection: true,
|
||||
'keep-alive': true,
|
||||
'proxy-authenticate': true,
|
||||
'proxy-authorization': true,
|
||||
te: true,
|
||||
trailer: true,
|
||||
'transfer-encoding': true,
|
||||
upgrade: true,
|
||||
};
|
||||
|
||||
const excludedFromRevalidationUpdate = {
|
||||
// Since the old body is reused, it doesn't make sense to change properties of the body
|
||||
'content-length': true,
|
||||
'content-encoding': true,
|
||||
'transfer-encoding': true,
|
||||
'content-range': true,
|
||||
};
|
||||
|
||||
function toNumberOrZero(s) {
|
||||
const n = parseInt(s, 10);
|
||||
return isFinite(n) ? n : 0;
|
||||
}
|
||||
|
||||
// RFC 5861
|
||||
function isErrorResponse(response) {
|
||||
// consider undefined response as faulty
|
||||
if(!response) {
|
||||
return true
|
||||
}
|
||||
return errorStatusCodes.has(response.status);
|
||||
}
|
||||
|
||||
function parseCacheControl(header) {
|
||||
const cc = {};
|
||||
if (!header) return cc;
|
||||
|
||||
// TODO: When there is more than one value present for a given directive (e.g., two Expires header fields, multiple Cache-Control: max-age directives),
|
||||
// the directive's value is considered invalid. Caches are encouraged to consider responses that have invalid freshness information to be stale
|
||||
const parts = header.trim().split(/,/);
|
||||
for (const part of parts) {
|
||||
const [k, v] = part.split(/=/, 2);
|
||||
cc[k.trim()] = v === undefined ? true : v.trim().replace(/^"|"$/g, '');
|
||||
}
|
||||
|
||||
return cc;
|
||||
}
|
||||
|
||||
function formatCacheControl(cc) {
|
||||
let parts = [];
|
||||
for (const k in cc) {
|
||||
const v = cc[k];
|
||||
parts.push(v === true ? k : k + '=' + v);
|
||||
}
|
||||
if (!parts.length) {
|
||||
return undefined;
|
||||
}
|
||||
return parts.join(', ');
|
||||
}
|
||||
|
||||
module.exports = class CachePolicy {
|
||||
constructor(
|
||||
req,
|
||||
res,
|
||||
{
|
||||
shared,
|
||||
cacheHeuristic,
|
||||
immutableMinTimeToLive,
|
||||
ignoreCargoCult,
|
||||
_fromObject,
|
||||
} = {}
|
||||
) {
|
||||
if (_fromObject) {
|
||||
this._fromObject(_fromObject);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!res || !res.headers) {
|
||||
throw Error('Response headers missing');
|
||||
}
|
||||
this._assertRequestHasHeaders(req);
|
||||
|
||||
this._responseTime = this.now();
|
||||
this._isShared = shared !== false;
|
||||
this._cacheHeuristic =
|
||||
undefined !== cacheHeuristic ? cacheHeuristic : 0.1; // 10% matches IE
|
||||
this._immutableMinTtl =
|
||||
undefined !== immutableMinTimeToLive
|
||||
? immutableMinTimeToLive
|
||||
: 24 * 3600 * 1000;
|
||||
|
||||
this._status = 'status' in res ? res.status : 200;
|
||||
this._resHeaders = res.headers;
|
||||
this._rescc = parseCacheControl(res.headers['cache-control']);
|
||||
this._method = 'method' in req ? req.method : 'GET';
|
||||
this._url = req.url;
|
||||
this._host = req.headers.host;
|
||||
this._noAuthorization = !req.headers.authorization;
|
||||
this._reqHeaders = res.headers.vary ? req.headers : null; // Don't keep all request headers if they won't be used
|
||||
this._reqcc = parseCacheControl(req.headers['cache-control']);
|
||||
|
||||
// Assume that if someone uses legacy, non-standard uncecessary options they don't understand caching,
|
||||
// so there's no point stricly adhering to the blindly copy&pasted directives.
|
||||
if (
|
||||
ignoreCargoCult &&
|
||||
'pre-check' in this._rescc &&
|
||||
'post-check' in this._rescc
|
||||
) {
|
||||
delete this._rescc['pre-check'];
|
||||
delete this._rescc['post-check'];
|
||||
delete this._rescc['no-cache'];
|
||||
delete this._rescc['no-store'];
|
||||
delete this._rescc['must-revalidate'];
|
||||
this._resHeaders = Object.assign({}, this._resHeaders, {
|
||||
'cache-control': formatCacheControl(this._rescc),
|
||||
});
|
||||
delete this._resHeaders.expires;
|
||||
delete this._resHeaders.pragma;
|
||||
}
|
||||
|
||||
// When the Cache-Control header field is not present in a request, caches MUST consider the no-cache request pragma-directive
|
||||
// as having the same effect as if "Cache-Control: no-cache" were present (see Section 5.2.1).
|
||||
if (
|
||||
res.headers['cache-control'] == null &&
|
||||
/no-cache/.test(res.headers.pragma)
|
||||
) {
|
||||
this._rescc['no-cache'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
now() {
|
||||
return Date.now();
|
||||
}
|
||||
|
||||
storable() {
|
||||
// The "no-store" request directive indicates that a cache MUST NOT store any part of either this request or any response to it.
|
||||
return !!(
|
||||
!this._reqcc['no-store'] &&
|
||||
// A cache MUST NOT store a response to any request, unless:
|
||||
// The request method is understood by the cache and defined as being cacheable, and
|
||||
('GET' === this._method ||
|
||||
'HEAD' === this._method ||
|
||||
('POST' === this._method && this._hasExplicitExpiration())) &&
|
||||
// the response status code is understood by the cache, and
|
||||
understoodStatuses.has(this._status) &&
|
||||
// the "no-store" cache directive does not appear in request or response header fields, and
|
||||
!this._rescc['no-store'] &&
|
||||
// the "private" response directive does not appear in the response, if the cache is shared, and
|
||||
(!this._isShared || !this._rescc.private) &&
|
||||
// the Authorization header field does not appear in the request, if the cache is shared,
|
||||
(!this._isShared ||
|
||||
this._noAuthorization ||
|
||||
this._allowsStoringAuthenticated()) &&
|
||||
// the response either:
|
||||
// contains an Expires header field, or
|
||||
(this._resHeaders.expires ||
|
||||
// contains a max-age response directive, or
|
||||
// contains a s-maxage response directive and the cache is shared, or
|
||||
// contains a public response directive.
|
||||
this._rescc['max-age'] ||
|
||||
(this._isShared && this._rescc['s-maxage']) ||
|
||||
this._rescc.public ||
|
||||
// has a status code that is defined as cacheable by default
|
||||
statusCodeCacheableByDefault.has(this._status))
|
||||
);
|
||||
}
|
||||
|
||||
_hasExplicitExpiration() {
|
||||
// 4.2.1 Calculating Freshness Lifetime
|
||||
return (
|
||||
(this._isShared && this._rescc['s-maxage']) ||
|
||||
this._rescc['max-age'] ||
|
||||
this._resHeaders.expires
|
||||
);
|
||||
}
|
||||
|
||||
_assertRequestHasHeaders(req) {
|
||||
if (!req || !req.headers) {
|
||||
throw Error('Request headers missing');
|
||||
}
|
||||
}
|
||||
|
||||
satisfiesWithoutRevalidation(req) {
|
||||
this._assertRequestHasHeaders(req);
|
||||
|
||||
// When presented with a request, a cache MUST NOT reuse a stored response, unless:
|
||||
// the presented request does not contain the no-cache pragma (Section 5.4), nor the no-cache cache directive,
|
||||
// unless the stored response is successfully validated (Section 4.3), and
|
||||
const requestCC = parseCacheControl(req.headers['cache-control']);
|
||||
if (requestCC['no-cache'] || /no-cache/.test(req.headers.pragma)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (requestCC['max-age'] && this.age() > requestCC['max-age']) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (
|
||||
requestCC['min-fresh'] &&
|
||||
this.timeToLive() < 1000 * requestCC['min-fresh']
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// the stored response is either:
|
||||
// fresh, or allowed to be served stale
|
||||
if (this.stale()) {
|
||||
const allowsStale =
|
||||
requestCC['max-stale'] &&
|
||||
!this._rescc['must-revalidate'] &&
|
||||
(true === requestCC['max-stale'] ||
|
||||
requestCC['max-stale'] > this.age() - this.maxAge());
|
||||
if (!allowsStale) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return this._requestMatches(req, false);
|
||||
}
|
||||
|
||||
_requestMatches(req, allowHeadMethod) {
|
||||
// The presented effective request URI and that of the stored response match, and
|
||||
return (
|
||||
(!this._url || this._url === req.url) &&
|
||||
this._host === req.headers.host &&
|
||||
// the request method associated with the stored response allows it to be used for the presented request, and
|
||||
(!req.method ||
|
||||
this._method === req.method ||
|
||||
(allowHeadMethod && 'HEAD' === req.method)) &&
|
||||
// selecting header fields nominated by the stored response (if any) match those presented, and
|
||||
this._varyMatches(req)
|
||||
);
|
||||
}
|
||||
|
||||
_allowsStoringAuthenticated() {
|
||||
// following Cache-Control response directives (Section 5.2.2) have such an effect: must-revalidate, public, and s-maxage.
|
||||
return (
|
||||
this._rescc['must-revalidate'] ||
|
||||
this._rescc.public ||
|
||||
this._rescc['s-maxage']
|
||||
);
|
||||
}
|
||||
|
||||
_varyMatches(req) {
|
||||
if (!this._resHeaders.vary) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// A Vary header field-value of "*" always fails to match
|
||||
if (this._resHeaders.vary === '*') {
|
||||
return false;
|
||||
}
|
||||
|
||||
const fields = this._resHeaders.vary
|
||||
.trim()
|
||||
.toLowerCase()
|
||||
.split(/\s*,\s*/);
|
||||
for (const name of fields) {
|
||||
if (req.headers[name] !== this._reqHeaders[name]) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
_copyWithoutHopByHopHeaders(inHeaders) {
|
||||
const headers = {};
|
||||
for (const name in inHeaders) {
|
||||
if (hopByHopHeaders[name]) continue;
|
||||
headers[name] = inHeaders[name];
|
||||
}
|
||||
// 9.1. Connection
|
||||
if (inHeaders.connection) {
|
||||
const tokens = inHeaders.connection.trim().split(/\s*,\s*/);
|
||||
for (const name of tokens) {
|
||||
delete headers[name];
|
||||
}
|
||||
}
|
||||
if (headers.warning) {
|
||||
const warnings = headers.warning.split(/,/).filter(warning => {
|
||||
return !/^\s*1[0-9][0-9]/.test(warning);
|
||||
});
|
||||
if (!warnings.length) {
|
||||
delete headers.warning;
|
||||
} else {
|
||||
headers.warning = warnings.join(',').trim();
|
||||
}
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
|
||||
responseHeaders() {
|
||||
const headers = this._copyWithoutHopByHopHeaders(this._resHeaders);
|
||||
const age = this.age();
|
||||
|
||||
// A cache SHOULD generate 113 warning if it heuristically chose a freshness
|
||||
// lifetime greater than 24 hours and the response's age is greater than 24 hours.
|
||||
if (
|
||||
age > 3600 * 24 &&
|
||||
!this._hasExplicitExpiration() &&
|
||||
this.maxAge() > 3600 * 24
|
||||
) {
|
||||
headers.warning =
|
||||
(headers.warning ? `${headers.warning}, ` : '') +
|
||||
'113 - "rfc7234 5.5.4"';
|
||||
}
|
||||
headers.age = `${Math.round(age)}`;
|
||||
headers.date = new Date(this.now()).toUTCString();
|
||||
return headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Value of the Date response header or current time if Date was invalid
|
||||
* @return timestamp
|
||||
*/
|
||||
date() {
|
||||
const serverDate = Date.parse(this._resHeaders.date);
|
||||
if (isFinite(serverDate)) {
|
||||
return serverDate;
|
||||
}
|
||||
return this._responseTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* Value of the Age header, in seconds, updated for the current time.
|
||||
* May be fractional.
|
||||
*
|
||||
* @return Number
|
||||
*/
|
||||
age() {
|
||||
let age = this._ageValue();
|
||||
|
||||
const residentTime = (this.now() - this._responseTime) / 1000;
|
||||
return age + residentTime;
|
||||
}
|
||||
|
||||
_ageValue() {
|
||||
return toNumberOrZero(this._resHeaders.age);
|
||||
}
|
||||
|
||||
/**
|
||||
* Value of applicable max-age (or heuristic equivalent) in seconds. This counts since response's `Date`.
|
||||
*
|
||||
* For an up-to-date value, see `timeToLive()`.
|
||||
*
|
||||
* @return Number
|
||||
*/
|
||||
maxAge() {
|
||||
if (!this.storable() || this._rescc['no-cache']) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Shared responses with cookies are cacheable according to the RFC, but IMHO it'd be unwise to do so by default
|
||||
// so this implementation requires explicit opt-in via public header
|
||||
if (
|
||||
this._isShared &&
|
||||
(this._resHeaders['set-cookie'] &&
|
||||
!this._rescc.public &&
|
||||
!this._rescc.immutable)
|
||||
) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (this._resHeaders.vary === '*') {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (this._isShared) {
|
||||
if (this._rescc['proxy-revalidate']) {
|
||||
return 0;
|
||||
}
|
||||
// if a response includes the s-maxage directive, a shared cache recipient MUST ignore the Expires field.
|
||||
if (this._rescc['s-maxage']) {
|
||||
return toNumberOrZero(this._rescc['s-maxage']);
|
||||
}
|
||||
}
|
||||
|
||||
// If a response includes a Cache-Control field with the max-age directive, a recipient MUST ignore the Expires field.
|
||||
if (this._rescc['max-age']) {
|
||||
return toNumberOrZero(this._rescc['max-age']);
|
||||
}
|
||||
|
||||
const defaultMinTtl = this._rescc.immutable ? this._immutableMinTtl : 0;
|
||||
|
||||
const serverDate = this.date();
|
||||
if (this._resHeaders.expires) {
|
||||
const expires = Date.parse(this._resHeaders.expires);
|
||||
// A cache recipient MUST interpret invalid date formats, especially the value "0", as representing a time in the past (i.e., "already expired").
|
||||
if (Number.isNaN(expires) || expires < serverDate) {
|
||||
return 0;
|
||||
}
|
||||
return Math.max(defaultMinTtl, (expires - serverDate) / 1000);
|
||||
}
|
||||
|
||||
if (this._resHeaders['last-modified']) {
|
||||
const lastModified = Date.parse(this._resHeaders['last-modified']);
|
||||
if (isFinite(lastModified) && serverDate > lastModified) {
|
||||
return Math.max(
|
||||
defaultMinTtl,
|
||||
((serverDate - lastModified) / 1000) * this._cacheHeuristic
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return defaultMinTtl;
|
||||
}
|
||||
|
||||
timeToLive() {
|
||||
const age = this.maxAge() - this.age();
|
||||
const staleIfErrorAge = age + toNumberOrZero(this._rescc['stale-if-error']);
|
||||
const staleWhileRevalidateAge = age + toNumberOrZero(this._rescc['stale-while-revalidate']);
|
||||
return Math.max(0, age, staleIfErrorAge, staleWhileRevalidateAge) * 1000;
|
||||
}
|
||||
|
||||
stale() {
|
||||
return this.maxAge() <= this.age();
|
||||
}
|
||||
|
||||
_useStaleIfError() {
|
||||
return this.maxAge() + toNumberOrZero(this._rescc['stale-if-error']) > this.age();
|
||||
}
|
||||
|
||||
useStaleWhileRevalidate() {
|
||||
return this.maxAge() + toNumberOrZero(this._rescc['stale-while-revalidate']) > this.age();
|
||||
}
|
||||
|
||||
static fromObject(obj) {
|
||||
return new this(undefined, undefined, { _fromObject: obj });
|
||||
}
|
||||
|
||||
_fromObject(obj) {
|
||||
if (this._responseTime) throw Error('Reinitialized');
|
||||
if (!obj || obj.v !== 1) throw Error('Invalid serialization');
|
||||
|
||||
this._responseTime = obj.t;
|
||||
this._isShared = obj.sh;
|
||||
this._cacheHeuristic = obj.ch;
|
||||
this._immutableMinTtl =
|
||||
obj.imm !== undefined ? obj.imm : 24 * 3600 * 1000;
|
||||
this._status = obj.st;
|
||||
this._resHeaders = obj.resh;
|
||||
this._rescc = obj.rescc;
|
||||
this._method = obj.m;
|
||||
this._url = obj.u;
|
||||
this._host = obj.h;
|
||||
this._noAuthorization = obj.a;
|
||||
this._reqHeaders = obj.reqh;
|
||||
this._reqcc = obj.reqcc;
|
||||
}
|
||||
|
||||
toObject() {
|
||||
return {
|
||||
v: 1,
|
||||
t: this._responseTime,
|
||||
sh: this._isShared,
|
||||
ch: this._cacheHeuristic,
|
||||
imm: this._immutableMinTtl,
|
||||
st: this._status,
|
||||
resh: this._resHeaders,
|
||||
rescc: this._rescc,
|
||||
m: this._method,
|
||||
u: this._url,
|
||||
h: this._host,
|
||||
a: this._noAuthorization,
|
||||
reqh: this._reqHeaders,
|
||||
reqcc: this._reqcc,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Headers for sending to the origin server to revalidate stale response.
|
||||
* Allows server to return 304 to allow reuse of the previous response.
|
||||
*
|
||||
* Hop by hop headers are always stripped.
|
||||
* Revalidation headers may be added or removed, depending on request.
|
||||
*/
|
||||
revalidationHeaders(incomingReq) {
|
||||
this._assertRequestHasHeaders(incomingReq);
|
||||
const headers = this._copyWithoutHopByHopHeaders(incomingReq.headers);
|
||||
|
||||
// This implementation does not understand range requests
|
||||
delete headers['if-range'];
|
||||
|
||||
if (!this._requestMatches(incomingReq, true) || !this.storable()) {
|
||||
// revalidation allowed via HEAD
|
||||
// not for the same resource, or wasn't allowed to be cached anyway
|
||||
delete headers['if-none-match'];
|
||||
delete headers['if-modified-since'];
|
||||
return headers;
|
||||
}
|
||||
|
||||
/* MUST send that entity-tag in any cache validation request (using If-Match or If-None-Match) if an entity-tag has been provided by the origin server. */
|
||||
if (this._resHeaders.etag) {
|
||||
headers['if-none-match'] = headers['if-none-match']
|
||||
? `${headers['if-none-match']}, ${this._resHeaders.etag}`
|
||||
: this._resHeaders.etag;
|
||||
}
|
||||
|
||||
// Clients MAY issue simple (non-subrange) GET requests with either weak validators or strong validators. Clients MUST NOT use weak validators in other forms of request.
|
||||
const forbidsWeakValidators =
|
||||
headers['accept-ranges'] ||
|
||||
headers['if-match'] ||
|
||||
headers['if-unmodified-since'] ||
|
||||
(this._method && this._method != 'GET');
|
||||
|
||||
/* SHOULD send the Last-Modified value in non-subrange cache validation requests (using If-Modified-Since) if only a Last-Modified value has been provided by the origin server.
|
||||
Note: This implementation does not understand partial responses (206) */
|
||||
if (forbidsWeakValidators) {
|
||||
delete headers['if-modified-since'];
|
||||
|
||||
if (headers['if-none-match']) {
|
||||
const etags = headers['if-none-match']
|
||||
.split(/,/)
|
||||
.filter(etag => {
|
||||
return !/^\s*W\//.test(etag);
|
||||
});
|
||||
if (!etags.length) {
|
||||
delete headers['if-none-match'];
|
||||
} else {
|
||||
headers['if-none-match'] = etags.join(',').trim();
|
||||
}
|
||||
}
|
||||
} else if (
|
||||
this._resHeaders['last-modified'] &&
|
||||
!headers['if-modified-since']
|
||||
) {
|
||||
headers['if-modified-since'] = this._resHeaders['last-modified'];
|
||||
}
|
||||
|
||||
return headers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates new CachePolicy with information combined from the previews response,
|
||||
* and the new revalidation response.
|
||||
*
|
||||
* Returns {policy, modified} where modified is a boolean indicating
|
||||
* whether the response body has been modified, and old cached body can't be used.
|
||||
*
|
||||
* @return {Object} {policy: CachePolicy, modified: Boolean}
|
||||
*/
|
||||
revalidatedPolicy(request, response) {
|
||||
this._assertRequestHasHeaders(request);
|
||||
if(this._useStaleIfError() && isErrorResponse(response)) { // I consider the revalidation request unsuccessful
|
||||
return {
|
||||
modified: false,
|
||||
matches: false,
|
||||
policy: this,
|
||||
};
|
||||
}
|
||||
if (!response || !response.headers) {
|
||||
throw Error('Response headers missing');
|
||||
}
|
||||
|
||||
// These aren't going to be supported exactly, since one CachePolicy object
|
||||
// doesn't know about all the other cached objects.
|
||||
let matches = false;
|
||||
if (response.status !== undefined && response.status != 304) {
|
||||
matches = false;
|
||||
} else if (
|
||||
response.headers.etag &&
|
||||
!/^\s*W\//.test(response.headers.etag)
|
||||
) {
|
||||
// "All of the stored responses with the same strong validator are selected.
|
||||
// If none of the stored responses contain the same strong validator,
|
||||
// then the cache MUST NOT use the new response to update any stored responses."
|
||||
matches =
|
||||
this._resHeaders.etag &&
|
||||
this._resHeaders.etag.replace(/^\s*W\//, '') ===
|
||||
response.headers.etag;
|
||||
} else if (this._resHeaders.etag && response.headers.etag) {
|
||||
// "If the new response contains a weak validator and that validator corresponds
|
||||
// to one of the cache's stored responses,
|
||||
// then the most recent of those matching stored responses is selected for update."
|
||||
matches =
|
||||
this._resHeaders.etag.replace(/^\s*W\//, '') ===
|
||||
response.headers.etag.replace(/^\s*W\//, '');
|
||||
} else if (this._resHeaders['last-modified']) {
|
||||
matches =
|
||||
this._resHeaders['last-modified'] ===
|
||||
response.headers['last-modified'];
|
||||
} else {
|
||||
// If the new response does not include any form of validator (such as in the case where
|
||||
// a client generates an If-Modified-Since request from a source other than the Last-Modified
|
||||
// response header field), and there is only one stored response, and that stored response also
|
||||
// lacks a validator, then that stored response is selected for update.
|
||||
if (
|
||||
!this._resHeaders.etag &&
|
||||
!this._resHeaders['last-modified'] &&
|
||||
!response.headers.etag &&
|
||||
!response.headers['last-modified']
|
||||
) {
|
||||
matches = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!matches) {
|
||||
return {
|
||||
policy: new this.constructor(request, response),
|
||||
// Client receiving 304 without body, even if it's invalid/mismatched has no option
|
||||
// but to reuse a cached body. We don't have a good way to tell clients to do
|
||||
// error recovery in such case.
|
||||
modified: response.status != 304,
|
||||
matches: false,
|
||||
};
|
||||
}
|
||||
|
||||
// use other header fields provided in the 304 (Not Modified) response to replace all instances
|
||||
// of the corresponding header fields in the stored response.
|
||||
const headers = {};
|
||||
for (const k in this._resHeaders) {
|
||||
headers[k] =
|
||||
k in response.headers && !excludedFromRevalidationUpdate[k]
|
||||
? response.headers[k]
|
||||
: this._resHeaders[k];
|
||||
}
|
||||
|
||||
const newResponse = Object.assign({}, response, {
|
||||
status: this._status,
|
||||
method: this._method,
|
||||
headers,
|
||||
});
|
||||
return {
|
||||
policy: new this.constructor(request, newResponse, {
|
||||
shared: this._isShared,
|
||||
cacheHeuristic: this._cacheHeuristic,
|
||||
immutableMinTimeToLive: this._immutableMinTtl,
|
||||
}),
|
||||
modified: false,
|
||||
matches: true,
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
module.exports={A:{A:{"2":"J D E F A B CC"},B:{"1":"G M N O P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H","2":"C","388":"K L"},C:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB h lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H xB yB","2":"DC tB I v J D E F A B C K L G M N O w g x EC FC"},D:{"1":"BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB hB iB jB kB h lB mB nB oB pB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H xB yB GC","2":"0 1 I v J D E F A B C K L G M N O w g x y z","132":"2 3 4 5 6 7 8 9 AB"},E:{"1":"F A B C K L G LC 0B qB rB 1B MC NC 2B 3B 4B 5B sB 6B 7B 8B 9B OC","2":"I v J D HC zB IC","388":"E KC","514":"JC"},F:{"1":"0 1 2 3 4 5 6 7 8 9 y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB h lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d e","2":"F B C PC QC RC SC qB AC TC rB","132":"G M N O w g x"},G:{"1":"ZC aC bC cC dC eC fC gC hC iC jC kC lC mC nC 2B 3B 4B 5B sB 6B 7B 8B 9B","2":"zB UC BC VC WC XC","388":"E YC"},H:{"2":"oC"},I:{"1":"f tC uC","2":"tB I pC qC rC sC BC"},J:{"2":"D A"},K:{"1":"h","2":"A B C qB AC rB"},L:{"1":"H"},M:{"1":"H"},N:{"2":"A B"},O:{"1":"vC"},P:{"1":"I g wC xC yC zC 0C 0B 1C 2C 3C 4C 5C sB 6C 7C 8C"},Q:{"1":"1B"},R:{"1":"9C"},S:{"1":"AD BD"}},B:1,C:"HTML templates"};
|
||||
@@ -0,0 +1,4 @@
|
||||
export function createInvalidObservableTypeError(input) {
|
||||
return new TypeError("You provided " + (input !== null && typeof input === 'object' ? 'an invalid object' : "'" + input + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
|
||||
}
|
||||
//# sourceMappingURL=throwUnobservableError.js.map
|
||||
@@ -0,0 +1,32 @@
|
||||
import fs from 'node:fs';
|
||||
import os from 'node:os';
|
||||
import path from 'node:path';
|
||||
import sh from 'shelljs';
|
||||
|
||||
const mkTmpDir = () => {
|
||||
const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'release-it-'));
|
||||
return dir;
|
||||
};
|
||||
|
||||
const readFile = file => fs.promises.readFile(path.resolve(file), 'utf8');
|
||||
|
||||
const gitAdd = (content, filePath, message) => {
|
||||
const pathSegments = filePath.split('/').filter(Boolean);
|
||||
pathSegments.pop();
|
||||
if (pathSegments.length) {
|
||||
sh.mkdir('-p', pathSegments.join('/'));
|
||||
}
|
||||
sh.ShellString(content).toEnd(filePath);
|
||||
sh.exec(`git add ${filePath}`);
|
||||
const { stdout } = sh.exec(`git commit -m "${message}"`);
|
||||
const match = stdout.match(/\[.+([a-z0-9]{7})\]/);
|
||||
return match ? match[1] : null;
|
||||
};
|
||||
|
||||
const getArgs = (args, prefix) =>
|
||||
args
|
||||
.map(args => (typeof args[0] !== 'string' ? args[0].join(' ') : args[0]))
|
||||
.filter(cmd => cmd.startsWith(prefix))
|
||||
.map(cmd => cmd.trim());
|
||||
|
||||
export { mkTmpDir, readFile, gitAdd, getArgs };
|
||||
@@ -0,0 +1 @@
|
||||
module.exports={A:{A:{"2":"J D E F A B CC"},B:{"1":"P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H","2":"C K L G M N O"},C:{"2":"0 1 2 3 4 5 6 7 8 9 DC tB I v J D E F A B C K L G M N O w g x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB EC FC","132":"kB h lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H xB yB","1090":"fB","1412":"jB","1668":"gB hB iB"},D:{"1":"iB jB kB h lB mB nB oB pB P Q R S T U V W X Y Z a b c d e i j k l m n o p q r s t u f H xB yB GC","2":"0 1 2 3 4 5 6 7 8 9 I v J D E F A B C K L G M N O w g x y z AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB uB ZB vB aB bB cB dB eB fB gB","2114":"hB"},E:{"1":"L G 1B MC NC 2B 3B 4B 5B sB 6B 7B 8B 9B OC","2":"I v J D E F HC zB IC JC KC LC","4100":"A B C K 0B qB rB"},F:{"1":"h lB mB nB oB pB P Q R wB S T U V W X Y Z a b c d e","2":"0 1 2 3 4 5 6 7 8 9 F B C G M N O w g x y z AB BB CB PC QC RC SC qB AC TC rB","8196":"DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB"},G:{"1":"lC mC nC 2B 3B 4B 5B sB 6B 7B 8B 9B","2":"E zB UC BC VC WC XC YC","4100":"ZC aC bC cC dC eC fC gC hC iC jC kC"},H:{"2":"oC"},I:{"2":"tB I f pC qC rC sC BC tC uC"},J:{"2":"D A"},K:{"2":"A B C h qB AC rB"},L:{"16388":"H"},M:{"16388":"H"},N:{"2":"A B"},O:{"2":"vC"},P:{"2":"I g wC xC yC zC 0C 0B 1C 2C 3C 4C 5C sB 6C 7C 8C"},Q:{"2":"1B"},R:{"2":"9C"},S:{"2":"AD BD"}},B:5,C:"Picture-in-Picture"};
|
||||
@@ -0,0 +1,25 @@
|
||||
define(['exports', 'module', '../utils'], function (exports, module, _utils) {
|
||||
'use strict';
|
||||
|
||||
module.exports = function (instance) {
|
||||
instance.registerDecorator('inline', function (fn, props, container, options) {
|
||||
var ret = fn;
|
||||
if (!props.partials) {
|
||||
props.partials = {};
|
||||
ret = function (context, options) {
|
||||
// Create a new partials stack frame prior to exec.
|
||||
var original = container.partials;
|
||||
container.partials = _utils.extend({}, original, props.partials);
|
||||
var ret = fn(context, options);
|
||||
container.partials = original;
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
|
||||
props.partials[options.args[0]] = options.fn;
|
||||
|
||||
return ret;
|
||||
});
|
||||
};
|
||||
});
|
||||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFFZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFVBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFVBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLGFBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFdBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLGNBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsbUJBQVMsQ0FBQyxRQUFRLEdBQUcsT0FWcEIsTUFBTSxDQVVxQixFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxjQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLG1CQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixpQkFBTyxHQUFHLENBQUM7U0FDWixDQUFDO09BQ0g7O0FBRUQsV0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFN0MsYUFBTyxHQUFHLENBQUM7S0FDWixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJpbmxpbmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVyRGVjb3JhdG9yKCdpbmxpbmUnLCBmdW5jdGlvbihmbiwgcHJvcHMsIGNvbnRhaW5lciwgb3B0aW9ucykge1xuICAgIGxldCByZXQgPSBmbjtcbiAgICBpZiAoIXByb3BzLnBhcnRpYWxzKSB7XG4gICAgICBwcm9wcy5wYXJ0aWFscyA9IHt9O1xuICAgICAgcmV0ID0gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcGFydGlhbHMgc3RhY2sgZnJhbWUgcHJpb3IgdG8gZXhlYy5cbiAgICAgICAgbGV0IG9yaWdpbmFsID0gY29udGFpbmVyLnBhcnRpYWxzO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBleHRlbmQoe30sIG9yaWdpbmFsLCBwcm9wcy5wYXJ0aWFscyk7XG4gICAgICAgIGxldCByZXQgPSBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3JpZ2luYWw7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHByb3BzLnBhcnRpYWxzW29wdGlvbnMuYXJnc1swXV0gPSBvcHRpb25zLmZuO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=
|
||||
@@ -0,0 +1,9 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SyncProvider = exports.StreamProvider = exports.AsyncProvider = void 0;
|
||||
const async_1 = require("./async");
|
||||
exports.AsyncProvider = async_1.default;
|
||||
const stream_1 = require("./stream");
|
||||
exports.StreamProvider = stream_1.default;
|
||||
const sync_1 = require("./sync");
|
||||
exports.SyncProvider = sync_1.default;
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"AsyncAction.js","sourceRoot":"","sources":["../../../../src/internal/scheduler/AsyncAction.ts"],"names":[],"mappings":"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"}
|
||||
@@ -0,0 +1,29 @@
|
||||
'use strict';
|
||||
|
||||
var Type = require('../type');
|
||||
|
||||
var _hasOwnProperty = Object.prototype.hasOwnProperty;
|
||||
|
||||
function resolveYamlSet(data) {
|
||||
if (data === null) return true;
|
||||
|
||||
var key, object = data;
|
||||
|
||||
for (key in object) {
|
||||
if (_hasOwnProperty.call(object, key)) {
|
||||
if (object[key] !== null) return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function constructYamlSet(data) {
|
||||
return data !== null ? data : {};
|
||||
}
|
||||
|
||||
module.exports = new Type('tag:yaml.org,2002:set', {
|
||||
kind: 'mapping',
|
||||
resolve: resolveYamlSet,
|
||||
construct: constructYamlSet
|
||||
});
|
||||
@@ -0,0 +1,39 @@
|
||||
# strip-bom [](https://travis-ci.org/sindresorhus/strip-bom)
|
||||
|
||||
> Strip UTF-8 [byte order mark](http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8) (BOM) from a string/buffer
|
||||
|
||||
From Wikipedia:
|
||||
|
||||
> The Unicode Standard permits the BOM in UTF-8, but does not require nor recommend its use. Byte order has no meaning in UTF-8.
|
||||
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install --save strip-bom
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
var fs = require('fs');
|
||||
var stripBom = require('strip-bom');
|
||||
|
||||
stripBom('\uFEFFunicorn');
|
||||
//=> 'unicorn'
|
||||
|
||||
stripBom(fs.readFileSync('unicorn.txt'));
|
||||
//=> 'unicorn'
|
||||
```
|
||||
|
||||
|
||||
## Related
|
||||
|
||||
- [strip-bom-cli](https://github.com/sindresorhus/strip-bom-cli) - CLI for this module
|
||||
- [strip-bom-stream](https://github.com/sindresorhus/strip-bom-stream) - Stream version of this module
|
||||
|
||||
|
||||
## License
|
||||
|
||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
||||
@@ -0,0 +1,539 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* This callback will be called to transform a script to JavaScript.
|
||||
*
|
||||
* @callback compileCallback
|
||||
* @param {string} code - Script code to transform to JavaScript.
|
||||
* @param {string} filename - Filename of this script.
|
||||
* @return {string} JavaScript code that represents the script code.
|
||||
*/
|
||||
|
||||
/**
|
||||
* This callback will be called to resolve a module if it couldn't be found.
|
||||
*
|
||||
* @callback resolveCallback
|
||||
* @param {string} moduleName - Name of the modulusedRequiree to resolve.
|
||||
* @param {string} dirname - Name of the current directory.
|
||||
* @return {(string|undefined)} The file or directory to use to load the requested module.
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const pa = require('path');
|
||||
const {
|
||||
Script,
|
||||
createContext
|
||||
} = require('vm');
|
||||
const {
|
||||
EventEmitter
|
||||
} = require('events');
|
||||
const {
|
||||
INSPECT_MAX_BYTES
|
||||
} = require('buffer');
|
||||
const {
|
||||
createBridge,
|
||||
VMError
|
||||
} = require('./bridge');
|
||||
const {
|
||||
transformer,
|
||||
INTERNAL_STATE_NAME
|
||||
} = require('./transformer');
|
||||
const {
|
||||
lookupCompiler
|
||||
} = require('./compiler');
|
||||
const {
|
||||
VMScript
|
||||
} = require('./script');
|
||||
|
||||
const objectDefineProperties = Object.defineProperties;
|
||||
|
||||
/**
|
||||
* Host objects
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
const HOST = Object.freeze({
|
||||
Buffer,
|
||||
Function,
|
||||
Object,
|
||||
transformAndCheck,
|
||||
INSPECT_MAX_BYTES,
|
||||
INTERNAL_STATE_NAME
|
||||
});
|
||||
|
||||
/**
|
||||
* Compile a script.
|
||||
*
|
||||
* @private
|
||||
* @param {string} filename - Filename of the script.
|
||||
* @param {string} script - Script.
|
||||
* @return {vm.Script} The compiled script.
|
||||
*/
|
||||
function compileScript(filename, script) {
|
||||
return new Script(script, {
|
||||
__proto__: null,
|
||||
filename,
|
||||
displayErrors: false
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Default run options for vm.Script.runInContext
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
const DEFAULT_RUN_OPTIONS = Object.freeze({__proto__: null, displayErrors: false});
|
||||
|
||||
function checkAsync(allow) {
|
||||
if (!allow) throw new VMError('Async not available');
|
||||
}
|
||||
|
||||
function transformAndCheck(args, code, isAsync, isGenerator, allowAsync) {
|
||||
const ret = transformer(args, code, isAsync, isGenerator, undefined);
|
||||
checkAsync(allowAsync || !ret.hasAsync);
|
||||
return ret.code;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* This callback will be called and has a specific time to finish.<br>
|
||||
* No parameters will be supplied.<br>
|
||||
* If parameters are required, use a closure.
|
||||
*
|
||||
* @private
|
||||
* @callback runWithTimeout
|
||||
* @return {*}
|
||||
*
|
||||
*/
|
||||
|
||||
let cacheTimeoutContext = null;
|
||||
let cacheTimeoutScript = null;
|
||||
|
||||
/**
|
||||
* Run a function with a specific timeout.
|
||||
*
|
||||
* @private
|
||||
* @param {runWithTimeout} fn - Function to run with the specific timeout.
|
||||
* @param {number} timeout - The amount of time to give the function to finish.
|
||||
* @return {*} The value returned by the function.
|
||||
* @throws {Error} If the function took to long.
|
||||
*/
|
||||
function doWithTimeout(fn, timeout) {
|
||||
if (!cacheTimeoutContext) {
|
||||
cacheTimeoutContext = createContext();
|
||||
cacheTimeoutScript = new Script('fn()', {
|
||||
__proto__: null,
|
||||
filename: 'timeout_bridge.js',
|
||||
displayErrors: false
|
||||
});
|
||||
}
|
||||
cacheTimeoutContext.fn = fn;
|
||||
try {
|
||||
return cacheTimeoutScript.runInContext(cacheTimeoutContext, {
|
||||
__proto__: null,
|
||||
displayErrors: false,
|
||||
timeout
|
||||
});
|
||||
} finally {
|
||||
cacheTimeoutContext.fn = null;
|
||||
}
|
||||
}
|
||||
|
||||
const bridgeScript = compileScript(`${__dirname}/bridge.js`,
|
||||
`(function(global) {"use strict"; const exports = {};${fs.readFileSync(`${__dirname}/bridge.js`, 'utf8')}\nreturn exports;})`);
|
||||
const setupSandboxScript = compileScript(`${__dirname}/setup-sandbox.js`,
|
||||
`(function(global, host, bridge, data, context) { ${fs.readFileSync(`${__dirname}/setup-sandbox.js`, 'utf8')}\n})`);
|
||||
const getGlobalScript = compileScript('get_global.js', 'this');
|
||||
|
||||
let getGeneratorFunctionScript = null;
|
||||
let getAsyncFunctionScript = null;
|
||||
let getAsyncGeneratorFunctionScript = null;
|
||||
try {
|
||||
getGeneratorFunctionScript = compileScript('get_generator_function.js', '(function*(){}).constructor');
|
||||
} catch (ex) {}
|
||||
try {
|
||||
getAsyncFunctionScript = compileScript('get_async_function.js', '(async function(){}).constructor');
|
||||
} catch (ex) {}
|
||||
try {
|
||||
getAsyncGeneratorFunctionScript = compileScript('get_async_generator_function.js', '(async function*(){}).constructor');
|
||||
} catch (ex) {}
|
||||
|
||||
/**
|
||||
* Class VM.
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
class VM extends EventEmitter {
|
||||
|
||||
/**
|
||||
* The timeout for {@link VM#run} calls.
|
||||
*
|
||||
* @public
|
||||
* @since v3.9.0
|
||||
* @member {number} timeout
|
||||
* @memberOf VM#
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the global sandbox object.
|
||||
*
|
||||
* @public
|
||||
* @readonly
|
||||
* @since v3.9.0
|
||||
* @member {Object} sandbox
|
||||
* @memberOf VM#
|
||||
*/
|
||||
|
||||
/**
|
||||
* The compiler to use to get the JavaScript code.
|
||||
*
|
||||
* @public
|
||||
* @readonly
|
||||
* @since v3.9.0
|
||||
* @member {(string|compileCallback)} compiler
|
||||
* @memberOf VM#
|
||||
*/
|
||||
|
||||
/**
|
||||
* The resolved compiler to use to get the JavaScript code.
|
||||
*
|
||||
* @private
|
||||
* @readonly
|
||||
* @member {compileCallback} _compiler
|
||||
* @memberOf VM#
|
||||
*/
|
||||
|
||||
/**
|
||||
* Create a new VM instance.
|
||||
*
|
||||
* @public
|
||||
* @param {Object} [options] - VM options.
|
||||
* @param {number} [options.timeout] - The amount of time until a call to {@link VM#run} will timeout.
|
||||
* @param {Object} [options.sandbox] - Objects that will be copied into the global object of the sandbox.
|
||||
* @param {(string|compileCallback)} [options.compiler="javascript"] - The compiler to use.
|
||||
* @param {boolean} [options.eval=true] - Allow the dynamic evaluation of code via eval(code) or Function(code)().<br>
|
||||
* Only available for node v10+.
|
||||
* @param {boolean} [options.wasm=true] - Allow to run wasm code.<br>
|
||||
* Only available for node v10+.
|
||||
* @param {boolean} [options.allowAsync=true] - Allows for async functions.
|
||||
* @throws {VMError} If the compiler is unknown.
|
||||
*/
|
||||
constructor(options = {}) {
|
||||
super();
|
||||
|
||||
// Read all options
|
||||
const {
|
||||
timeout,
|
||||
sandbox,
|
||||
compiler = 'javascript',
|
||||
allowAsync: optAllowAsync = true
|
||||
} = options;
|
||||
const allowEval = options.eval !== false;
|
||||
const allowWasm = options.wasm !== false;
|
||||
const allowAsync = optAllowAsync && !options.fixAsync;
|
||||
|
||||
// Early error if sandbox is not an object.
|
||||
if (sandbox && 'object' !== typeof sandbox) {
|
||||
throw new VMError('Sandbox must be object.');
|
||||
}
|
||||
|
||||
// Early error if compiler can't be found.
|
||||
const resolvedCompiler = lookupCompiler(compiler);
|
||||
|
||||
// Create a new context for this vm.
|
||||
const _context = createContext(undefined, {
|
||||
__proto__: null,
|
||||
codeGeneration: {
|
||||
__proto__: null,
|
||||
strings: allowEval,
|
||||
wasm: allowWasm
|
||||
}
|
||||
});
|
||||
|
||||
const sandboxGlobal = getGlobalScript.runInContext(_context, DEFAULT_RUN_OPTIONS);
|
||||
|
||||
// Initialize the sandbox bridge
|
||||
const {
|
||||
createBridge: sandboxCreateBridge
|
||||
} = bridgeScript.runInContext(_context, DEFAULT_RUN_OPTIONS)(sandboxGlobal);
|
||||
|
||||
// Initialize the bridge
|
||||
const bridge = createBridge(sandboxCreateBridge, () => {});
|
||||
|
||||
const data = {
|
||||
__proto__: null,
|
||||
allowAsync
|
||||
};
|
||||
|
||||
if (getGeneratorFunctionScript) {
|
||||
data.GeneratorFunction = getGeneratorFunctionScript.runInContext(_context, DEFAULT_RUN_OPTIONS);
|
||||
}
|
||||
if (getAsyncFunctionScript) {
|
||||
data.AsyncFunction = getAsyncFunctionScript.runInContext(_context, DEFAULT_RUN_OPTIONS);
|
||||
}
|
||||
if (getAsyncGeneratorFunctionScript) {
|
||||
data.AsyncGeneratorFunction = getAsyncGeneratorFunctionScript.runInContext(_context, DEFAULT_RUN_OPTIONS);
|
||||
}
|
||||
|
||||
// Create the bridge between the host and the sandbox.
|
||||
const internal = setupSandboxScript.runInContext(_context, DEFAULT_RUN_OPTIONS)(sandboxGlobal, HOST, bridge.other, data, _context);
|
||||
|
||||
const runScript = (script) => {
|
||||
// This closure is intentional to hide _context and bridge since the allow to access the sandbox directly which is unsafe.
|
||||
let ret;
|
||||
try {
|
||||
ret = script.runInContext(_context, DEFAULT_RUN_OPTIONS);
|
||||
} catch (e) {
|
||||
throw bridge.from(e);
|
||||
}
|
||||
return bridge.from(ret);
|
||||
};
|
||||
|
||||
const makeReadonly = (value, mock) => {
|
||||
try {
|
||||
internal.readonly(value, mock);
|
||||
} catch (e) {
|
||||
throw bridge.from(e);
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
||||
const makeProtected = (value) => {
|
||||
const sandboxBridge = bridge.other;
|
||||
try {
|
||||
sandboxBridge.fromWithFactory(sandboxBridge.protectedFactory, value);
|
||||
} catch (e) {
|
||||
throw bridge.from(e);
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
||||
const addProtoMapping = (hostProto, sandboxProto) => {
|
||||
const sandboxBridge = bridge.other;
|
||||
let otherProto;
|
||||
try {
|
||||
otherProto = sandboxBridge.from(sandboxProto);
|
||||
sandboxBridge.addProtoMapping(otherProto, hostProto);
|
||||
} catch (e) {
|
||||
throw bridge.from(e);
|
||||
}
|
||||
bridge.addProtoMapping(hostProto, otherProto);
|
||||
};
|
||||
|
||||
const addProtoMappingFactory = (hostProto, sandboxProtoFactory) => {
|
||||
const sandboxBridge = bridge.other;
|
||||
const factory = () => {
|
||||
const proto = sandboxProtoFactory(this);
|
||||
bridge.addProtoMapping(hostProto, proto);
|
||||
return proto;
|
||||
};
|
||||
try {
|
||||
const otherProtoFactory = sandboxBridge.from(factory);
|
||||
sandboxBridge.addProtoMappingFactory(otherProtoFactory, hostProto);
|
||||
} catch (e) {
|
||||
throw bridge.from(e);
|
||||
}
|
||||
};
|
||||
|
||||
// Define the properties of this object.
|
||||
// Use Object.defineProperties here to be able to
|
||||
// hide and set properties read-only.
|
||||
objectDefineProperties(this, {
|
||||
__proto__: null,
|
||||
timeout: {
|
||||
__proto__: null,
|
||||
value: timeout,
|
||||
writable: true,
|
||||
enumerable: true
|
||||
},
|
||||
compiler: {
|
||||
__proto__: null,
|
||||
value: compiler,
|
||||
enumerable: true
|
||||
},
|
||||
sandbox: {
|
||||
__proto__: null,
|
||||
value: bridge.from(sandboxGlobal),
|
||||
enumerable: true
|
||||
},
|
||||
_runScript: {__proto__: null, value: runScript},
|
||||
_makeReadonly: {__proto__: null, value: makeReadonly},
|
||||
_makeProtected: {__proto__: null, value: makeProtected},
|
||||
_addProtoMapping: {__proto__: null, value: addProtoMapping},
|
||||
_addProtoMappingFactory: {__proto__: null, value: addProtoMappingFactory},
|
||||
_compiler: {__proto__: null, value: resolvedCompiler},
|
||||
_allowAsync: {__proto__: null, value: allowAsync}
|
||||
});
|
||||
|
||||
// prepare global sandbox
|
||||
if (sandbox) {
|
||||
this.setGlobals(sandbox);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds all the values to the globals.
|
||||
*
|
||||
* @public
|
||||
* @since v3.9.0
|
||||
* @param {Object} values - All values that will be added to the globals.
|
||||
* @return {this} This for chaining.
|
||||
* @throws {*} If the setter of a global throws an exception it is propagated. And the remaining globals will not be written.
|
||||
*/
|
||||
setGlobals(values) {
|
||||
for (const name in values) {
|
||||
if (Object.prototype.hasOwnProperty.call(values, name)) {
|
||||
this.sandbox[name] = values[name];
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a global value.
|
||||
*
|
||||
* @public
|
||||
* @since v3.9.0
|
||||
* @param {string} name - The name of the global.
|
||||
* @param {*} value - The value of the global.
|
||||
* @return {this} This for chaining.
|
||||
* @throws {*} If the setter of the global throws an exception it is propagated.
|
||||
*/
|
||||
setGlobal(name, value) {
|
||||
this.sandbox[name] = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a global value.
|
||||
*
|
||||
* @public
|
||||
* @since v3.9.0
|
||||
* @param {string} name - The name of the global.
|
||||
* @return {*} The value of the global.
|
||||
* @throws {*} If the getter of the global throws an exception it is propagated.
|
||||
*/
|
||||
getGlobal(name) {
|
||||
return this.sandbox[name];
|
||||
}
|
||||
|
||||
/**
|
||||
* Freezes the object inside VM making it read-only. Not available for primitive values.
|
||||
*
|
||||
* @public
|
||||
* @param {*} value - Object to freeze.
|
||||
* @param {string} [globalName] - Whether to add the object to global.
|
||||
* @return {*} Object to freeze.
|
||||
* @throws {*} If the setter of the global throws an exception it is propagated.
|
||||
*/
|
||||
freeze(value, globalName) {
|
||||
this.readonly(value);
|
||||
if (globalName) this.sandbox[globalName] = value;
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Freezes the object inside VM making it read-only. Not available for primitive values.
|
||||
*
|
||||
* @public
|
||||
* @param {*} value - Object to freeze.
|
||||
* @param {*} [mock] - When the object does not have a property the mock is used before prototype lookup.
|
||||
* @return {*} Object to freeze.
|
||||
*/
|
||||
readonly(value, mock) {
|
||||
return this._makeReadonly(value, mock);
|
||||
}
|
||||
|
||||
/**
|
||||
* Protects the object inside VM making impossible to set functions as it's properties. Not available for primitive values.
|
||||
*
|
||||
* @public
|
||||
* @param {*} value - Object to protect.
|
||||
* @param {string} [globalName] - Whether to add the object to global.
|
||||
* @return {*} Object to protect.
|
||||
* @throws {*} If the setter of the global throws an exception it is propagated.
|
||||
*/
|
||||
protect(value, globalName) {
|
||||
this._makeProtected(value);
|
||||
if (globalName) this.sandbox[globalName] = value;
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the code in VM.
|
||||
*
|
||||
* @public
|
||||
* @param {(string|VMScript)} code - Code to run.
|
||||
* @param {(string|Object)} [options] - Options map or filename.
|
||||
* @param {string} [options.filename="vm.js"] - Filename that shows up in any stack traces produced from this script.<br>
|
||||
* This is only used if code is a String.
|
||||
* @return {*} Result of executed code.
|
||||
* @throws {SyntaxError} If there is a syntax error in the script.
|
||||
* @throws {Error} An error is thrown when the script took to long and there is a timeout.
|
||||
* @throws {*} If the script execution terminated with an exception it is propagated.
|
||||
*/
|
||||
run(code, options) {
|
||||
let script;
|
||||
let filename;
|
||||
|
||||
if (typeof options === 'object') {
|
||||
filename = options.filename;
|
||||
} else {
|
||||
filename = options;
|
||||
}
|
||||
|
||||
if (code instanceof VMScript) {
|
||||
script = code._compileVM();
|
||||
checkAsync(this._allowAsync || !code._hasAsync);
|
||||
} else {
|
||||
const useFileName = filename || 'vm.js';
|
||||
let scriptCode = this._compiler(code, useFileName);
|
||||
const ret = transformer(null, scriptCode, false, false, useFileName);
|
||||
scriptCode = ret.code;
|
||||
checkAsync(this._allowAsync || !ret.hasAsync);
|
||||
// Compile the script here so that we don't need to create a instance of VMScript.
|
||||
script = new Script(scriptCode, {
|
||||
__proto__: null,
|
||||
filename: useFileName,
|
||||
displayErrors: false
|
||||
});
|
||||
}
|
||||
|
||||
if (!this.timeout) {
|
||||
return this._runScript(script);
|
||||
}
|
||||
|
||||
return doWithTimeout(() => {
|
||||
return this._runScript(script);
|
||||
}, this.timeout);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the code in VM.
|
||||
*
|
||||
* @public
|
||||
* @since v3.9.0
|
||||
* @param {string} filename - Filename of file to load and execute in a NodeVM.
|
||||
* @return {*} Result of executed code.
|
||||
* @throws {Error} If filename is not a valid filename.
|
||||
* @throws {SyntaxError} If there is a syntax error in the script.
|
||||
* @throws {Error} An error is thrown when the script took to long and there is a timeout.
|
||||
* @throws {*} If the script execution terminated with an exception it is propagated.
|
||||
*/
|
||||
runFile(filename) {
|
||||
const resolvedFilename = pa.resolve(filename);
|
||||
|
||||
if (!fs.existsSync(resolvedFilename)) {
|
||||
throw new VMError(`Script '${filename}' not found.`);
|
||||
}
|
||||
|
||||
if (fs.statSync(resolvedFilename).isDirectory()) {
|
||||
throw new VMError('Script must be file, got directory.');
|
||||
}
|
||||
|
||||
return this.run(fs.readFileSync(resolvedFilename, 'utf8'), resolvedFilename);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
exports.VM = VM;
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"startWith.d.ts","sourceRoot":"","sources":["../../../../src/internal/operators/startWith.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAS3E,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AACzE,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;AAEnF,8JAA8J;AAC9J,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,SAAS,OAAO,EAAE,GAAG,CAAC,EAAE,EAC7D,GAAG,kBAAkB,EAAE,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,GAC3C,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,SAAS,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user