[ci] format

This commit is contained in:
okikio 2022-04-26 21:53:43 +00:00 committed by github-actions[bot]
parent f0d22b9332
commit cbd9e6222e
2 changed files with 269 additions and 225 deletions

View file

@ -13,16 +13,20 @@ const GlobalCrypto = globalThis.crypto as Crypto;
export function randomBytes(size: number, cb?: (...args: any) => any) {
if (!(GlobalCrypto && GlobalCrypto.getRandomValues)) {
throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11')
throw new Error(
'Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11'
);
}
// phantomjs needs to throw
if (size > MAX_UINT32) throw new RangeError('requested too many random bytes');
let bytes = new Uint32Array(size)
let bytes = new Uint32Array(size);
if (size > 0) { // getRandomValues fails on IE if size == 0
if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues
if (size > 0) {
// getRandomValues fails on IE if size == 0
if (size > MAX_BYTES) {
// this is the max bytes crypto.getRandomValues
// can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
for (let generated = 0; generated < size; generated += MAX_BYTES) {
// buffer.slice automatically checks if the end is past the end of

View file

@ -7,12 +7,15 @@ Copyrights licensed under the New BSD License.
See the accompanying LICENSE file for terms.
*/
import { randomBytes } from "./random-bytes";
import { randomBytes } from './random-bytes';
// Generate an internal UID to make the regexp pattern harder to guess.
const UID_LENGTH = 16;
const UID = generateUID();
const PLACE_HOLDER_REGEXP = new RegExp('(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L)-' + UID + '-(\\d+)__@"', 'g');
const PLACE_HOLDER_REGEXP = new RegExp(
'(\\\\)?"@__(F|R|D|M|S|A|U|I|B|L)-' + UID + '-(\\d+)__@"',
'g'
);
const IS_NATIVE_CODE_REGEXP = /\{\s*\[native code\]\s*\}/g;
const IS_PURE_FUNCTION = /function.*?\(/;
@ -28,10 +31,12 @@ const ESCAPED_CHARS = {
'>': '\\u003E',
'/': '\\u002F',
'\u2028': '\\u2028',
'\u2029': '\\u2029'
'\u2029': '\\u2029',
};
function escapeUnsafeChars(unsafeChar: keyof typeof ESCAPED_CHARS): typeof ESCAPED_CHARS[keyof typeof ESCAPED_CHARS] {
function escapeUnsafeChars(
unsafeChar: keyof typeof ESCAPED_CHARS
): typeof ESCAPED_CHARS[keyof typeof ESCAPED_CHARS] {
return ESCAPED_CHARS[unsafeChar];
}
@ -47,7 +52,7 @@ function generateUID() {
function deleteFunctions(obj: Record<any, any>) {
let functionKeys = [];
for (let key in obj) {
if (typeof obj[key] === "function") {
if (typeof obj[key] === 'function') {
functionKeys.push(key);
}
}
@ -57,7 +62,10 @@ function deleteFunctions(obj: Record<any, any>) {
}
export type TypeGenericFunction = (...args: any[]) => any;
export function serialize(obj: Record<any, any> | any, options?: number | string | Record<any, any>): string | any {
export function serialize(
obj: Record<any, any> | any,
options?: number | string | Record<any, any>
): string | any {
options || (options = {});
// Backwards-compatibility for `space` as the second argument.
@ -72,14 +80,13 @@ export function serialize(obj: Record<any, any> | any, options?: number | string
let sets: Set<any>[] = [];
let arrays: any[] = [];
let undefs: undefined[] = [];
let infinities: (typeof Infinity)[] = [];
let infinities: typeof Infinity[] = [];
let bigInts: BigInt[] = [];
let urls: URL[] = [];
// Returns placeholders for functions and regexps (identified by index)
// which are later replaced by their string representation.
function replacer(key: any, value: any) {
// For nested function
// @ts-ignore
if (options.ignoreFunction) {
@ -114,7 +121,10 @@ export function serialize(obj: Record<any, any> | any, options?: number | string
}
if (origValue instanceof Array) {
let isSparse = origValue.filter(function () { return true }).length !== origValue.length;
let isSparse =
origValue.filter(function () {
return true;
}).length !== origValue.length;
if (isSparse) {
return '@__A-' + UID + '-' + (arrays.push(origValue) - 1) + '__@';
}
@ -161,20 +171,26 @@ export function serialize(obj: Record<any, any> | any, options?: number | string
}
let argsStartsAt = serializedFn.indexOf('(');
let def = serializedFn.substr(0, argsStartsAt)
let def = serializedFn
.substr(0, argsStartsAt)
.trim()
.split(' ')
.filter(function (val: string) { return val.length > 0 });
.filter(function (val: string) {
return val.length > 0;
});
let nonReservedSymbols = def.filter(function (val: string) {
return RESERVED_SYMBOLS.indexOf(val) === -1
return RESERVED_SYMBOLS.indexOf(val) === -1;
});
// enhanced literal objects, example: {key() {}}
if (nonReservedSymbols.length > 0) {
return (def.indexOf('async') > -1 ? 'async ' : '') + 'function'
+ (def.join('').indexOf('*') > -1 ? '*' : '')
+ serializedFn.substr(argsStartsAt);
return (
(def.indexOf('async') > -1 ? 'async ' : '') +
'function' +
(def.join('').indexOf('*') > -1 ? '*' : '') +
serializedFn.substr(argsStartsAt)
);
}
// arrow functions
@ -182,7 +198,7 @@ export function serialize(obj: Record<any, any> | any, options?: number | string
}
// Check if the parameter is function
if (options.ignoreFunction && typeof obj === "function") {
if (options.ignoreFunction && typeof obj === 'function') {
obj = undefined;
}
// Protects against `JSON.stringify()` returning `undefined`, by serializing
@ -216,7 +232,18 @@ export function serialize(obj: Record<any, any> | any, options?: number | string
str = str.replace(UNSAFE_CHARS_REGEXP, escapeUnsafeChars);
}
if (functions.length === 0 && regexps.length === 0 && dates.length === 0 && maps.length === 0 && sets.length === 0 && arrays.length === 0 && undefs.length === 0 && infinities.length === 0 && bigInts.length === 0 && urls.length === 0) {
if (
functions.length === 0 &&
regexps.length === 0 &&
dates.length === 0 &&
maps.length === 0 &&
sets.length === 0 &&
arrays.length === 0 &&
undefs.length === 0 &&
infinities.length === 0 &&
bigInts.length === 0 &&
urls.length === 0
) {
return str;
}
@ -233,27 +260,40 @@ export function serialize(obj: Record<any, any> | any, options?: number | string
}
if (type === 'D') {
return "new Date(\"" + dates[valueIndex].toISOString() + "\")";
return 'new Date("' + dates[valueIndex].toISOString() + '")';
}
if (type === 'R') {
return "new RegExp(" + serialize(regexps[valueIndex].source) + ", \"" + regexps[valueIndex].flags + "\")";
return (
'new RegExp(' +
serialize(regexps[valueIndex].source) +
', "' +
regexps[valueIndex].flags +
'")'
);
}
if (type === 'M') {
return "new Map(" + serialize(Array.from(maps[valueIndex].entries()), options) + ")";
return 'new Map(' + serialize(Array.from(maps[valueIndex].entries()), options) + ')';
}
if (type === 'S') {
return "new Set(" + serialize(Array.from(sets[valueIndex].values()), options) + ")";
return 'new Set(' + serialize(Array.from(sets[valueIndex].values()), options) + ')';
}
if (type === 'A') {
return "Array.prototype.slice.call(" + serialize(Object.assign({ length: arrays[valueIndex].length }, arrays[valueIndex]), options) + ")";
return (
'Array.prototype.slice.call(' +
serialize(
Object.assign({ length: arrays[valueIndex].length }, arrays[valueIndex]),
options
) +
')'
);
}
if (type === 'U') {
return 'undefined'
return 'undefined';
}
if (type === 'I') {
@ -261,11 +301,11 @@ export function serialize(obj: Record<any, any> | any, options?: number | string
}
if (type === 'B') {
return "BigInt(\"" + bigInts[valueIndex] + "\")";
return 'BigInt("' + bigInts[valueIndex] + '")';
}
if (type === 'L') {
return "new URL(\"" + urls[valueIndex].toString() + "\")";
return 'new URL("' + urls[valueIndex].toString() + '")';
}
let fn = functions[valueIndex];