@acmekit/modules-sdk 2.13.1

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/acmekit-app.d.ts +96 -0
  2. package/dist/acmekit-app.d.ts.map +1 -0
  3. package/dist/acmekit-app.js +437 -0
  4. package/dist/acmekit-app.js.map +1 -0
  5. package/dist/acmekit-module.d.ts +149 -0
  6. package/dist/acmekit-module.d.ts.map +1 -0
  7. package/dist/acmekit-module.js +541 -0
  8. package/dist/acmekit-module.js.map +1 -0
  9. package/dist/definitions.d.ts +7 -0
  10. package/dist/definitions.d.ts.map +1 -0
  11. package/dist/definitions.js +313 -0
  12. package/dist/definitions.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 +54 -0
  18. package/dist/link.d.ts.map +1 -0
  19. package/dist/link.js +444 -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 +10 -0
  26. package/dist/loaders/module-loader.d.ts.map +1 -0
  27. package/dist/loaders/module-loader.js +56 -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 +56 -0
  32. package/dist/loaders/module-provider-loader.js.map +1 -0
  33. package/dist/loaders/register-modules.d.ts +10 -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 +53 -0
  42. package/dist/loaders/utils/load-internal.d.ts.map +1 -0
  43. package/dist/loaders/utils/load-internal.js +519 -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 +58 -0
  54. package/dist/remote-query/query.d.ts.map +1 -0
  55. package/dist/remote-query/query.js +254 -0
  56. package/dist/remote-query/query.js.map +1 -0
  57. package/dist/remote-query/remote-query.d.ts +43 -0
  58. package/dist/remote-query/remote-query.d.ts.map +1 -0
  59. package/dist/remote-query/remote-query.js +297 -0
  60. package/dist/remote-query/remote-query.js.map +1 -0
  61. package/dist/remote-query/to-remote-query.d.ts +29 -0
  62. package/dist/remote-query/to-remote-query.d.ts.map +1 -0
  63. package/dist/remote-query/to-remote-query.js +110 -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 +41 -0
