diff --git a/Reflect.ts b/Reflect.ts index 190d386..552f95c 100644 --- a/Reflect.ts +++ b/Reflect.ts @@ -1745,6 +1745,7 @@ namespace Reflect { } function CreateFallbackProvider(reflect: typeof Reflect): MetadataProvider { + const { defineMetadata, hasOwnMetadata, getOwnMetadata, getOwnMetadataKeys, deleteMetadata } = reflect; const metadataOwner = new _WeakMap>(); const provider: MetadataProvider = { isProviderFor(O, P) { @@ -1752,7 +1753,7 @@ namespace Reflect { if (!IsUndefined(metadataPropertySet)) { return metadataPropertySet.has(P); } - if (reflect.getOwnMetadataKeys(O, P!).length) { + if (getOwnMetadataKeys(O, P!).length) { if (IsUndefined(metadataPropertySet)) { metadataPropertySet = new _Set(); metadataOwner.set(O, metadataPropertySet); @@ -1762,11 +1763,11 @@ namespace Reflect { } return false; }, - OrdinaryDefineOwnMetadata: reflect.defineMetadata, - OrdinaryHasOwnMetadata: reflect.hasOwnMetadata, - OrdinaryGetOwnMetadata: reflect.getOwnMetadata, - OrdinaryOwnMetadataKeys: reflect.getOwnMetadataKeys, - OrdinaryDeleteMetadata: reflect.deleteMetadata, + OrdinaryDefineOwnMetadata: defineMetadata, + OrdinaryHasOwnMetadata: hasOwnMetadata, + OrdinaryGetOwnMetadata: getOwnMetadata, + OrdinaryOwnMetadataKeys: getOwnMetadataKeys, + OrdinaryDeleteMetadata: deleteMetadata, }; return provider; } diff --git a/ReflectLite.ts b/ReflectLite.ts index d1f0d0f..f3d3d18 100644 --- a/ReflectLite.ts +++ b/ReflectLite.ts @@ -1705,6 +1705,7 @@ namespace Reflect { } function CreateFallbackProvider(reflect: typeof Reflect): MetadataProvider { + const { defineMetadata, hasOwnMetadata, getOwnMetadata, getOwnMetadataKeys, deleteMetadata } = reflect; const metadataOwner = new _WeakMap>(); const provider: MetadataProvider = { isProviderFor(O, P) { @@ -1712,7 +1713,7 @@ namespace Reflect { if (!IsUndefined(metadataPropertySet)) { return metadataPropertySet.has(P); } - if (reflect.getOwnMetadataKeys(O, P!).length) { + if (getOwnMetadataKeys(O, P!).length) { if (IsUndefined(metadataPropertySet)) { metadataPropertySet = new _Set(); metadataOwner.set(O, metadataPropertySet); @@ -1722,11 +1723,11 @@ namespace Reflect { } return false; }, - OrdinaryDefineOwnMetadata: reflect.defineMetadata, - OrdinaryHasOwnMetadata: reflect.hasOwnMetadata, - OrdinaryGetOwnMetadata: reflect.getOwnMetadata, - OrdinaryOwnMetadataKeys: reflect.getOwnMetadataKeys, - OrdinaryDeleteMetadata: reflect.deleteMetadata, + OrdinaryDefineOwnMetadata: defineMetadata, + OrdinaryHasOwnMetadata: hasOwnMetadata, + OrdinaryGetOwnMetadata: getOwnMetadata, + OrdinaryOwnMetadataKeys: getOwnMetadataKeys, + OrdinaryDeleteMetadata: deleteMetadata, }; return provider; } diff --git a/ReflectNoConflict.ts b/ReflectNoConflict.ts index 59e993c..2f3e8c3 100644 --- a/ReflectNoConflict.ts +++ b/ReflectNoConflict.ts @@ -1582,6 +1582,7 @@ function CreateMetadataProvider(registry: MetadataRegistry): MetadataProvider { } function CreateFallbackProvider(reflect: typeof Reflect): MetadataProvider { + const { defineMetadata, hasOwnMetadata, getOwnMetadata, getOwnMetadataKeys, deleteMetadata } = reflect; const metadataOwner = new _WeakMap>(); const provider: MetadataProvider = { isProviderFor(O, P) { @@ -1589,7 +1590,7 @@ function CreateFallbackProvider(reflect: typeof Reflect): MetadataProvider { if (!IsUndefined(metadataPropertySet)) { return metadataPropertySet.has(P); } - if (reflect.getOwnMetadataKeys(O, P!).length) { + if (getOwnMetadataKeys(O, P!).length) { if (IsUndefined(metadataPropertySet)) { metadataPropertySet = new _Set(); metadataOwner.set(O, metadataPropertySet); @@ -1599,11 +1600,11 @@ function CreateFallbackProvider(reflect: typeof Reflect): MetadataProvider { } return false; }, - OrdinaryDefineOwnMetadata: reflect.defineMetadata, - OrdinaryHasOwnMetadata: reflect.hasOwnMetadata, - OrdinaryGetOwnMetadata: reflect.getOwnMetadata, - OrdinaryOwnMetadataKeys: reflect.getOwnMetadataKeys, - OrdinaryDeleteMetadata: reflect.deleteMetadata, + OrdinaryDefineOwnMetadata: defineMetadata, + OrdinaryHasOwnMetadata: hasOwnMetadata, + OrdinaryGetOwnMetadata: getOwnMetadata, + OrdinaryOwnMetadataKeys: getOwnMetadataKeys, + OrdinaryDeleteMetadata: deleteMetadata, }; return provider; } diff --git a/package.json b/package.json index 1dd6918..40fbe73 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "reflect-metadata", - "version": "0.2.0", + "version": "0.2.1", "description": "Polyfill for Metadata Reflection API", "type": "commonjs", "main": "Reflect.js", diff --git a/test/reflect-other.ts b/test/reflect-other.ts index 83007b1..5cc01be 100644 --- a/test/reflect-other.ts +++ b/test/reflect-other.ts @@ -25,5 +25,17 @@ for (const { name, header, context } of suites.filter(s => s.global)) { assert.strictEqual(Reflect.getOwnMetadata("key", obj), "value"); }); }); + + it("isProviderFor crash", () => { + const { Reflect } = script(context)` + Reflect.defineMetadata = function() {}; + Reflect.getOwnMetadataKeys = function() { return [] }; + Reflect.getMetadataKeys = function() { return []; } + ${header} + exports.Reflect = Reflect; + `; + let obj = {}; + Reflect.getMetadataKeys(obj); + }); }); } \ No newline at end of file