@armoury/fivem-framework-common 1.0.15 → 1.0.16
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/dist/cjs/common/index.js
CHANGED
|
@@ -35,6 +35,32 @@ const decorator_utils_2 = require("../decorators/decorator.utils");
|
|
|
35
35
|
const config_decorator_2 = require("./config.decorator");
|
|
36
36
|
const resource_decorator_2 = require("./resource.decorator");
|
|
37
37
|
exports.APP_INITIALIZER = new injection_js_1.InjectionToken('APP_INITIALIZER');
|
|
38
|
+
function flattenProviders(providers) {
|
|
39
|
+
const flattened = [];
|
|
40
|
+
for (const provider of providers) {
|
|
41
|
+
if (Array.isArray(provider)) {
|
|
42
|
+
flattened.push(...flattenProviders(provider));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
flattened.push(provider);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return flattened;
|
|
49
|
+
}
|
|
50
|
+
function getProviderToken(provider) {
|
|
51
|
+
if (typeof provider === 'function') {
|
|
52
|
+
return provider;
|
|
53
|
+
}
|
|
54
|
+
if (provider && typeof provider === 'object' && 'provide' in provider) {
|
|
55
|
+
return provider.provide;
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
function getProviderTokens(providers) {
|
|
60
|
+
return flattenProviders(providers)
|
|
61
|
+
.map(getProviderToken)
|
|
62
|
+
.filter((token) => token !== undefined);
|
|
63
|
+
}
|
|
38
64
|
function getProviderClasses(providers) {
|
|
39
65
|
const classes = [];
|
|
40
66
|
for (const provider of providers) {
|
|
@@ -52,13 +78,32 @@ function getProviderClasses(providers) {
|
|
|
52
78
|
}
|
|
53
79
|
return classes;
|
|
54
80
|
}
|
|
55
|
-
|
|
81
|
+
function hasProviderForToken(providers, token) {
|
|
82
|
+
for (const provider of providers) {
|
|
83
|
+
if (Array.isArray(provider)) {
|
|
84
|
+
if (hasProviderForToken(provider, token)) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (provider === token || (provider && typeof provider === 'object' && 'provide' in provider && provider.provide === token)) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
async function bootstrapWithProviders(entryPoint, parentProviders, options = {}, decorationType = decorator_utils_2.DecorationType.SERVER, readConfigValue, readResourceExports, defaultEagerProviders = []) {
|
|
56
96
|
var _a, _b;
|
|
57
97
|
const eagerProviders = (_a = options.eager) !== null && _a !== void 0 ? _a : [];
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
98
|
+
const optionProviders = (_b = options.providers) !== null && _b !== void 0 ? _b : [];
|
|
99
|
+
const platformDefaultProviders = flattenProviders(defaultEagerProviders);
|
|
100
|
+
const activeDefaultEagerProviders = platformDefaultProviders.filter((defaultProvider) => {
|
|
101
|
+
const token = getProviderToken(defaultProvider);
|
|
102
|
+
return token === undefined || !hasProviderForToken([...parentProviders, ...optionProviders], token);
|
|
103
|
+
});
|
|
104
|
+
const eagerRegistrations = eagerProviders.filter((eagerProvider) => !hasProviderForToken([...parentProviders, ...optionProviders], eagerProvider));
|
|
105
|
+
const providers = [...activeDefaultEagerProviders, ...optionProviders, ...eagerRegistrations];
|
|
106
|
+
const eagerTokens = [...new Set([...getProviderTokens(platformDefaultProviders), ...eagerProviders])];
|
|
62
107
|
const configTargets = [entryPoint, ...getProviderClasses(parentProviders), ...getProviderClasses(providers)];
|
|
63
108
|
const configProviders = (0, config_decorator_2.createConfigProviders)(configTargets, readConfigValue);
|
|
64
109
|
const resourceProviders = (0, resource_decorator_2.createResourceProviders)(configTargets, readResourceExports);
|
|
@@ -66,7 +111,7 @@ async function bootstrapWithProviders(entryPoint, parentProviders, options = {},
|
|
|
66
111
|
const injector = injection_js_1.ReflectiveInjector.resolveAndCreate([...configProviders, ...resourceProviders, ...providers, entryPoint], parentInjector);
|
|
67
112
|
const instance = injector.get(entryPoint);
|
|
68
113
|
(0, decorator_utils_2.Decorate)(instance, entryPoint.prototype, [...parentProviders, ...providers], decorationType);
|
|
69
|
-
|
|
114
|
+
eagerTokens.forEach((token) => injector.get(token));
|
|
70
115
|
const initializers = injector.get(exports.APP_INITIALIZER, []);
|
|
71
116
|
await Promise.all(initializers.map((initializer) => initializer()));
|
|
72
117
|
return instance;
|
package/dist/esm/common/index.js
CHANGED
|
@@ -12,6 +12,32 @@ import { Decorate, DecorationType } from '../decorators/decorator.utils';
|
|
|
12
12
|
import { createConfigProviders } from './config.decorator';
|
|
13
13
|
import { createResourceProviders } from './resource.decorator';
|
|
14
14
|
export const APP_INITIALIZER = new InjectionToken('APP_INITIALIZER');
|
|
15
|
+
function flattenProviders(providers) {
|
|
16
|
+
const flattened = [];
|
|
17
|
+
for (const provider of providers) {
|
|
18
|
+
if (Array.isArray(provider)) {
|
|
19
|
+
flattened.push(...flattenProviders(provider));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
flattened.push(provider);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return flattened;
|
|
26
|
+
}
|
|
27
|
+
function getProviderToken(provider) {
|
|
28
|
+
if (typeof provider === 'function') {
|
|
29
|
+
return provider;
|
|
30
|
+
}
|
|
31
|
+
if (provider && typeof provider === 'object' && 'provide' in provider) {
|
|
32
|
+
return provider.provide;
|
|
33
|
+
}
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
function getProviderTokens(providers) {
|
|
37
|
+
return flattenProviders(providers)
|
|
38
|
+
.map(getProviderToken)
|
|
39
|
+
.filter((token) => token !== undefined);
|
|
40
|
+
}
|
|
15
41
|
function getProviderClasses(providers) {
|
|
16
42
|
const classes = [];
|
|
17
43
|
for (const provider of providers) {
|
|
@@ -29,13 +55,32 @@ function getProviderClasses(providers) {
|
|
|
29
55
|
}
|
|
30
56
|
return classes;
|
|
31
57
|
}
|
|
32
|
-
|
|
58
|
+
function hasProviderForToken(providers, token) {
|
|
59
|
+
for (const provider of providers) {
|
|
60
|
+
if (Array.isArray(provider)) {
|
|
61
|
+
if (hasProviderForToken(provider, token)) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (provider === token || (provider && typeof provider === 'object' && 'provide' in provider && provider.provide === token)) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
export async function bootstrapWithProviders(entryPoint, parentProviders, options = {}, decorationType = DecorationType.SERVER, readConfigValue, readResourceExports, defaultEagerProviders = []) {
|
|
33
73
|
var _a, _b;
|
|
34
74
|
const eagerProviders = (_a = options.eager) !== null && _a !== void 0 ? _a : [];
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
75
|
+
const optionProviders = (_b = options.providers) !== null && _b !== void 0 ? _b : [];
|
|
76
|
+
const platformDefaultProviders = flattenProviders(defaultEagerProviders);
|
|
77
|
+
const activeDefaultEagerProviders = platformDefaultProviders.filter((defaultProvider) => {
|
|
78
|
+
const token = getProviderToken(defaultProvider);
|
|
79
|
+
return token === undefined || !hasProviderForToken([...parentProviders, ...optionProviders], token);
|
|
80
|
+
});
|
|
81
|
+
const eagerRegistrations = eagerProviders.filter((eagerProvider) => !hasProviderForToken([...parentProviders, ...optionProviders], eagerProvider));
|
|
82
|
+
const providers = [...activeDefaultEagerProviders, ...optionProviders, ...eagerRegistrations];
|
|
83
|
+
const eagerTokens = [...new Set([...getProviderTokens(platformDefaultProviders), ...eagerProviders])];
|
|
39
84
|
const configTargets = [entryPoint, ...getProviderClasses(parentProviders), ...getProviderClasses(providers)];
|
|
40
85
|
const configProviders = createConfigProviders(configTargets, readConfigValue);
|
|
41
86
|
const resourceProviders = createResourceProviders(configTargets, readResourceExports);
|
|
@@ -43,7 +88,7 @@ export async function bootstrapWithProviders(entryPoint, parentProviders, option
|
|
|
43
88
|
const injector = ReflectiveInjector.resolveAndCreate([...configProviders, ...resourceProviders, ...providers, entryPoint], parentInjector);
|
|
44
89
|
const instance = injector.get(entryPoint);
|
|
45
90
|
Decorate(instance, entryPoint.prototype, [...parentProviders, ...providers], decorationType);
|
|
46
|
-
|
|
91
|
+
eagerTokens.forEach((token) => injector.get(token));
|
|
47
92
|
const initializers = injector.get(APP_INITIALIZER, []);
|
|
48
93
|
await Promise.all(initializers.map((initializer) => initializer()));
|
|
49
94
|
return instance;
|
|
@@ -20,4 +20,4 @@ export interface BootstrapOptions {
|
|
|
20
20
|
}
|
|
21
21
|
export declare function bootstrapWithProviders<T extends {
|
|
22
22
|
new (...args: any[]): any;
|
|
23
|
-
} & Provider>(entryPoint: T, parentProviders: Provider[], options: BootstrapOptions | undefined, decorationType: DecorationType | undefined, readConfigValue: ConfigValueReader, readResourceExports: ResourceExportsReader): Promise<InstanceType<T>>;
|
|
23
|
+
} & Provider>(entryPoint: T, parentProviders: Provider[], options: BootstrapOptions | undefined, decorationType: DecorationType | undefined, readConfigValue: ConfigValueReader, readResourceExports: ResourceExportsReader, defaultEagerProviders?: Provider[]): Promise<InstanceType<T>>;
|