ditox 1.3.0 → 2.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.
Files changed (61) hide show
  1. package/README.md +5 -5
  2. package/dist/{index.d.ts → browser/index.d.ts} +18 -10
  3. package/dist/browser/index.js +2 -0
  4. package/dist/browser/index.js.map +1 -0
  5. package/dist/cjs/ditox.d.ts +125 -0
  6. package/dist/cjs/ditox.js +210 -0
  7. package/dist/cjs/ditox.js.map +1 -0
  8. package/dist/cjs/index.d.ts +5 -0
  9. package/dist/cjs/index.js +22 -0
  10. package/dist/cjs/index.js.map +1 -0
  11. package/dist/cjs/modules.d.ts +124 -0
  12. package/dist/cjs/modules.js +110 -0
  13. package/dist/cjs/modules.js.map +1 -0
  14. package/{src/utils.js.flow → dist/cjs/utils.d.ts} +21 -60
  15. package/dist/cjs/utils.js +98 -0
  16. package/dist/cjs/utils.js.map +1 -0
  17. package/dist/esm/ditox.d.ts +125 -0
  18. package/{lib/index.js → dist/esm/ditox.js} +10 -196
  19. package/dist/esm/ditox.js.map +1 -0
  20. package/dist/esm/index.d.ts +5 -0
  21. package/dist/esm/index.js +4 -0
  22. package/dist/esm/index.js.map +1 -0
  23. package/dist/esm/modules.d.ts +124 -0
  24. package/dist/esm/modules.js +103 -0
  25. package/dist/esm/modules.js.map +1 -0
  26. package/dist/esm/utils.d.ts +74 -0
  27. package/dist/esm/utils.js +88 -0
  28. package/dist/esm/utils.js.map +1 -0
  29. package/{lib → dist/umd}/index.d.ts +18 -10
  30. package/dist/umd/index.js +2 -0
  31. package/dist/umd/index.js.map +1 -0
  32. package/docs/.nojekyll +1 -0
  33. package/docs/README.md +113 -96
  34. package/docs/classes/{resolvererror.md → ResolverError.md} +14 -12
  35. package/package.json +16 -17
  36. package/src/ditox.test.ts +10 -1
  37. package/src/index.ts +8 -9
  38. package/src/modules.test.ts +79 -5
  39. package/src/modules.ts +33 -17
  40. package/src/utils.ts +4 -4
  41. package/CHANGELOG.md +0 -99
  42. package/dist/index.browser.js +0 -2
  43. package/dist/index.browser.js.flow +0 -4
  44. package/dist/index.browser.js.map +0 -1
  45. package/dist/index.js +0 -406
  46. package/dist/index.js.flow +0 -4
  47. package/dist/index.js.map +0 -1
  48. package/dist/index.module.d.ts +0 -293
  49. package/dist/index.module.js +0 -388
  50. package/dist/index.module.js.flow +0 -4
  51. package/dist/index.module.js.map +0 -1
  52. package/dist/index.umd.d.ts +0 -293
  53. package/dist/index.umd.js +0 -2
  54. package/dist/index.umd.js.flow +0 -4
  55. package/dist/index.umd.js.map +0 -1
  56. package/lib/index.js.flow +0 -4
  57. package/lib/index.js.map +0 -1
  58. package/mod.ts +0 -2
  59. package/src/ditox.js.flow +0 -131
  60. package/src/index.js.flow +0 -34
  61. package/src/modules.js.flow +0 -146