@@ -0,0 +1,96 @@
1
+ import { RemoteFetchDataCallback } from "@acmekit/orchestration";
2
+ import { ExternalModuleDeclaration, ILinkMigrationsPlanner, InternalModuleDeclaration, LoadedModule, AcmeKitContainer, ModuleJoinerConfig, ModuleServiceInitializeOptions, RemoteQueryFunction } from "@acmekit/types";
3
+ import { GraphQLUtils, Modules } from "@acmekit/utils";
4
+ import { Link } from "./link";
5
+ import { RegisterModuleJoinerConfig } from "./acmekit-module";
6
+ export type RunMigrationFn = (options?: {
7
+ allOrNothing?: boolean;
8
+ }) => Promise<void>;
9
+ export type RevertMigrationFn = (moduleNames: string[]) => Promise<void>;
10
+ export type GenerateMigrations = (moduleNames: string[]) => Promise<void>;
11
+ export type GetLinkExecutionPlanner = () => ILinkMigrationsPlanner;
12
+ export type AcmeKitModuleConfig = {
13
+ [key: string | Modules]: string | boolean | Partial<InternalModuleDeclaration | ExternalModuleDeclaration>;
14
+ };
15
+ export type SharedResources = {
16
+ database?: ModuleServiceInitializeOptions["database"] & {
17
+ /**
18
+ * {
19
+ * name?: string
20
+ * afterCreate?: Function
21
+ * min?: number
22
+ * max?: number
23
+ * refreshIdle?: boolean
24
+ * idleTimeoutMillis?: number
25
+ * reapIntervalMillis?: number
26
+ * returnToHead?: boolean
27
+ * priorityRange?: number
28
+ * log?: (message: string, logLevel: string) => void
29
+ * }
30
+ */
31
+ pool?: Record<string, unknown>;
32
+ };
33
+ };
34
+ export declare function loadModules(args: {
35
+ modulesConfig: AcmeKitModuleConfig;
36
+ sharedContainer: AcmeKitContainer;
37
+ sharedResourcesConfig?: SharedResources;
38
+ migrationOnly?: boolean;
39
+ schemaOnly?: boolean;
40
+ loaderOnly?: boolean;
41
+ workerMode?: "shared" | "worker" | "server";
42
+ cwd?: string;
43
+ }): Promise<any>;
44
+ export type AcmeKitAppOutput = {
45
+ modules: Record<string, LoadedModule | LoadedModule[]>;
46
+ link: Link | undefined;
47
+ query: RemoteQueryFunction;
48
+ entitiesMap?: Record<string, any>;
49
+ gqlSchema?: GraphQLUtils.GraphQLSchema;
50
+ notFound?: Record<string, Record<string, string>>;
51
+ runMigrations: RunMigrationFn;
52
+ revertMigrations: RevertMigrationFn;
53
+ generateMigrations: GenerateMigrations;
54
+ linkMigrationExecutionPlanner: GetLinkExecutionPlanner;
55
+ onApplicationShutdown: () => Promise<void>;
56
+ onApplicationPrepareShutdown: () => Promise<void>;
57
+ onApplicationStart: () => Promise<void>;
58
+ sharedContainer?: AcmeKitContainer;
59
+ };
60
+ export type AcmeKitAppOptions = {
61
+ workerMode?: "shared" | "worker" | "server";
62
+ sharedContainer?: AcmeKitContainer;
63
+ sharedResourcesConfig?: SharedResources;
64
+ loadedModules?: LoadedModule[];
65
+ servicesConfig?: ModuleJoinerConfig[];
66
+ acmekitConfigPath?: string;
67
+ modulesConfigFileName?: string;
68
+ modulesConfig?: AcmeKitModuleConfig;
69
+ linkModules?: RegisterModuleJoinerConfig | RegisterModuleJoinerConfig[];
70
+ remoteFetchData?: RemoteFetchDataCallback;
71
+ injectedDependencies?: any;
72
+ onApplicationStartCb?: () => void;
73
+ /**
74
+ * Forces the modules bootstrapper to only run the modules loaders and return prematurely
75
+ */
76
+ loaderOnly?: boolean;
77
+ /**
78
+ * Only partially load modules to retrieve their module joiner configs and run their loaders.
79
+ * Useful for migrations.
80
+ */
81
+ migrationOnly?: boolean;
82
+ /**
83
+ * Only partially load modules to retrieve their module joiner configs without running loaders.
84
+ * Useful for type generation.
85
+ */
86
+ schemaOnly?: boolean;
87
+ cwd?: string;
88
+ };
89
+ export declare function AcmeKitApp(options?: AcmeKitAppOptions): Promise<AcmeKitAppOutput>;
90
+ export declare function AcmeKitAppMigrateUp(options?: AcmeKitAppOptions & {
91
+ allOrNothing?: boolean;
92
+ }): Promise<void>;
93
+ export declare function AcmeKitAppMigrateDown(moduleNames: string[], options?: AcmeKitAppOptions): Promise<void>;
94
+ export declare function AcmeKitAppMigrateGenerate(moduleNames: string[], options?: AcmeKitAppOptions): Promise<void>;
95
+ export declare function AcmeKitAppGetLinksExecutionPlanner(options?: AcmeKitAppOptions): Promise<ILinkMigrationsPlanner>;
96
+ //# sourceMappingURL=acmekit-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acmekit-app.d.ts","sourceRoot":"","sources":["../src/acmekit-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,437 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadModules = loadModules;
4
+ exports.AcmeKitApp = AcmeKitApp;
5
+ exports.AcmeKitAppMigrateUp = AcmeKitAppMigrateUp;
6
+ exports.AcmeKitAppMigrateDown = AcmeKitAppMigrateDown;
7
+ exports.AcmeKitAppMigrateGenerate = AcmeKitAppMigrateGenerate;
8
+ exports.AcmeKitAppGetLinksExecutionPlanner = AcmeKitAppGetLinksExecutionPlanner;
9
+ const awilix_1 = require("@acmekit/deps/awilix");
10
+ const utils_1 = require("@acmekit/utils");
11
+ const link_1 = require("./link");
12
+ const acmekit_module_1 = require("./acmekit-module");
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, schemaOnly = false, loaderOnly = false, workerMode = "shared", cwd, } = 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 acmekit_module_1.AcmeKitModule.bootstrapAll(modulesToLoad, {
65
+ migrationOnly,
66
+ schemaOnly,
67
+ loaderOnly,
68
+ workerMode,
69
+ cwd,
70
+ }));
71
+ if (loaderOnly) {
72
+ return allModules;
73
+ }
74
+ for (const { moduleKey } of modulesToLoad) {
75
+ const service = loaded.find((loadedModule) => loadedModule[moduleKey])?.[moduleKey];
76
+ if (!service) {
77
+ throw new Error(`Module ${moduleKey} could not be loaded.`);
78
+ }
79
+ sharedContainer.register({
80
+ [service.__definition.key]: (0, awilix_1.asValue)(service),
81
+ });
82
+ if (allModules[moduleKey] && !Array.isArray(allModules[moduleKey])) {
83
+ allModules[moduleKey] = [];
84
+ }
85
+ if (allModules[moduleKey]) {
86
+ ;
87
+ allModules[moduleKey].push(service);
88
+ }
89
+ else {
90
+ allModules[moduleKey] = service;
91
+ }
92
+ }
93
+ return allModules;
94
+ }
95
+ async function initializeLinks({ config, linkModules, injectedDependencies, moduleExports, migrationOnly = false, schemaOnly = false, }) {
96
+ try {
97
+ let resources = moduleExports;
98
+ if (!resources) {
99
+ const module = await (0, utils_1.dynamicImport)(LinkModulePackage);
100
+ if ("discoveryPath" in module) {
101
+ const reExportedLoadedModule = await (0, utils_1.dynamicImport)(module.discoveryPath);
102
+ resources = reExportedLoadedModule.default ?? reExportedLoadedModule;
103
+ }
104
+ }
105
+ const { initialize, getMigrationPlanner } = resources;
106
+ const linkResolution = await initialize(config, linkModules, injectedDependencies, undefined, migrationOnly, schemaOnly);
107
+ return {
108
+ remoteLink: new link_1.Link(),
109
+ linkResolution,
110
+ getMigrationPlanner,
111
+ };
112
+ }
113
+ catch (err) {
114
+ console.warn("Error initializing link modules.", err);
115
+ return {
116
+ remoteLink: undefined,
117
+ linkResolution: undefined,
118
+ getMigrationPlanner: () => void 0,
119
+ };
120
+ }
121
+ }
122
+ function isAcmeKitModule(mod) {
123
+ return typeof mod?.initialize === "function";
124
+ }
125
+ function cleanAndMergeSchema(loadedSchema) {
126
+ const defaultAcmeKitSchema = `
127
+ scalar DateTime
128
+ scalar JSON
129
+ directive @enumValue(value: String) on ENUM_VALUE
130
+ `;
131
+ const { schema: cleanedSchema, notFound } = utils_1.GraphQLUtils.cleanGraphQLSchema(defaultAcmeKitSchema + loadedSchema);
132
+ const mergedSchema = utils_1.GraphQLUtils.mergeTypeDefs(cleanedSchema);
133
+ return {
134
+ schema: utils_1.GraphQLUtils.makeExecutableSchema({ typeDefs: mergedSchema }),
135
+ notFound,
136
+ };
137
+ }
138
+ function getLoadedSchema() {
139
+ return acmekit_module_1.AcmeKitModule.getAllJoinerConfigs()
140
+ .map((joinerConfig) => joinerConfig?.schema ?? "")
141
+ .join("\n");
142
+ }
143
+ function registerCustomJoinerConfigs(servicesConfig) {
144
+ for (const config of servicesConfig) {
145
+ if (!config.serviceName || config.isReadOnlyLink) {
146
+ continue;
147
+ }
148
+ acmekit_module_1.AcmeKitModule.setJoinerConfig(config.serviceName, config);
149
+ }
150
+ }
151
+ async function AcmeKitApp_({ sharedContainer, sharedResourcesConfig, servicesConfig, acmekitConfigPath, modulesConfigFileName, modulesConfig, linkModules, remoteFetchData, injectedDependencies = {}, migrationOnly = false, schemaOnly = false, loaderOnly = false, workerMode = "shared", cwd = process.cwd(), } = {}) {
152
+ const sharedContainer_ = (0, utils_1.createAcmeKitContainer)({}, sharedContainer);
153
+ const config = sharedContainer_.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE, {
154
+ allowUnregistered: true,
155
+ });
156
+ const logger = sharedContainer_.resolve(utils_1.ContainerRegistrationKeys.LOGGER, {
157
+ allowUnregistered: true,
158
+ });
159
+ const discovered = await (0, utils_1.discoverFeatureFlagsFromDir)(cwd);
160
+ for (const def of discovered) {
161
+ (0, utils_1.registerFeatureFlag)({
162
+ flag: def,
163
+ projectConfigFlags: config?.featureFlags ?? {},
164
+ router: utils_1.FeatureFlag,
165
+ logger,
166
+ });
167
+ }
168
+ const onApplicationShutdown = async () => {
169
+ await (0, utils_1.promiseAll)([
170
+ acmekit_module_1.AcmeKitModule.onApplicationShutdown(),
171
+ sharedContainer_.dispose(),
172
+ ]);
173
+ };
174
+ const onApplicationPrepareShutdown = async () => {
175
+ await (0, utils_1.promiseAll)([acmekit_module_1.AcmeKitModule.onApplicationPrepareShutdown()]);
176
+ };
177
+ const onApplicationStart = async () => {
178
+ await acmekit_module_1.AcmeKitModule.onApplicationStart();
179
+ };
180
+ const modules = modulesConfig ??
181
+ (await (0, utils_1.dynamicImport)(acmekitConfigPath ?? cwd + (modulesConfigFileName ?? "/modules-config"))).default;
182
+ const dbData = utils_1.ModulesSdkUtils.loadDatabaseConfig("acmekit", sharedResourcesConfig, true);
183
+ registerCustomJoinerConfigs(servicesConfig ?? []);
184
+ if (sharedResourcesConfig?.database?.connection &&
185
+ !injectedDependencies[utils_1.ContainerRegistrationKeys.PG_CONNECTION]) {
186
+ injectedDependencies[utils_1.ContainerRegistrationKeys.PG_CONNECTION] =
187
+ sharedResourcesConfig.database.connection;
188
+ }
189
+ else if (dbData.clientUrl &&
190
+ !injectedDependencies[utils_1.ContainerRegistrationKeys.PG_CONNECTION]) {
191
+ injectedDependencies[utils_1.ContainerRegistrationKeys.PG_CONNECTION] =
192
+ utils_1.ModulesSdkUtils.createPgConnection({
193
+ ...(sharedResourcesConfig?.database ?? {}),
194
+ ...dbData,
195
+ });
196
+ }
197
+ // remove the link module from the modules
198
+ const linkModule = modules[LinkModulePackage] ?? modules[utils_1.Modules.LINK];
199
+ delete modules[LinkModulePackage];
200
+ delete modules[utils_1.Modules.LINK];
201
+ let linkModuleOrOptions = {};
202
+ if ((0, utils_1.isObject)(linkModule)) {
203
+ linkModuleOrOptions = linkModule;
204
+ }
205
+ for (const injectedDependency of Object.keys(injectedDependencies)) {
206
+ sharedContainer_.register({
207
+ [injectedDependency]: (0, awilix_1.asValue)(injectedDependencies[injectedDependency]),
208
+ });
209
+ }
210
+ const allModules = await loadModules({
211
+ modulesConfig: modules,
212
+ sharedContainer: sharedContainer_,
213
+ sharedResourcesConfig: { database: dbData },
214
+ migrationOnly,
215
+ schemaOnly,
216
+ loaderOnly,
217
+ workerMode,
218
+ cwd,
219
+ });
220
+ if (loaderOnly) {
221
+ async function query(...args) {
222
+ throw new Error("Querying not allowed in loaderOnly mode");
223
+ }
224
+ query.graph = query;
225
+ query.gql = query;
226
+ return {
227
+ onApplicationShutdown,
228
+ onApplicationPrepareShutdown,
229
+ onApplicationStart,
230
+ modules: allModules,
231
+ link: undefined,
232
+ query: query,
233
+ runMigrations: async () => {
234
+ throw new Error("Migrations not allowed in loaderOnly mode");
235
+ },
236
+ revertMigrations: async () => {
237
+ throw new Error("Revert migrations not allowed in loaderOnly mode");
238
+ },
239
+ generateMigrations: async () => {
240
+ throw new Error("Generate migrations not allowed in loaderOnly mode");
241
+ },
242
+ linkMigrationExecutionPlanner: () => {
243
+ throw new Error("Migrations planner is not avaibable in loaderOnly mode");
244
+ },
245
+ };
246
+ }
247
+ // Share Event bus with link modules
248
+ injectedDependencies[utils_1.Modules.EVENT_BUS] = sharedContainer_.resolve(utils_1.Modules.EVENT_BUS, {
249
+ allowUnregistered: true,
250
+ });
251
+ linkModules ??= [];
252
+ if (!Array.isArray(linkModules)) {
253
+ linkModules = [linkModules];
254
+ }
255
+ linkModules.push(...acmekit_module_1.AcmeKitModule.getCustomLinks());
256
+ const allLoadedJoinerConfigs = acmekit_module_1.AcmeKitModule.getAllJoinerConfigs();
257
+ for (let linkIdx = 0; linkIdx < linkModules.length; linkIdx++) {
258
+ const customLink = linkModules[linkIdx];
259
+ if (typeof customLink === "function") {
260
+ linkModules[linkIdx] = customLink(allLoadedJoinerConfigs);
261
+ }
262
+ }
263
+ const { remoteLink, getMigrationPlanner } = await initializeLinks({
264
+ config: linkModuleOrOptions,
265
+ linkModules,
266
+ injectedDependencies,
267
+ moduleExports: isAcmeKitModule(linkModule) ? linkModule : undefined,
268
+ migrationOnly,
269
+ schemaOnly,
270
+ });
271
+ const loadedSchema = getLoadedSchema();
272
+ const { schema, notFound } = cleanAndMergeSchema(loadedSchema);
273
+ const entitiesMap = schema.getTypeMap();
274
+ const remoteQuery = new remote_query_1.RemoteQuery({
275
+ servicesConfig,
276
+ customRemoteFetchData: remoteFetchData,
277
+ entitiesMap,
278
+ });
279
+ const applyMigration = async ({ modulesNames, action = "run", allOrNothing = false, }) => {
280
+ const moduleResolutions = Array.from(new Set(modulesNames)).map((moduleName) => {
281
+ return {
282
+ moduleName,
283
+ resolution: acmekit_module_1.AcmeKitModule.getModuleResolutions(moduleName),
284
+ };
285
+ });
286
+ const missingModules = moduleResolutions
287
+ .filter(({ resolution }) => !resolution)
288
+ .map(({ moduleName }) => moduleName);
289
+ if (missingModules.length) {
290
+ const error = new utils_1.AcmeKitError(utils_1.AcmeKitError.Types.UNKNOWN_MODULES, `Cannot ${action} migrations for unknown module(s) ${missingModules.join(",")}`, utils_1.AcmeKitError.Codes.UNKNOWN_MODULES);
291
+ error["allModules"] = Object.keys(allModules);
292
+ throw error;
293
+ }
294
+ let executedResolutions = []; // [moduleResolution, migration names[]]
295
+ const run = async ({ resolution: moduleResolution }, migrationNames) => {
296
+ if (!moduleResolution.options?.database &&
297
+ moduleResolution.moduleDeclaration?.scope === types_1.MODULE_SCOPE.INTERNAL) {
298
+ moduleResolution.options ??= {};
299
+ moduleResolution.options.database = {
300
+ ...(sharedResourcesConfig?.database ?? {}),
301
+ };
302
+ moduleResolution.options.database.debug ??=
303
+ sharedResourcesConfig?.database?.debug;
304
+ }
305
+ const migrationOptions = {
306
+ moduleKey: moduleResolution.definition.key,
307
+ modulePath: moduleResolution.resolutionPath,
308
+ container: sharedContainer,
309
+ options: moduleResolution.options,
310
+ moduleExports: moduleResolution.moduleExports,
311
+ cwd,
312
+ };
313
+ if (action === "revert") {
314
+ await acmekit_module_1.AcmeKitModule.migrateDown(migrationOptions, migrationNames);
315
+ }
316
+ else if (action === "run") {
317
+ const ranMigrationsResult = await acmekit_module_1.AcmeKitModule.migrateUp(migrationOptions);
318
+ // Store for revert if anything goes wrong later
319
+ executedResolutions.push([
320
+ moduleResolution,
321
+ ranMigrationsResult?.map((r) => r.name) ?? [],
322
+ ]);
323
+ }
324
+ else {
325
+ await acmekit_module_1.AcmeKitModule.migrateGenerate(migrationOptions);
326
+ }
327
+ };
328
+ const concurrency = parseInt(process.env.DB_MIGRATION_CONCURRENCY ?? "1");
329
+ try {
330
+ const results = await (0, utils_1.executeWithConcurrency)(moduleResolutions.map((a) => () => run(a)), concurrency);
331
+ const rejections = results.filter((result) => result.status === "rejected");
332
+ if (rejections.length) {
333
+ throw new Error(`Some migrations failed to ${action}: ${rejections
334
+ .map((r) => r.reason)
335
+ .join(", ")}`);
336
+ }
337
+ }
338
+ catch (error) {
339
+ if (allOrNothing) {
340
+ action = "revert";
341
+ await (0, utils_1.executeWithConcurrency)(executedResolutions.map(([resolution, migrationNames]) => () => run({ resolution }, migrationNames)), concurrency);
342
+ }
343
+ throw error;
344
+ }
345
+ };
346
+ const runMigrations = async ({ allOrNothing = false } = {
347
+ allOrNothing: false,
348
+ }) => {
349
+ await applyMigration({
350
+ modulesNames: Object.keys(allModules),
351
+ allOrNothing,
352
+ });
353
+ };
354
+ const revertMigrations = async (modulesNames) => {
355
+ await applyMigration({
356
+ modulesNames,
357
+ action: "revert",
358
+ });
359
+ };
360
+ const generateMigrations = async (modulesNames) => {
361
+ await applyMigration({
362
+ modulesNames,
363
+ action: "generate",
364
+ });
365
+ };
366
+ const getMigrationPlannerFn = () => {
367
+ const options = "scope" in linkModuleOrOptions
368
+ ? { ...linkModuleOrOptions.options }
369
+ : {
370
+ ...linkModuleOrOptions,
371
+ };
372
+ options.database ??= {
373
+ ...sharedResourcesConfig?.database,
374
+ };
375
+ options.database.debug ??= sharedResourcesConfig?.database?.debug;
376
+ return getMigrationPlanner(options, linkModules);
377
+ };
378
+ const indexModule = sharedContainer_.resolve(utils_1.Modules.INDEX, {
379
+ allowUnregistered: true,
380
+ });
381
+ return {
382
+ onApplicationShutdown,
383
+ onApplicationPrepareShutdown,
384
+ onApplicationStart,
385
+ modules: allModules,
386
+ link: remoteLink,
387
+ query: (0, remote_query_1.createQuery)({
388
+ remoteQuery,
389
+ indexModule,
390
+ container: sharedContainer_,
391
+ }), // TODO: rm any once we remove the old RemoteQueryFunction and rely on the Query object instead,
392
+ entitiesMap,
393
+ gqlSchema: schema,
394
+ notFound,
395
+ runMigrations,
396
+ revertMigrations,
397
+ generateMigrations,
398
+ linkMigrationExecutionPlanner: getMigrationPlannerFn,
399
+ sharedContainer: sharedContainer_,
400
+ };
401
+ }
402
+ async function AcmeKitApp(options = {}) {
403
+ return await AcmeKitApp_(options);
404
+ }
405
+ async function AcmeKitAppMigrateUp(options = {}) {
406
+ const migrationOnly = true;
407
+ const { runMigrations } = await AcmeKitApp_({
408
+ ...options,
409
+ migrationOnly,
410
+ });
411
+ await runMigrations({ allOrNothing: options.allOrNothing }).finally(acmekit_module_1.AcmeKitModule.clearInstances);
412
+ }
413
+ async function AcmeKitAppMigrateDown(moduleNames, options = {}) {
414
+ const migrationOnly = true;
415
+ const { revertMigrations } = await AcmeKitApp_({
416
+ ...options,
417
+ migrationOnly,
418
+ });
419
+ await revertMigrations(moduleNames).finally(acmekit_module_1.AcmeKitModule.clearInstances);
420
+ }
421
+ async function AcmeKitAppMigrateGenerate(moduleNames, options = {}) {
422
+ const migrationOnly = true;
423
+ const { generateMigrations } = await AcmeKitApp_({
424
+ ...options,
425
+ migrationOnly,
426
+ });
427
+ await generateMigrations(moduleNames).finally(acmekit_module_1.AcmeKitModule.clearInstances);
428
+ }
429
+ async function AcmeKitAppGetLinksExecutionPlanner(options = {}) {
430
+ const migrationOnly = true;
431
+ const { linkMigrationExecutionPlanner } = await AcmeKitApp_({
432
+ ...options,
433
+ migrationOnly,
434
+ });
435
+ return linkMigrationExecutionPlanner();
436
+ }
437
+ //# sourceMappingURL=acmekit-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acmekit-app.js","sourceRoot":"","sources":["../src/acmekit-app.ts"],"names":[],"mappings":"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"}