Socket
Socket
Sign inDemoInstall

reflect-metadata

Package Overview
Dependencies
0
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.1.14 to 0.2.0-pre.0

.github/workflows/ci.yml

20

package.json
{
"name": "reflect-metadata",
"version": "0.1.14",
"version": "0.2.0-pre.0",
"description": "Polyfill for Metadata Reflection API",
"type": "commonjs",
"main": "Reflect.js",
"types": "index.d.ts",
"typescript": {
"definition": "Reflect.d.ts"
"exports": {
".": {
"types": "./index.d.ts",
"default": "./Reflect.js"
},
"./lite": {
"types": "./index.d.ts",
"default": "./ReflectLite.js"
},
"./no-conflict": {
"types": "./no-conflict.d.ts",
"default": "./ReflectNoConflict.js"
}
},

@@ -40,3 +52,3 @@ "scripts": {

"@types/mocha": "^2.2.34",
"@types/node": "^6.0.52",
"@types/node": "^10.17.60",
"chai": "^3.5.0",

@@ -43,0 +55,0 @@ "del": "^2.2.2",

# Metadata Reflection API
NOTE: Now that both [Decorators](https://github.com/tc39/proposal-decorators) and
[Decorator Metadata](https://github.com/tc39/proposal-decorator-metadata) have achieved Stage 3 within TC39, the API
proposed below is no longer being considered for standardization. However, this package will continue to support
projects that leverage TypeScript's legacy `--experimentalDecorators` option as some projects may not be able to migrate
to use standard decorators.
* [Detailed proposal][Metadata-Spec]

@@ -11,2 +17,49 @@

## Usage
### ES Modules in NodeJS/Browser, TypeScript/Babel, Bundlers
```ts
// - Modifies global `Reflect` object (or defines one in ES5 runtimes).
// - Supports ESM and CommonJS.
// - Contains internal polyfills for `Map`, `Set`, and `WeakMap` for older runtimes.
import "reflect-metadata";
// - Modifies global `Reflect` object (or defines one in ES5 runtimes).
// - Supports ESM and CommonJS.
// - Requires runtime support for `"exports"` in `package.json`.
// - Does not include internal polyfills.
import "reflect-metadata/lite";
```
### CommonJS
```ts
// - Modifies global `Reflect` object (or defines one in ES5 runtimes).
// - Contains internal polyfills for `Map`, `Set`, and `WeakMap` for older runtimes.
require("reflect-metadata");
// - Modifies global `Reflect` object (or defines one in ES5 runtimes).
// - Requires runtime support for `"exports"` in `package.json`.
// - Does not include internal polyfills.
require("reflect-metadata/lite");
```
### In the Browser via `<script>`
**HTML**
```html
<!-- Modifies global `Reflect` object (or defines one in ES5 runtimes). -->
<!-- Contains internal polyfills for `Map`, `Set`, and `WeakMap` for older runtimes. -->
<script src="path/to/reflect-metadata/Reflect.js"></script>
<!-- Modifies global `Reflect` object (or defines one in ES5 runtimes). -->
<!-- Does not include internal polyfills. -->
<script src="path/to/reflect-metadata/ReflectLite.js"></script>
```
**Script**
```js
// - Makes types available in your editor.
/// <reference path="path/to/reflect-metadata/standalone.d.ts" />
```
## Background

@@ -13,0 +66,0 @@

455

Reflect.js

@@ -20,19 +20,18 @@ /*! *****************************************************************************

(function (factory) {
var root = typeof global === "object" ? global :
typeof self === "object" ? self :
typeof this === "object" ? this :
Function("return this;")();
var root = typeof globalThis === "object" ? globalThis :
typeof global === "object" ? global :
typeof self === "object" ? self :
typeof this === "object" ? this :
sloppyModeThis();
var exporter = makeExporter(Reflect);
if (typeof root.Reflect !== "undefined") {
exporter = makeExporter(root.Reflect, exporter);
}
factory(exporter, root);
if (typeof root.Reflect === "undefined") {
root.Reflect = Reflect;
}
else {
exporter = makeExporter(root.Reflect, exporter);
}
factory(exporter);
function makeExporter(target, previous) {
return function (key, value) {
if (typeof target[key] !== "function") {
Object.defineProperty(target, key, { configurable: true, writable: true, value: value });
}
Object.defineProperty(target, key, { configurable: true, writable: true, value: value });
if (previous)

@@ -42,3 +41,18 @@ previous(key, value);

}
})(function (exporter) {
function functionThis() {
try {
return Function("return this;")();
}
catch (_) { }
}
function indirectEvalThis() {
try {
return (void 0, eval)("(function() { return this; })()");
}
catch (_) { }
}
function sloppyModeThis() {
return functionThis() || indirectEvalThis();
}
})(function (exporter, root) {
var hasOwn = Object.prototype.hasOwnProperty;

@@ -68,9 +82,8 @@ // feature test for Symbol support

var functionPrototype = Object.getPrototypeOf(Function);
var usePolyfill = typeof process === "object" && process["env" + ""] && process["env" + ""]["REFLECT_METADATA_USE_MAP_POLYFILL"] === "true";
var _Map = !usePolyfill && typeof Map === "function" && typeof Map.prototype.entries === "function" ? Map : CreateMapPolyfill();
var _Set = !usePolyfill && typeof Set === "function" && typeof Set.prototype.entries === "function" ? Set : CreateSetPolyfill();
var _WeakMap = !usePolyfill && typeof WeakMap === "function" ? WeakMap : CreateWeakMapPolyfill();
// [[Metadata]] internal slot
// https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots
var Metadata = new _WeakMap();
var _Map = typeof Map === "function" && typeof Map.prototype.entries === "function" ? Map : CreateMapPolyfill();
var _Set = typeof Set === "function" && typeof Set.prototype.entries === "function" ? Set : CreateSetPolyfill();
var _WeakMap = typeof WeakMap === "function" ? WeakMap : CreateWeakMapPolyfill();
var registrySymbol = supportsSymbol ? Symbol.for("@reflect-metadata:registry") : undefined;
var metadataRegistry = GetOrCreateMetadataRegistry();
var metadataProvider = CreateMetadataProvider(metadataRegistry);
/**

@@ -526,15 +539,10 @@ * Applies a set of decorators to a property of a target object.

propertyKey = ToPropertyKey(propertyKey);
var metadataMap = GetOrCreateMetadataMap(target, propertyKey, /*Create*/ false);
if (IsUndefined(metadataMap))
if (!IsObject(target))
throw new TypeError();
if (!IsUndefined(propertyKey))
propertyKey = ToPropertyKey(propertyKey);
var provider = GetMetadataProvider(target, propertyKey, /*Create*/ false);
if (IsUndefined(provider))
return false;
if (!metadataMap.delete(metadataKey))
return false;
if (metadataMap.size > 0)
return true;
var targetMetadata = Metadata.get(target);
targetMetadata.delete(propertyKey);
if (targetMetadata.size > 0)
return true;
Metadata.delete(target);
return true;
return provider.OrdinaryDeleteMetadata(metadataKey, target, propertyKey);
}

@@ -566,19 +574,2 @@ exporter("deleteMetadata", deleteMetadata);

}
function GetOrCreateMetadataMap(O, P, Create) {
var targetMetadata = Metadata.get(O);
if (IsUndefined(targetMetadata)) {
if (!Create)
return undefined;
targetMetadata = new _Map();
Metadata.set(O, targetMetadata);
}
var metadataMap = targetMetadata.get(P);
if (IsUndefined(metadataMap)) {
if (!Create)
return undefined;
metadataMap = new _Map();
targetMetadata.set(P, metadataMap);
}
return metadataMap;
}
// 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)

@@ -598,6 +589,6 @@ // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata

function OrdinaryHasOwnMetadata(MetadataKey, O, P) {
var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);
if (IsUndefined(metadataMap))
var provider = GetMetadataProvider(O, P, /*Create*/ false);
if (IsUndefined(provider))
return false;
return ToBoolean(metadataMap.has(MetadataKey));
return ToBoolean(provider.OrdinaryHasOwnMetadata(MetadataKey, O, P));
}

@@ -618,6 +609,6 @@ // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)

function OrdinaryGetOwnMetadata(MetadataKey, O, P) {
var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);
if (IsUndefined(metadataMap))
return undefined;
return metadataMap.get(MetadataKey);
var provider = GetMetadataProvider(O, P, /*Create*/ false);
if (IsUndefined(provider))
return;
return provider.OrdinaryGetOwnMetadata(MetadataKey, O, P);
}

