123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.deprecate = exports.isObjectLike = exports.isDate = exports.haveBuffer = exports.isMap = exports.isRegExp = exports.isBigUInt64Array = exports.isBigInt64Array = exports.isUint8Array = exports.isAnyArrayBuffer = exports.randomBytes = exports.normalizedFunctionString = void 0;
- var buffer_1 = require("buffer");
- var global_1 = require("../utils/global");
- /**
- * Normalizes our expected stringified form of a function across versions of node
- * @param fn - The function to stringify
- */
- function normalizedFunctionString(fn) {
- return fn.toString().replace('function(', 'function (');
- }
- exports.normalizedFunctionString = normalizedFunctionString;
- function isReactNative() {
- var g = global_1.getGlobal();
- return typeof g.navigator === 'object' && g.navigator.product === 'ReactNative';
- }
- var insecureRandomBytes = function insecureRandomBytes(size) {
- var insecureWarning = isReactNative()
- ? 'BSON: For React Native please polyfill crypto.getRandomValues, e.g. using: https://www.npmjs.com/package/react-native-get-random-values.'
- : 'BSON: No cryptographic implementation for random bytes present, falling back to a less secure implementation.';
- console.warn(insecureWarning);
- var result = buffer_1.Buffer.alloc(size);
- for (var i = 0; i < size; ++i)
- result[i] = Math.floor(Math.random() * 256);
- return result;
- };
- var detectRandomBytes = function () {
- if (typeof window !== 'undefined') {
- // browser crypto implementation(s)
- var target_1 = window.crypto || window.msCrypto; // allow for IE11
- if (target_1 && target_1.getRandomValues) {
- return function (size) { return target_1.getRandomValues(buffer_1.Buffer.alloc(size)); };
- }
- }
- if (typeof global !== 'undefined' && global.crypto && global.crypto.getRandomValues) {
- // allow for RN packages such as https://www.npmjs.com/package/react-native-get-random-values to populate global
- return function (size) { return global.crypto.getRandomValues(buffer_1.Buffer.alloc(size)); };
- }
- var requiredRandomBytes;
- try {
- // eslint-disable-next-line @typescript-eslint/no-var-requires
- requiredRandomBytes = require('crypto').randomBytes;
- }
- catch (e) {
- // keep the fallback
- }
- // NOTE: in transpiled cases the above require might return null/undefined
- return requiredRandomBytes || insecureRandomBytes;
- };
- exports.randomBytes = detectRandomBytes();
- function isAnyArrayBuffer(value) {
- return ['[object ArrayBuffer]', '[object SharedArrayBuffer]'].includes(Object.prototype.toString.call(value));
- }
- exports.isAnyArrayBuffer = isAnyArrayBuffer;
- function isUint8Array(value) {
- return Object.prototype.toString.call(value) === '[object Uint8Array]';
- }
- exports.isUint8Array = isUint8Array;
- function isBigInt64Array(value) {
- return Object.prototype.toString.call(value) === '[object BigInt64Array]';
- }
- exports.isBigInt64Array = isBigInt64Array;
- function isBigUInt64Array(value) {
- return Object.prototype.toString.call(value) === '[object BigUint64Array]';
- }
- exports.isBigUInt64Array = isBigUInt64Array;
- function isRegExp(d) {
- return Object.prototype.toString.call(d) === '[object RegExp]';
- }
- exports.isRegExp = isRegExp;
- function isMap(d) {
- return Object.prototype.toString.call(d) === '[object Map]';
- }
- exports.isMap = isMap;
- /** Call to check if your environment has `Buffer` */
- function haveBuffer() {
- return typeof global !== 'undefined' && typeof global.Buffer !== 'undefined';
- }
- exports.haveBuffer = haveBuffer;
- // To ensure that 0.4 of node works correctly
- function isDate(d) {
- return isObjectLike(d) && Object.prototype.toString.call(d) === '[object Date]';
- }
- exports.isDate = isDate;
- /**
- * @internal
- * this is to solve the `'someKey' in x` problem where x is unknown.
- * https://github.com/typescript-eslint/typescript-eslint/issues/1071#issuecomment-541955753
- */
- function isObjectLike(candidate) {
- return typeof candidate === 'object' && candidate !== null;
- }
- exports.isObjectLike = isObjectLike;
- function deprecate(fn, message) {
- var warned = false;
- function deprecated() {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- if (!warned) {
- console.warn(message);
- warned = true;
- }
- return fn.apply(this, args);
- }
- return deprecated;
- }
- exports.deprecate = deprecate;
- //# sourceMappingURL=utils.js.map
|