awilix 12.1.0 → 13.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/README.md +86 -3
- package/lib/awilix.browser.mjs +49 -55
- package/lib/awilix.d.ts +1 -1
- package/lib/awilix.js.map +1 -1
- package/lib/awilix.module.mjs +51 -56
- package/lib/awilix.umd.js +49 -55
- package/lib/camel-case.js +2 -1
- package/lib/camel-case.js.map +1 -1
- package/lib/container.d.ts +44 -9
- package/lib/container.js +36 -36
- package/lib/container.js.map +1 -1
- package/lib/errors.d.ts +1 -1
- package/lib/list-modules.d.ts +2 -2
- package/lib/load-modules.d.ts +3 -3
- package/lib/load-modules.js.map +1 -1
- package/lib/param-parser.js.map +1 -1
- package/lib/resolvers.d.ts +4 -4
- package/lib/resolvers.js +13 -7
- package/lib/resolvers.js.map +1 -1
- package/lib/utils.d.ts +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -34,6 +34,8 @@ Awilix enables you to write **composable, testable software** using dependency i
|
|
|
34
34
|
- [The `awilix` object](#the-awilix-object)
|
|
35
35
|
- [Resolver options](#resolver-options)
|
|
36
36
|
- [`createContainer()`](#createcontainer)
|
|
37
|
+
- [`InferCradleFromResolvers`](#infercradlefromresolvers)
|
|
38
|
+
- [`InferCradleFromContainer`](#infercradlefromcontainer)
|
|
37
39
|
- [`asFunction()`](#asfunction)
|
|
38
40
|
- [`asClass()`](#asclass)
|
|
39
41
|
- [`asValue()`](#asvalue)
|
|
@@ -58,6 +60,7 @@ Awilix enables you to write **composable, testable software** using dependency i
|
|
|
58
60
|
- [Contributing](#contributing)
|
|
59
61
|
- [What's in a name?](#whats-in-a-name)
|
|
60
62
|
- [Author](#author)
|
|
63
|
+
- [Migrating from older versions](#migrating-from-older-versions)
|
|
61
64
|
|
|
62
65
|
# Installation
|
|
63
66
|
|
|
@@ -821,6 +824,9 @@ When importing `awilix`, you get the following top-level API:
|
|
|
821
824
|
- `aliasTo`
|
|
822
825
|
- `Lifetime` - documented above.
|
|
823
826
|
- `InjectionMode` - documented above.
|
|
827
|
+
- `InferCradleFromResolvers` (TypeScript utility type)
|
|
828
|
+
- `InferCradleFromContainer` (TypeScript utility type)
|
|
829
|
+
- `InferResolverType` (TypeScript utility type)
|
|
824
830
|
|
|
825
831
|
These are documented below.
|
|
826
832
|
|
|
@@ -874,6 +880,68 @@ Args:
|
|
|
874
880
|
class constructor as `repo`.
|
|
875
881
|
- `options.strict`: Enables [strict mode](#strict-mode). Defaults to `false`.
|
|
876
882
|
|
|
883
|
+
## `InferCradleFromResolvers`
|
|
884
|
+
|
|
885
|
+
A TypeScript utility type that extracts the cradle type from an object of
|
|
886
|
+
resolvers. Useful when you want to type a module's dependencies from a resolvers
|
|
887
|
+
object without having access to the container itself — for example, when the
|
|
888
|
+
container is assembled in one module but consumed in another:
|
|
889
|
+
|
|
890
|
+
```typescript
|
|
891
|
+
import { type InferCradleFromResolvers, asClass, asValue } from 'awilix'
|
|
892
|
+
|
|
893
|
+
const resolvers = {
|
|
894
|
+
userService: asClass(UserService),
|
|
895
|
+
logger: asValue(new Logger()),
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
type MyCradle = InferCradleFromResolvers<typeof resolvers>
|
|
899
|
+
// => { userService: UserService; logger: Logger }
|
|
900
|
+
```
|
|
901
|
+
|
|
902
|
+
`InferResolverType` is also exported for extracting the resolved type from a
|
|
903
|
+
single resolver:
|
|
904
|
+
|
|
905
|
+
```typescript
|
|
906
|
+
import { type InferResolverType, asClass } from 'awilix'
|
|
907
|
+
|
|
908
|
+
const resolver = asClass(UserService).singleton()
|
|
909
|
+
type T = InferResolverType<typeof resolver>
|
|
910
|
+
// => UserService
|
|
911
|
+
```
|
|
912
|
+
|
|
913
|
+
## `InferCradleFromContainer`
|
|
914
|
+
|
|
915
|
+
A TypeScript utility type that extracts the Cradle type from an
|
|
916
|
+
`AwilixContainer` type. This is useful when you need to reference the cradle type
|
|
917
|
+
of an existing container without manually redeclaring it.
|
|
918
|
+
|
|
919
|
+
> **Important:** One of the core principles of Awilix is that it should be
|
|
920
|
+
> transparent to your application code. The recommended approach is to define
|
|
921
|
+
> standalone options types for your services (e.g. `MyServiceOptions`) that
|
|
922
|
+
> declare only the dependencies they need, without any reference to Awilix or
|
|
923
|
+
> the container's cradle type. This keeps your application code fully
|
|
924
|
+
> decoupled from the DI container and preserves true inversion of control.
|
|
925
|
+
>
|
|
926
|
+
> That said, if you want a fully type-safe container and are aware of the
|
|
927
|
+
> trade-offs involved (coupling to a "god type", losing transparency, and
|
|
928
|
+
> difficulty mixing singleton and scoped registrations), the inference
|
|
929
|
+
> utilities below make that possible.
|
|
930
|
+
|
|
931
|
+
```typescript
|
|
932
|
+
import { createContainer, type InferCradleFromContainer, asClass, asValue } from 'awilix'
|
|
933
|
+
|
|
934
|
+
const container = createContainer()
|
|
935
|
+
.register({
|
|
936
|
+
userService: asClass(UserService),
|
|
937
|
+
logger: asValue(new Logger()),
|
|
938
|
+
})
|
|
939
|
+
|
|
940
|
+
// Extract the cradle type from the container
|
|
941
|
+
type MyCradle = InferCradleFromContainer<typeof container>
|
|
942
|
+
// => { userService: UserService; logger: Logger }
|
|
943
|
+
```
|
|
944
|
+
|
|
877
945
|
## `asFunction()`
|
|
878
946
|
|
|
879
947
|
Used with `container.register({ userService: asFunction(makeUserService) })`.
|
|
@@ -1038,8 +1106,23 @@ The optional `resolveOpts` has the following fields:
|
|
|
1038
1106
|
|
|
1039
1107
|
**Signatures**
|
|
1040
1108
|
|
|
1041
|
-
- `register(name: string, resolver: Resolver):
|
|
1042
|
-
- `register(nameAndResolverPair
|
|
1109
|
+
- `register(name: string | symbol, resolver: Resolver): this`
|
|
1110
|
+
- `register(nameAndResolverPair): AwilixContainer<Cradle & InferCradleFromResolvers<R>>`
|
|
1111
|
+
|
|
1112
|
+
The object overload returns a container whose cradle type includes the newly
|
|
1113
|
+
registered types. This means **the cradle type accumulates automatically** when
|
|
1114
|
+
you chain `.register()` calls — no manual interface needed:
|
|
1115
|
+
|
|
1116
|
+
```typescript
|
|
1117
|
+
const container = createContainer()
|
|
1118
|
+
.register({
|
|
1119
|
+
userService: asClass(UserService),
|
|
1120
|
+
logger: asValue(new Logger()),
|
|
1121
|
+
})
|
|
1122
|
+
|
|
1123
|
+
container.cradle.userService // => UserService ✓
|
|
1124
|
+
container.cradle.logger // => Logger ✓
|
|
1125
|
+
```
|
|
1043
1126
|
|
|
1044
1127
|
Awilix needs to know how to resolve the modules, so let's pull out the resolver
|
|
1045
1128
|
functions:
|
|
@@ -1058,7 +1141,7 @@ Now we need to use them. There are multiple syntaxes for the `register`
|
|
|
1058
1141
|
function, pick the one you like the most - or use all of them, I don't really
|
|
1059
1142
|
care! :sunglasses:
|
|
1060
1143
|
|
|
1061
|
-
**Both styles
|
|
1144
|
+
**Both styles support chaining! `register` returns the container!**
|
|
1062
1145
|
|
|
1063
1146
|
```js
|
|
1064
1147
|
// name-resolver
|
package/lib/awilix.browser.mjs
CHANGED
|
@@ -511,18 +511,6 @@ fn) {
|
|
|
511
511
|
function isFunction(val) {
|
|
512
512
|
return typeof val === 'function';
|
|
513
513
|
}
|
|
514
|
-
/**
|
|
515
|
-
* Returns the unique items in the array.
|
|
516
|
-
*
|
|
517
|
-
* @param {Array<T>}
|
|
518
|
-
* The array to remove dupes from.
|
|
519
|
-
*
|
|
520
|
-
* @return {Array<T>}
|
|
521
|
-
* The deduped array.
|
|
522
|
-
*/
|
|
523
|
-
function uniq(arr) {
|
|
524
|
-
return Array.from(new Set(arr));
|
|
525
|
-
}
|
|
526
514
|
|
|
527
515
|
/*
|
|
528
516
|
* Parses the parameter list of a function string, including ES6 class constructors.
|
|
@@ -884,10 +872,16 @@ function wrapWithLocals(container, locals) {
|
|
|
884
872
|
*/
|
|
885
873
|
function createInjectorProxy(container, injector) {
|
|
886
874
|
const locals = injector(container);
|
|
887
|
-
const
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
875
|
+
const keySet = new Set(Object.keys(container.registrations));
|
|
876
|
+
for (const s of Object.getOwnPropertySymbols(container.registrations)) {
|
|
877
|
+
keySet.add(s);
|
|
878
|
+
}
|
|
879
|
+
for (const k of Object.keys(locals)) {
|
|
880
|
+
keySet.add(k);
|
|
881
|
+
}
|
|
882
|
+
for (const s of Object.getOwnPropertySymbols(locals)) {
|
|
883
|
+
keySet.add(s);
|
|
884
|
+
}
|
|
891
885
|
// TODO: Lots of duplication here from the container proxy.
|
|
892
886
|
// Need to refactor.
|
|
893
887
|
const proxy = new Proxy({}, {
|
|
@@ -914,13 +908,13 @@ function createInjectorProxy(container, injector) {
|
|
|
914
908
|
* Used for `Object.keys`.
|
|
915
909
|
*/
|
|
916
910
|
ownKeys() {
|
|
917
|
-
return
|
|
911
|
+
return [...keySet];
|
|
918
912
|
},
|
|
919
913
|
/**
|
|
920
914
|
* Used for `Object.keys`.
|
|
921
915
|
*/
|
|
922
|
-
getOwnPropertyDescriptor(
|
|
923
|
-
if (
|
|
916
|
+
getOwnPropertyDescriptor(_target, key) {
|
|
917
|
+
if (keySet.has(key)) {
|
|
924
918
|
return {
|
|
925
919
|
enumerable: true,
|
|
926
920
|
configurable: true,
|
|
@@ -1227,8 +1221,11 @@ function createContainerInternal(options, parentContainer, parentResolutionStack
|
|
|
1227
1221
|
try {
|
|
1228
1222
|
// Grab the registration by name.
|
|
1229
1223
|
const resolver = getRegistration(name);
|
|
1230
|
-
|
|
1231
|
-
|
|
1224
|
+
// Cycle detection: scan the resolution stack.
|
|
1225
|
+
for (let i = 0; i < resolutionStack.length; i++) {
|
|
1226
|
+
if (resolutionStack[i].name === name) {
|
|
1227
|
+
throw new AwilixResolutionError(name, resolutionStack, 'Cyclic dependencies detected.');
|
|
1228
|
+
}
|
|
1232
1229
|
}
|
|
1233
1230
|
// Used in JSON.stringify.
|
|
1234
1231
|
if (name === 'toJSON') {
|
|
@@ -1263,57 +1260,54 @@ function createContainerInternal(options, parentContainer, parentResolutionStack
|
|
|
1263
1260
|
throw new AwilixResolutionError(name, resolutionStack);
|
|
1264
1261
|
}
|
|
1265
1262
|
const lifetime = resolver.lifetime || Lifetime.TRANSIENT;
|
|
1266
|
-
// if
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1263
|
+
// Throws if a shorter-lived dependency is resolved through a longer-lived ancestor.
|
|
1264
|
+
function throwIfLifetimeLeakage(depName, depLifetime, dep) {
|
|
1265
|
+
if (!options.strict || dep.isLeakSafe)
|
|
1266
|
+
return;
|
|
1267
|
+
for (let i = 0; i < resolutionStack.length; i++) {
|
|
1268
|
+
if (isLifetimeLonger(resolutionStack[i].lifetime, depLifetime)) {
|
|
1269
|
+
throw new AwilixResolutionError(depName, resolutionStack, `Dependency '${depName.toString()}' has a shorter lifetime than its ancestor: '${resolutionStack[i].name.toString()}'`);
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
// Fast path: cached singletons can always be returned immediately
|
|
1274
|
+
// since nothing has a longer lifetime.
|
|
1275
|
+
if (lifetime === Lifetime.SINGLETON) {
|
|
1276
|
+
const cached = rootContainer.cache.get(name);
|
|
1277
|
+
if (cached) {
|
|
1278
|
+
return cached.value;
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
// Fast path: cached scoped values can be returned immediately,
|
|
1282
|
+
// but in strict mode we still need to verify lifetime constraints.
|
|
1283
|
+
if (lifetime === Lifetime.SCOPED) {
|
|
1284
|
+
const cached = container.cache.get(name);
|
|
1285
|
+
if (cached !== undefined) {
|
|
1286
|
+
throwIfLifetimeLeakage(name, lifetime, resolver);
|
|
1287
|
+
return cached.value;
|
|
1272
1288
|
}
|
|
1273
1289
|
}
|
|
1274
|
-
//
|
|
1290
|
+
// Slow path: need to invoke the factory.
|
|
1291
|
+
throwIfLifetimeLeakage(name, lifetime, resolver);
|
|
1275
1292
|
resolutionStack.push({ name, lifetime });
|
|
1276
|
-
// Do the thing
|
|
1277
|
-
let cached;
|
|
1278
1293
|
let resolved;
|
|
1279
1294
|
switch (lifetime) {
|
|
1280
1295
|
case Lifetime.TRANSIENT:
|
|
1281
|
-
// Transient lifetime means resolve every time.
|
|
1282
1296
|
resolved = resolver.resolve(container);
|
|
1283
1297
|
break;
|
|
1284
1298
|
case Lifetime.SINGLETON:
|
|
1285
|
-
//
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
// if we are running in strict mode, perform singleton resolution using the root
|
|
1289
|
-
// container only.
|
|
1290
|
-
resolved = resolver.resolve(options.strict ? rootContainer : container);
|
|
1291
|
-
rootContainer.cache.set(name, { resolver, value: resolved });
|
|
1292
|
-
}
|
|
1293
|
-
else {
|
|
1294
|
-
resolved = cached.value;
|
|
1295
|
-
}
|
|
1299
|
+
// Cache was already checked above, so this is always a miss.
|
|
1300
|
+
resolved = resolver.resolve(options.strict ? rootContainer : container);
|
|
1301
|
+
rootContainer.cache.set(name, { resolver, value: resolved });
|
|
1296
1302
|
break;
|
|
1297
1303
|
case Lifetime.SCOPED:
|
|
1298
|
-
//
|
|
1299
|
-
// that resolves the registration also caches it.
|
|
1300
|
-
// If this container cache does not have it,
|
|
1301
|
-
// resolve and cache it rather than using the parent
|
|
1302
|
-
// container's cache.
|
|
1303
|
-
cached = container.cache.get(name);
|
|
1304
|
-
if (cached !== undefined) {
|
|
1305
|
-
// We found one!
|
|
1306
|
-
resolved = cached.value;
|
|
1307
|
-
break;
|
|
1308
|
-
}
|
|
1309
|
-
// If we still have not found one, we need to resolve and cache it.
|
|
1304
|
+
// Cache was already checked above, so this is always a miss.
|
|
1310
1305
|
resolved = resolver.resolve(container);
|
|
1311
1306
|
container.cache.set(name, { resolver, value: resolved });
|
|
1312
1307
|
break;
|
|
1313
1308
|
default:
|
|
1314
1309
|
throw new AwilixResolutionError(name, resolutionStack, `Unknown lifetime "${resolver.lifetime}"`);
|
|
1315
1310
|
}
|
|
1316
|
-
// Pop it from the stack again, ready for the next resolution
|
|
1317
1311
|
resolutionStack.pop();
|
|
1318
1312
|
return resolved;
|
|
1319
1313
|
}
|
package/lib/awilix.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { type AwilixContainer, type ContainerOptions, type CacheEntry, type ClassOrFunctionReturning, type FunctionReturning, type NameAndRegistrationPair, type RegistrationHash, type ResolveOptions, createContainer, } from './container';
|
|
1
|
+
export { type AwilixContainer, type ContainerOptions, type CacheEntry, type ClassOrFunctionReturning, type FunctionReturning, type InferCradleFromContainer, type InferCradleFromResolvers, type InferResolverType, type NameAndRegistrationPair, type RegistrationHash, type ResolveOptions, createContainer, } from './container';
|
|
2
2
|
export { AwilixError, AwilixRegistrationError, AwilixResolutionError, AwilixTypeError, } from './errors';
|
|
3
3
|
export { InjectionMode, type InjectionModeType } from './injection-mode';
|
|
4
4
|
export { Lifetime, type LifetimeType } from './lifetime';
|
package/lib/awilix.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"awilix.js","sourceRoot":"","sources":["../src/awilix.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"awilix.js","sourceRoot":"","sources":["../src/awilix.ts"],"names":[],"mappings":";;;AAAA,yCAaoB;AADlB,4GAAA,eAAe,OAAA;AAEjB,mCAKiB;AAJf,qGAAA,WAAW,OAAA;AACX,iHAAA,uBAAuB,OAAA;AACvB,+GAAA,qBAAqB,OAAA;AACrB,yGAAA,eAAe,OAAA;AAEjB,mDAAwE;AAA/D,+GAAA,aAAa,OAAA;AACtB,uCAAwD;AAA/C,oGAAA,QAAQ,OAAA;AACjB,+CAKuB;AADrB,2GAAA,WAAW,OAAA;AAEb,yCAiBoB;AAPlB,qGAAA,QAAQ,OAAA;AACR,oGAAA,OAAO,OAAA;AACP,oGAAA,OAAO,OAAA;AACP,uGAAA,UAAU,OAAA;AACV,oGAAA,OAAO,OAAA;AACP,gHAAA,mBAAmB,OAAA;AACnB,qHAAA,wBAAwB,OAAA;AAE1B,iCAA6C;AAApC,gGAAA,OAAO,OAAA;AAAE,mGAAA,UAAU,OAAA"}
|
package/lib/awilix.module.mjs
CHANGED
|
@@ -535,18 +535,6 @@ fn) {
|
|
|
535
535
|
function isFunction(val) {
|
|
536
536
|
return typeof val === 'function';
|
|
537
537
|
}
|
|
538
|
-
/**
|
|
539
|
-
* Returns the unique items in the array.
|
|
540
|
-
*
|
|
541
|
-
* @param {Array<T>}
|
|
542
|
-
* The array to remove dupes from.
|
|
543
|
-
*
|
|
544
|
-
* @return {Array<T>}
|
|
545
|
-
* The deduped array.
|
|
546
|
-
*/
|
|
547
|
-
function uniq(arr) {
|
|
548
|
-
return Array.from(new Set(arr));
|
|
549
|
-
}
|
|
550
538
|
|
|
551
539
|
// Regex to extract the module name.
|
|
552
540
|
const nameExpr = /(.*)\..*/i;
|
|
@@ -618,8 +606,9 @@ function listModules(globPatterns, opts) {
|
|
|
618
606
|
*/
|
|
619
607
|
function camelCase(input) {
|
|
620
608
|
const len = input.length;
|
|
621
|
-
if (len === 0)
|
|
609
|
+
if (len === 0) {
|
|
622
610
|
return '';
|
|
611
|
+
}
|
|
623
612
|
let result = '';
|
|
624
613
|
let wordIdx = 0;
|
|
625
614
|
let wordPos = 0;
|
|
@@ -1051,10 +1040,16 @@ function wrapWithLocals(container, locals) {
|
|
|
1051
1040
|
*/
|
|
1052
1041
|
function createInjectorProxy(container, injector) {
|
|
1053
1042
|
const locals = injector(container);
|
|
1054
|
-
const
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1043
|
+
const keySet = new Set(Object.keys(container.registrations));
|
|
1044
|
+
for (const s of Object.getOwnPropertySymbols(container.registrations)) {
|
|
1045
|
+
keySet.add(s);
|
|
1046
|
+
}
|
|
1047
|
+
for (const k of Object.keys(locals)) {
|
|
1048
|
+
keySet.add(k);
|
|
1049
|
+
}
|
|
1050
|
+
for (const s of Object.getOwnPropertySymbols(locals)) {
|
|
1051
|
+
keySet.add(s);
|
|
1052
|
+
}
|
|
1058
1053
|
// TODO: Lots of duplication here from the container proxy.
|
|
1059
1054
|
// Need to refactor.
|
|
1060
1055
|
const proxy = new Proxy({}, {
|
|
@@ -1081,13 +1076,13 @@ function createInjectorProxy(container, injector) {
|
|
|
1081
1076
|
* Used for `Object.keys`.
|
|
1082
1077
|
*/
|
|
1083
1078
|
ownKeys() {
|
|
1084
|
-
return
|
|
1079
|
+
return [...keySet];
|
|
1085
1080
|
},
|
|
1086
1081
|
/**
|
|
1087
1082
|
* Used for `Object.keys`.
|
|
1088
1083
|
*/
|
|
1089
|
-
getOwnPropertyDescriptor(
|
|
1090
|
-
if (
|
|
1084
|
+
getOwnPropertyDescriptor(_target, key) {
|
|
1085
|
+
if (keySet.has(key)) {
|
|
1091
1086
|
return {
|
|
1092
1087
|
enumerable: true,
|
|
1093
1088
|
configurable: true,
|
|
@@ -1580,8 +1575,11 @@ function createContainerInternal(options, parentContainer, parentResolutionStack
|
|
|
1580
1575
|
try {
|
|
1581
1576
|
// Grab the registration by name.
|
|
1582
1577
|
const resolver = getRegistration(name);
|
|
1583
|
-
|
|
1584
|
-
|
|
1578
|
+
// Cycle detection: scan the resolution stack.
|
|
1579
|
+
for (let i = 0; i < resolutionStack.length; i++) {
|
|
1580
|
+
if (resolutionStack[i].name === name) {
|
|
1581
|
+
throw new AwilixResolutionError(name, resolutionStack, 'Cyclic dependencies detected.');
|
|
1582
|
+
}
|
|
1585
1583
|
}
|
|
1586
1584
|
// Used in JSON.stringify.
|
|
1587
1585
|
if (name === 'toJSON') {
|
|
@@ -1617,57 +1615,54 @@ function createContainerInternal(options, parentContainer, parentResolutionStack
|
|
|
1617
1615
|
throw new AwilixResolutionError(name, resolutionStack);
|
|
1618
1616
|
}
|
|
1619
1617
|
const lifetime = resolver.lifetime || Lifetime.TRANSIENT;
|
|
1620
|
-
// if
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1618
|
+
// Throws if a shorter-lived dependency is resolved through a longer-lived ancestor.
|
|
1619
|
+
function throwIfLifetimeLeakage(depName, depLifetime, dep) {
|
|
1620
|
+
if (!options.strict || dep.isLeakSafe)
|
|
1621
|
+
return;
|
|
1622
|
+
for (let i = 0; i < resolutionStack.length; i++) {
|
|
1623
|
+
if (isLifetimeLonger(resolutionStack[i].lifetime, depLifetime)) {
|
|
1624
|
+
throw new AwilixResolutionError(depName, resolutionStack, `Dependency '${depName.toString()}' has a shorter lifetime than its ancestor: '${resolutionStack[i].name.toString()}'`);
|
|
1625
|
+
}
|
|
1626
|
+
}
|
|
1627
|
+
}
|
|
1628
|
+
// Fast path: cached singletons can always be returned immediately
|
|
1629
|
+
// since nothing has a longer lifetime.
|
|
1630
|
+
if (lifetime === Lifetime.SINGLETON) {
|
|
1631
|
+
const cached = rootContainer.cache.get(name);
|
|
1632
|
+
if (cached) {
|
|
1633
|
+
return cached.value;
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1636
|
+
// Fast path: cached scoped values can be returned immediately,
|
|
1637
|
+
// but in strict mode we still need to verify lifetime constraints.
|
|
1638
|
+
if (lifetime === Lifetime.SCOPED) {
|
|
1639
|
+
const cached = container.cache.get(name);
|
|
1640
|
+
if (cached !== undefined) {
|
|
1641
|
+
throwIfLifetimeLeakage(name, lifetime, resolver);
|
|
1642
|
+
return cached.value;
|
|
1626
1643
|
}
|
|
1627
1644
|
}
|
|
1628
|
-
//
|
|
1645
|
+
// Slow path: need to invoke the factory.
|
|
1646
|
+
throwIfLifetimeLeakage(name, lifetime, resolver);
|
|
1629
1647
|
resolutionStack.push({ name, lifetime });
|
|
1630
|
-
// Do the thing
|
|
1631
|
-
let cached;
|
|
1632
1648
|
let resolved;
|
|
1633
1649
|
switch (lifetime) {
|
|
1634
1650
|
case Lifetime.TRANSIENT:
|
|
1635
|
-
// Transient lifetime means resolve every time.
|
|
1636
1651
|
resolved = resolver.resolve(container);
|
|
1637
1652
|
break;
|
|
1638
1653
|
case Lifetime.SINGLETON:
|
|
1639
|
-
//
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
// if we are running in strict mode, perform singleton resolution using the root
|
|
1643
|
-
// container only.
|
|
1644
|
-
resolved = resolver.resolve(options.strict ? rootContainer : container);
|
|
1645
|
-
rootContainer.cache.set(name, { resolver, value: resolved });
|
|
1646
|
-
}
|
|
1647
|
-
else {
|
|
1648
|
-
resolved = cached.value;
|
|
1649
|
-
}
|
|
1654
|
+
// Cache was already checked above, so this is always a miss.
|
|
1655
|
+
resolved = resolver.resolve(options.strict ? rootContainer : container);
|
|
1656
|
+
rootContainer.cache.set(name, { resolver, value: resolved });
|
|
1650
1657
|
break;
|
|
1651
1658
|
case Lifetime.SCOPED:
|
|
1652
|
-
//
|
|
1653
|
-
// that resolves the registration also caches it.
|
|
1654
|
-
// If this container cache does not have it,
|
|
1655
|
-
// resolve and cache it rather than using the parent
|
|
1656
|
-
// container's cache.
|
|
1657
|
-
cached = container.cache.get(name);
|
|
1658
|
-
if (cached !== undefined) {
|
|
1659
|
-
// We found one!
|
|
1660
|
-
resolved = cached.value;
|
|
1661
|
-
break;
|
|
1662
|
-
}
|
|
1663
|
-
// If we still have not found one, we need to resolve and cache it.
|
|
1659
|
+
// Cache was already checked above, so this is always a miss.
|
|
1664
1660
|
resolved = resolver.resolve(container);
|
|
1665
1661
|
container.cache.set(name, { resolver, value: resolved });
|
|
1666
1662
|
break;
|
|
1667
1663
|
default:
|
|
1668
1664
|
throw new AwilixResolutionError(name, resolutionStack, `Unknown lifetime "${resolver.lifetime}"`);
|
|
1669
1665
|
}
|
|
1670
|
-
// Pop it from the stack again, ready for the next resolution
|
|
1671
1666
|
resolutionStack.pop();
|
|
1672
1667
|
return resolved;
|
|
1673
1668
|
}
|
package/lib/awilix.umd.js
CHANGED
|
@@ -517,18 +517,6 @@
|
|
|
517
517
|
function isFunction(val) {
|
|
518
518
|
return typeof val === 'function';
|
|
519
519
|
}
|
|
520
|
-
/**
|
|
521
|
-
* Returns the unique items in the array.
|
|
522
|
-
*
|
|
523
|
-
* @param {Array<T>}
|
|
524
|
-
* The array to remove dupes from.
|
|
525
|
-
*
|
|
526
|
-
* @return {Array<T>}
|
|
527
|
-
* The deduped array.
|
|
528
|
-
*/
|
|
529
|
-
function uniq(arr) {
|
|
530
|
-
return Array.from(new Set(arr));
|
|
531
|
-
}
|
|
532
520
|
|
|
533
521
|
/*
|
|
534
522
|
* Parses the parameter list of a function string, including ES6 class constructors.
|
|
@@ -890,10 +878,16 @@
|
|
|
890
878
|
*/
|
|
891
879
|
function createInjectorProxy(container, injector) {
|
|
892
880
|
const locals = injector(container);
|
|
893
|
-
const
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
881
|
+
const keySet = new Set(Object.keys(container.registrations));
|
|
882
|
+
for (const s of Object.getOwnPropertySymbols(container.registrations)) {
|
|
883
|
+
keySet.add(s);
|
|
884
|
+
}
|
|
885
|
+
for (const k of Object.keys(locals)) {
|
|
886
|
+
keySet.add(k);
|
|
887
|
+
}
|
|
888
|
+
for (const s of Object.getOwnPropertySymbols(locals)) {
|
|
889
|
+
keySet.add(s);
|
|
890
|
+
}
|
|
897
891
|
// TODO: Lots of duplication here from the container proxy.
|
|
898
892
|
// Need to refactor.
|
|
899
893
|
const proxy = new Proxy({}, {
|
|
@@ -920,13 +914,13 @@
|
|
|
920
914
|
* Used for `Object.keys`.
|
|
921
915
|
*/
|
|
922
916
|
ownKeys() {
|
|
923
|
-
return
|
|
917
|
+
return [...keySet];
|
|
924
918
|
},
|
|
925
919
|
/**
|
|
926
920
|
* Used for `Object.keys`.
|
|
927
921
|
*/
|
|
928
|
-
getOwnPropertyDescriptor(
|
|
929
|
-
if (
|
|
922
|
+
getOwnPropertyDescriptor(_target, key) {
|
|
923
|
+
if (keySet.has(key)) {
|
|
930
924
|
return {
|
|
931
925
|
enumerable: true,
|
|
932
926
|
configurable: true,
|
|
@@ -1233,8 +1227,11 @@
|
|
|
1233
1227
|
try {
|
|
1234
1228
|
// Grab the registration by name.
|
|
1235
1229
|
const resolver = getRegistration(name);
|
|
1236
|
-
|
|
1237
|
-
|
|
1230
|
+
// Cycle detection: scan the resolution stack.
|
|
1231
|
+
for (let i = 0; i < resolutionStack.length; i++) {
|
|
1232
|
+
if (resolutionStack[i].name === name) {
|
|
1233
|
+
throw new AwilixResolutionError(name, resolutionStack, 'Cyclic dependencies detected.');
|
|
1234
|
+
}
|
|
1238
1235
|
}
|
|
1239
1236
|
// Used in JSON.stringify.
|
|
1240
1237
|
if (name === 'toJSON') {
|
|
@@ -1269,57 +1266,54 @@
|
|
|
1269
1266
|
throw new AwilixResolutionError(name, resolutionStack);
|
|
1270
1267
|
}
|
|
1271
1268
|
const lifetime = resolver.lifetime || Lifetime.TRANSIENT;
|
|
1272
|
-
// if
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1269
|
+
// Throws if a shorter-lived dependency is resolved through a longer-lived ancestor.
|
|
1270
|
+
function throwIfLifetimeLeakage(depName, depLifetime, dep) {
|
|
1271
|
+
if (!options.strict || dep.isLeakSafe)
|
|
1272
|
+
return;
|
|
1273
|
+
for (let i = 0; i < resolutionStack.length; i++) {
|
|
1274
|
+
if (isLifetimeLonger(resolutionStack[i].lifetime, depLifetime)) {
|
|
1275
|
+
throw new AwilixResolutionError(depName, resolutionStack, `Dependency '${depName.toString()}' has a shorter lifetime than its ancestor: '${resolutionStack[i].name.toString()}'`);
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
}
|
|
1279
|
+
// Fast path: cached singletons can always be returned immediately
|
|
1280
|
+
// since nothing has a longer lifetime.
|
|
1281
|
+
if (lifetime === Lifetime.SINGLETON) {
|
|
1282
|
+
const cached = rootContainer.cache.get(name);
|
|
1283
|
+
if (cached) {
|
|
1284
|
+
return cached.value;
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
// Fast path: cached scoped values can be returned immediately,
|
|
1288
|
+
// but in strict mode we still need to verify lifetime constraints.
|
|
1289
|
+
if (lifetime === Lifetime.SCOPED) {
|
|
1290
|
+
const cached = container.cache.get(name);
|
|
1291
|
+
if (cached !== undefined) {
|
|
1292
|
+
throwIfLifetimeLeakage(name, lifetime, resolver);
|
|
1293
|
+
return cached.value;
|
|
1278
1294
|
}
|
|
1279
1295
|
}
|
|
1280
|
-
//
|
|
1296
|
+
// Slow path: need to invoke the factory.
|
|
1297
|
+
throwIfLifetimeLeakage(name, lifetime, resolver);
|
|
1281
1298
|
resolutionStack.push({ name, lifetime });
|
|
1282
|
-
// Do the thing
|
|
1283
|
-
let cached;
|
|
1284
1299
|
let resolved;
|
|
1285
1300
|
switch (lifetime) {
|
|
1286
1301
|
case Lifetime.TRANSIENT:
|
|
1287
|
-
// Transient lifetime means resolve every time.
|
|
1288
1302
|
resolved = resolver.resolve(container);
|
|
1289
1303
|
break;
|
|
1290
1304
|
case Lifetime.SINGLETON:
|
|
1291
|
-
//
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
// if we are running in strict mode, perform singleton resolution using the root
|
|
1295
|
-
// container only.
|
|
1296
|
-
resolved = resolver.resolve(options.strict ? rootContainer : container);
|
|
1297
|
-
rootContainer.cache.set(name, { resolver, value: resolved });
|
|
1298
|
-
}
|
|
1299
|
-
else {
|
|
1300
|
-
resolved = cached.value;
|
|
1301
|
-
}
|
|
1305
|
+
// Cache was already checked above, so this is always a miss.
|
|
1306
|
+
resolved = resolver.resolve(options.strict ? rootContainer : container);
|
|
1307
|
+
rootContainer.cache.set(name, { resolver, value: resolved });
|
|
1302
1308
|
break;
|
|
1303
1309
|
case Lifetime.SCOPED:
|
|
1304
|
-
//
|
|
1305
|
-
// that resolves the registration also caches it.
|
|
1306
|
-
// If this container cache does not have it,
|
|
1307
|
-
// resolve and cache it rather than using the parent
|
|
1308
|
-
// container's cache.
|
|
1309
|
-
cached = container.cache.get(name);
|
|
1310
|
-
if (cached !== undefined) {
|
|
1311
|
-
// We found one!
|
|
1312
|
-
resolved = cached.value;
|
|
1313
|
-
break;
|
|
1314
|
-
}
|
|
1315
|
-
// If we still have not found one, we need to resolve and cache it.
|
|
1310
|
+
// Cache was already checked above, so this is always a miss.
|
|
1316
1311
|
resolved = resolver.resolve(container);
|
|
1317
1312
|
container.cache.set(name, { resolver, value: resolved });
|
|
1318
1313
|
break;
|
|
1319
1314
|
default:
|
|
1320
1315
|
throw new AwilixResolutionError(name, resolutionStack, `Unknown lifetime "${resolver.lifetime}"`);
|
|
1321
1316
|
}
|
|
1322
|
-
// Pop it from the stack again, ready for the next resolution
|
|
1323
1317
|
resolutionStack.pop();
|
|
1324
1318
|
return resolved;
|
|
1325
1319
|
}
|
package/lib/camel-case.js
CHANGED
package/lib/camel-case.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camel-case.js","sourceRoot":"","sources":["../src/camel-case.ts"],"names":[],"mappings":";;AAYA,
|
|
1
|
+
{"version":3,"file":"camel-case.js","sourceRoot":"","sources":["../src/camel-case.ts"],"names":[],"mappings":"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"}
|
package/lib/container.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { InjectionModeType } from './injection-mode';
|
|
2
|
-
import { LifetimeType } from './lifetime';
|
|
3
|
-
import { GlobWithOptions } from './list-modules';
|
|
4
|
-
import { LoadModulesOptions } from './load-modules';
|
|
5
|
-
import { BuildResolverOptions, Constructor, Resolver } from './resolvers';
|
|
1
|
+
import { type InjectionModeType } from './injection-mode';
|
|
2
|
+
import { type LifetimeType } from './lifetime';
|
|
3
|
+
import { type GlobWithOptions } from './list-modules';
|
|
4
|
+
import { type LoadModulesOptions } from './load-modules';
|
|
5
|
+
import { type BuildResolverOptions, type Constructor, type Resolver } from './resolvers';
|
|
6
6
|
/**
|
|
7
7
|
* The container returned from createContainer has some methods and properties.
|
|
8
8
|
* @interface AwilixContainer
|
|
9
9
|
*/
|
|
10
|
-
export interface AwilixContainer<Cradle extends object =
|
|
10
|
+
export interface AwilixContainer<Cradle extends object = {}> {
|
|
11
11
|
/**
|
|
12
12
|
* Options the container was configured with.
|
|
13
13
|
*/
|
|
@@ -46,11 +46,14 @@ export interface AwilixContainer<Cradle extends object = any> {
|
|
|
46
46
|
/**
|
|
47
47
|
* Adds a single registration that using a pre-constructed resolver.
|
|
48
48
|
*/
|
|
49
|
-
register<
|
|
49
|
+
register<N extends string | symbol, T>(name: N, registration: Resolver<T>): AwilixContainer<Cradle & Record<N, T>>;
|
|
50
50
|
/**
|
|
51
51
|
* Pairs resolvers to registration names and registers them.
|
|
52
|
+
* Mutates and returns the same container, but with an expanded type
|
|
53
|
+
* that includes the newly registered types, enabling incremental
|
|
54
|
+
* type building via chaining.
|
|
52
55
|
*/
|
|
53
|
-
register(nameAndRegistrationPair:
|
|
56
|
+
register<R extends Record<string, Resolver<any>>>(nameAndRegistrationPair: R): AwilixContainer<Cradle & InferCradleFromResolvers<R>>;
|
|
54
57
|
/**
|
|
55
58
|
* Resolves the registration with the given name.
|
|
56
59
|
*
|
|
@@ -141,6 +144,38 @@ export interface CacheEntry<T = any> {
|
|
|
141
144
|
export type NameAndRegistrationPair<T> = {
|
|
142
145
|
[U in keyof T]?: Resolver<T[U]>;
|
|
143
146
|
};
|
|
147
|
+
/**
|
|
148
|
+
* Extracts the resolved type from a Resolver.
|
|
149
|
+
*/
|
|
150
|
+
export type InferResolverType<T> = T extends Resolver<infer U> ? U : never;
|
|
151
|
+
/**
|
|
152
|
+
* Extracts the Cradle type from an AwilixContainer type.
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* const container = createContainer()
|
|
156
|
+
* .register({
|
|
157
|
+
* userService: asClass(UserService),
|
|
158
|
+
* logger: asValue(new Logger()),
|
|
159
|
+
* })
|
|
160
|
+
* type MyCradle = InferCradleFromContainer<typeof container>
|
|
161
|
+
* // => { userService: UserService; logger: Logger }
|
|
162
|
+
*/
|
|
163
|
+
export type InferCradleFromContainer<T extends AwilixContainer<any>> = T extends AwilixContainer<infer C> ? C : never;
|
|
164
|
+
/**
|
|
165
|
+
* Given an object whose values are Resolvers, produces the corresponding
|
|
166
|
+
* cradle type by extracting the resolved type from each resolver.
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* const resolvers = {
|
|
170
|
+
* userService: asClass(UserService),
|
|
171
|
+
* logger: asValue(new Logger()),
|
|
172
|
+
* }
|
|
173
|
+
* type MyCradle = InferCradleFromResolvers<typeof resolvers>
|
|
174
|
+
* // => { userService: UserService; logger: Logger }
|
|
175
|
+
*/
|
|
176
|
+
export type InferCradleFromResolvers<T extends Record<string, Resolver<any>>> = {
|
|
177
|
+
[K in keyof T]: InferResolverType<T[K]>;
|
|
178
|
+
};
|
|
144
179
|
/**
|
|
145
180
|
* Function that returns T.
|
|
146
181
|
*/
|
|
@@ -178,4 +213,4 @@ export type ResolutionStack = Array<{
|
|
|
178
213
|
*
|
|
179
214
|
* @return {AwilixContainer<T>} The container.
|
|
180
215
|
*/
|
|
181
|
-
export declare function createContainer<T extends object =
|
|
216
|
+
export declare function createContainer<T extends object = {}>(options?: ContainerOptions): AwilixContainer<T>;
|
package/lib/container.js
CHANGED
|
@@ -265,8 +265,11 @@ function createContainerInternal(options, parentContainer, parentResolutionStack
|
|
|
265
265
|
try {
|
|
266
266
|
// Grab the registration by name.
|
|
267
267
|
const resolver = getRegistration(name);
|
|
268
|
-
|
|
269
|
-
|
|
268
|
+
// Cycle detection: scan the resolution stack.
|
|
269
|
+
for (let i = 0; i < resolutionStack.length; i++) {
|
|
270
|
+
if (resolutionStack[i].name === name) {
|
|
271
|
+
throw new errors_1.AwilixResolutionError(name, resolutionStack, 'Cyclic dependencies detected.');
|
|
272
|
+
}
|
|
270
273
|
}
|
|
271
274
|
// Used in JSON.stringify.
|
|
272
275
|
if (name === 'toJSON') {
|
|
@@ -302,57 +305,54 @@ function createContainerInternal(options, parentContainer, parentResolutionStack
|
|
|
302
305
|
throw new errors_1.AwilixResolutionError(name, resolutionStack);
|
|
303
306
|
}
|
|
304
307
|
const lifetime = resolver.lifetime || lifetime_1.Lifetime.TRANSIENT;
|
|
305
|
-
// if
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
308
|
+
// Throws if a shorter-lived dependency is resolved through a longer-lived ancestor.
|
|
309
|
+
function throwIfLifetimeLeakage(depName, depLifetime, dep) {
|
|
310
|
+
if (!options.strict || dep.isLeakSafe)
|
|
311
|
+
return;
|
|
312
|
+
for (let i = 0; i < resolutionStack.length; i++) {
|
|
313
|
+
if ((0, lifetime_1.isLifetimeLonger)(resolutionStack[i].lifetime, depLifetime)) {
|
|
314
|
+
throw new errors_1.AwilixResolutionError(depName, resolutionStack, `Dependency '${depName.toString()}' has a shorter lifetime than its ancestor: '${resolutionStack[i].name.toString()}'`);
|
|
315
|
+
}
|
|
311
316
|
}
|
|
312
317
|
}
|
|
313
|
-
//
|
|
318
|
+
// Fast path: cached singletons can always be returned immediately
|
|
319
|
+
// since nothing has a longer lifetime.
|
|
320
|
+
if (lifetime === lifetime_1.Lifetime.SINGLETON) {
|
|
321
|
+
const cached = rootContainer.cache.get(name);
|
|
322
|
+
if (cached) {
|
|
323
|
+
return cached.value;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Fast path: cached scoped values can be returned immediately,
|
|
327
|
+
// but in strict mode we still need to verify lifetime constraints.
|
|
328
|
+
if (lifetime === lifetime_1.Lifetime.SCOPED) {
|
|
329
|
+
const cached = container.cache.get(name);
|
|
330
|
+
if (cached !== undefined) {
|
|
331
|
+
throwIfLifetimeLeakage(name, lifetime, resolver);
|
|
332
|
+
return cached.value;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// Slow path: need to invoke the factory.
|
|
336
|
+
throwIfLifetimeLeakage(name, lifetime, resolver);
|
|
314
337
|
resolutionStack.push({ name, lifetime });
|
|
315
|
-
// Do the thing
|
|
316
|
-
let cached;
|
|
317
338
|
let resolved;
|
|
318
339
|
switch (lifetime) {
|
|
319
340
|
case lifetime_1.Lifetime.TRANSIENT:
|
|
320
|
-
// Transient lifetime means resolve every time.
|
|
321
341
|
resolved = resolver.resolve(container);
|
|
322
342
|
break;
|
|
323
343
|
case lifetime_1.Lifetime.SINGLETON:
|
|
324
|
-
//
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
// if we are running in strict mode, perform singleton resolution using the root
|
|
328
|
-
// container only.
|
|
329
|
-
resolved = resolver.resolve(options.strict ? rootContainer : container);
|
|
330
|
-
rootContainer.cache.set(name, { resolver, value: resolved });
|
|
331
|
-
}
|
|
332
|
-
else {
|
|
333
|
-
resolved = cached.value;
|
|
334
|
-
}
|
|
344
|
+
// Cache was already checked above, so this is always a miss.
|
|
345
|
+
resolved = resolver.resolve(options.strict ? rootContainer : container);
|
|
346
|
+
rootContainer.cache.set(name, { resolver, value: resolved });
|
|
335
347
|
break;
|
|
336
348
|
case lifetime_1.Lifetime.SCOPED:
|
|
337
|
-
//
|
|
338
|
-
// that resolves the registration also caches it.
|
|
339
|
-
// If this container cache does not have it,
|
|
340
|
-
// resolve and cache it rather than using the parent
|
|
341
|
-
// container's cache.
|
|
342
|
-
cached = container.cache.get(name);
|
|
343
|
-
if (cached !== undefined) {
|
|
344
|
-
// We found one!
|
|
345
|
-
resolved = cached.value;
|
|
346
|
-
break;
|
|
347
|
-
}
|
|
348
|
-
// If we still have not found one, we need to resolve and cache it.
|
|
349
|
+
// Cache was already checked above, so this is always a miss.
|
|
349
350
|
resolved = resolver.resolve(container);
|
|
350
351
|
container.cache.set(name, { resolver, value: resolved });
|
|
351
352
|
break;
|
|
352
353
|
default:
|
|
353
354
|
throw new errors_1.AwilixResolutionError(name, resolutionStack, `Unknown lifetime "${resolver.lifetime}"`);
|
|
354
355
|
}
|
|
355
|
-
// Pop it from the stack again, ready for the next resolution
|
|
356
356
|
resolutionStack.pop();
|
|
357
357
|
return resolved;
|
|
358
358
|
}
|
package/lib/container.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}
|
package/lib/errors.d.ts
CHANGED
package/lib/list-modules.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import glob from 'fast-glob';
|
|
2
|
-
import { BuildResolverOptions } from './resolvers';
|
|
3
|
-
import { LifetimeType } from './awilix';
|
|
2
|
+
import type { BuildResolverOptions } from './resolvers';
|
|
3
|
+
import type { LifetimeType } from './awilix';
|
|
4
4
|
/**
|
|
5
5
|
* The options when invoking listModules().
|
|
6
6
|
* @interface ListModulesOptions
|
package/lib/load-modules.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AwilixContainer } from './container';
|
|
2
|
-
import { GlobWithOptions, ModuleDescriptor, listModules } from './list-modules';
|
|
3
|
-
import { BuildResolverOptions } from './resolvers';
|
|
1
|
+
import type { AwilixContainer } from './container';
|
|
2
|
+
import type { GlobWithOptions, ModuleDescriptor, listModules } from './list-modules';
|
|
3
|
+
import type { BuildResolverOptions } from './resolvers';
|
|
4
4
|
/**
|
|
5
5
|
* Metadata of the module as well as the loaded module itself.
|
|
6
6
|
* @interface LoadedModuleDescriptor
|
package/lib/load-modules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-modules.js","sourceRoot":"","sources":["../src/load-modules.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"load-modules.js","sourceRoot":"","sources":["../src/load-modules.ts"],"names":[],"mappings":";;AAyGA,kCAmBC;AA5HD,6CAAwC;AACxC,6BAAmC;AAEnC,yCAAqC;AAOrC,2CAA2D;AAC3D,mCAA6C;AAiD7C,MAAM,cAAc,GAAkC;IACpD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,sBAAS,EAAC,CAAC,CAAC;CAC/B,CAAA;AAcD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,SAAgB,WAAW,CACzB,YAA6B,EAC7B,YAAsD,EACtD,IAA8B;IAE9B,IAAI,KAAK,EAAE,CAAA;IACX,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;IACxC,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;IAE5D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,aAAa,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC9D,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YAC3C,OAAO,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;QACF,OAAO,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC1D,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,aAAa,CAC1B,YAA6B,EAC7B,SAA0B,EAC1B,OAA2B,EAC3B,IAA6B;IAE7B,MAAM,cAAc,GAAG,EAAE,CAAA;IACzB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,IAAA,mBAAa,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA;QAChD,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;IACpD,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IACjD,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AAC1D,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CACxB,MAAW,EACX,CAAmB;IAEnB,MAAM,KAAK,GAAkC,EAAE,CAAA;IAC/C,mBAAmB;IACnB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,IAAA,kBAAU,EAAC,MAAM,CAAC,EAAE,CAAC;QACvB,2BAA2B;QAC3B,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAA;QAEF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,IAAI,IAAA,kBAAU,EAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,qBAAqB;QACrB,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,MAAM,CAAC,OAAO;YACrB,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAA;IACJ,CAAC;IAED,8EAA8E;IAC9E,0CAA0C;IAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,wEAAwE;YACxE,SAAQ;QACV,CAAC;QAED,IAAI,IAAA,kBAAU,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,oBAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,GAAG;gBACT,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;gBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CACtB,iBAA6C,EAC7C,SAA0B,EAC1B,OAA2B,EAC3B,IAA6B;IAE7B,iBAAiB;SACd,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;SACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SAChB,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAA;IAC1D,OAAO;QACL,aAAa,EAAE,OAAO;KACvB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,IAAkD;IAElD,OAAO;QACL,0DAA0D;QAC1D,eAAe,EAAE;YACf,QAAQ,EAAE,mBAAQ,CAAC,SAAS;YAC5B,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC;SAClC;QACD,GAAG,IAAI;KACR,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CACzB,SAA0B,EAC1B,IAA6B,EAC7B,gBAAyD;IAEzD,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,oBAAQ,CAAC,CAAA;IACrD,IAAI,IAAI,GAAG,YAAY,IAAI,YAAY,CAAC,IAAI,CAAA;IAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAA;QAC5B,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAA;QAC/B,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAClC,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;YACvC,CAAC;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,oBAAoB,GAAG,gBAAgB,CAAC,IAAI,CAAA;IAEhD,IAAI,OAAO,oBAAoB,KAAK,QAAQ,EAAE,CAAC;QAC7C,oBAAoB,GAAG,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAA;IAC3D,CAAC;IAED,MAAM,OAAO,GAAuB;QAClC,GAAG,IAAI,CAAC,eAAe;QACvB,GAAG,oBAAoB;QACvB,GAAG,YAAY;KAChB,CAAA;IAED,sEAAsE;IACtE,MAAM,GAAG,GAAa,OAAO,CAAC,QAAQ;QACpC,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,IAAA,eAAO,EAAC,gBAAgB,CAAC,KAAK,CAAC;YAC/B,CAAC,CAAC,mBAAO;YACT,CAAC,CAAC,sBAAU,CAAA;IAEhB,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;AAChE,CAAC"}
|
package/lib/param-parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"param-parser.js","sourceRoot":"","sources":["../src/param-parser.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"param-parser.js","sourceRoot":"","sources":["../src/param-parser.ts"],"names":[],"mappings":"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"}
|
package/lib/resolvers.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AwilixContainer, FunctionReturning } from './container';
|
|
2
|
-
import { InjectionModeType } from './injection-mode';
|
|
3
|
-
import { LifetimeType } from './lifetime';
|
|
1
|
+
import type { AwilixContainer, FunctionReturning } from './container';
|
|
2
|
+
import { type InjectionModeType } from './injection-mode';
|
|
3
|
+
import { type LifetimeType } from './lifetime';
|
|
4
4
|
/**
|
|
5
5
|
* RESOLVER symbol can be used by modules loaded by
|
|
6
6
|
* `loadModules` to configure their lifetime, injection mode, etc.
|
|
@@ -109,7 +109,7 @@ export type Constructor<T> = {
|
|
|
109
109
|
*
|
|
110
110
|
* @return {object} The resolver.
|
|
111
111
|
*/
|
|
112
|
-
export declare function asValue<T>(value: T): Resolver<T>;
|
|
112
|
+
export declare function asValue<const T>(value: T): Resolver<T>;
|
|
113
113
|
/**
|
|
114
114
|
* Creates a factory resolver, where the given factory function
|
|
115
115
|
* will be invoked with `new` when requested.
|
package/lib/resolvers.js
CHANGED
|
@@ -229,10 +229,16 @@ function wrapWithLocals(container, locals) {
|
|
|
229
229
|
*/
|
|
230
230
|
function createInjectorProxy(container, injector) {
|
|
231
231
|
const locals = injector(container);
|
|
232
|
-
const
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
232
|
+
const keySet = new Set(Object.keys(container.registrations));
|
|
233
|
+
for (const s of Object.getOwnPropertySymbols(container.registrations)) {
|
|
234
|
+
keySet.add(s);
|
|
235
|
+
}
|
|
236
|
+
for (const k of Object.keys(locals)) {
|
|
237
|
+
keySet.add(k);
|
|
238
|
+
}
|
|
239
|
+
for (const s of Object.getOwnPropertySymbols(locals)) {
|
|
240
|
+
keySet.add(s);
|
|
241
|
+
}
|
|
236
242
|
// TODO: Lots of duplication here from the container proxy.
|
|
237
243
|
// Need to refactor.
|
|
238
244
|
const proxy = new Proxy({}, {
|
|
@@ -259,13 +265,13 @@ function createInjectorProxy(container, injector) {
|
|
|
259
265
|
* Used for `Object.keys`.
|
|
260
266
|
*/
|
|
261
267
|
ownKeys() {
|
|
262
|
-
return
|
|
268
|
+
return [...keySet];
|
|
263
269
|
},
|
|
264
270
|
/**
|
|
265
271
|
* Used for `Object.keys`.
|
|
266
272
|
*/
|
|
267
|
-
getOwnPropertyDescriptor(
|
|
268
|
-
if (
|
|
273
|
+
getOwnPropertyDescriptor(_target, key) {
|
|
274
|
+
if (keySet.has(key)) {
|
|
269
275
|
return {
|
|
270
276
|
enumerable: true,
|
|
271
277
|
configurable: true,
|
package/lib/resolvers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../src/resolvers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"resolvers.js","sourceRoot":"","sources":["../src/resolvers.ts"],"names":[],"mappings":"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"}
|
package/lib/utils.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "awilix",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "13.0.0",
|
|
4
4
|
"description": "Extremely powerful dependency injection container.",
|
|
5
5
|
"main": "lib/awilix.js",
|
|
6
6
|
"module": "lib/awilix.module.mjs",
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
"check": "tsc -p tsconfig.json --noEmit --pretty",
|
|
45
45
|
"test": "npm run check && jest",
|
|
46
46
|
"lint": "npm run check && eslint --fix \"{src,examples}/**/*.ts\" && prettier --write \"{src,examples}/**/*.{ts,js}\"",
|
|
47
|
+
"bench": "npx tsx benchmarks/run-all.ts",
|
|
47
48
|
"cover": "npm run test -- --coverage",
|
|
48
49
|
"publish:pre": "npm run lint && npm run build && npm run cover",
|
|
49
50
|
"publish:post": "npm publish && git push --follow-tags",
|
|
@@ -95,6 +96,7 @@
|
|
|
95
96
|
"rollup-plugin-copy": "^3.5.0",
|
|
96
97
|
"rollup-plugin-typescript2": "^0.36.0",
|
|
97
98
|
"smid": "^0.1.1",
|
|
99
|
+
"tinybench": "^6.0.0",
|
|
98
100
|
"ts-jest": "^29.2.6",
|
|
99
101
|
"tslib": "^2.8.1",
|
|
100
102
|
"typescript": "^5.8.2",
|