@@ -627,4 +618,4 @@ // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)

function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {
var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);
metadataMap.set(MetadataKey, MetadataValue);
var provider = GetMetadataProvider(O, P, /*Create*/ true);
provider.OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P);
}

@@ -666,29 +657,7 @@ // 3.1.6.1 OrdinaryMetadataKeys(O, P)

function OrdinaryOwnMetadataKeys(O, P) {
var keys = [];
var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);
if (IsUndefined(metadataMap))
return keys;
var keysObj = metadataMap.keys();
var iterator = GetIterator(keysObj);
var k = 0;
while (true) {
var next = IteratorStep(iterator);
if (!next) {
keys.length = k;
return keys;
}
var nextValue = IteratorValue(next);
try {
keys[k] = nextValue;
}
catch (e) {
try {
IteratorClose(iterator);
}
finally {
throw e;
}
}
k++;
var provider = GetMetadataProvider(O, P, /*create*/ false);
if (!provider) {
return [];
}
return provider.OrdinaryOwnMetadataKeys(O, P);
}

@@ -836,2 +805,5 @@ // 6 ECMAScript Data Typ0es and Values

}
function SameValueZero(x, y) {
return x === y || x !== x && y !== y;
}
// 7.3 Operations on Objects

@@ -910,2 +882,299 @@ // https://tc39.github.io/ecma262/#sec-operations-on-objects

}
// Global metadata registry
// - Allows `import "reflect-metadata"` and `import "reflect-metadata/no-conflict"` to interoperate.
// - Uses isolated metadata if `Reflect` is frozen before the registry can be installed.
/**
* Creates a registry used to allow multiple `reflect-metadata` providers.
*/
function CreateMetadataRegistry() {
var fallback;
if (!IsUndefined(registrySymbol) &&
typeof root.Reflect !== "undefined" &&
!(registrySymbol in root.Reflect) &&
typeof root.Reflect.defineMetadata === "function") {
// interoperate with older version of `reflect-metadata` that did not support a registry.
fallback = CreateFallbackProvider(root.Reflect);
}
var first;
var second;
var rest;
var targetProviderMap = new _WeakMap();
var registry = {
registerProvider: registerProvider,
getProvider: getProvider,
setProvider: setProvider,
};
return registry;
function registerProvider(provider) {
if (!Object.isExtensible(registry)) {
throw new Error("Cannot add provider to a frozen registry.");
}
switch (true) {
case fallback === provider: break;
case IsUndefined(first):
first = provider;
break;
case first === provider: break;
case IsUndefined(second):
second = provider;
break;
case second === provider: break;
default:
if (rest === undefined)
rest = new _Set();
rest.add(provider);
break;
}
}
function getProviderNoCache(O, P) {
if (!IsUndefined(first)) {
if (first.isProviderFor(O, P))
return first;
if (!IsUndefined(second)) {
if (second.isProviderFor(O, P))
return first;
if (!IsUndefined(rest)) {
var iterator = GetIterator(rest);
while (true) {
var next = IteratorStep(iterator);
if (!next) {
return undefined;
}
var provider = IteratorValue(next);
if (provider.isProviderFor(O, P)) {
IteratorClose(iterator);
return provider;
}
}
}
}
}
if (!IsUndefined(fallback) && fallback.isProviderFor(O, P)) {
return fallback;
}
return undefined;
}
function getProvider(O, P) {
var providerMap = targetProviderMap.get(O);
var provider;
if (!IsUndefined(providerMap)) {
provider = providerMap.get(P);
}
if (!IsUndefined(provider)) {
return provider;
}
provider = getProviderNoCache(O, P);
if (!IsUndefined(provider)) {
if (IsUndefined(providerMap)) {
providerMap = new _Map();
targetProviderMap.set(O, providerMap);
}
providerMap.set(P, provider);
}
return provider;
}
function hasProvider(provider) {
if (IsUndefined(provider))
throw new TypeError();
return first === provider || second === provider || !IsUndefined(rest) && rest.has(provider);
}
function setProvider(O, P, provider) {
if (!hasProvider(provider)) {
throw new Error("Metadata provider not registered.");
}
var existingProvider = getProvider(O, P);
if (existingProvider !== provider) {
if (!IsUndefined(existingProvider)) {
return false;
}
var providerMap = targetProviderMap.get(O);
if (IsUndefined(providerMap)) {
providerMap = new _Map();
targetProviderMap.set(O, providerMap);
}
providerMap.set(P, provider);
}
return true;
}
}
/**
* Gets or creates the shared registry of metadata providers.
*/
function GetOrCreateMetadataRegistry() {
var metadataRegistry;
if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {
metadataRegistry = root.Reflect[registrySymbol];
}
if (IsUndefined(metadataRegistry)) {
metadataRegistry = CreateMetadataRegistry();
}
if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {
Object.defineProperty(root.Reflect, registrySymbol, {
enumerable: false,
configurable: false,
writable: false,
value: metadataRegistry
});
}
return metadataRegistry;
}
function CreateMetadataProvider(registry) {
// [[Metadata]] internal slot
// https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots
var metadata = new _WeakMap();
var provider = {
isProviderFor: function (O, P) {
var targetMetadata = metadata.get(O);
if (IsUndefined(targetMetadata))
return false;
return targetMetadata.has(P);
},
OrdinaryDefineOwnMetadata: OrdinaryDefineOwnMetadata,
OrdinaryHasOwnMetadata: OrdinaryHasOwnMetadata,
OrdinaryGetOwnMetadata: OrdinaryGetOwnMetadata,
OrdinaryOwnMetadataKeys: OrdinaryOwnMetadataKeys,
OrdinaryDeleteMetadata: OrdinaryDeleteMetadata,
};
metadataRegistry.registerProvider(provider);
return provider;
function GetOrCreateMetadataMap(O, P, Create) {
var targetMetadata = metadata.get(O);
var createdTargetMetadata = false;
if (IsUndefined(targetMetadata)) {
if (!Create)
return undefined;
targetMetadata = new _Map();
metadata.set(O, targetMetadata);
createdTargetMetadata = true;
}
var metadataMap = targetMetadata.get(P);
if (IsUndefined(metadataMap)) {
if (!Create)
return undefined;
metadataMap = new _Map();
targetMetadata.set(P, metadataMap);
if (!registry.setProvider(O, P, provider)) {
targetMetadata.delete(P);
if (createdTargetMetadata) {
metadata.delete(O);
}
throw new Error("Wrong provider for target.");
}
}
return metadataMap;
}
// 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)
// https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata
function OrdinaryHasOwnMetadata(MetadataKey, O, P) {
var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);
if (IsUndefined(metadataMap))
return false;
return ToBoolean(metadataMap.has(MetadataKey));
}
// 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)
// https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata
function OrdinaryGetOwnMetadata(MetadataKey, O, P) {
var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);
if (IsUndefined(metadataMap))
return undefined;
return metadataMap.get(MetadataKey);
}
// 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)
// https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata
function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {
var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);
metadataMap.set(MetadataKey, MetadataValue);
}
// 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)
// https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys
function OrdinaryOwnMetadataKeys(O, P) {
var keys = [];
var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);
if (IsUndefined(metadataMap))
return keys;
var keysObj = metadataMap.keys();
var iterator = GetIterator(keysObj);
var k = 0;
while (true) {
var next = IteratorStep(iterator);
if (!next) {
keys.length = k;
return keys;
}
var nextValue = IteratorValue(next);
try {
keys[k] = nextValue;
}
catch (e) {
try {
IteratorClose(iterator);
}
finally {
throw e;
}
}
k++;
}
}
function OrdinaryDeleteMetadata(MetadataKey, O, P) {
var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);
if (IsUndefined(metadataMap))
return false;
if (!metadataMap.delete(MetadataKey))
return false;
if (metadataMap.size === 0) {
var targetMetadata = metadata.get(O);
if (!IsUndefined(targetMetadata)) {
targetMetadata.delete(P);
if (targetMetadata.size === 0) {
metadata.delete(targetMetadata);
}
}
}
return true;
}
}
function CreateFallbackProvider(reflect) {
var metadataOwner = new _WeakMap();
var provider = {
isProviderFor: function (O, P) {
var metadataPropertySet = metadataOwner.get(O);
if (!IsUndefined(metadataPropertySet)) {
return metadataPropertySet.has(P);
}
if (reflect.getOwnMetadataKeys(O, P).length) {
if (IsUndefined(metadataPropertySet)) {
metadataPropertySet = new _Set();
metadataOwner.set(O, metadataPropertySet);
}
metadataPropertySet.add(P);
return true;
}
return false;
},
OrdinaryDefineOwnMetadata: reflect.defineMetadata,
OrdinaryHasOwnMetadata: reflect.hasOwnMetadata,
OrdinaryGetOwnMetadata: reflect.getOwnMetadata,
OrdinaryOwnMetadataKeys: reflect.getOwnMetadataKeys,
OrdinaryDeleteMetadata: reflect.deleteMetadata,
};
return provider;
}
/**
* Gets the metadata provider for an object. If the object has no metadata provider and this is for a create operation,
* then this module's metadata provider is assigned to the object.
*/
function GetMetadataProvider(O, P, Create) {
var registeredProvider = metadataRegistry.getProvider(O, P);
if (!IsUndefined(registeredProvider)) {
return registeredProvider;
}
if (Create) {
if (metadataRegistry.setProvider(O, P, metadataProvider)) {
return metadataProvider;
}
throw new Error("Illegal state.");
}
return undefined;
}
// naive Map shim

