@loopback/context 4.0.0-alpha.9 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -0
- package/README.md +116 -0
- package/dist/binding-config.d.ts +40 -0
- package/dist/binding-config.js +33 -0
- package/dist/binding-config.js.map +1 -0
- package/dist/binding-decorator.d.ts +45 -0
- package/dist/binding-decorator.js +118 -0
- package/dist/binding-decorator.js.map +1 -0
- package/dist/binding-filter.d.ts +108 -0
- package/dist/binding-filter.js +162 -0
- package/dist/binding-filter.js.map +1 -0
- package/dist/binding-inspector.d.ts +150 -0
- package/dist/binding-inspector.js +249 -0
- package/dist/binding-inspector.js.map +1 -0
- package/dist/binding-key.d.ts +66 -0
- package/dist/binding-key.js +121 -0
- package/dist/binding-key.js.map +1 -0
- package/dist/binding-sorter.d.ts +71 -0
- package/dist/binding-sorter.js +89 -0
- package/dist/binding-sorter.js.map +1 -0
- package/dist/binding.d.ts +577 -0
- package/dist/binding.js +788 -0
- package/dist/binding.js.map +1 -0
- package/dist/context-event.d.ts +23 -0
- package/dist/context-event.js +7 -0
- package/dist/context-event.js.map +1 -0
- package/dist/context-observer.d.ts +36 -0
- package/dist/context-observer.js +7 -0
- package/dist/context-observer.js.map +1 -0
- package/dist/context-subscription.d.ts +147 -0
- package/dist/context-subscription.js +317 -0
- package/dist/context-subscription.js.map +1 -0
- package/dist/context-tag-indexer.d.ts +42 -0
- package/dist/context-tag-indexer.js +135 -0
- package/dist/context-tag-indexer.js.map +1 -0
- package/dist/context-view.d.ts +209 -0
- package/dist/context-view.js +240 -0
- package/dist/context-view.js.map +1 -0
- package/dist/context.d.ts +513 -0
- package/dist/context.js +717 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.js +60 -0
- package/dist/index.js.map +1 -0
- package/dist/inject-config.d.ts +67 -0
- package/dist/inject-config.js +181 -0
- package/dist/inject-config.js.map +1 -0
- package/dist/inject.d.ts +250 -0
- package/dist/inject.js +535 -0
- package/dist/inject.js.map +1 -0
- package/dist/interception-proxy.d.ts +76 -0
- package/dist/interception-proxy.js +67 -0
- package/dist/interception-proxy.js.map +1 -0
- package/dist/interceptor-chain.d.ts +121 -0
- package/dist/interceptor-chain.js +148 -0
- package/dist/interceptor-chain.js.map +1 -0
- package/dist/interceptor.d.ts +138 -0
- package/dist/interceptor.js +299 -0
- package/dist/interceptor.js.map +1 -0
- package/dist/invocation.d.ts +101 -0
- package/dist/invocation.js +163 -0
- package/dist/invocation.js.map +1 -0
- package/dist/json-types.d.ts +28 -0
- package/{lib/src/provider.js → dist/json-types.js} +3 -3
- package/dist/json-types.js.map +1 -0
- package/dist/keys.d.ts +65 -0
- package/dist/keys.js +74 -0
- package/dist/keys.js.map +1 -0
- package/dist/provider.d.ts +31 -0
- package/{lib6/src → dist}/provider.js +2 -2
- package/dist/provider.js.map +1 -0
- package/dist/resolution-session.d.ts +180 -0
- package/dist/resolution-session.js +274 -0
- package/dist/resolution-session.js.map +1 -0
- package/dist/resolver.d.ts +46 -0
- package/dist/resolver.js +203 -0
- package/dist/resolver.js.map +1 -0
- package/dist/unique-id.d.ts +14 -0
- package/dist/unique-id.js +26 -0
- package/dist/unique-id.js.map +1 -0
- package/dist/value-promise.d.ts +134 -0
- package/dist/value-promise.js +277 -0
- package/dist/value-promise.js.map +1 -0
- package/package.json +49 -34
- package/src/binding-config.ts +73 -0
- package/src/binding-decorator.ts +136 -0
- package/src/binding-filter.ts +250 -0
- package/src/binding-inspector.ts +371 -0
- package/src/binding-key.ts +136 -0
- package/src/binding-sorter.ts +124 -0
- package/src/binding.ts +1107 -0
- package/src/context-event.ts +30 -0
- package/src/context-observer.ts +50 -0
- package/src/context-subscription.ts +402 -0
- package/src/context-tag-indexer.ts +147 -0
- package/src/context-view.ts +440 -0
- package/src/context.ts +1079 -0
- package/src/index.ts +58 -0
- package/src/inject-config.ts +239 -0
- package/src/inject.ts +796 -0
- package/src/interception-proxy.ts +127 -0
- package/src/interceptor-chain.ts +268 -0
- package/src/interceptor.ts +430 -0
- package/src/invocation.ts +269 -0
- package/src/json-types.ts +35 -0
- package/src/keys.ts +85 -0
- package/src/provider.ts +37 -0
- package/src/resolution-session.ts +414 -0
- package/src/resolver.ts +282 -0
- package/src/unique-id.ts +24 -0
- package/src/value-promise.ts +318 -0
- package/index.d.ts +0 -6
- package/index.js +0 -9
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -12
- package/lib/index.js.map +0 -1
- package/lib/src/binding.d.ts +0 -98
- package/lib/src/binding.js +0 -169
- package/lib/src/binding.js.map +0 -1
- package/lib/src/context.d.ts +0 -14
- package/lib/src/context.js +0 -122
- package/lib/src/context.js.map +0 -1
- package/lib/src/index.d.ts +0 -10
- package/lib/src/index.js +0 -25
- package/lib/src/index.js.map +0 -1
- package/lib/src/inject.d.ts +0 -60
- package/lib/src/inject.js +0 -112
- package/lib/src/inject.js.map +0 -1
- package/lib/src/is-promise.d.ts +0 -1
- package/lib/src/is-promise.js +0 -15
- package/lib/src/is-promise.js.map +0 -1
- package/lib/src/provider.d.ts +0 -31
- package/lib/src/provider.js.map +0 -1
- package/lib/src/reflect.d.ts +0 -38
- package/lib/src/reflect.js +0 -143
- package/lib/src/reflect.js.map +0 -1
- package/lib/src/resolver.d.ts +0 -30
- package/lib/src/resolver.js +0 -141
- package/lib/src/resolver.js.map +0 -1
- package/lib6/index.d.ts +0 -1
- package/lib6/index.js +0 -12
- package/lib6/index.js.map +0 -1
- package/lib6/src/binding.d.ts +0 -98
- package/lib6/src/binding.js +0 -169
- package/lib6/src/binding.js.map +0 -1
- package/lib6/src/context.d.ts +0 -14
- package/lib6/src/context.js +0 -122
- package/lib6/src/context.js.map +0 -1
- package/lib6/src/index.d.ts +0 -10
- package/lib6/src/index.js +0 -25
- package/lib6/src/index.js.map +0 -1
- package/lib6/src/inject.d.ts +0 -60
- package/lib6/src/inject.js +0 -112
- package/lib6/src/inject.js.map +0 -1
- package/lib6/src/is-promise.d.ts +0 -1
- package/lib6/src/is-promise.js +0 -15
- package/lib6/src/is-promise.js.map +0 -1
- package/lib6/src/provider.d.ts +0 -31
- package/lib6/src/provider.js.map +0 -1
- package/lib6/src/reflect.d.ts +0 -38
- package/lib6/src/reflect.js +0 -143
- package/lib6/src/reflect.js.map +0 -1
- package/lib6/src/resolver.d.ts +0 -30
- package/lib6/src/resolver.js +0 -141
- package/lib6/src/resolver.js.map +0 -1
package/lib6/src/binding.js
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright IBM Corp. 2013,2017. All Rights Reserved.
|
|
3
|
-
// Node module: loopback
|
|
4
|
-
// This file is licensed under the MIT License.
|
|
5
|
-
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
const resolver_1 = require("./resolver");
|
|
8
|
-
const is_promise_1 = require("./is-promise");
|
|
9
|
-
// FIXME(bajtos) The binding class should be parameterized by the value
|
|
10
|
-
// type stored
|
|
11
|
-
class Binding {
|
|
12
|
-
constructor(_key, isLocked = false) {
|
|
13
|
-
this.isLocked = isLocked;
|
|
14
|
-
this._tags = new Set();
|
|
15
|
-
Binding.validateKey(_key);
|
|
16
|
-
this._key = _key;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Validate the binding key format. Please note that `#` is reserved.
|
|
20
|
-
* @param key Binding key, such as `a, a.b, a:b, a/b
|
|
21
|
-
*/
|
|
22
|
-
static validateKey(key) {
|
|
23
|
-
if (!key)
|
|
24
|
-
throw new Error('Binding key must be provided.');
|
|
25
|
-
if (key.indexOf(Binding.PROPERTY_SEPARATOR) !== -1) {
|
|
26
|
-
throw new Error(`Binding key ${key} cannot contain`
|
|
27
|
-
+ ` '${Binding.PROPERTY_SEPARATOR}'.`);
|
|
28
|
-
}
|
|
29
|
-
return key;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Remove the segament that denotes a property path
|
|
33
|
-
* @param key Binding key, such as `a, a.b, a:b, a/b, a.b#x, a:b#x.y, a/b#x.y`
|
|
34
|
-
*/
|
|
35
|
-
static normalizeKey(key) {
|
|
36
|
-
const index = key.indexOf(Binding.PROPERTY_SEPARATOR);
|
|
37
|
-
if (index !== -1)
|
|
38
|
-
key = key.substr(0, index);
|
|
39
|
-
key = key.trim();
|
|
40
|
-
return key;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Get the property path separated by `#`
|
|
44
|
-
* @param key Binding key
|
|
45
|
-
*/
|
|
46
|
-
static getKeyPath(key) {
|
|
47
|
-
const index = key.indexOf(Binding.PROPERTY_SEPARATOR);
|
|
48
|
-
if (index !== -1)
|
|
49
|
-
return key.substr(index + 1);
|
|
50
|
-
return undefined;
|
|
51
|
-
}
|
|
52
|
-
get key() {
|
|
53
|
-
return this._key;
|
|
54
|
-
}
|
|
55
|
-
get tags() {
|
|
56
|
-
return this._tags;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* This is an internal function optimized for performance.
|
|
60
|
-
* Users should use `@inject(key)` or `ctx.get(key)` instead.
|
|
61
|
-
*
|
|
62
|
-
* Get the value bound to this key. Depending on `isSync`, this
|
|
63
|
-
* function returns either:
|
|
64
|
-
* - the bound value
|
|
65
|
-
* - a promise of the bound value
|
|
66
|
-
*
|
|
67
|
-
* Consumers wishing to consume sync values directly should use `isPromise`
|
|
68
|
-
* to check the type of the returned value to decide how to handle it.
|
|
69
|
-
*
|
|
70
|
-
* ```
|
|
71
|
-
* const result = binding.getValue(ctx);
|
|
72
|
-
* if (isPromise(result)) {
|
|
73
|
-
* result.then(doSomething)
|
|
74
|
-
* } else {
|
|
75
|
-
* doSomething(result);
|
|
76
|
-
* }
|
|
77
|
-
* ```
|
|
78
|
-
*/
|
|
79
|
-
getValue(ctx) {
|
|
80
|
-
return Promise.reject(new Error(`No value was configured for binding ${this._key}.`));
|
|
81
|
-
}
|
|
82
|
-
lock() {
|
|
83
|
-
this.isLocked = true;
|
|
84
|
-
return this;
|
|
85
|
-
}
|
|
86
|
-
tag(tagName) {
|
|
87
|
-
if (typeof tagName === 'string') {
|
|
88
|
-
this._tags.add(tagName);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
tagName.forEach(t => {
|
|
92
|
-
this._tags.add(t);
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
return this;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Bind the key to a constant value.
|
|
99
|
-
*
|
|
100
|
-
* @param value The bound value.
|
|
101
|
-
*
|
|
102
|
-
* @example
|
|
103
|
-
*
|
|
104
|
-
* ```ts
|
|
105
|
-
* ctx.bind('appName').to('CodeHub');
|
|
106
|
-
* ```
|
|
107
|
-
*/
|
|
108
|
-
to(value) {
|
|
109
|
-
this.getValue = () => value;
|
|
110
|
-
return this;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Bind the key to a computed (dynamic) value.
|
|
114
|
-
*
|
|
115
|
-
* @param factoryFn The factory function creating the value.
|
|
116
|
-
* Both sync and async functions are supported.
|
|
117
|
-
*
|
|
118
|
-
* @example
|
|
119
|
-
*
|
|
120
|
-
* ```ts
|
|
121
|
-
* // synchronous
|
|
122
|
-
* ctx.bind('now').toDynamicValue(() => Date.now());
|
|
123
|
-
*
|
|
124
|
-
* // asynchronous
|
|
125
|
-
* ctx.bind('something').toDynamicValue(
|
|
126
|
-
* async () => Promise.delay(10).then(doSomething)
|
|
127
|
-
* );
|
|
128
|
-
* ```
|
|
129
|
-
*/
|
|
130
|
-
toDynamicValue(factoryFn) {
|
|
131
|
-
// TODO(bajtos) allow factoryFn with @inject arguments
|
|
132
|
-
this.getValue = ctx => factoryFn();
|
|
133
|
-
return this;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Bind the key to a BindingProvider
|
|
137
|
-
*/
|
|
138
|
-
toProvider(providerClass) {
|
|
139
|
-
this.getValue = ctx => {
|
|
140
|
-
const providerOrPromise = resolver_1.instantiateClass(providerClass, ctx);
|
|
141
|
-
if (is_promise_1.isPromise(providerOrPromise)) {
|
|
142
|
-
return providerOrPromise.then(p => p.value());
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
return providerOrPromise.value();
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
return this;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Bind the key to an instance of the given class.
|
|
152
|
-
*
|
|
153
|
-
* @param ctor The class constructor to call. Any constructor
|
|
154
|
-
* arguments must be annotated with `@inject` so that
|
|
155
|
-
* we can resolve them from the context.
|
|
156
|
-
*/
|
|
157
|
-
toClass(ctor) {
|
|
158
|
-
this.getValue = context => resolver_1.instantiateClass(ctor, context);
|
|
159
|
-
this.valueConstructor = ctor;
|
|
160
|
-
return this;
|
|
161
|
-
}
|
|
162
|
-
unlock() {
|
|
163
|
-
this.isLocked = false;
|
|
164
|
-
return this;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
Binding.PROPERTY_SEPARATOR = '#';
|
|
168
|
-
exports.Binding = Binding;
|
|
169
|
-
//# sourceMappingURL=binding.js.map
|
package/lib6/src/binding.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/binding.ts"],"names":[],"mappings":"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"}
|
package/lib6/src/context.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Binding, BoundValue } from './binding';
|
|
2
|
-
export declare class Context {
|
|
3
|
-
private _parent;
|
|
4
|
-
private registry;
|
|
5
|
-
constructor(_parent?: Context);
|
|
6
|
-
bind(key: string): Binding;
|
|
7
|
-
contains(key: string): boolean;
|
|
8
|
-
find(pattern?: string): Binding[];
|
|
9
|
-
findByTag(pattern: string): Binding[];
|
|
10
|
-
protected _mergeWithParent(childList: Binding[], parentList?: Binding[]): Binding[];
|
|
11
|
-
get(key: string): Promise<BoundValue>;
|
|
12
|
-
getSync(key: string): BoundValue;
|
|
13
|
-
getBinding(key: string): Binding;
|
|
14
|
-
}
|
package/lib6/src/context.js
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright IBM Corp. 2013,2017. All Rights Reserved.
|
|
3
|
-
// Node module: loopback
|
|
4
|
-
// This file is licensed under the MIT License.
|
|
5
|
-
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
const binding_1 = require("./binding");
|
|
8
|
-
const is_promise_1 = require("./is-promise");
|
|
9
|
-
class Context {
|
|
10
|
-
constructor(_parent) {
|
|
11
|
-
this._parent = _parent;
|
|
12
|
-
this.registry = new Map();
|
|
13
|
-
}
|
|
14
|
-
bind(key) {
|
|
15
|
-
binding_1.Binding.validateKey(key);
|
|
16
|
-
key = binding_1.Binding.normalizeKey(key);
|
|
17
|
-
const keyExists = this.registry.has(key);
|
|
18
|
-
if (keyExists) {
|
|
19
|
-
const existingBinding = this.registry.get(key);
|
|
20
|
-
const bindingIsLocked = existingBinding && existingBinding.isLocked;
|
|
21
|
-
if (bindingIsLocked)
|
|
22
|
-
throw new Error(`Cannot rebind key "${key}" to a locked binding`);
|
|
23
|
-
}
|
|
24
|
-
const binding = new binding_1.Binding(key);
|
|
25
|
-
this.registry.set(key, binding);
|
|
26
|
-
return binding;
|
|
27
|
-
}
|
|
28
|
-
contains(key) {
|
|
29
|
-
key = binding_1.Binding.normalizeKey(key);
|
|
30
|
-
return this.registry.has(key);
|
|
31
|
-
}
|
|
32
|
-
find(pattern) {
|
|
33
|
-
let bindings = [];
|
|
34
|
-
if (pattern) {
|
|
35
|
-
// TODO(@superkhau): swap with production grade glob to regex lib
|
|
36
|
-
pattern = binding_1.Binding.normalizeKey(pattern);
|
|
37
|
-
const glob = new RegExp('^' + pattern.split('*').join('.*') + '$');
|
|
38
|
-
this.registry.forEach(binding => {
|
|
39
|
-
const isMatch = glob.test(binding.key);
|
|
40
|
-
if (isMatch)
|
|
41
|
-
bindings.push(binding);
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
bindings = Array.from(this.registry.values());
|
|
46
|
-
}
|
|
47
|
-
const parentBindings = this._parent && this._parent.find(pattern);
|
|
48
|
-
return this._mergeWithParent(bindings, parentBindings);
|
|
49
|
-
}
|
|
50
|
-
findByTag(pattern) {
|
|
51
|
-
const bindings = [];
|
|
52
|
-
// TODO(@superkhau): swap with production grade glob to regex lib
|
|
53
|
-
const glob = new RegExp('^' + pattern.split('*').join('.*') + '$');
|
|
54
|
-
this.registry.forEach(binding => {
|
|
55
|
-
const isMatch = Array.from(binding.tags).some(tag => glob.test(tag));
|
|
56
|
-
if (isMatch)
|
|
57
|
-
bindings.push(binding);
|
|
58
|
-
});
|
|
59
|
-
const parentBindings = this._parent && this._parent.findByTag(pattern);
|
|
60
|
-
return this._mergeWithParent(bindings, parentBindings);
|
|
61
|
-
}
|
|
62
|
-
_mergeWithParent(childList, parentList) {
|
|
63
|
-
if (!parentList)
|
|
64
|
-
return childList;
|
|
65
|
-
const additions = parentList.filter(parentBinding => {
|
|
66
|
-
// children bindings take precedence
|
|
67
|
-
return !childList.some(childBinding => childBinding.key === parentBinding.key);
|
|
68
|
-
});
|
|
69
|
-
return childList.concat(additions);
|
|
70
|
-
}
|
|
71
|
-
get(key) {
|
|
72
|
-
try {
|
|
73
|
-
const path = binding_1.Binding.getKeyPath(key);
|
|
74
|
-
const binding = this.getBinding(key);
|
|
75
|
-
return Promise.resolve(binding.getValue(this)).then(val => getValue(val, path));
|
|
76
|
-
}
|
|
77
|
-
catch (err) {
|
|
78
|
-
return Promise.reject(err);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
getSync(key) {
|
|
82
|
-
const path = binding_1.Binding.getKeyPath(key);
|
|
83
|
-
const binding = this.getBinding(key);
|
|
84
|
-
const valueOrPromise = binding.getValue(this);
|
|
85
|
-
if (is_promise_1.isPromise(valueOrPromise)) {
|
|
86
|
-
throw new Error(`Cannot get ${key} synchronously: the value is a promise`);
|
|
87
|
-
}
|
|
88
|
-
return getValue(valueOrPromise, path);
|
|
89
|
-
}
|
|
90
|
-
getBinding(key) {
|
|
91
|
-
key = binding_1.Binding.normalizeKey(key);
|
|
92
|
-
const binding = this.registry.get(key);
|
|
93
|
-
if (binding) {
|
|
94
|
-
return binding;
|
|
95
|
-
}
|
|
96
|
-
if (this._parent) {
|
|
97
|
-
return this._parent.getBinding(key);
|
|
98
|
-
}
|
|
99
|
-
throw new Error(`The key ${key} was not bound to any value.`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
exports.Context = Context;
|
|
103
|
-
/**
|
|
104
|
-
* Get the value by `.` notation
|
|
105
|
-
* @param obj The source value
|
|
106
|
-
* @param path A path to the nested property, such as `x`, `x.y`, `x.length`,
|
|
107
|
-
* or `x.0`
|
|
108
|
-
*/
|
|
109
|
-
function getValue(obj, path) {
|
|
110
|
-
if (!path)
|
|
111
|
-
return obj;
|
|
112
|
-
const props = path.split('.');
|
|
113
|
-
let val = undefined;
|
|
114
|
-
for (const p of props) {
|
|
115
|
-
val = obj[p];
|
|
116
|
-
if (val == null)
|
|
117
|
-
return val;
|
|
118
|
-
obj = val;
|
|
119
|
-
}
|
|
120
|
-
return val;
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=context.js.map
|
package/lib6/src/context.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"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"}
|
package/lib6/src/index.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export { Binding, BoundValue } from './binding';
|
|
2
|
-
export { Context } from './context';
|
|
3
|
-
export { Constructor } from './resolver';
|
|
4
|
-
export { inject } from './inject';
|
|
5
|
-
export { NamespacedReflect } from './reflect';
|
|
6
|
-
export { Provider } from './provider';
|
|
7
|
-
export { isPromise } from './is-promise';
|
|
8
|
-
export { instantiateClass } from './resolver';
|
|
9
|
-
export { describeInjectedArguments, describeInjectedProperties, Injection } from './inject';
|
|
10
|
-
export { Reflector } from './reflect';
|
package/lib6/src/index.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright IBM Corp. 2017. All Rights Reserved.
|
|
3
|
-
// Node module: loopback
|
|
4
|
-
// This file is licensed under the MIT License.
|
|
5
|
-
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
var binding_1 = require("./binding");
|
|
8
|
-
exports.Binding = binding_1.Binding;
|
|
9
|
-
var context_1 = require("./context");
|
|
10
|
-
exports.Context = context_1.Context;
|
|
11
|
-
var inject_1 = require("./inject");
|
|
12
|
-
exports.inject = inject_1.inject;
|
|
13
|
-
var reflect_1 = require("./reflect");
|
|
14
|
-
exports.NamespacedReflect = reflect_1.NamespacedReflect;
|
|
15
|
-
var is_promise_1 = require("./is-promise");
|
|
16
|
-
exports.isPromise = is_promise_1.isPromise;
|
|
17
|
-
// internals for testing
|
|
18
|
-
var resolver_1 = require("./resolver");
|
|
19
|
-
exports.instantiateClass = resolver_1.instantiateClass;
|
|
20
|
-
var inject_2 = require("./inject");
|
|
21
|
-
exports.describeInjectedArguments = inject_2.describeInjectedArguments;
|
|
22
|
-
exports.describeInjectedProperties = inject_2.describeInjectedProperties;
|
|
23
|
-
var reflect_2 = require("./reflect");
|
|
24
|
-
exports.Reflector = reflect_2.Reflector;
|
|
25
|
-
//# sourceMappingURL=index.js.map
|
package/lib6/src/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,wBAAwB;AACxB,+CAA+C;AAC/C,gEAAgE;;AAEhE,qCAA8C;AAAtC,4BAAA,OAAO,CAAA;AACf,qCAAkC;AAA1B,4BAAA,OAAO,CAAA;AAEf,mCAAgC;AAAxB,0BAAA,MAAM,CAAA;AACd,qCAA4C;AAApC,sCAAA,iBAAiB,CAAA;AAEzB,2CAAuC;AAA/B,iCAAA,SAAS,CAAA;AAEjB,wBAAwB;AACxB,uCAA4C;AAApC,sCAAA,gBAAgB,CAAA;AACxB,mCAIkB;AAHhB,6CAAA,yBAAyB,CAAA;AACzB,8CAAA,0BAA0B,CAAA;AAG5B,qCAAoC;AAA5B,8BAAA,SAAS,CAAA"}
|
package/lib6/src/inject.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { BoundValue, ValueOrPromise } from './binding';
|
|
2
|
-
import { Context } from './context';
|
|
3
|
-
/**
|
|
4
|
-
* A function to provide resolution of injected values
|
|
5
|
-
*/
|
|
6
|
-
export interface ResolverFunction {
|
|
7
|
-
(ctx: Context, injection: Injection): ValueOrPromise<BoundValue>;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Descriptor for an injection point
|
|
11
|
-
*/
|
|
12
|
-
export interface Injection {
|
|
13
|
-
bindingKey: string;
|
|
14
|
-
metadata?: {
|
|
15
|
-
[attribute: string]: BoundValue;
|
|
16
|
-
};
|
|
17
|
-
resolve?: ResolverFunction;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* A decorator to annotate method arguments for automatic injection
|
|
21
|
-
* by LoopBack IoC container.
|
|
22
|
-
*
|
|
23
|
-
* Usage - Typescript:
|
|
24
|
-
*
|
|
25
|
-
* ```ts
|
|
26
|
-
* class InfoController {
|
|
27
|
-
* @inject('authentication.user') public userName: string;
|
|
28
|
-
*
|
|
29
|
-
* constructor(@inject('application.name') public appName: string) {
|
|
30
|
-
* }
|
|
31
|
-
* // ...
|
|
32
|
-
* }
|
|
33
|
-
* ```
|
|
34
|
-
*
|
|
35
|
-
* Usage - JavaScript:
|
|
36
|
-
*
|
|
37
|
-
* - TODO(bajtos)
|
|
38
|
-
*
|
|
39
|
-
* @param bindingKey What binding to use in order to resolve the value of the
|
|
40
|
-
* decorated constructor parameter or property.
|
|
41
|
-
* @param metadata Optional metadata to help the injection
|
|
42
|
-
* @param resolve Optional function to resolve the injection
|
|
43
|
-
*
|
|
44
|
-
*/
|
|
45
|
-
export declare function inject(bindingKey: string, metadata?: Object, resolve?: ResolverFunction): (target: any, propertyKey?: string | symbol | undefined, propertyDescriptorOrParameterIndex?: number | TypedPropertyDescriptor<any> | undefined) => void;
|
|
46
|
-
/**
|
|
47
|
-
* Return an array of injection objects for parameters
|
|
48
|
-
* @param target The target class for constructor or static methods,
|
|
49
|
-
* or the prototype for instance methods
|
|
50
|
-
* @param methodName Method name, undefined for constructor
|
|
51
|
-
*/
|
|
52
|
-
export declare function describeInjectedArguments(target: any, method?: string | symbol): Injection[];
|
|
53
|
-
/**
|
|
54
|
-
* Return a map of injection objects for properties
|
|
55
|
-
* @param target The target class for static properties or
|
|
56
|
-
* prototype for instance properties.
|
|
57
|
-
*/
|
|
58
|
-
export declare function describeInjectedProperties(target: any): {
|
|
59
|
-
[p: string]: Injection;
|
|
60
|
-
};
|
package/lib6/src/inject.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright IBM Corp. 2013,2017. All Rights Reserved.
|
|
3
|
-
// Node module: loopback
|
|
4
|
-
// This file is licensed under the MIT License.
|
|
5
|
-
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
const reflect_1 = require("./reflect");
|
|
8
|
-
const PARAMETERS_KEY = 'inject:parameters';
|
|
9
|
-
const PROPERTIES_KEY = 'inject:properties';
|
|
10
|
-
/**
|
|
11
|
-
* A decorator to annotate method arguments for automatic injection
|
|
12
|
-
* by LoopBack IoC container.
|
|
13
|
-
*
|
|
14
|
-
* Usage - Typescript:
|
|
15
|
-
*
|
|
16
|
-
* ```ts
|
|
17
|
-
* class InfoController {
|
|
18
|
-
* @inject('authentication.user') public userName: string;
|
|
19
|
-
*
|
|
20
|
-
* constructor(@inject('application.name') public appName: string) {
|
|
21
|
-
* }
|
|
22
|
-
* // ...
|
|
23
|
-
* }
|
|
24
|
-
* ```
|
|
25
|
-
*
|
|
26
|
-
* Usage - JavaScript:
|
|
27
|
-
*
|
|
28
|
-
* - TODO(bajtos)
|
|
29
|
-
*
|
|
30
|
-
* @param bindingKey What binding to use in order to resolve the value of the
|
|
31
|
-
* decorated constructor parameter or property.
|
|
32
|
-
* @param metadata Optional metadata to help the injection
|
|
33
|
-
* @param resolve Optional function to resolve the injection
|
|
34
|
-
*
|
|
35
|
-
*/
|
|
36
|
-
function inject(bindingKey, metadata, resolve) {
|
|
37
|
-
return function markParameterOrPropertyAsInjected(
|
|
38
|
-
// tslint:disable-next-line:no-any
|
|
39
|
-
target, propertyKey, propertyDescriptorOrParameterIndex) {
|
|
40
|
-
if (typeof propertyDescriptorOrParameterIndex === 'number') {
|
|
41
|
-
// The decorator is applied to a method parameter
|
|
42
|
-
// Please note propertyKey is `undefined` for constructor
|
|
43
|
-
const injectedArgs = reflect_1.Reflector.getOwnMetadata(PARAMETERS_KEY, target, propertyKey) || [];
|
|
44
|
-
injectedArgs[propertyDescriptorOrParameterIndex] = {
|
|
45
|
-
bindingKey,
|
|
46
|
-
metadata,
|
|
47
|
-
resolve,
|
|
48
|
-
};
|
|
49
|
-
reflect_1.Reflector.defineMetadata(PARAMETERS_KEY, injectedArgs, target, propertyKey);
|
|
50
|
-
}
|
|
51
|
-
else if (propertyKey) {
|
|
52
|
-
if (typeof Object.getPrototypeOf(target) === 'function') {
|
|
53
|
-
const prop = target.name + '.' + propertyKey.toString();
|
|
54
|
-
throw new Error('@inject is not supported for a static property: ' + prop);
|
|
55
|
-
}
|
|
56
|
-
// The decorator is applied to a property
|
|
57
|
-
const injections = reflect_1.Reflector.getOwnMetadata(PROPERTIES_KEY, target) || {};
|
|
58
|
-
injections[propertyKey] = { bindingKey, metadata, resolve };
|
|
59
|
-
reflect_1.Reflector.defineMetadata(PROPERTIES_KEY, injections, target);
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
throw new Error('@inject can only be used on properties or method parameters.');
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
exports.inject = inject;
|
|
67
|
-
/**
|
|
68
|
-
* Return an array of injection objects for parameters
|
|
69
|
-
* @param target The target class for constructor or static methods,
|
|
70
|
-
* or the prototype for instance methods
|
|
71
|
-
* @param methodName Method name, undefined for constructor
|
|
72
|
-
*/
|
|
73
|
-
function describeInjectedArguments(
|
|
74
|
-
// tslint:disable-next-line:no-any
|
|
75
|
-
target, method) {
|
|
76
|
-
if (method) {
|
|
77
|
-
return reflect_1.Reflector.getMetadata(PARAMETERS_KEY, target, method) || [];
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
return reflect_1.Reflector.getMetadata(PARAMETERS_KEY, target) || [];
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
exports.describeInjectedArguments = describeInjectedArguments;
|
|
84
|
-
/**
|
|
85
|
-
* Return a map of injection objects for properties
|
|
86
|
-
* @param target The target class for static properties or
|
|
87
|
-
* prototype for instance properties.
|
|
88
|
-
*/
|
|
89
|
-
function describeInjectedProperties(
|
|
90
|
-
// tslint:disable-next-line:no-any
|
|
91
|
-
target) {
|
|
92
|
-
const metadata = {};
|
|
93
|
-
let obj = target;
|
|
94
|
-
while (true) {
|
|
95
|
-
const m = reflect_1.Reflector.getOwnMetadata(PROPERTIES_KEY, obj);
|
|
96
|
-
if (m) {
|
|
97
|
-
// Adding non-existent properties
|
|
98
|
-
for (const p in m) {
|
|
99
|
-
if (!(p in metadata)) {
|
|
100
|
-
metadata[p] = m[p];
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
// Recurse into the prototype chain
|
|
105
|
-
obj = Object.getPrototypeOf(obj);
|
|
106
|
-
if (!obj)
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
|
-
return metadata;
|
|
110
|
-
}
|
|
111
|
-
exports.describeInjectedProperties = describeInjectedProperties;
|
|
112
|
-
//# sourceMappingURL=inject.js.map
|
package/lib6/src/inject.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/inject.ts"],"names":[],"mappings":"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"}
|
package/lib6/src/is-promise.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function isPromise<T>(value: T | Promise<T>): value is Promise<T>;
|
package/lib6/src/is-promise.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright IBM Corp. 2013,2017. All Rights Reserved.
|
|
3
|
-
// Node module: loopback
|
|
4
|
-
// This file is licensed under the MIT License.
|
|
5
|
-
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
function isPromise(value) {
|
|
8
|
-
if (!value)
|
|
9
|
-
return false;
|
|
10
|
-
if (typeof value !== 'object' && typeof value !== 'function')
|
|
11
|
-
return false;
|
|
12
|
-
return typeof value.then === 'function';
|
|
13
|
-
}
|
|
14
|
-
exports.isPromise = isPromise;
|
|
15
|
-
//# sourceMappingURL=is-promise.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"is-promise.js","sourceRoot":"","sources":["../../src/is-promise.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,wBAAwB;AACxB,+CAA+C;AAC/C,gEAAgE;;AAEhE,mBAA6B,KAAqB;IAChD,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAAC,MAAM,CAAC,KAAK,CAAC;IACzB,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC;QAAC,MAAM,CAAC,KAAK,CAAC;IAC3E,MAAM,CAAC,OAAQ,KAAoB,CAAC,IAAI,KAAK,UAAU,CAAC;AAC1D,CAAC;AAJD,8BAIC"}
|
package/lib6/src/provider.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { ValueOrPromise } from './binding';
|
|
2
|
-
/**
|
|
3
|
-
* @exports Provider<T> : interface definition for a provider of a value
|
|
4
|
-
* of type T
|
|
5
|
-
* @summary Providers allow binding of a value provider class instead of the
|
|
6
|
-
* value itself
|
|
7
|
-
* @example:
|
|
8
|
-
* ```ts
|
|
9
|
-
* export class DateProvider implements Provider<Date> {
|
|
10
|
-
* constructor(@inject('stringDate') private param: String){}
|
|
11
|
-
* value(): Date {
|
|
12
|
-
* return new Date(param);
|
|
13
|
-
* }
|
|
14
|
-
* }
|
|
15
|
-
* ```
|
|
16
|
-
* @example: Binding a context
|
|
17
|
-
* ```ts
|
|
18
|
-
* ctx.bind('provider_key').toProvider(MyProvider);
|
|
19
|
-
* ```
|
|
20
|
-
* @example: getting a value dynamically
|
|
21
|
-
* ```ts
|
|
22
|
-
* ctx.get('provider_key');
|
|
23
|
-
* ctx.getBinding('provider_key').getValue();
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export interface Provider<T> {
|
|
27
|
-
/**
|
|
28
|
-
* @returns a value or a promise
|
|
29
|
-
*/
|
|
30
|
-
value(): ValueOrPromise<T>;
|
|
31
|
-
}
|
package/lib6/src/provider.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,wBAAwB;AACxB,+CAA+C;AAC/C,gEAAgE"}
|
package/lib6/src/reflect.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import 'reflect-metadata';
|
|
2
|
-
export declare class NamespacedReflect {
|
|
3
|
-
private namespace;
|
|
4
|
-
/**
|
|
5
|
-
* @param namespace : namespace to bind this reflect context
|
|
6
|
-
*/
|
|
7
|
-
constructor(namespace?: string);
|
|
8
|
-
private getMetadataKey(metadataKey);
|
|
9
|
-
/**
|
|
10
|
-
* define metadata for a target class or it's property/method
|
|
11
|
-
*/
|
|
12
|
-
defineMetadata(metadataKey: string, metadataValue: any, target: Object, propertyKey?: string | symbol): void;
|
|
13
|
-
/**
|
|
14
|
-
* lookup metadata from a target object and its prototype chain
|
|
15
|
-
*/
|
|
16
|
-
getMetadata(metadataKey: string, target: Object, propertyKey?: string | symbol): any;
|
|
17
|
-
/**
|
|
18
|
-
* get own metadata for a target object or it's property/method
|
|
19
|
-
*/
|
|
20
|
-
getOwnMetadata(metadataKey: string, target: Object, propertyKey?: string | symbol): any;
|
|
21
|
-
/**
|
|
22
|
-
* Check if the target has corresponding metadata
|
|
23
|
-
* @param metadataKey Key
|
|
24
|
-
* @param target Target
|
|
25
|
-
* @param propertyKey Optional property key
|
|
26
|
-
*/
|
|
27
|
-
hasMetadata(metadataKey: string, target: Object, propertyKey?: string | symbol): boolean;
|
|
28
|
-
hasOwnMetadata(metadataKey: string, target: Object, propertyKey?: string | symbol): boolean;
|
|
29
|
-
deleteMetadata(metadataKey: string, target: Object, propertyKey?: string | symbol): boolean;
|
|
30
|
-
getMetadataKeys(target: Object, propertyKey?: string | symbol): string[];
|
|
31
|
-
getOwnMetadataKeys(target: Object, propertyKey?: string | symbol): string[];
|
|
32
|
-
decorate(decorators: (PropertyDecorator | MethodDecorator)[] | ClassDecorator[], target: Object, targetKey?: string | symbol, descriptor?: PropertyDescriptor): PropertyDescriptor;
|
|
33
|
-
metadata(metadataKey: string, metadataValue: any): {
|
|
34
|
-
(target: Function): void;
|
|
35
|
-
(target: Object, targetKey: string | symbol): void;
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
export declare const Reflector: NamespacedReflect;
|