@etohq/modules-sdk 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 (82) hide show
  1. package/dist/definitions.d.ts +7 -0
  2. package/dist/definitions.d.ts.map +1 -0
  3. package/dist/definitions.js +290 -0
  4. package/dist/definitions.js.map +1 -0
  5. package/dist/eto-app.d.ts +79 -0
  6. package/dist/eto-app.d.ts.map +1 -0
  7. package/dist/eto-app.js +382 -0
  8. package/dist/eto-app.js.map +1 -0
  9. package/dist/eto-module.d.ts +136 -0
  10. package/dist/eto-module.d.ts.map +1 -0
  11. package/dist/eto-module.js +496 -0
  12. package/dist/eto-module.js.map +1 -0
  13. package/dist/index.d.ts +9 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +25 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/link.d.ts +53 -0
  18. package/dist/link.d.ts.map +1 -0
  19. package/dist/link.js +320 -0
  20. package/dist/link.js.map +1 -0
  21. package/dist/loaders/index.d.ts +4 -0
  22. package/dist/loaders/index.d.ts.map +1 -0
  23. package/dist/loaders/index.js +20 -0
  24. package/dist/loaders/index.js.map +1 -0
  25. package/dist/loaders/module-loader.d.ts +9 -0
  26. package/dist/loaders/module-loader.d.ts.map +1 -0
  27. package/dist/loaders/module-loader.js +53 -0
  28. package/dist/loaders/module-loader.js.map +1 -0
  29. package/dist/loaders/module-provider-loader.d.ts +8 -0
  30. package/dist/loaders/module-provider-loader.d.ts.map +1 -0
  31. package/dist/loaders/module-provider-loader.js +53 -0
  32. package/dist/loaders/module-provider-loader.js.map +1 -0
  33. package/dist/loaders/register-modules.d.ts +4 -0
  34. package/dist/loaders/register-modules.d.ts.map +1 -0
  35. package/dist/loaders/register-modules.js +102 -0
  36. package/dist/loaders/register-modules.js.map +1 -0
  37. package/dist/loaders/utils/index.d.ts +2 -0
  38. package/dist/loaders/utils/index.d.ts.map +1 -0
  39. package/dist/loaders/utils/index.js +18 -0
  40. package/dist/loaders/utils/index.js.map +1 -0
  41. package/dist/loaders/utils/load-internal.d.ts +44 -0
  42. package/dist/loaders/utils/load-internal.d.ts.map +1 -0
  43. package/dist/loaders/utils/load-internal.js +488 -0
  44. package/dist/loaders/utils/load-internal.js.map +1 -0
  45. package/dist/remote-query/index.d.ts +3 -0
  46. package/dist/remote-query/index.d.ts.map +1 -0
  47. package/dist/remote-query/index.js +19 -0
  48. package/dist/remote-query/index.js.map +1 -0
  49. package/dist/remote-query/parse-filters.d.ts +15 -0
  50. package/dist/remote-query/parse-filters.d.ts.map +1 -0
  51. package/dist/remote-query/parse-filters.js +178 -0
  52. package/dist/remote-query/parse-filters.js.map +1 -0
  53. package/dist/remote-query/query.d.ts +42 -0
  54. package/dist/remote-query/query.d.ts.map +1 -0
  55. package/dist/remote-query/query.js +115 -0
  56. package/dist/remote-query/query.js.map +1 -0
  57. package/dist/remote-query/remote-query.d.ts +41 -0
  58. package/dist/remote-query/remote-query.d.ts.map +1 -0
  59. package/dist/remote-query/remote-query.js +175 -0
  60. package/dist/remote-query/remote-query.js.map +1 -0
  61. package/dist/remote-query/to-remote-query.d.ts +27 -0
  62. package/dist/remote-query/to-remote-query.d.ts.map +1 -0
  63. package/dist/remote-query/to-remote-query.js +96 -0
  64. package/dist/remote-query/to-remote-query.js.map +1 -0
  65. package/dist/tsconfig.tsbuildinfo +1 -0
  66. package/dist/types/index.d.ts +5 -0
  67. package/dist/types/index.d.ts.map +1 -0
  68. package/dist/types/index.js +9 -0
  69. package/dist/types/index.js.map +1 -0
  70. package/dist/utils/convert-data-to-link-definition.d.ts +3 -0
  71. package/dist/utils/convert-data-to-link-definition.d.ts.map +1 -0
  72. package/dist/utils/convert-data-to-link-definition.js +28 -0
  73. package/dist/utils/convert-data-to-link-definition.js.map +1 -0
  74. package/dist/utils/index.d.ts +3 -0
  75. package/dist/utils/index.d.ts.map +1 -0
  76. package/dist/utils/index.js +19 -0
  77. package/dist/utils/index.js.map +1 -0
  78. package/dist/utils/linking-error.d.ts +14 -0
  79. package/dist/utils/linking-error.d.ts.map +1 -0
  80. package/dist/utils/linking-error.js +18 -0
  81. package/dist/utils/linking-error.js.map +1 -0
  82. package/package.json +63 -0