@@ -1,146 +0,0 @@
1
- // @flow strict
2
-
3
- import type {Container, Token} from './ditox';
4
- import {token} from './ditox';
5
- import type {TokenProps, ValueProps} from './utils';
6
-
7
- type ModuleController = {
8
- /** Dispose the module and clean its resources */
9
- destroy?: () => void,
10
- };
11
-
12
- /**
13
- * Dependency module
14
- *
15
- * @example
16
- * ```ts
17
- * type LoggerModule = Module<{
18
- * logger: Logger;
19
- * }>;
20
- * ```
21
- */
22
- export type Module<ModuleProps: ValueProps = {}> = {
23
- ...ModuleController,
24
- ...ModuleProps,
25
- };
26
-
27
- /**
28
- * Description of a dependency module in declarative way.
29
- *
30
- * @example
31
- * ```ts
32
- * const LOGGER_MODULE: ModuleDeclaration<LoggerModule> = {
33
- * token: LOGGER_MODULE_TOKEN,
34
- * factory: (container) => {
35
- * const transport = container.resolve(TRANSPORT_TOKEN).open();
36
- * return {
37
- * logger: { log: (message) => transport.write(message) },
38
- * destroy: () => transport.close(),
39
- * }
40
- * },
41
- * exportedProps: {
42
- * logger: LOGGER_TOKEN,
43
- * },
44
- * };
45
- * ```
46
- */
47
- export type ModuleDeclaration<T: Module<*>> = {
48
- /** Token for the module */
49
- token: Token<T>,
50
-
51
- /** Factory of the module */
52
- factory: (container: Container) => T,
53
-
54
- /** Dictionary of module properties which are bound to tokens. */
55
- exportedProps?: $Shape<TokenProps<T>>,
56
-
57
- /** Callback could be used to prepare an environment. It is called before binding the module. */
58
- beforeBinding?: (container: Container) => void,
59
-
60
- /** Callback could be used to export complex dependencies from the module. It is called after binding the module. */
61
- afterBinding?: (container: Container) => void,
62
- };
63
-
64
- /**
65
- * Options for module binding.
66
- *
67
- * `scope` types:
68
- * - `singleton` - **This is the default**. The module is created and cached by the container which registered the factory.
69
- * - `scoped` - The module is created and cached by the container which starts resolving.
70
- */
71
- export type BindModuleOptions = {
72
- scope?: 'scoped' | 'singleton',
73
- };
74
-
75
- /**
76
- * Binds the dependency module to the container
77
- * @param container - Dependency container.
78
- * @param moduleDeclaration - Declaration of the dependency module.
79
- * @param options - Options for module binding.
80
- *
81
- * @example
82
- * ```ts
83
- * bindModule(container, LOGGER_MODULE);
84
- * ```
85
- */
86
- declare export function bindModule<T: Module<*>>(
87
- container: Container,
88
- moduleDeclaration: ModuleDeclaration<T>,
89
- options?: BindModuleOptions,
90
- ): void;
91
-
92
- export type ModuleBindingEntry =
93
- | ModuleDeclaration<*>
94
- | {
95
- module: ModuleDeclaration<*>,
96
- options: BindModuleOptions,
97
- };
98
-
99
- /**
100
- * Binds dependency modules to the container
101
- *
102
- * @param container - Dependency container for binding
103
- * @param modules - Array of module binding entries: module declaration or `{module: ModuleDeclaration, options: BindModuleOptions}` objects.
104
- */
105
- declare export function bindModules(
106
- container: Container,
107
- modules: Array<ModuleBindingEntry>,
108
- ): void;
109
-
110
- /**
111
- * Declares a module binding
112
- *
113
- * @param declaration - a module declaration
114
- * @param declaration.token - optional field
115
- *
116
- * @example
117
- * ```ts
118
- * const LOGGER_MODULE = declareModule<LoggerModule>({
119
- * factory: (container) => {
120
- * const transport = container.resolve(TRANSPORT_TOKEN).open();
121
- * return {
122
- * logger: { log: (message) => transport.write(message) },
123
- * destroy: () => transport.close(),
124
- * }
125
- * },
126
- * exportedProps: {
127
- * logger: LOGGER_TOKEN,
128
- * },
129
- * });
130
- * ```
131
- */
132
- declare export function declareModule<T>(
133
- declaration: ModuleDeclaration<T> | {
134
- ...$Rest<ModuleDeclaration<T>, {token: *}>,
135
- token?: $PropertyType<ModuleDeclaration<T>, 'token'>,
136
- },
137
- ): ModuleDeclaration<T>;
138
-
139
- /**
140
- * Declares bindings of several modules
141
- *
142
- * @param modules - module declaration entries
143
- */
144
- declare export function declareModuleBindings(
145
- modules: Array<ModuleBindingEntry>,
146
- ): ModuleDeclaration<Module<*>>;