diff --git a/packages/data/single-file/src/define-properties.ts b/packages/data/single-file/src/define-properties.ts index ec5b154..9af0137 100644 --- a/packages/data/single-file/src/define-properties.ts +++ b/packages/data/single-file/src/define-properties.ts @@ -1 +1,34 @@ -export { defineProperties as default } from '@nolyfill/shared'; +const defineProperty = (object: any, name: string | number | symbol, value: any, predicate: (() => boolean) | true | undefined) => { + if (name in object) { + if (predicate === true) { + if (object[name] === value) { + return; + } + } else if ( + typeof predicate !== 'function' + || !predicate() + ) { + return; + } + } + Object.defineProperty(object, name, { + configurable: true, + enumerable: false, + value, + writable: true + }); +}; + +const defineProperties = ( + object: object, + map: M & ThisType, + predicates?: Partial boolean>> +) => { + const props: Array = Array.prototype.concat.call(Object.keys(map), Object.getOwnPropertySymbols(map)); + for (let i = 0, l = props.length; i < l; i++) { + const k = props[i]; + defineProperty(object, k, map[k], predicates?.[k]); + } +}; + +export default defineProperties; diff --git a/packages/generated/define-properties/index.js b/packages/generated/define-properties/index.js index be806c6..dd1c0ad 100644 --- a/packages/generated/define-properties/index.js +++ b/packages/generated/define-properties/index.js @@ -1,2 +1,2 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return e.defineProperties}});const e=require("@nolyfill/shared"); +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return t}});const e=(e,t,r,n)=>{if(t in e){if(!0===n){if(e[t]===r)return}else if("function"!=typeof n||!n())return}Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:r,writable:!0})},t=(t,r,n)=>{let o=Array.prototype.concat.call(Object.keys(r),Object.getOwnPropertySymbols(r));for(let l=0,i=o.length;l boolean) | true | undefined) => { - if (name in object) { - if (predicate === true) { - if (object[name] === value) { - return; - } - } else if ( - typeof predicate !== 'function' - || !predicate() - ) { - return; - } - } - Object.defineProperty(object, name, { - configurable: true, - enumerable: false, - value, - writable: true - }); -}; -export const defineProperties = ( - object: object, - map: M & ThisType, - predicates?: Partial boolean>> -) => { - const props: Array = Array.prototype.concat.call(Object.keys(map), Object.getOwnPropertySymbols(map)); - for (let i = 0, l = props.length; i < l; i++) { - const k = props[i]; - defineProperty(object, k, map[k], predicates?.[k]); - } -}; diff --git a/packages/tools/shared/src/index.ts b/packages/tools/shared/src/index.ts index 1e4bdd5..23f506a 100644 --- a/packages/tools/shared/src/index.ts +++ b/packages/tools/shared/src/index.ts @@ -1,5 +1,4 @@ export { uncurryThis } from './uncurry-this'; export { TypedArrayPrototype } from './typed-array-prototype'; -export { defineProperties } from './define-properties'; export { makeEsShim } from './make-es-shim'; export { defineEsShim } from './define-es-shim'; diff --git a/packages/tools/shared/src/make-es-shim.ts b/packages/tools/shared/src/make-es-shim.ts index c35b400..987484e 100644 --- a/packages/tools/shared/src/make-es-shim.ts +++ b/packages/tools/shared/src/make-es-shim.ts @@ -4,30 +4,36 @@ export interface EsShimProp { shim(): I } +const GET_POLYFILL = 'getPolyfill'; +const SHIM = 'shim'; +const IMPLEMENTATION = 'implementation'; + +const sharedDescriptor = { + configurable: true, + enumerable: false, + writable: true +}; + +const ObjectDefineProperty = Object.defineProperty; + export function makeEsShim(shim: T, implementation: I): asserts shim is T & EsShimProp { const getPolyfill = () => implementation; - if (!('implementation' in shim)) { - Object.defineProperty(shim, 'implementation', { - configurable: true, - enumerable: false, + if (!(IMPLEMENTATION in shim)) { + ObjectDefineProperty(shim, IMPLEMENTATION, { value: implementation, - writable: true + ...sharedDescriptor }); } - if (!('getPolyfill' in shim)) { - Object.defineProperty(shim, 'getPolyfill', { - configurable: true, - enumerable: false, + if (!(GET_POLYFILL in shim)) { + ObjectDefineProperty(shim, GET_POLYFILL, { value: getPolyfill, - writable: true + ...sharedDescriptor }); } - if (!('shim' in shim)) { - Object.defineProperty(shim, 'shim', { - configurable: true, - enumerable: false, + if (!(SHIM in shim)) { + ObjectDefineProperty(shim, SHIM, { value: getPolyfill, - writable: true + ...sharedDescriptor }); } } diff --git a/packages/tools/shared/src/typed-array-prototype.ts b/packages/tools/shared/src/typed-array-prototype.ts index 143a499..cd9ae6e 100644 --- a/packages/tools/shared/src/typed-array-prototype.ts +++ b/packages/tools/shared/src/typed-array-prototype.ts @@ -1 +1 @@ -export const TypedArrayPrototype = Object.getPrototypeOf(Uint8Array.prototype) as Uint8Array; +export const TypedArrayPrototype = Object.getPrototypeOf(Int8Array.prototype) as Int8Array;