@toijs/modular 1.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 (157) hide show
  1. package/dist/config/constants/config.constant.d.ts +5 -0
  2. package/dist/config/constants/config.constant.d.ts.map +1 -0
  3. package/dist/config/constants/config.constant.js +5 -0
  4. package/dist/config/constants/config.constant.js.map +1 -0
  5. package/dist/config/constants/index.d.ts +2 -0
  6. package/dist/config/constants/index.d.ts.map +1 -0
  7. package/dist/config/constants/index.js +2 -0
  8. package/dist/config/constants/index.js.map +1 -0
  9. package/dist/config/index.d.ts +3 -0
  10. package/dist/config/index.d.ts.map +1 -0
  11. package/dist/config/index.js +3 -0
  12. package/dist/config/index.js.map +1 -0
  13. package/dist/config/services/config.service.d.ts +18 -0
  14. package/dist/config/services/config.service.d.ts.map +1 -0
  15. package/dist/config/services/config.service.js +33 -0
  16. package/dist/config/services/config.service.js.map +1 -0
  17. package/dist/config/services/index.d.ts +2 -0
  18. package/dist/config/services/index.d.ts.map +1 -0
  19. package/dist/config/services/index.js +2 -0
  20. package/dist/config/services/index.js.map +1 -0
  21. package/dist/config/utils/env.util.d.ts +4 -0
  22. package/dist/config/utils/env.util.d.ts.map +1 -0
  23. package/dist/config/utils/env.util.js +35 -0
  24. package/dist/config/utils/env.util.js.map +1 -0
  25. package/dist/config/utils/index.d.ts +2 -0
  26. package/dist/config/utils/index.d.ts.map +1 -0
  27. package/dist/config/utils/index.js +2 -0
  28. package/dist/config/utils/index.js.map +1 -0
  29. package/dist/di/constants/di.constant.d.ts +21 -0
  30. package/dist/di/constants/di.constant.d.ts.map +1 -0
  31. package/dist/di/constants/di.constant.js +21 -0
  32. package/dist/di/constants/di.constant.js.map +1 -0
  33. package/dist/di/constants/index.d.ts +2 -0
  34. package/dist/di/constants/index.d.ts.map +1 -0
  35. package/dist/di/constants/index.js +2 -0
  36. package/dist/di/constants/index.js.map +1 -0
  37. package/dist/di/decorators/index.d.ts +2 -0
  38. package/dist/di/decorators/index.d.ts.map +1 -0
  39. package/dist/di/decorators/index.js +2 -0
  40. package/dist/di/decorators/index.js.map +1 -0
  41. package/dist/di/decorators/injectable.decorator.d.ts +39 -0
  42. package/dist/di/decorators/injectable.decorator.d.ts.map +1 -0
  43. package/dist/di/decorators/injectable.decorator.js +82 -0
  44. package/dist/di/decorators/injectable.decorator.js.map +1 -0
  45. package/dist/di/index.d.ts +5 -0
  46. package/dist/di/index.d.ts.map +1 -0
  47. package/dist/di/index.js +5 -0
  48. package/dist/di/index.js.map +1 -0
  49. package/dist/di/services/container.service.d.ts +52 -0
  50. package/dist/di/services/container.service.d.ts.map +1 -0
  51. package/dist/di/services/container.service.js +188 -0
  52. package/dist/di/services/container.service.js.map +1 -0
  53. package/dist/di/services/index.d.ts +2 -0
  54. package/dist/di/services/index.d.ts.map +1 -0
  55. package/dist/di/services/index.js +2 -0
  56. package/dist/di/services/index.js.map +1 -0
  57. package/dist/di/types/di.type.d.ts +85 -0
  58. package/dist/di/types/di.type.d.ts.map +1 -0
  59. package/dist/di/types/di.type.js +2 -0
  60. package/dist/di/types/di.type.js.map +1 -0
  61. package/dist/di/types/index.d.ts +2 -0
  62. package/dist/di/types/index.d.ts.map +1 -0
  63. package/dist/di/types/index.js +2 -0
  64. package/dist/di/types/index.js.map +1 -0
  65. package/dist/index.d.ts +6 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +6 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/launcher/constants/core.constant.d.ts +5 -0
  70. package/dist/launcher/constants/core.constant.d.ts.map +1 -0
  71. package/dist/launcher/constants/core.constant.js +5 -0
  72. package/dist/launcher/constants/core.constant.js.map +1 -0
  73. package/dist/launcher/constants/index.d.ts +2 -0
  74. package/dist/launcher/constants/index.d.ts.map +1 -0
  75. package/dist/launcher/constants/index.js +2 -0
  76. package/dist/launcher/constants/index.js.map +1 -0
  77. package/dist/launcher/constants/task.constant.d.ts +3 -0
  78. package/dist/launcher/constants/task.constant.d.ts.map +1 -0
  79. package/dist/launcher/constants/task.constant.js +3 -0
  80. package/dist/launcher/constants/task.constant.js.map +1 -0
  81. package/dist/launcher/index.d.ts +4 -0
  82. package/dist/launcher/index.d.ts.map +1 -0
  83. package/dist/launcher/index.js +4 -0
  84. package/dist/launcher/index.js.map +1 -0
  85. package/dist/launcher/services/index.d.ts +3 -0
  86. package/dist/launcher/services/index.d.ts.map +1 -0
  87. package/dist/launcher/services/index.js +3 -0
  88. package/dist/launcher/services/index.js.map +1 -0
  89. package/dist/launcher/services/launcher.service.d.ts +33 -0
  90. package/dist/launcher/services/launcher.service.d.ts.map +1 -0
  91. package/dist/launcher/services/launcher.service.js +95 -0
  92. package/dist/launcher/services/launcher.service.js.map +1 -0
  93. package/dist/launcher/services/shell.service.d.ts +24 -0
  94. package/dist/launcher/services/shell.service.d.ts.map +1 -0
  95. package/dist/launcher/services/shell.service.js +34 -0
  96. package/dist/launcher/services/shell.service.js.map +1 -0
  97. package/dist/launcher/types/extensions.type.d.ts +16 -0
  98. package/dist/launcher/types/extensions.type.d.ts.map +1 -0
  99. package/dist/launcher/types/extensions.type.js +2 -0
  100. package/dist/launcher/types/extensions.type.js.map +1 -0
  101. package/dist/launcher/types/index.d.ts +2 -0
  102. package/dist/launcher/types/index.d.ts.map +1 -0
  103. package/dist/launcher/types/index.js +2 -0
  104. package/dist/launcher/types/index.js.map +1 -0
  105. package/dist/launcher/types/module.type.d.ts +29 -0
  106. package/dist/launcher/types/module.type.d.ts.map +1 -0
  107. package/dist/launcher/types/module.type.js +2 -0
  108. package/dist/launcher/types/module.type.js.map +1 -0
  109. package/dist/metadata/constants/index.d.ts +2 -0
  110. package/dist/metadata/constants/index.d.ts.map +1 -0
  111. package/dist/metadata/constants/index.js +2 -0
  112. package/dist/metadata/constants/index.js.map +1 -0
  113. package/dist/metadata/constants/metadata.constant.d.ts +2 -0
  114. package/dist/metadata/constants/metadata.constant.d.ts.map +1 -0
  115. package/dist/metadata/constants/metadata.constant.js +2 -0
  116. package/dist/metadata/constants/metadata.constant.js.map +1 -0
  117. package/dist/metadata/index.d.ts +4 -0
  118. package/dist/metadata/index.d.ts.map +1 -0
  119. package/dist/metadata/index.js +4 -0
  120. package/dist/metadata/index.js.map +1 -0
  121. package/dist/metadata/services/index.d.ts +2 -0
  122. package/dist/metadata/services/index.d.ts.map +1 -0
  123. package/dist/metadata/services/index.js +2 -0
  124. package/dist/metadata/services/index.js.map +1 -0
  125. package/dist/metadata/services/metadata.service.d.ts +44 -0
  126. package/dist/metadata/services/metadata.service.d.ts.map +1 -0
  127. package/dist/metadata/services/metadata.service.js +95 -0
  128. package/dist/metadata/services/metadata.service.js.map +1 -0
  129. package/dist/metadata/types/index.d.ts +2 -0
  130. package/dist/metadata/types/index.d.ts.map +1 -0
  131. package/dist/metadata/types/index.js +2 -0
  132. package/dist/metadata/types/index.js.map +1 -0
  133. package/dist/metadata/types/metadata.type.d.ts +3 -0
  134. package/dist/metadata/types/metadata.type.d.ts.map +1 -0
  135. package/dist/metadata/types/metadata.type.js +2 -0
  136. package/dist/metadata/types/metadata.type.js.map +1 -0
  137. package/dist/task/index.d.ts +3 -0
  138. package/dist/task/index.d.ts.map +1 -0
  139. package/dist/task/index.js +3 -0
  140. package/dist/task/index.js.map +1 -0
  141. package/dist/task/services/index.d.ts +2 -0
  142. package/dist/task/services/index.d.ts.map +1 -0
  143. package/dist/task/services/index.js +2 -0
  144. package/dist/task/services/index.js.map +1 -0
  145. package/dist/task/services/task.service.d.ts +25 -0
  146. package/dist/task/services/task.service.d.ts.map +1 -0
  147. package/dist/task/services/task.service.js +58 -0
  148. package/dist/task/services/task.service.js.map +1 -0
  149. package/dist/task/types/index.d.ts +2 -0
  150. package/dist/task/types/index.d.ts.map +1 -0
  151. package/dist/task/types/index.js +2 -0
  152. package/dist/task/types/index.js.map +1 -0
  153. package/dist/task/types/task.type.d.ts +9 -0
  154. package/dist/task/types/task.type.d.ts.map +1 -0
  155. package/dist/task/types/task.type.js +2 -0
  156. package/dist/task/types/task.type.js.map +1 -0
  157. package/package.json +27 -0
