awilixify 3.0.0 → 3.1.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.
Files changed (55) hide show
  1. package/README.md +5 -2
  2. package/dist/index.d.ts +2 -1
  3. package/dist/lib/devtools/devtools.types.d.ts +63 -0
  4. package/dist/lib/devtools/devtools.types.js +1 -0
  5. package/dist/lib/devtools/helpers.d.ts +2 -0
  6. package/dist/lib/devtools/helpers.js +18 -0
  7. package/dist/lib/devtools/index.d.ts +4 -0
  8. package/dist/lib/devtools/index.js +3 -0
  9. package/dist/lib/di/contexts/container-context-base.d.ts +13 -3
  10. package/dist/lib/di/contexts/container-context-base.js +45 -7
  11. package/dist/lib/di/contexts/di-context-async.js +15 -9
  12. package/dist/lib/di/contexts/di-context-base.js +5 -4
  13. package/dist/lib/di/contexts/module-graph-ensurer.d.ts +1 -0
  14. package/dist/lib/di/contexts/module-graph-ensurer.js +5 -0
  15. package/dist/lib/di/errors.d.ts +3 -0
  16. package/dist/lib/di/errors.js +6 -0
  17. package/dist/lib/di/modules/module-factories.js +9 -1
  18. package/dist/lib/di/modules/runtime-module.types.d.ts +7 -0
  19. package/dist/lib/di/processors/handler-processor.d.ts +5 -1
  20. package/dist/lib/di/processors/handler-processor.js +41 -7
  21. package/dist/lib/di/processors/initializer-processor.d.ts +3 -2
  22. package/dist/lib/di/processors/initializer-processor.js +33 -29
  23. package/dist/lib/di/processors/interceptor-processor.d.ts +4 -1
  24. package/dist/lib/di/processors/interceptor-processor.js +18 -2
  25. package/dist/lib/di/processors/keyed-feature-registrar.js +1 -1
  26. package/dist/lib/di/processors/lifecycle-processor.d.ts +0 -1
  27. package/dist/lib/di/processors/lifecycle-processor.js +1 -4
  28. package/dist/lib/di/providers/provider-resolver.d.ts +7 -3
  29. package/dist/lib/di/providers/provider-resolver.js +56 -16
  30. package/dist/lib/di/providers/types/provider.types.d.ts +5 -5
  31. package/dist/lib/mediator/mediator.d.ts +4 -1
  32. package/dist/lib/mediator/mediator.js +13 -2
  33. package/dist/lib/react/index.d.ts +4 -0
  34. package/dist/lib/react/index.js +4 -0
  35. package/dist/lib/react/react-di-context.d.ts +2 -7
  36. package/dist/lib/react/react-di-context.js +5 -8
  37. package/dist/lib/react/react-module.types.d.ts +5 -19
  38. package/dist/tsconfig.tsbuildinfo +1 -1
  39. package/package.json +7 -3
  40. package/dist/lib/di/contexts/context-overrides.d.ts +0 -22
  41. package/dist/lib/di/contexts/context-overrides.js +0 -93
  42. package/dist/lib/di/contexts/module-overrides.d.ts +0 -70
  43. package/dist/lib/di/contexts/module-overrides.js +0 -3
  44. package/dist/lib/di/contexts/override-value.types.d.ts +0 -6
  45. package/dist/lib/di/contexts/override-value.types.js +0 -1
  46. package/dist/lib/di/contexts/overrides-processor.d.ts +0 -22
  47. package/dist/lib/di/contexts/overrides-processor.js +0 -93
  48. package/dist/lib/di/contexts/provider-overrides.types.d.ts +0 -19
  49. package/dist/lib/di/contexts/provider-overrides.types.js +0 -1
  50. package/dist/lib/di/modules/provider-overrides.types.d.ts +0 -19
  51. package/dist/lib/di/modules/provider-overrides.types.js +0 -1
  52. package/dist/lib/di/providers/basic-provider-resolver.d.ts +0 -35
  53. package/dist/lib/di/providers/basic-provider-resolver.js +0 -88
  54. package/dist/react.d.ts +0 -4
  55. package/dist/react.js +0 -4