@@ -958,3 +1227,3 @@ function CreateMapPolyfill() {

}());
return /** @class */ (function () {
var Map = /** @class */ (function () {
function Map() {

@@ -991,3 +1260,3 @@ this._keys = [];

this._values.length--;
if (key === this._cacheKey) {
if (SameValueZero(key, this._cacheKey)) {
this._cacheKey = cacheSentinel;

@@ -1012,4 +1281,10 @@ this._cacheIndex = -2;

Map.prototype._find = function (key, insert) {
if (this._cacheKey !== key) {
this._cacheIndex = this._keys.indexOf(this._cacheKey = key);
if (!SameValueZero(this._cacheKey, key)) {
this._cacheIndex = -1;
for (var i = 0; i < this._keys.length; i++) {
if (SameValueZero(this._keys[i], key)) {
this._cacheIndex = i;
break;
}
}
}

@@ -1025,2 +1300,3 @@ if (this._cacheIndex < 0 && insert) {

}());
return Map;
function getKey(key, _) {

@@ -1038,3 +1314,3 @@ return key;

function CreateSetPolyfill() {
return /** @class */ (function () {
var Set = /** @class */ (function () {
function Set() {

@@ -1053,3 +1329,3 @@ this._map = new _Map();

Set.prototype.keys = function () { return this._map.keys(); };
Set.prototype.values = function () { return this._map.values(); };
Set.prototype.values = function () { return this._map.keys(); };
Set.prototype.entries = function () { return this._map.entries(); };

@@ -1060,2 +1336,3 @@ Set.prototype["@@iterator"] = function () { return this.keys(); };

}());
return Set;
}

@@ -1062,0 +1339,0 @@ // naive WeakMap shim

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with โšก๏ธ by Socket Inc