@@ -0,0 +1,188 @@
1
+ import { SCOPE_SINGLETON, SCOPE_TRANSIENT } from "../constants";
2
+ import { getOptionalMetadata, resolveInjectTokens } from "../decorators";
3
+ /**
4
+ * Lightweight dependency injection container.
5
+ */
6
+ export class Container {
7
+ providers = new Map();
8
+ instances = new Map();
9
+ resolving = new Set();
10
+ parent;
11
+ constructor(parent = null) {
12
+ this.parent = parent;
13
+ }
14
+ /**
15
+ * Register one or more providers
16
+ * @param providers - Class or provider definition(s)
17
+ */
18
+ register(providers) {
19
+ const list = Array.isArray(providers) ? providers : [providers];
20
+ for (const provider of list) {
21
+ const record = this.normalize(provider);
22
+ this.providers.set(record.token, record);
23
+ this.instances.delete(record.token);
24
+ }
25
+ return this;
26
+ }
27
+ /**
28
+ * Resolve an instance for a token
29
+ * @param token - Injection token
30
+ * @returns The resolved instance
31
+ */
32
+ resolve(token) {
33
+ return this.resolveInternal(token, false);
34
+ }
35
+ /**
36
+ * Resolve an instance, or `undefined` if the token is not registered
37
+ * @param token - Injection token
38
+ */
39
+ tryResolve(token) {
40
+ return this.resolveInternal(token, true);
41
+ }
42
+ /**
43
+ * Whether this container (or a parent) can resolve the token
44
+ * @param token - Injection token
45
+ */
46
+ has(token) {
47
+ if (this.providers.has(token) || this.instances.has(token)) {
48
+ return true;
49
+ }
50
+ return this.parent?.has(token) ?? false;
51
+ }
52
+ /**
53
+ * Create a child container that inherits parent providers
54
+ */
55
+ createChild() {
56
+ return new Container(this);
57
+ }
58
+ /**
59
+ * Clear local providers and cached singleton instances
60
+ */
61
+ clear() {
62
+ this.providers.clear();
63
+ this.instances.clear();
64
+ this.resolving.clear();
65
+ }
66
+ resolveInternal(token, optional) {
67
+ if (this.instances.has(token)) {
68
+ return this.instances.get(token);
69
+ }
70
+ const record = this.providers.get(token);
71
+ if (!record) {
72
+ if (this.parent?.has(token)) {
73
+ return this.parent.resolveInternal(token, optional);
74
+ }
75
+ if (optional) {
76
+ return undefined;
77
+ }
78
+ throw new Error(`DI: no provider for token ${this.tokenName(token)}`);
79
+ }
80
+ if (this.resolving.has(token)) {
81
+ const chain = [...this.resolving, token].map((t) => this.tokenName(t)).join(" -> ");
82
+ throw new Error(`DI: circular dependency detected: ${chain}`);
83
+ }
84
+ this.resolving.add(token);
85
+ try {
86
+ const instance = this.create(record);
87
+ if (record.scope === SCOPE_SINGLETON) {
88
+ this.instances.set(token, instance);
89
+ }
90
+ return instance;
91
+ }
92
+ finally {
93
+ this.resolving.delete(token);
94
+ }
95
+ }
96
+ create(record) {
97
+ switch (record.kind) {
98
+ case "value":
99
+ return record.useValue;
100
+ case "existing":
101
+ return this.resolveInternal(record.useExisting, false);
102
+ case "factory": {
103
+ const deps = this.resolveDeps(record.inject);
104
+ return record.useFactory(...deps);
105
+ }
106
+ case "class": {
107
+ const deps = this.resolveClassDeps(record.useClass, record.inject);
108
+ return new record.useClass(...deps);
109
+ }
110
+ }
111
+ }
112
+ resolveDeps(tokens) {
113
+ return tokens.map((token) => this.resolveInternal(token, false));
114
+ }
115
+ resolveClassDeps(useClass, inject) {
116
+ const optional = getOptionalMetadata(useClass);
117
+ return inject.map((token, index) => this.resolveInternal(token, optional.has(index)));
118
+ }
119
+ normalize(provider) {
120
+ if (typeof provider === "function") {
121
+ return {
122
+ kind: "class",
123
+ token: provider,
124
+ useClass: provider,
125
+ inject: resolveInjectTokens(provider),
126
+ scope: SCOPE_SINGLETON,
127
+ };
128
+ }
129
+ if (this.isValueProvider(provider)) {
130
+ return {
131
+ kind: "value",
132
+ token: provider.provide,
133
+ useValue: provider.useValue,
134
+ scope: SCOPE_SINGLETON,
135
+ };
136
+ }
137
+ if (this.isExistingProvider(provider)) {
138
+ return {
139
+ kind: "existing",
140
+ token: provider.provide,
141
+ useExisting: provider.useExisting,
142
+ scope: SCOPE_SINGLETON,
143
+ };
144
+ }
145
+ if (this.isFactoryProvider(provider)) {
146
+ return {
147
+ kind: "factory",
148
+ token: provider.provide,
149
+ useFactory: provider.useFactory,
150
+ inject: provider.inject ?? [],
151
+ scope: this.normalizeScope(provider.scope),
152
+ };
153
+ }
154
+ if (this.isClassProvider(provider)) {
155
+ return {
156
+ kind: "class",
157
+ token: provider.provide,
158
+ useClass: provider.useClass,
159
+ inject: resolveInjectTokens(provider.useClass, provider.inject),
160
+ scope: this.normalizeScope(provider.scope),
161
+ };
162
+ }
163
+ throw new Error("DI: invalid provider definition");
164
+ }
165
+ normalizeScope(scope) {
166
+ return scope === SCOPE_TRANSIENT ? SCOPE_TRANSIENT : SCOPE_SINGLETON;
167
+ }
168
+ isValueProvider(provider) {
169
+ return "useValue" in provider;
170
+ }
171
+ isExistingProvider(provider) {
172
+ return "useExisting" in provider;
173
+ }
174
+ isFactoryProvider(provider) {
175
+ return "useFactory" in provider;
176
+ }
177
+ isClassProvider(provider) {
178
+ return "useClass" in provider;
179
+ }
180
+ tokenName(token) {
181
+ if (typeof token === "string")
182
+ return `"${token}"`;
183
+ if (typeof token === "symbol")
184
+ return token.description ? `Symbol(${token.description})` : token.toString();
185
+ return token.name || "AnonymousClass";
186
+ }
187
+ }
188
+ //# sourceMappingURL=container.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container.service.js","sourceRoot":"","sources":["../../../src/di/services/container.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./container.service";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/di/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./container.service";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/di/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,85 @@
1
+ import type { SCOPE_SINGLETON, SCOPE_TRANSIENT } from "../constants";
2
+ /**
3
+ * A constructable class
4
+ */
5
+ export type Constructor<T = unknown> = new (...args: any[]) => T;
6
+ /**
7
+ * An abstract constructable (usable as injection token)
8
+ */
9
+ export type AbstractConstructor<T = unknown> = abstract new (...args: any[]) => T;
10
+ /**
11
+ * Token used to register and resolve a dependency
12
+ */
13
+ export type InjectionToken<T = unknown> = string | symbol | Constructor<T> | AbstractConstructor<T>;
14
+ /**
15
+ * Lifetime of a resolved instance
16
+ */
17
+ export type ProviderScope = typeof SCOPE_SINGLETON | typeof SCOPE_TRANSIENT;
18
+ /**
19
+ * Register a class as its own token
20
+ */
21
+ export type ClassProvider<T = unknown> = Constructor<T>;
22
+ /**
23
+ * Explicit class provider with optional inject list and scope
24
+ */
25
+ export type UseClassProvider<T = unknown> = {
26
+ provide: InjectionToken<T>;
27
+ useClass: Constructor<T>;
28
+ inject?: InjectionToken[];
29
+ scope?: ProviderScope;
30
+ };
31
+ /**
32
+ * Constant value provider
33
+ */
34
+ export type UseValueProvider<T = unknown> = {
35
+ provide: InjectionToken<T>;
36
+ useValue: T;
37
+ };
38
+ /**
39
+ * Factory provider
40
+ */
41
+ export type UseFactoryProvider<T = unknown> = {
42
+ provide: InjectionToken<T>;
43
+ useFactory: (...args: any[]) => T;
44
+ inject?: InjectionToken[];
45
+ scope?: ProviderScope;
46
+ };
47
+ /**
48
+ * Alias an existing token
49
+ */
50
+ export type UseExistingProvider<T = unknown> = {
51
+ provide: InjectionToken<T>;
52
+ useExisting: InjectionToken<T>;
53
+ };
54
+ /**
55
+ * Any supported provider definition
56
+ */
57
+ export type Provider<T = unknown> = ClassProvider<T> | UseClassProvider<T> | UseValueProvider<T> | UseFactoryProvider<T> | UseExistingProvider<T>;
58
+ /**
59
+ * Normalized internal provider record
60
+ */
61
+ export type ProviderRecord = {
62
+ token: InjectionToken;
63
+ scope: ProviderScope;
64
+ } & ({
65
+ kind: "class";
66
+ useClass: Constructor;
67
+ inject: InjectionToken[];
68
+ } | {
69
+ kind: "value";
70
+ useValue: unknown;
71
+ } | {
72
+ kind: "factory";
73
+ useFactory: (...args: any[]) => unknown;
74
+ inject: InjectionToken[];
75
+ } | {
76
+ kind: "existing";
77
+ useExisting: InjectionToken;
78
+ });
79
+ /**
80
+ * Metadata stored on an @Injectable class
81
+ */
82
+ export type InjectableMetadata = {
83
+ inject: InjectionToken[];
84
+ };
85
+ //# sourceMappingURL=di.type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"di.type.d.ts","sourceRoot":"","sources":["../../../src/di/types/di.type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=di.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"di.type.js","sourceRoot":"","sources":["../../../src/di/types/di.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from "./di.type";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/di/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./di.type";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/di/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./launcher";
2
+ export * from "./metadata";
3
+ export * from "./config";
4
+ export * from "./task";
5
+ export * from "./di";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,MAAM,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export * from "./launcher";
2
+ export * from "./metadata";
3
+ export * from "./config";
4
+ export * from "./task";
5
+ export * from "./di";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,MAAM,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * The metadata key for the app
3
+ */
4
+ export declare const METADATA_SHELL = "metadata.shell";
5
+ //# sourceMappingURL=core.constant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.constant.d.ts","sourceRoot":"","sources":["../../../src/launcher/constants/core.constant.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * The metadata key for the app
3
+ */
4
+ export const METADATA_SHELL = "metadata.shell";
5
+ //# sourceMappingURL=core.constant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.constant.js","sourceRoot":"","sources":["../../../src/launcher/constants/core.constant.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./task.constant";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/launcher/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./task.constant";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/launcher/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const TASK_ROOT_CREATE = "task.root.create";
2
+ export declare const TASK_ROOT_READY = "task.root.ready";
3
+ //# sourceMappingURL=task.constant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.constant.d.ts","sourceRoot":"","sources":["../../../src/launcher/constants/task.constant.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AACnD,eAAO,MAAM,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export const TASK_ROOT_CREATE = "task.root.create";
2
+ export const TASK_ROOT_READY = "task.root.ready";
3
+ //# sourceMappingURL=task.constant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.constant.js","sourceRoot":"","sources":["../../../src/launcher/constants/task.constant.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AACnD,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./constants";
2
+ export * from "./types";
3
+ export * from "./services";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/launcher/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./constants";
2
+ export * from "./types";
3
+ export * from "./services";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/launcher/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./shell.service";
2
+ export * from "./launcher.service";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/launcher/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./shell.service";
2
+ export * from "./launcher.service";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/launcher/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { Module, ModuleFactory, StartOptions } from "../types";
2
+ import { Container, type InjectionToken } from "../../di";
3
+ import { Metadata } from "../../metadata";
4
+ import { Task } from "../../task";
5
+ import { Config } from "../../config";
6
+ import { Shell } from "./shell.service";
7
+ export declare class Launcher {
8
+ task: Task;
9
+ metadata: Metadata;
10
+ container: Container;
11
+ shell: Shell;
12
+ config: Config;
13
+ options: StartOptions;
14
+ instances: Module[];
15
+ constructor();
16
+ /**
17
+ * Attach a capability onto the launcher (and optionally register it in DI).
18
+ * @param key - Property name on the launcher instance
19
+ * @param value - Capability instance
20
+ * @param token - Optional DI token (defaults to `key` as string token)
21
+ */
22
+ define<K extends string, V>(key: K, value: V, token?: InjectionToken<V>): this & Record<K, V>;
23
+ /**
24
+ * Register a module
25
+ * @param module - The module to register
26
+ */
27
+ modules(modules: ModuleFactory[]): this;
28
+ /**
29
+ * Start the application
30
+ */
31
+ start(): Promise<void>;
32
+ }
33
+ //# sourceMappingURL=launcher.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher.service.d.ts","sourceRoot":"","sources":["../../../src/launcher/services/launcher.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,qBAAa,QAAQ;IACZ,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAEV;IACX,SAAS,EAAE,MAAM,EAAE,CAAM;;IA8BhC;;;;;OAKG;IACH,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EACxB,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,CAAC,EACR,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,GACxB,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAoBtB;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE;IAKhC;;OAEG;IACG,KAAK;CAsBZ"}
@@ -0,0 +1,95 @@
1
+ import { Container } from "../../di";
2
+ import { Metadata } from "../../metadata";
3
+ import { Task } from "../../task";
4
+ import { Config } from "../../config";
5
+ import { Shell } from "./shell.service";
6
+ export class Launcher {
7
+ task;
8
+ metadata;
9
+ container;
10
+ shell;
11
+ config;
12
+ options = {
13
+ modules: [],
14
+ };
15
+ instances = [];
16
+ constructor() {
17
+ this.container = new Container();
18
+ this.task = new Task();
19
+ this.metadata = new Metadata(this.task);
20
+ this.config = new Config(this.metadata);
21
+ this.shell = new Shell(this.task, this.metadata);
22
+ this.container.register({
23
+ provide: Launcher,
24
+ useValue: this,
25
+ });
26
+ this.container.register({
27
+ provide: Task,
28
+ useValue: this.task,
29
+ });
30
+ this.container.register({
31
+ provide: Metadata,
32
+ useValue: this.metadata,
33
+ });
34
+ this.container.register({
35
+ provide: Config,
36
+ useValue: this.config,
37
+ });
38
+ this.container.register({
39
+ provide: Shell,
40
+ useValue: this.shell,
41
+ });
42
+ }
43
+ /**
44
+ * Attach a capability onto the launcher (and optionally register it in DI).
45
+ * @param key - Property name on the launcher instance
46
+ * @param value - Capability instance
47
+ * @param token - Optional DI token (defaults to `key` as string token)
48
+ */
49
+ define(key, value, token) {
50
+ if (key in this) {
51
+ throw new Error(`Launcher: property "${key}" already exists`);
52
+ }
53
+ Object.defineProperty(this, key, {
54
+ value,
55
+ writable: false,
56
+ enumerable: true,
57
+ configurable: false,
58
+ });
59
+ this.container.register({
60
+ provide: (token ?? key),
61
+ useValue: value,
62
+ });
63
+ return this;
64
+ }
65
+ /**
66
+ * Register a module
67
+ * @param module - The module to register
68
+ */
69
+ modules(modules) {
70
+ this.options.modules.push(...modules);
71
+ return this;
72
+ }
73
+ /**
74
+ * Start the application
75
+ */
76
+ async start() {
77
+ if (this.options.modules.length === 0) {
78
+ throw new Error("No modules registered");
79
+ }
80
+ for (const module of this.options.modules) {
81
+ const moduleInstance = module(this);
82
+ this.instances.push(moduleInstance);
83
+ }
84
+ for (const instance of this.instances) {
85
+ instance.prepare?.();
86
+ }
87
+ for (const instance of this.instances) {
88
+ instance.register?.();
89
+ }
90
+ for (const instance of this.instances) {
91
+ instance.ready?.();
92
+ }
93
+ }
94
+ }
95
+ //# sourceMappingURL=launcher.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launcher.service.js","sourceRoot":"","sources":["../../../src/launcher/services/launcher.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAuB,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,MAAM,OAAO,QAAQ;IACZ,IAAI,CAAO;IACX,QAAQ,CAAW;IACnB,SAAS,CAAY;IACrB,KAAK,CAAQ;IACb,MAAM,CAAS;IACf,OAAO,GAAiB;QAC7B,OAAO,EAAE,EAAqB;KACf,CAAC;IACX,SAAS,GAAa,EAAE,CAAC;IAEhC;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtB,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtB,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI,CAAC,IAAI;SACpB,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtB,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtB,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtB,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,IAAI,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,MAAM,CACJ,GAAM,EACN,KAAQ,EACR,KAAyB;QAEzB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,kBAAkB,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE;YAC/B,KAAK;YACL,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtB,OAAO,EAAE,CAAC,KAAK,IAAI,GAAG,CAAsB;YAC5C,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,OAAO,IAA2B,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,OAAwB;QAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtC,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QACvB,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;QACxB,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ import { Metadata } from "../../metadata";
2
+ import { Task, TaskContext } from "../../task";
3
+ export declare class Shell {
4
+ private readonly task;
5
+ private readonly metadata;
6
+ private instance;
7
+ constructor(task: Task, metadata: Metadata);
8
+ /**
9
+ * Get the app instance
10
+ * @returns The app instance
11
+ */
12
+ getInstance(): unknown;
13
+ /**
14
+ * Subscribe to the app create event
15
+ * @param callback - The callback to subscribe to the app create event
16
+ */
17
+ create(callback: () => unknown): Promise<void>;
18
+ /**
19
+ * Subscribe to the app mounted event
20
+ * @param callback - The callback to subscribe to the app mounted event
21
+ */
22
+ ready(callback: (context: TaskContext) => void): () => void;
23
+ }
24
+ //# sourceMappingURL=shell.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.service.d.ts","sourceRoot":"","sources":["../../../src/launcher/services/shell.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG/C,qBAAa,KAAK;IAGJ,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAQ,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFlE,OAAO,CAAC,QAAQ,CAAU;gBAEG,IAAI,EAAE,IAAI,EAAmB,QAAQ,EAAE,QAAQ;IAE5E;;;OAGG;IACH,WAAW;IAIX;;;OAGG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,OAAO;IAMpC;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI;CAG/C"}
@@ -0,0 +1,34 @@
1
+ import { TASK_ROOT_READY } from "../constants";
2
+ export class Shell {
3
+ task;
4
+ metadata;
5
+ instance;
6
+ constructor(task, metadata) {
7
+ this.task = task;
8
+ this.metadata = metadata;
9
+ }
10
+ /**
11
+ * Get the app instance
12
+ * @returns The app instance
13
+ */
14
+ getInstance() {
15
+ return this.instance;
16
+ }
17
+ /**
18
+ * Subscribe to the app create event
19
+ * @param callback - The callback to subscribe to the app create event
20
+ */
21
+ async create(callback) {
22
+ const instance = await callback();
23
+ this.instance = instance;
24
+ await this.task.invoke(TASK_ROOT_READY, instance);
25
+ }
26
+ /**
27
+ * Subscribe to the app mounted event
28
+ * @param callback - The callback to subscribe to the app mounted event
29
+ */
30
+ ready(callback) {
31
+ return this.task.subscribe(TASK_ROOT_READY, callback);
32
+ }
33
+ }
34
+ //# sourceMappingURL=shell.service.js.map