@@ -1,93 +0,0 @@
1
- import * as ERRORS from "../errors.js";
2
- export class OverridesProcessor {
3
- options;
4
- effectiveModuleMap = new WeakMap();
5
- appliedModuleOverrides = new WeakSet();
6
- rootModule;
7
- constructor(options) {
8
- this.options = options;
9
- }
10
- setRootModule(module) {
11
- this.rootModule = module;
12
- }
13
- applyModuleOverrides(module) {
14
- const moduleOverride = this.options.moduleOverrides?.find((override) => override.module === module);
15
- if (!moduleOverride) {
16
- this.effectiveModuleMap.set(module, module);
17
- return module;
18
- }
19
- this.ensureModuleOverrideKeysExist(module, moduleOverride);
20
- this.appliedModuleOverrides.add(module);
21
- const effectiveModule = {
22
- ...module,
23
- providers: {
24
- ...module.providers,
25
- ...moduleOverride.overrides.providers,
26
- },
27
- queryPreHandlers: {
28
- ...module.queryPreHandlers,
29
- ...moduleOverride.overrides.queryPreHandlers,
30
- },
31
- commandPreHandlers: {
32
- ...module.commandPreHandlers,
33
- ...moduleOverride.overrides.commandPreHandlers,
34
- },
35
- interceptors: {
36
- ...module.interceptors,
37
- ...moduleOverride.overrides.interceptors,
38
- },
39
- initializers: {
40
- ...module.initializers,
41
- ...moduleOverride.overrides.initializers,
42
- },
43
- };
44
- this.effectiveModuleMap.set(module, effectiveModule);
45
- return effectiveModule;
46
- }
47
- getEffectiveModule(module) {
48
- return this.effectiveModuleMap.get(module) ?? module;
49
- }
50
- ensureAllModuleOverridesApplied() {
51
- for (const override of this.options.moduleOverrides ?? []) {
52
- if (!this.appliedModuleOverrides.has(override.module)) {
53
- throw new ERRORS.ModuleOverrideTargetNotFoundError(override.module.name);
54
- }
55
- }
56
- }
57
- applyRootProviderOverrides(module, moduleForSorting) {
58
- const overrides = this.options.providerOverrides;
59
- if (module !== this.rootModule || !overrides) {
60
- return moduleForSorting;
61
- }
62
- const providerKeys = new Set(Object.keys(module.providers || {}));
63
- for (const key of Object.keys(overrides)) {
64
- if (!providerKeys.has(key)) {
65
- throw new ERRORS.ProviderOverrideNotFoundError(module.name, key);
66
- }
67
- }
68
- return {
69
- ...moduleForSorting,
70
- providers: {
71
- ...moduleForSorting.providers,
72
- ...overrides,
73
- },
74
- };
75
- }
76
- ensureModuleOverrideKeysExist(module, moduleOverride) {
77
- this.ensureFeatureOverrideKeysExist(module, "providers", moduleOverride.overrides.providers);
78
- this.ensureFeatureOverrideKeysExist(module, "queryPreHandlers", moduleOverride.overrides.queryPreHandlers);
79
- this.ensureFeatureOverrideKeysExist(module, "commandPreHandlers", moduleOverride.overrides.commandPreHandlers);
80
- this.ensureFeatureOverrideKeysExist(module, "interceptors", moduleOverride.overrides.interceptors);
81
- this.ensureFeatureOverrideKeysExist(module, "initializers", moduleOverride.overrides.initializers);
82
- }
83
- ensureFeatureOverrideKeysExist(module, featureKind, overrides) {
84
- if (!overrides)
85
- return;
86
- const featureKeys = new Set(Object.keys(module[featureKind] || {}));
87
- for (const key of Object.keys(overrides)) {
88
- if (!featureKeys.has(key)) {
89
- throw new ERRORS.ModuleFeatureOverrideNotFoundError(module.name, featureKind, key);
90
- }
91
- }
92
- }
93
- }
@@ -1,19 +0,0 @@
1
- import type { EmptyObject } from "../common.types.js";
2
- import type { Module, ModuleDefinition, RawValueObject } from "../modules/module.types.js";
3
- import type { AnyProvider, DefProviderMap, Provider } from "../providers/provider.types.js";
4
- type ModuleDefFrom<TModule> = TModule extends Module<infer TDef extends ModuleDefinition> ? TDef : never;
5
- type OwnProviderMap<TModule> = ModuleDefFrom<TModule> extends {
6
- providers: infer TProviders extends DefProviderMap;
7
- } ? TProviders : EmptyObject;
8
- type ModuleDeps<TModule> = ModuleDefFrom<TModule> extends {
9
- deps: infer TDeps extends Record<string, unknown>;
10
- } ? TDeps : Record<string, unknown>;
11
- type PublicShape<T> = Pick<T, keyof T>;
12
- type ProviderOverride<TValue, TDeps extends Record<string, unknown>> = TValue extends object ? (Provider<PublicShape<TValue>, TDeps> & {
13
- initAfter?: readonly Extract<keyof TDeps, string>[];
14
- }) | RawValueObject<PublicShape<TValue>> : TValue;
15
- export type ProviderOverridesFor<TModule> = {
16
- [K in Extract<keyof OwnProviderMap<TModule>, string>]?: ProviderOverride<OwnProviderMap<TModule>[K], ModuleDeps<TModule>>;
17
- };
18
- export type AnyProviderOverrides = Record<string, AnyProvider>;
19
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,19 +0,0 @@
1
- import type { EmptyObject } from "../common.types.js";
2
- import type { Module, ModuleDefinition, RawValueObject } from "./module.types.js";
3
- import type { AnyProvider, DefProviderMap, Provider } from "../providers/provider.types.js";
4
- type ModuleDefFrom<TModule> = TModule extends Module<infer TDef extends ModuleDefinition> ? TDef : never;
5
- type OwnProviderMap<TModule> = ModuleDefFrom<TModule> extends {
6
- providers: infer TProviders extends DefProviderMap;
7
- } ? TProviders : EmptyObject;
8
- type ModuleDeps<TModule> = ModuleDefFrom<TModule> extends {
9
- deps: infer TDeps extends Record<string, unknown>;
10
- } ? TDeps : Record<string, unknown>;
11
- type PublicShape<T> = Pick<T, keyof T>;
12
- type ProviderOverride<TValue, TDeps extends Record<string, unknown>> = TValue extends object ? (Provider<PublicShape<TValue>, TDeps> & {
13
- initAfter?: readonly Extract<keyof TDeps, string>[];
14
- }) | RawValueObject<PublicShape<TValue>> : TValue;
15
- export type ProviderOverridesFor<TModule> = {
16
- [K in Extract<keyof OwnProviderMap<TModule>, string>]?: ProviderOverride<OwnProviderMap<TModule>[K], ModuleDeps<TModule>>;
17
- };
18
- export type AnyProviderOverrides = Record<string, AnyProvider>;
19
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,35 +0,0 @@
1
- import * as Awilix from "awilix";
2
- import type { InternalModuleLike as M } from "../modules/runtime-module.types.js";
3
- import type { AnyProvider } from "./provider.types.js";
4
- export type ResolveProviderParams = {
5
- key: string;
6
- provider: AnyProvider;
7
- resolutionScope: Awilix.AwilixContainer;
8
- module: M;
9
- };
10
- export declare class BasicProviderResolver {
11
- protected readonly providerOptions: Partial<Awilix.BuildResolverOptions<any>>;
12
- constructor(providerOptions: Partial<Awilix.BuildResolverOptions<any>>);
13
- static mergeResolverOptions(module: M, providerOptions: Partial<Awilix.BuildResolverOptions<any>>, options?: Partial<Awilix.BuildResolverOptions<any>>): Awilix.BuildResolverOptions<any>;
14
- resolveProvider({ key, provider, resolutionScope, module, }: ResolveProviderParams): Awilix.Resolver<any>;
15
- resolveProviderAsync({ key, provider, resolutionScope, module, }: ResolveProviderParams): Promise<Awilix.Resolver<any>>;
16
- protected resolveConstructorProvider({ provider, resolverOptions, }: {
17
- provider: Awilix.Constructor<any>;
18
- resolverOptions: Awilix.BuildResolverOptions<any>;
19
- module: M;
20
- }): Awilix.Resolver<any>;
21
- protected resolveUseClassProvider({ provider, resolverOptions, }: {
22
- provider: Extract<AnyProvider, {
23
- useClass: Awilix.Constructor<any>;
24
- }>;
25
- resolverOptions: Awilix.BuildResolverOptions<any>;
26
- module: M;
27
- }): Awilix.Resolver<any>;
28
- protected resolveAsyncFactoryInSyncContext({ key, module, }: {
29
- key: string;
30
- provider: AnyProvider;
31
- resolverOptions: Awilix.BuildResolverOptions<any>;
32
- module: M;
33
- }): Awilix.Resolver<any>;
34
- protected extractResolverOptions(module: M, provider: AnyProvider): Awilix.BuildResolverOptions<any>;
35
- }
@@ -1,88 +0,0 @@
1
- import * as Awilix from "awilix";
2
- import * as ERRORS from "../errors.js";
3
- import * as GUARGS from "../type-guards.js";
4
- export class BasicProviderResolver {
5
- providerOptions;
6
- constructor(providerOptions) {
7
- this.providerOptions = providerOptions;
8
- }
9
- static mergeResolverOptions(module, providerOptions, options) {
10
- return {
11
- ...providerOptions,
12
- ...module.providerOptions,
13
- ...options,
14
- };
15
- }
16
- resolveProvider({ key, provider, resolutionScope, module, }) {
17
- if (GUARGS.isPrimitive(provider)) {
18
- return Awilix.asValue(provider);
19
- }
20
- if (GUARGS.isPlainFunction(provider) &&
21
- !GUARGS.isCostructorProvider(provider)) {
22
- return Awilix.asValue(provider);
23
- }
24
- if (typeof provider === "object" &&
25
- !GUARGS.isCostructorProvider(provider) &&
26
- !GUARGS.isFactoryProvider(provider) &&
27
- !GUARGS.hasUseClass(provider)) {
28
- return Awilix.asValue(provider);
29
- }
30
- const resolverOptions = this.extractResolverOptions(module, provider);
31
- if (GUARGS.isCostructorProvider(provider)) {
32
- return this.resolveConstructorProvider({
33
- provider,
34
- resolverOptions,
35
- module,
36
- });
37
- }
38
- if (GUARGS.isFactoryProvider(provider)) {
39
- if (GUARGS.isAsyncFactoryProvider(provider)) {
40
- return this.resolveAsyncFactoryInSyncContext({
41
- key,
42
- provider,
43
- resolverOptions,
44
- module,
45
- });
46
- }
47
- const factoryDeps = (provider.inject || []).map((dependencyKey) => resolutionScope.registrations[dependencyKey].resolve(resolutionScope));
48
- return Awilix.asFunction(() => provider.useFactory(...factoryDeps), resolverOptions);
49
- }
50
- return this.resolveUseClassProvider({
51
- provider,
52
- resolverOptions,
53
- module,
54
- });
55
- }
56
- async resolveProviderAsync({ key, provider, resolutionScope, module, }) {
57
- if (!GUARGS.isFactoryProvider(provider) ||
58
- !GUARGS.isAsyncFactoryProvider(provider)) {
59
- return this.resolveProvider({ provider, resolutionScope, module, key });
60
- }
61
- const resolverOptions = this.extractResolverOptions(module, provider);
62
- if (resolverOptions.lifetime !== Awilix.Lifetime.SINGLETON) {
63
- throw new ERRORS.AsyncFactoryRequiresSingletonLifetimeError(module.name, key);
64
- }
65
- const factoryDeps = (provider.inject || []).map((dependencyKey) => resolutionScope.registrations[dependencyKey].resolve(resolutionScope));
66
- return Awilix.asValue(await provider.useFactory(...factoryDeps));
67
- }
68
- resolveConstructorProvider({ provider, resolverOptions, }) {
69
- return Awilix.asClass(provider, resolverOptions);
70
- }
71
- resolveUseClassProvider({ provider, resolverOptions, }) {
72
- return Awilix.asClass(provider.useClass, resolverOptions);
73
- }
74
- resolveAsyncFactoryInSyncContext({ key, module, }) {
75
- throw new ERRORS.AsyncFactoryRequiresAsyncCreateError(module.name, key);
76
- }
77
- extractResolverOptions(module, provider) {
78
- if (GUARGS.hasUseClass(provider)) {
79
- const { useClass, allowCircular, eager, initAfter, ...options } = provider;
80
- return BasicProviderResolver.mergeResolverOptions(module, this.providerOptions, options);
81
- }
82
- if (GUARGS.isFactoryProvider(provider)) {
83
- const { eager, initAfter, inject, useFactory, ...options } = provider;
84
- return BasicProviderResolver.mergeResolverOptions(module, this.providerOptions, options);
85
- }
86
- return BasicProviderResolver.mergeResolverOptions(module, this.providerOptions);
87
- }
88
- }
package/dist/react.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from "./lib/react/errors.js";
2
- export * from "./lib/react/react-di-context.js";
3
- export * from "./lib/react/react-module.types.js";
4
- export * from "./lib/react/react-module-factories.js";
package/dist/react.js DELETED
@@ -1,4 +0,0 @@
1
- export * from "./lib/react/errors.js";
2
- export * from "./lib/react/react-di-context.js";
3
- export * from "./lib/react/react-module.types.js";
4
- export * from "./lib/react/react-module-factories.js";