@@ -0,0 +1,382 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadModules = loadModules;
4
+ exports.EtoApp = EtoApp;
5
+ exports.EtoAppMigrateUp = EtoAppMigrateUp;
6
+ exports.EtoAppMigrateDown = EtoAppMigrateDown;
7
+ exports.EtoAppMigrateGenerate = EtoAppMigrateGenerate;
8
+ exports.EtoAppGetLinksExecutionPlanner = EtoAppGetLinksExecutionPlanner;
9
+ const utils_1 = require("@etohq/utils");
10
+ const awilix_1 = require("awilix");
11
+ const eto_module_1 = require("./eto-module");
12
+ const link_1 = require("./link");
13
+ const remote_query_1 = require("./remote-query");
14
+ const types_1 = require("./types");
15
+ const LinkModulePackage = utils_1.MODULE_PACKAGE_NAMES[utils_1.Modules.LINK];
16
+ async function loadModules(args) {
17
+ const { modulesConfig, sharedContainer, sharedResourcesConfig, migrationOnly = false, loaderOnly = false, workerMode = "shared", } = args;
18
+ const allModules = {};
19
+ const modulesToLoad = [];
20
+ for (const moduleName of Object.keys(modulesConfig)) {
21
+ const mod = modulesConfig[moduleName];
22
+ let path;
23
+ let moduleExports = undefined;
24
+ let declaration = {};
25
+ let definition = undefined;
26
+ // TODO: We are keeping mod === false for backward compatibility for now
27
+ if (mod === false || ((0, utils_1.isObject)(mod) && "disable" in mod && mod.disable)) {
28
+ continue;
29
+ }
30
+ if ((0, utils_1.isObject)(mod)) {
31
+ const mod_ = mod;
32
+ path = mod_.resolve ?? utils_1.MODULE_PACKAGE_NAMES[moduleName];
33
+ definition = mod_.definition;
34
+ moduleExports = !(0, utils_1.isString)(mod_.resolve)
35
+ ? mod_.resolve
36
+ : undefined;
37
+ declaration = { ...mod };
38
+ delete declaration.definition;
39
+ }
40
+ else {
41
+ path = utils_1.MODULE_PACKAGE_NAMES[moduleName];
42
+ }
43
+ declaration.scope ??= types_1.MODULE_SCOPE.INTERNAL;
44
+ if (declaration.scope === types_1.MODULE_SCOPE.INTERNAL) {
45
+ declaration.options ??= {};
46
+ if (!declaration.options.database) {
47
+ declaration.options[utils_1.isSharedConnectionSymbol] = true;
48
+ }
49
+ declaration.options.database ??= {
50
+ ...sharedResourcesConfig?.database,
51
+ };
52
+ declaration.options.database.debug ??=
53
+ sharedResourcesConfig?.database?.debug;
54
+ }
55
+ modulesToLoad.push({
56
+ moduleKey: moduleName,
57
+ defaultPath: path,
58
+ declaration,
59
+ sharedContainer,
60
+ moduleDefinition: definition,
61
+ moduleExports,
62
+ });
63
+ }
64
+ const loaded = (await eto_module_1.EtoModule.bootstrapAll(modulesToLoad, {
65
+ migrationOnly,
66
+ loaderOnly,
67
+ workerMode,
68
+ }));
69
+ if (loaderOnly) {
70
+ return allModules;
71
+ }
72
+ for (const { moduleKey } of modulesToLoad) {
73
+ const service = loaded.find((loadedModule) => loadedModule[moduleKey])?.[moduleKey];
74
+ if (!service) {
75
+ throw new Error(`Module ${moduleKey} could not be loaded.`);
76
+ }
77
+ sharedContainer.register({
78
+ [service.__definition.key]: (0, awilix_1.asValue)(service),
79
+ });
80
+ if (allModules[moduleKey] && !Array.isArray(allModules[moduleKey])) {
81
+ allModules[moduleKey] = [];
82
+ }
83
+ if (allModules[moduleKey]) {
84
+ ;
85
+ allModules[moduleKey].push(service);
86
+ }
87
+ else {
88
+ allModules[moduleKey] = service;
89
+ }
90
+ }
91
+ return allModules;
92
+ }
93
+ async function initializeLinks({ config, linkModules, injectedDependencies, moduleExports, }) {
94
+ try {
95
+ let resources = moduleExports;
96
+ if (!resources) {
97
+ const module = await (0, utils_1.dynamicImport)(LinkModulePackage);
98
+ if ("discoveryPath" in module) {
99
+ const reExportedLoadedModule = await (0, utils_1.dynamicImport)(module.discoveryPath);
100
+ resources = reExportedLoadedModule.default ?? reExportedLoadedModule;
101
+ }
102
+ }
103
+ const { initialize, getMigrationPlanner } = resources;
104
+ const linkResolution = await initialize(config, linkModules, injectedDependencies);
105
+ return {
106
+ remoteLink: new link_1.Link(),
107
+ linkResolution,
108
+ getMigrationPlanner,
109
+ };
110
+ }
111
+ catch (err) {
112
+ console.warn("Error initializing link modules.", err);
113
+ return {
114
+ remoteLink: undefined,
115
+ linkResolution: undefined,
116
+ getMigrationPlanner: () => void 0,
117
+ };
118
+ }
119
+ }
120
+ function isEtoModule(mod) {
121
+ return typeof mod?.initialize === "function";
122
+ }
123
+ function cleanAndMergeSchema(loadedSchema) {
124
+ const defaultEtoSchema = `
125
+ scalar DateTime
126
+ scalar JSON
127
+ `;
128
+ const { schema: cleanedSchema, notFound } = utils_1.GraphQLUtils.cleanGraphQLSchema(defaultEtoSchema + loadedSchema);
129
+ const mergedSchema = utils_1.GraphQLUtils.mergeTypeDefs(cleanedSchema);
130
+ return {
131
+ schema: utils_1.GraphQLUtils.makeExecutableSchema({ typeDefs: mergedSchema }),
132
+ notFound,
133
+ };
134
+ }
135
+ function getLoadedSchema() {
136
+ return eto_module_1.EtoModule.getAllJoinerConfigs()
137
+ .map((joinerConfig) => joinerConfig?.schema ?? "")
138
+ .join("\n");
139
+ }
140
+ function registerCustomJoinerConfigs(servicesConfig) {
141
+ for (const config of servicesConfig) {
142
+ if (!config.serviceName || config.isReadOnlyLink) {
143
+ continue;
144
+ }
145
+ eto_module_1.EtoModule.setJoinerConfig(config.serviceName, config);
146
+ }
147
+ }
148
+ async function EtoApp_({ sharedContainer, sharedResourcesConfig, servicesConfig, modulesConfigPath, modulesConfigFileName, modulesConfig, linkModules, remoteFetchData, injectedDependencies = {}, migrationOnly = false, loaderOnly = false, workerMode = "shared", } = {}) {
149
+ const sharedContainer_ = (0, utils_1.createEtoContainer)({}, sharedContainer);
150
+ const onApplicationShutdown = async () => {
151
+ await (0, utils_1.promiseAll)([
152
+ eto_module_1.EtoModule.onApplicationShutdown(),
153
+ sharedContainer_.dispose(),
154
+ ]);
155
+ };
156
+ const onApplicationPrepareShutdown = async () => {
157
+ await (0, utils_1.promiseAll)([eto_module_1.EtoModule.onApplicationPrepareShutdown()]);
158
+ };
159
+ const onApplicationStart = async () => {
160
+ await eto_module_1.EtoModule.onApplicationStart();
161
+ };
162
+ const modules = modulesConfig ??
163
+ (await (0, utils_1.dynamicImport)(modulesConfigPath ??
164
+ process.cwd() + (modulesConfigFileName ?? "/modules-config"))).default;
165
+ const dbData = utils_1.ModulesSdkUtils.loadDatabaseConfig("eto", sharedResourcesConfig, true);
166
+ registerCustomJoinerConfigs(servicesConfig ?? []);
167
+ if (sharedResourcesConfig?.database?.connection &&
168
+ !injectedDependencies[utils_1.ContainerRegistrationKeys.PG_CONNECTION]) {
169
+ injectedDependencies[utils_1.ContainerRegistrationKeys.PG_CONNECTION] =
170
+ sharedResourcesConfig.database.connection;
171
+ }
172
+ else if (dbData.clientUrl &&
173
+ !injectedDependencies[utils_1.ContainerRegistrationKeys.PG_CONNECTION]) {
174
+ injectedDependencies[utils_1.ContainerRegistrationKeys.PG_CONNECTION] =
175
+ utils_1.ModulesSdkUtils.createPgConnection({
176
+ ...(sharedResourcesConfig?.database ?? {}),
177
+ ...dbData,
178
+ });
179
+ }
180
+ // remove the link module from the modules
181
+ const linkModule = modules[LinkModulePackage] ?? modules[utils_1.Modules.LINK];
182
+ delete modules[LinkModulePackage];
183
+ delete modules[utils_1.Modules.LINK];
184
+ let linkModuleOrOptions = {};
185
+ if ((0, utils_1.isObject)(linkModule)) {
186
+ linkModuleOrOptions = linkModule;
187
+ }
188
+ for (const injectedDependency of Object.keys(injectedDependencies)) {
189
+ sharedContainer_.register({
190
+ [injectedDependency]: (0, awilix_1.asValue)(injectedDependencies[injectedDependency]),
191
+ });
192
+ }
193
+ const allModules = await loadModules({
194
+ modulesConfig: modules,
195
+ sharedContainer: sharedContainer_,
196
+ sharedResourcesConfig: { database: dbData },
197
+ migrationOnly,
198
+ loaderOnly,
199
+ workerMode,
200
+ });
201
+ if (loaderOnly) {
202
+ async function query(...args) {
203
+ throw new Error("Querying not allowed in loaderOnly mode");
204
+ }
205
+ query.graph = query;
206
+ query.gql = query;
207
+ return {
208
+ onApplicationShutdown,
209
+ onApplicationPrepareShutdown,
210
+ onApplicationStart,
211
+ modules: allModules,
212
+ link: undefined,
213
+ query: query,
214
+ runMigrations: async () => {
215
+ throw new Error("Migrations not allowed in loaderOnly mode");
216
+ },
217
+ revertMigrations: async () => {
218
+ throw new Error("Revert migrations not allowed in loaderOnly mode");
219
+ },
220
+ generateMigrations: async () => {
221
+ throw new Error("Generate migrations not allowed in loaderOnly mode");
222
+ },
223
+ linkMigrationExecutionPlanner: () => {
224
+ throw new Error("Migrations planner is not avaibable in loaderOnly mode");
225
+ },
226
+ };
227
+ }
228
+ // Share Event bus with link modules
229
+ injectedDependencies[utils_1.Modules.EVENT_BUS] = sharedContainer_.resolve(utils_1.Modules.EVENT_BUS, {
230
+ allowUnregistered: true,
231
+ });
232
+ linkModules ??= [];
233
+ if (!Array.isArray(linkModules)) {
234
+ linkModules = [linkModules];
235
+ }
236
+ linkModules.push(...eto_module_1.EtoModule.getCustomLinks());
237
+ const allLoadedJoinerConfigs = eto_module_1.EtoModule.getAllJoinerConfigs();
238
+ for (let linkIdx = 0; linkIdx < linkModules.length; linkIdx++) {
239
+ const customLink = linkModules[linkIdx];
240
+ if (typeof customLink === "function") {
241
+ linkModules[linkIdx] = customLink(allLoadedJoinerConfigs);
242
+ }
243
+ }
244
+ const { remoteLink, getMigrationPlanner } = await initializeLinks({
245
+ config: linkModuleOrOptions,
246
+ linkModules,
247
+ injectedDependencies,
248
+ moduleExports: isEtoModule(linkModule) ? linkModule : undefined,
249
+ });
250
+ const loadedSchema = getLoadedSchema();
251
+ const { schema, notFound } = cleanAndMergeSchema(loadedSchema);
252
+ const entitiesMap = schema.getTypeMap();
253
+ const remoteQuery = new remote_query_1.RemoteQuery({
254
+ servicesConfig,
255
+ customRemoteFetchData: remoteFetchData,
256
+ entitiesMap,
257
+ });
258
+ const applyMigration = async ({ modulesNames, action = "run", }) => {
259
+ const moduleResolutions = modulesNames.map((moduleName) => {
260
+ return {
261
+ moduleName,
262
+ resolution: eto_module_1.EtoModule.getModuleResolutions(moduleName),
263
+ };
264
+ });
265
+ const missingModules = moduleResolutions
266
+ .filter(({ resolution }) => !resolution)
267
+ .map(({ moduleName }) => moduleName);
268
+ if (missingModules.length) {
269
+ const error = new utils_1.EtoError(utils_1.EtoError.Types.UNKNOWN_MODULES, `Cannot ${action} migrations for unknown module(s) ${missingModules.join(",")}`, utils_1.EtoError.Codes.UNKNOWN_MODULES);
270
+ error["allModules"] = Object.keys(allModules);
271
+ throw error;
272
+ }
273
+ for (const { resolution: moduleResolution } of moduleResolutions) {
274
+ if (!moduleResolution.options?.database &&
275
+ moduleResolution.moduleDeclaration?.scope === types_1.MODULE_SCOPE.INTERNAL) {
276
+ moduleResolution.options ??= {};
277
+ moduleResolution.options.database = {
278
+ ...(sharedResourcesConfig?.database ?? {}),
279
+ };
280
+ moduleResolution.options.database.debug ??=
281
+ sharedResourcesConfig?.database?.debug;
282
+ }
283
+ const migrationOptions = {
284
+ moduleKey: moduleResolution.definition.key,
285
+ modulePath: moduleResolution.resolutionPath,
286
+ container: sharedContainer,
287
+ options: moduleResolution.options,
288
+ moduleExports: moduleResolution.moduleExports,
289
+ };
290
+ if (action === "revert") {
291
+ await eto_module_1.EtoModule.migrateDown(migrationOptions);
292
+ }
293
+ else if (action === "run") {
294
+ await eto_module_1.EtoModule.migrateUp(migrationOptions);
295
+ }
296
+ else {
297
+ await eto_module_1.EtoModule.migrateGenerate(migrationOptions);
298
+ }
299
+ }
300
+ };
301
+ const runMigrations = async () => {
302
+ await applyMigration({
303
+ modulesNames: Object.keys(allModules),
304
+ });
305
+ };
306
+ const revertMigrations = async (modulesNames) => {
307
+ await applyMigration({
308
+ modulesNames,
309
+ action: "revert",
310
+ });
311
+ };
312
+ const generateMigrations = async (modulesNames) => {
313
+ await applyMigration({
314
+ modulesNames,
315
+ action: "generate",
316
+ });
317
+ };
318
+ const getMigrationPlannerFn = () => {
319
+ const options = "scope" in linkModuleOrOptions
320
+ ? { ...linkModuleOrOptions.options }
321
+ : {
322
+ ...linkModuleOrOptions,
323
+ };
324
+ options.database ??= {
325
+ ...sharedResourcesConfig?.database,
326
+ };
327
+ options.database.debug ??= sharedResourcesConfig?.database?.debug;
328
+ return getMigrationPlanner(options, linkModules);
329
+ };
330
+ return {
331
+ onApplicationShutdown,
332
+ onApplicationPrepareShutdown,
333
+ onApplicationStart,
334
+ modules: allModules,
335
+ link: remoteLink,
336
+ query: (0, remote_query_1.createQuery)(remoteQuery), // TODO: rm any once we remove the old RemoteQueryFunction and rely on the Query object instead,
337
+ entitiesMap,
338
+ gqlSchema: schema,
339
+ notFound,
340
+ runMigrations,
341
+ revertMigrations,
342
+ generateMigrations,
343
+ linkMigrationExecutionPlanner: getMigrationPlannerFn,
344
+ sharedContainer: sharedContainer_,
345
+ };
346
+ }
347
+ async function EtoApp(options = {}) {
348
+ return await EtoApp_(options);
349
+ }
350
+ async function EtoAppMigrateUp(options = {}) {
351
+ const migrationOnly = true;
352
+ const { runMigrations } = await EtoApp_({
353
+ ...options,
354
+ migrationOnly,
355
+ });
356
+ await runMigrations().finally(eto_module_1.EtoModule.clearInstances);
357
+ }
358
+ async function EtoAppMigrateDown(moduleNames, options = {}) {
359
+ const migrationOnly = true;
360
+ const { revertMigrations } = await EtoApp_({
361
+ ...options,
362
+ migrationOnly,
363
+ });
364
+ await revertMigrations(moduleNames).finally(eto_module_1.EtoModule.clearInstances);
365
+ }
366
+ async function EtoAppMigrateGenerate(moduleNames, options = {}) {
367
+ const migrationOnly = true;
368
+ const { generateMigrations } = await EtoApp_({
369
+ ...options,
370
+ migrationOnly,
371
+ });
372
+ await generateMigrations(moduleNames).finally(eto_module_1.EtoModule.clearInstances);
373
+ }
374
+ async function EtoAppGetLinksExecutionPlanner(options = {}) {
375
+ const migrationOnly = true;
376
+ const { linkMigrationExecutionPlanner } = await EtoApp_({
377
+ ...options,
378
+ migrationOnly,
379
+ });
380
+ return linkMigrationExecutionPlanner();
381
+ }
382
+ //# sourceMappingURL=eto-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eto-app.js","sourceRoot":"","sources":["../src/eto-app.ts"],"names":[],"mappings":";;AAyEA,kCAiHC;AA4YD,wBAIC;AAED,0CAWC;AAED,8CAYC;AAED,sDAYC;AAED,wEAWC;AAlnBD,wCAaqB;AACrB,mCAAgC;AAChC,6CAKqB;AACrB,iCAA6B;AAC7B,iDAAyD;AACzD,mCAAsC;AAEtC,MAAM,iBAAiB,GAAG,4BAAoB,CAAC,eAAO,CAAC,IAAI,CAAC,CAAA;AAkCrD,KAAK,UAAU,WAAW,CAAC,IAOjC;IACC,MAAM,EACJ,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,aAAa,GAAG,KAAK,EACrB,UAAU,GAAG,KAAK,EAClB,UAAU,GAAG,QAAgD,GAC9D,GAAG,IAAI,CAAA;IAER,MAAM,UAAU,GAAG,EAAS,CAAA;IAE5B,MAAM,aAAa,GAOb,EAAE,CAAA;IAER,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;QACrC,IAAI,IAAY,CAAA;QAChB,IAAI,aAAa,GAA8B,SAAS,CAAA;QACxD,IAAI,WAAW,GAAQ,EAAE,CAAA;QACzB,IAAI,UAAU,GAA0C,SAAS,CAAA;QAEjE,wEAAwE;QACxE,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,IAAA,gBAAQ,EAAC,GAAG,CAAC,IAAI,SAAS,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACxE,SAAQ;QACV,CAAC;QAED,IAAI,IAAA,gBAAQ,EAAC,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,GAA2C,CAAA;YACxD,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,4BAAoB,CAAC,UAAU,CAAC,CAAA;YACvD,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;YAC5B,aAAa,GAAG,CAAC,IAAA,gBAAQ,EAAC,IAAI,CAAC,OAAO,CAAC;gBACrC,CAAC,CAAE,IAAI,CAAC,OAAyB;gBACjC,CAAC,CAAC,SAAS,CAAA;YACb,WAAW,GAAG,EAAE,GAAG,GAAG,EAAE,CAAA;YACxB,OAAO,WAAW,CAAC,UAAU,CAAA;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,4BAAoB,CAAC,UAAU,CAAC,CAAA;QACzC,CAAC;QAED,WAAW,CAAC,KAAK,KAAK,oBAAY,CAAC,QAAQ,CAAA;QAE3C,IAAI,WAAW,CAAC,KAAK,KAAK,oBAAY,CAAC,QAAQ,EAAE,CAAC;YAChD,WAAW,CAAC,OAAO,KAAK,EAAE,CAAA;YAE1B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAClC,WAAW,CAAC,OAAO,CAAC,gCAAwB,CAAC,GAAG,IAAI,CAAA;YACtD,CAAC;YAED,WAAW,CAAC,OAAO,CAAC,QAAQ,KAAK;gBAC/B,GAAG,qBAAqB,EAAE,QAAQ;aACnC,CAAA;YACD,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAChC,qBAAqB,EAAE,QAAQ,EAAE,KAAK,CAAA;QAC1C,CAAC;QAED,aAAa,CAAC,IAAI,CAAC;YACjB,SAAS,EAAE,UAAU;YACrB,WAAW,EAAE,IAAI;YACjB,WAAW;YACX,eAAe;YACf,gBAAgB,EAAE,UAA8B;YAChD,aAAa;SACd,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,sBAAS,CAAC,YAAY,CAAC,aAAa,EAAE;QAC1D,aAAa;QACb,UAAU;QACV,UAAU;KACX,CAAC,CAAmB,CAAA;IAErB,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,KAAK,MAAM,EAAE,SAAS,EAAE,IAAI,aAAa,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CACtE,SAAS,CACV,CAAA;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,uBAAuB,CAAC,CAAA;QAC7D,CAAC;QAED,eAAe,CAAC,QAAQ,CAAC;YACvB,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,IAAA,gBAAO,EAAC,OAAO,CAAC;SAC7C,CAAC,CAAA;QAEF,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACnE,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;QAC5B,CAAC;QAED,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,CAAC;YAAC,UAAU,CAAC,SAAS,CAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC1D,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,SAAS,CAAC,GAAG,OAAO,CAAA;QACjC,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,EAC7B,MAAM,EACN,WAAW,EACX,oBAAoB,EACpB,aAAa,GACd;IACC,IAAI,CAAC;QACH,IAAI,SAAS,GAAG,aAAa,CAAA;QAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAa,EAAC,iBAAiB,CAAC,CAAA;YACrD,IAAI,eAAe,IAAI,MAAM,EAAE,CAAC;gBAC9B,MAAM,sBAAsB,GAAG,MAAM,IAAA,qBAAa,EAAC,MAAM,CAAC,aAAa,CAAC,CAAA;gBACxE,SAAS,GAAG,sBAAsB,CAAC,OAAO,IAAI,sBAAsB,CAAA;YACtE,CAAC;QACH,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,SAAS,CAAA;QAErD,MAAM,cAAc,GAAG,MAAM,UAAU,CACrC,MAAM,EACN,WAAW,EACX,oBAAoB,CACrB,CAAA;QAED,OAAO;YACL,UAAU,EAAE,IAAI,WAAI,EAAE;YACtB,cAAc;YACd,mBAAmB;SACpB,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAA;QACrD,OAAO;YACL,UAAU,EAAE,SAAS;YACrB,cAAc,EAAE,SAAS;YACzB,mBAAmB,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;SAClC,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAG;IACtB,OAAO,OAAO,GAAG,EAAE,UAAU,KAAK,UAAU,CAAA;AAC9C,CAAC;AAED,SAAS,mBAAmB,CAAC,YAAY;IACvC,MAAM,gBAAgB,GAAG;;;GAGxB,CAAA;IACD,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,oBAAY,CAAC,kBAAkB,CACzE,gBAAgB,GAAG,YAAY,CAChC,CAAA;IACD,MAAM,YAAY,GAAG,oBAAY,CAAC,aAAa,CAAC,aAAa,CAAC,CAAA;IAC9D,OAAO;QACL,MAAM,EAAE,oBAAY,CAAC,oBAAoB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;QACrE,QAAQ;KACT,CAAA;AACH,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,sBAAS,CAAC,mBAAmB,EAAE;SACnC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,EAAE,MAAM,IAAI,EAAE,CAAC;SACjD,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED,SAAS,2BAA2B,CAAC,cAAoC;IACvE,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YACjD,SAAQ;QACV,CAAC;QAED,sBAAS,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACvD,CAAC;AACH,CAAC;AAsCD,KAAK,UAAU,OAAO,CAAC,EACrB,eAAe,EACf,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,WAAW,EACX,eAAe,EACf,oBAAoB,GAAG,EAAE,EACzB,aAAa,GAAG,KAAK,EACrB,UAAU,GAAG,KAAK,EAClB,UAAU,GAAG,QAAQ,MAGnB,EAAE;IACJ,MAAM,gBAAgB,GAAG,IAAA,0BAAkB,EAAC,EAAE,EAAE,eAAe,CAAC,CAAA;IAEhE,MAAM,qBAAqB,GAAG,KAAK,IAAI,EAAE;QACvC,MAAM,IAAA,kBAAU,EAAC;YACf,sBAAS,CAAC,qBAAqB,EAAE;YACjC,gBAAgB,CAAC,OAAO,EAAE;SAC3B,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,4BAA4B,GAAG,KAAK,IAAI,EAAE;QAC9C,MAAM,IAAA,kBAAU,EAAC,CAAC,sBAAS,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAA;IAC9D,CAAC,CAAA;IAED,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;QACpC,MAAM,sBAAS,CAAC,kBAAkB,EAAE,CAAA;IACtC,CAAC,CAAA;IAED,MAAM,OAAO,GACX,aAAa;QACb,CACE,MAAM,IAAA,qBAAa,EACjB,iBAAiB;YACf,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,qBAAqB,IAAI,iBAAiB,CAAC,CAC/D,CACF,CAAC,OAAO,CAAA;IAEX,MAAM,MAAM,GAAG,uBAAe,CAAC,kBAAkB,CAC/C,KAAK,EACL,qBAAuD,EACvD,IAAI,CACJ,CAAA;IAEF,2BAA2B,CAAC,cAAc,IAAI,EAAE,CAAC,CAAA;IAEjD,IACE,qBAAqB,EAAE,QAAQ,EAAE,UAAU;QAC3C,CAAC,oBAAoB,CAAC,iCAAyB,CAAC,aAAa,CAAC,EAC9D,CAAC;QACD,oBAAoB,CAAC,iCAAyB,CAAC,aAAa,CAAC;YAC3D,qBAAqB,CAAC,QAAQ,CAAC,UAAU,CAAA;IAC7C,CAAC;SAAM,IACL,MAAM,CAAC,SAAS;QAChB,CAAC,oBAAoB,CAAC,iCAAyB,CAAC,aAAa,CAAC,EAC9D,CAAC;QACD,oBAAoB,CAAC,iCAAyB,CAAC,aAAa,CAAC;YAC3D,uBAAe,CAAC,kBAAkB,CAAC;gBACjC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,IAAI,EAAE,CAAC;gBAC1C,GAAG,MAAM;aACV,CAAC,CAAA;IACN,CAAC;IAED,0CAA0C;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,eAAO,CAAC,IAAI,CAAC,CAAA;IACtE,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACjC,OAAO,OAAO,CAAC,eAAO,CAAC,IAAI,CAAC,CAAA;IAE5B,IAAI,mBAAmB,GAEmB,EAAE,CAAA;IAE5C,IAAI,IAAA,gBAAQ,EAAC,UAAU,CAAC,EAAE,CAAC;QACzB,mBAAmB,GAAG,UAAU,CAAA;IAClC,CAAC;IAED,KAAK,MAAM,kBAAkB,IAAI,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACnE,gBAAgB,CAAC,QAAQ,CAAC;YACxB,CAAC,kBAAkB,CAAC,EAAE,IAAA,gBAAO,EAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;SACxE,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC;QACnC,aAAa,EAAE,OAAO;QACtB,eAAe,EAAE,gBAAgB;QACjC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;QAC3C,aAAa;QACb,UAAU;QACV,UAAU;KACX,CAAC,CAAA;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,UAAU,KAAK,CAAC,GAAG,IAAW;YACjC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAC5D,CAAC;QACD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAA;QACnB,KAAK,CAAC,GAAG,GAAG,KAAK,CAAA;QAEjB,OAAO;YACL,qBAAqB;YACrB,4BAA4B;YAC5B,kBAAkB;YAClB,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,KAAuC;YAC9C,aAAa,EAAE,KAAK,IAAI,EAAE;gBACxB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;YAC9D,CAAC;YACD,gBAAgB,EAAE,KAAK,IAAI,EAAE;gBAC3B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;YACrE,CAAC;YACD,kBAAkB,EAAE,KAAK,IAAI,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;YACvE,CAAC;YACD,6BAA6B,EAAE,GAAG,EAAE;gBAClC,MAAM,IAAI,KAAK,CACb,wDAAwD,CACzD,CAAA;YACH,CAAC;SACF,CAAA;IACH,CAAC;IAED,oCAAoC;IACpC,oBAAoB,CAAC,eAAO,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAChE,eAAO,CAAC,SAAS,EACjB;QACE,iBAAiB,EAAE,IAAI;KACxB,CACF,CAAA;IAED,WAAW,KAAK,EAAE,CAAA;IAClB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,WAAW,GAAG,CAAC,WAAW,CAAC,CAAA;IAC7B,CAAC;IACD,WAAW,CAAC,IAAI,CAAC,GAAG,sBAAS,CAAC,cAAc,EAAE,CAAC,CAAA;IAE/C,MAAM,sBAAsB,GAAG,sBAAS,CAAC,mBAAmB,EAAE,CAAA;IAC9D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;QAC9D,MAAM,UAAU,GAAQ,WAAW,CAAC,OAAO,CAAC,CAAA;QAC5C,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;YACrC,WAAW,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAA;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,MAAM,eAAe,CAAC;QAChE,MAAM,EAAE,mBAAmB;QAC3B,WAAW;QACX,oBAAoB;QACpB,aAAa,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;KAChE,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;IACtC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAA;IAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAiC,CAAA;IAEtE,MAAM,WAAW,GAAG,IAAI,0BAAW,CAAC;QAClC,cAAc;QACd,qBAAqB,EAAE,eAAe;QACtC,WAAW;KACZ,CAAC,CAAA;IAEF,MAAM,cAAc,GAAG,KAAK,EAAE,EAC5B,YAAY,EACZ,MAAM,GAAG,KAAK,GAIf,EAAE,EAAE;QACH,MAAM,iBAAiB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;YACxD,OAAO;gBACL,UAAU;gBACV,UAAU,EAAE,sBAAS,CAAC,oBAAoB,CAAC,UAAU,CAAC;aACvD,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,cAAc,GAAG,iBAAiB;aACrC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC;aACvC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAA;QAEtC,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,gBAAQ,CACxB,gBAAQ,CAAC,KAAK,CAAC,eAAe,EAC9B,UAAU,MAAM,qCAAqC,cAAc,CAAC,IAAI,CACtE,GAAG,CACJ,EAAE,EACH,gBAAQ,CAAC,KAAK,CAAC,eAAe,CAC/B,CAAA;YACD,KAAK,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC7C,MAAM,KAAK,CAAA;QACb,CAAC;QAED,KAAK,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,iBAAiB,EAAE,CAAC;YACjE,IACE,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ;gBACnC,gBAAgB,CAAC,iBAAiB,EAAE,KAAK,KAAK,oBAAY,CAAC,QAAQ,EACnE,CAAC;gBACD,gBAAgB,CAAC,OAAO,KAAK,EAAE,CAAA;gBAC/B,gBAAgB,CAAC,OAAO,CAAC,QAAQ,GAAG;oBAClC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,IAAI,EAAE,CAAC;iBAC3C,CACA;gBAAC,gBAAwB,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK;oBAC/C,qBAAqB,EAAE,QAAQ,EAAE,KAAK,CAAA;YAC1C,CAAC;YAED,MAAM,gBAAgB,GAAqB;gBACzC,SAAS,EAAE,gBAAgB,CAAC,UAAU,CAAC,GAAG;gBAC1C,UAAU,EAAE,gBAAgB,CAAC,cAAwB;gBACrD,SAAS,EAAE,eAAe;gBAC1B,OAAO,EAAE,gBAAgB,CAAC,OAAO;gBACjC,aAAa,EAAE,gBAAgB,CAAC,aAA8B;aAC/D,CAAA;YAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,MAAM,sBAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAA;YAC/C,CAAC;iBAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC5B,MAAM,sBAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;YAC7C,CAAC;iBAAM,CAAC;gBACN,MAAM,sBAAS,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAA;YACnD,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,MAAM,aAAa,GAAmB,KAAK,IAAmB,EAAE;QAC9D,MAAM,cAAc,CAAC;YACnB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;SACtC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAsB,KAAK,EAC/C,YAAY,EACG,EAAE;QACjB,MAAM,cAAc,CAAC;YACnB,YAAY;YACZ,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,kBAAkB,GAAuB,KAAK,EAClD,YAAY,EACG,EAAE;QACjB,MAAM,cAAc,CAAC;YACnB,YAAY;YACZ,MAAM,EAAE,UAAU;SACnB,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,qBAAqB,GAAG,GAAG,EAAE;QACjC,MAAM,OAAO,GACX,OAAO,IAAI,mBAAmB;YAC5B,CAAC,CAAC,EAAE,GAAG,mBAAmB,CAAC,OAAO,EAAE;YACpC,CAAC,CAAC;gBACE,GAAI,mBAA+D;aACpE,CAAA;QAEP,OAAO,CAAC,QAAQ,KAAK;YACnB,GAAG,qBAAqB,EAAE,QAAQ;SACnC,CAAA;QACD,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,qBAAqB,EAAE,QAAQ,EAAE,KAAK,CAAA;QAEjE,OAAO,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IAClD,CAAC,CAAA;IAED,OAAO;QACL,qBAAqB;QACrB,4BAA4B;QAC5B,kBAAkB;QAClB,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,IAAA,0BAAW,EAAC,WAAW,CAAQ,EAAE,gGAAgG;QACxI,WAAW;QACX,SAAS,EAAE,MAAM;QACjB,QAAQ;QACR,aAAa;QACb,gBAAgB;QAChB,kBAAkB;QAClB,6BAA6B,EAAE,qBAAqB;QACpD,eAAe,EAAE,gBAAgB;KAClC,CAAA;AACH,CAAC;AAEM,KAAK,UAAU,MAAM,CAC1B,UAAyB,EAAE;IAE3B,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,UAAyB,EAAE;IAE3B,MAAM,aAAa,GAAG,IAAI,CAAA;IAE1B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,OAAO,CAAC;QACtC,GAAG,OAAO;QACV,aAAa;KACd,CAAC,CAAA;IAEF,MAAM,aAAa,EAAE,CAAC,OAAO,CAAC,sBAAS,CAAC,cAAc,CAAC,CAAA;AACzD,CAAC;AAEM,KAAK,UAAU,iBAAiB,CACrC,WAAqB,EACrB,UAAyB,EAAE;IAE3B,MAAM,aAAa,GAAG,IAAI,CAAA;IAE1B,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,OAAO,CAAC;QACzC,GAAG,OAAO;QACV,aAAa;KACd,CAAC,CAAA;IAEF,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,sBAAS,CAAC,cAAc,CAAC,CAAA;AACvE,CAAC;AAEM,KAAK,UAAU,qBAAqB,CACzC,WAAqB,EACrB,UAAyB,EAAE;IAE3B,MAAM,aAAa,GAAG,IAAI,CAAA;IAE1B,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,OAAO,CAAC;QAC3C,GAAG,OAAO;QACV,aAAa;KACd,CAAC,CAAA;IAEF,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,sBAAS,CAAC,cAAc,CAAC,CAAA;AACzE,CAAC;AAEM,KAAK,UAAU,8BAA8B,CAClD,UAAyB,EAAE;IAE3B,MAAM,aAAa,GAAG,IAAI,CAAA;IAE1B,MAAM,EAAE,6BAA6B,EAAE,GAAG,MAAM,OAAO,CAAC;QACtD,GAAG,OAAO;QACV,aAAa;KACd,CAAC,CAAA;IAEF,OAAO,6BAA6B,EAAE,CAAA;AACxC,CAAC"}
@@ -0,0 +1,136 @@
1
+ import { InternalModuleDeclaration, LinkModuleDefinition, LoadedModule, EtoContainer, ModuleBootstrapDeclaration, ModuleDefinition, ModuleExports, ModuleJoinerConfig, ModuleResolution } from "@etohq/types";
2
+ declare global {
3
+ interface EtoModule {
4
+ getLoadedModules(aliases?: Map<string, string>): {
5
+ [key: string]: LoadedModule;
6
+ }[];
7
+ getModuleInstance(moduleKey: string, alias?: string): LoadedModule;
8
+ }
9
+ }
10
+ export type MigrationOptions = {
11
+ moduleKey: string;
12
+ modulePath: string;
13
+ container?: EtoContainer;
14
+ options?: Record<string, any>;
15
+ moduleExports?: ModuleExports;
16
+ };
17
+ export type ModuleBootstrapOptions = {
18
+ moduleKey: string;
19
+ defaultPath: string;
20
+ declaration?: ModuleBootstrapDeclaration;
21
+ moduleExports?: ModuleExports;
22
+ sharedContainer?: EtoContainer;
23
+ moduleDefinition?: ModuleDefinition;
24
+ injectedDependencies?: Record<string, any>;
25
+ /**
26
+ * In this mode, all instances are partially loaded, meaning that the module will not be fully loaded and the services will not be available.
27
+ * Don't forget to clear the instances (EtoModule.clearInstances()) after the migration are done.
28
+ */
29
+ migrationOnly?: boolean;
30
+ /**
31
+ * Forces the modules bootstrapper to only run the modules loaders and return prematurely. This
32
+ * is meant for modules that have data loader. In a test env, in order to clear all data
33
+ * and load them back, we need to run those loader again
34
+ */
35
+ loaderOnly?: boolean;
36
+ workerMode?: "shared" | "worker" | "server";
37
+ };
38
+ export type LinkModuleBootstrapOptions = {
39
+ definition: LinkModuleDefinition;
40
+ declaration?: InternalModuleDeclaration;
41
+ moduleExports?: ModuleExports;
42
+ injectedDependencies?: Record<string, any>;
43
+ };
44
+ export type RegisterModuleJoinerConfig = ModuleJoinerConfig | ((modules: ModuleJoinerConfig[]) => ModuleJoinerConfig);
45
+ declare class EtoModule {
46
+ private static instances_;
47
+ private static modules_;
48
+ private static customLinks_;
49
+ private static loading_;
50
+ private static joinerConfig_;
51
+ private static moduleResolutions_;
52
+ static getLoadedModules(aliases?: Map<string, string>): {
53
+ [key: string]: LoadedModule;
54
+ }[];
55
+ static onApplicationStart(onApplicationStartCb?: () => void): void;
56
+ static onApplicationShutdown(): Promise<void>;
57
+ static onApplicationPrepareShutdown(): Promise<void>;
58
+ static clearInstances(): void;
59
+ static isInstalled(moduleKey: string, alias?: string): boolean;
60
+ static getJoinerConfig(moduleKey: string): ModuleJoinerConfig;
61
+ static getAllJoinerConfigs(): ModuleJoinerConfig[];
62
+ static getModuleResolutions(moduleKey: string): ModuleResolution;
63
+ static getAllModuleResolutions(): ModuleResolution[];
64
+ static setModuleResolution(moduleKey: string, resolution: ModuleResolution): ModuleResolution;
65
+ static setJoinerConfig(moduleKey: string, config: ModuleJoinerConfig): ModuleJoinerConfig;
66
+ static setCustomLink(config: RegisterModuleJoinerConfig): void;
67
+ static getCustomLinks(): RegisterModuleJoinerConfig[];
68
+ static getModuleInstance(moduleKey: string, alias?: string): any | undefined;
69
+ private static registerModule;
70
+ /**
71
+ * Load all modules and resolve them once they are loaded
72
+ * @param modulesOptions
73
+ * @param migrationOnly
74
+ * @param loaderOnly
75
+ * @param workerMode
76
+ */
77
+ static bootstrapAll(modulesOptions: Omit<ModuleBootstrapOptions, "migrationOnly" | "loaderOnly" | "workerMode">[], { migrationOnly, loaderOnly, workerMode, }: {
78
+ migrationOnly?: boolean;
79
+ loaderOnly?: boolean;
80
+ workerMode?: ModuleBootstrapOptions["workerMode"];
81
+ }): Promise<{
82
+ [key: string]: any;
83
+ }[]>;
84
+ /**
85
+ * Load a single module and resolve it once it is loaded
86
+ * @param moduleKey
87
+ * @param defaultPath
88
+ * @param declaration
89
+ * @param moduleExports
90
+ * @param sharedContainer
91
+ * @param moduleDefinition
92
+ * @param injectedDependencies
93
+ * @param migrationOnly
94
+ * @param loaderOnly
95
+ * @param workerMode
96
+ */
97
+ static bootstrap<T>({ moduleKey, defaultPath, declaration, moduleExports, sharedContainer, moduleDefinition, injectedDependencies, migrationOnly, loaderOnly, workerMode, }: ModuleBootstrapOptions): Promise<{
98
+ [key: string]: T;
99
+ }>;
100
+ /**
101
+ * Load all modules and then resolve them once they are loaded
102
+ *
103
+ * @param modulesOptions
104
+ * @param migrationOnly
105
+ * @param loaderOnly
106
+ * @param workerMode
107
+ * @protected
108
+ */
109
+ protected static bootstrap_<T>(modulesOptions: Omit<ModuleBootstrapOptions, "migrationOnly" | "loaderOnly" | "workerMode">[], { migrationOnly, loaderOnly, workerMode, }: {
110
+ migrationOnly?: boolean;
111
+ loaderOnly?: boolean;
112
+ workerMode?: "shared" | "worker" | "server";
113
+ }): Promise<{
114
+ [key: string]: T;
115
+ }[]>;
116
+ /**
117
+ * Resolve all the modules once they all have been loaded through the bootstrap
118
+ * and store their references in the instances_ map and return them
119
+ *
120
+ * @param hashKey
121
+ * @param modDeclaration
122
+ * @param moduleResolutions
123
+ * @param container
124
+ * @private
125
+ */
126
+ private static resolveLoadedModule;
127
+ static bootstrapLink({ definition, declaration, moduleExports, injectedDependencies, }: LinkModuleBootstrapOptions): Promise<{
128
+ [key: string]: unknown;
129
+ }>;
130
+ static migrateGenerate({ options, container, moduleExports, moduleKey, modulePath, }: MigrationOptions): Promise<void>;
131
+ static migrateUp({ options, container, moduleExports, moduleKey, modulePath, }: MigrationOptions): Promise<void>;
132
+ static migrateDown({ options, container, moduleExports, moduleKey, modulePath, }: MigrationOptions): Promise<void>;
133
+ }
134
+ declare const GlobalEtoModule: typeof EtoModule;
135
+ export { GlobalEtoModule as EtoModule };
136
+ //# sourceMappingURL=eto-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eto-module.d.ts","sourceRoot":"","sources":["../src/eto-module.ts"],"names":[],"mappings":"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"}