jsmodern
Version:
An extension to existing JavaScript, influenced by other great languages such as Rust, Dart, Java, Golang, etc.
46 lines • 1.49 kB
JavaScript
function toObject(name) {
switch (name) {
case 'array': return Array;
case 'boolean': return Boolean;
case 'date': return Date;
case 'error': return Error;
case 'function': return Function;
case 'map': return Map;
case 'number': return Number;
case 'object': return Object;
case 'promise': return Promise;
case 'regExp': return RegExp;
case 'set': return Set;
case 'string': return String;
case 'symbol': return Symbol;
case 'weakMap': return WeakMap;
case 'weakSet': return WeakSet;
case 'iterator':
default: {
return 'undefined' === typeof (window) ? global : window;
}
}
}
export function extend(extensions) {
const ext = extensions || {};
const extKeys = Object.keys(ext);
if (!extKeys.length)
return;
const featuresList = extKeys.map((n) => {
return { type: toObject(n), features: ext[n] };
});
for (const { type, features } of featuresList) {
for (const { fn, label, isStatic } of features) {
const ctr = type;
const root = isStatic || !ctr.prototype ? ctr : ctr.prototype;
if (label in root)
continue;
Object.defineProperty(root, label, {
configurable: true,
value: fn,
writable: true,
});
}
}
}
//# sourceMappingURL=extend.js.map