UNPKG

tynder

Version:

TypeScript friendly Data validator for JavaScript.

105 lines 4.13 kB
// Copyright (c) 2020 Shellyl_N and Authors // license: ISC // https://github.com/shellyln // tslint:disable: no-shadowed-variable // tslint:disable: function-constructor export const dummyTargetObject = {}; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment export const { g: globalObj, o: objConstructor, f: funConstructor } = (() => { var _a, _b; let globalObj = null; try { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-implied-eval globalObj = Function('return this')(); } catch (e) { // Nothing to do. } if (!globalObj) { // Fall back (for CSP, etc...) if (typeof window === 'object' && window) { globalObj = window; } else if (typeof global === 'object' && global) { globalObj = global; } else if (typeof globalThis === 'object' && globalThis) { globalObj = globalThis; } else { globalObj = dummyTargetObject; } } // NOTE: ({}).constructor === Object // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment let objConstructor = null; try { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment objConstructor = ((_a = ({}).constructor) !== null && _a !== void 0 ? _a : Object); } catch (e) { // Nothing to do. } if (!objConstructor) { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment objConstructor = dummyTargetObject; } // NOTE: ({}).toString.constructor === Function // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment let funConstructor = null; try { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment funConstructor = ((_b = ({}).toString.constructor) !== null && _b !== void 0 ? _b : Function); } catch (e) { // Nothing to do. } if (!funConstructor) { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment funConstructor = dummyTargetObject; } return ({ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment g: globalObj, o: objConstructor, f: funConstructor }); })(); // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function isUnsafeVarNames(target, varName) { if (target === globalObj || varName === '__proto__' || varName === '__defineGetter__' || varName === '__defineSetter__' || varName === '__lookupGetter__' || varName === '__lookupSetter__') { return true; } if (varName === 'prototype' || varName === 'constructor') { if (target === null || target === void 0 || typeof target === 'function') { return true; } } if (target === null || target === void 0 || target === objConstructor) { if (Object.prototype.hasOwnProperty.call(objConstructor, varName)) { return true; } } if (target === null || target === void 0 || target === funConstructor) { // checking 'call', 'arguments', 'caller', ... let con = funConstructor; while (con) { // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access if (Object.prototype.hasOwnProperty.call(con, varName)) { return true; } // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access con = con.__proto__; } } if (typeof target === 'function') { // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access if (!Object.prototype.hasOwnProperty.call(target, varName)) { // function's prototypes' members return true; } } return false; } //# sourceMappingURL=protection.js.map