@acmekit/utils 2.13.37 → 2.13.39

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 (40) hide show
  1. package/dist/common/container.d.ts +1 -0
  2. package/dist/common/container.d.ts.map +1 -1
  3. package/dist/common/container.js +1 -0
  4. package/dist/common/container.js.map +1 -1
  5. package/dist/common/define-plugin.d.ts +156 -0
  6. package/dist/common/define-plugin.d.ts.map +1 -0
  7. package/dist/common/define-plugin.js +59 -0
  8. package/dist/common/define-plugin.js.map +1 -0
  9. package/dist/common/get-resolved-plugins.d.ts.map +1 -1
  10. package/dist/common/get-resolved-plugins.js +43 -0
  11. package/dist/common/get-resolved-plugins.js.map +1 -1
  12. package/dist/common/index.d.ts +2 -0
  13. package/dist/common/index.d.ts.map +1 -1
  14. package/dist/common/index.js +2 -0
  15. package/dist/common/index.js.map +1 -1
  16. package/dist/common/merge-plugin-modules.d.ts.map +1 -1
  17. package/dist/common/merge-plugin-modules.js +15 -0
  18. package/dist/common/merge-plugin-modules.js.map +1 -1
  19. package/dist/common/plugin-dependency-graph.d.ts +18 -0
  20. package/dist/common/plugin-dependency-graph.d.ts.map +1 -0
  21. package/dist/common/plugin-dependency-graph.js +62 -0
  22. package/dist/common/plugin-dependency-graph.js.map +1 -0
  23. package/dist/modules-sdk/abstract-module-provider.d.ts +65 -0
  24. package/dist/modules-sdk/abstract-module-provider.d.ts.map +1 -0
  25. package/dist/modules-sdk/abstract-module-provider.js +46 -0
  26. package/dist/modules-sdk/abstract-module-provider.js.map +1 -0
  27. package/dist/modules-sdk/index.d.ts +3 -0
  28. package/dist/modules-sdk/index.d.ts.map +1 -1
  29. package/dist/modules-sdk/index.js +3 -0
  30. package/dist/modules-sdk/index.js.map +1 -1
  31. package/dist/modules-sdk/provider-registry.d.ts +43 -0
  32. package/dist/modules-sdk/provider-registry.d.ts.map +1 -0
  33. package/dist/modules-sdk/provider-registry.js +82 -0
  34. package/dist/modules-sdk/provider-registry.js.map +1 -0
  35. package/dist/modules-sdk/provider-service.d.ts +35 -0
  36. package/dist/modules-sdk/provider-service.d.ts.map +1 -0
  37. package/dist/modules-sdk/provider-service.js +41 -0
  38. package/dist/modules-sdk/provider-service.js.map +1 -0
  39. package/dist/tsconfig.tsbuildinfo +1 -1
  40. package/package.json +3 -3
@@ -14,5 +14,6 @@ export declare const ContainerRegistrationKeys: {
14
14
  */
15
15
  readonly LINK: "link";
16
16
  readonly FEATURE_FLAG_ROUTER: "featureFlagRouter";
17
+ readonly PLUGIN_OPTIONS: "plugin_options";
17
18
  };
18
19
  //# sourceMappingURL=container.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/common/container.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB;;;;;;;IAOpC;;OAEG;;IAEH;;OAEG;;;CAGK,CAAA"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/common/container.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB;;;;;;;IAOpC;;OAEG;;IAEH;;OAEG;;;;CAIK,CAAA"}
@@ -17,5 +17,6 @@ exports.ContainerRegistrationKeys = {
17
17
  */
18
18
  LINK: "link",
19
19
  FEATURE_FLAG_ROUTER: "featureFlagRouter",
20
+ PLUGIN_OPTIONS: "plugin_options",
20
21
  };
21
22
  //# sourceMappingURL=container.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/common/container.ts"],"names":[],"mappings":";;;AAAa,QAAA,yBAAyB,GAAG;IACvC,aAAa,EAAE,mBAAmB;IAClC,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,cAAc;IAC7B,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE,OAAO;IACd;;OAEG;IACH,WAAW,EAAE,YAAY;IACzB;;OAEG;IACH,IAAI,EAAE,MAAM;IACZ,mBAAmB,EAAE,mBAAmB;CAChC,CAAA"}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/common/container.ts"],"names":[],"mappings":";;;AAAa,QAAA,yBAAyB,GAAG;IACvC,aAAa,EAAE,mBAAmB;IAClC,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,cAAc;IAC7B,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,aAAa;IAC3B,KAAK,EAAE,OAAO;IACd;;OAEG;IACH,WAAW,EAAE,YAAY;IACzB;;OAEG;IACH,IAAI,EAAE,MAAM;IACZ,mBAAmB,EAAE,mBAAmB;IACxC,cAAc,EAAE,gBAAgB;CACxB,CAAA"}
@@ -0,0 +1,156 @@
1
+ import type { ZodType } from "zod";
2
+ /**
3
+ * Extracts the input type (before transforms/defaults) from a Zod schema.
4
+ */
5
+ type OptionsInput<T> = T extends ZodType<any, any, infer I> ? I : Record<string, unknown>;
6
+ /**
7
+ * Extracts the output type (after transforms/defaults) from a Zod schema.
8
+ */
9
+ type OptionsOutput<T> = T extends ZodType<infer O> ? O : Record<string, unknown>;
10
+ /**
11
+ * The shape returned by `plugin.config()`. Use this in your
12
+ * `plugins` array in `acmekit-config.ts` for typed plugin configuration.
13
+ */
14
+ export type PluginConfigEntry<TOptions = Record<string, unknown>> = {
15
+ resolve: string;
16
+ options: TOptions;
17
+ };
18
+ /**
19
+ * Represents the manifest for an AcmeKit plugin.
20
+ * Defines metadata, dependencies, options validation,
21
+ * and lifecycle hooks.
22
+ *
23
+ * @typeParam TSchema - Zod schema type for options validation.
24
+ */
25
+ export interface PluginManifest<TSchema extends ZodType<any> = ZodType<any>> {
26
+ /**
27
+ * Unique name of the plugin. Should match the package name
28
+ * in package.json.
29
+ */
30
+ name: string;
31
+ /**
32
+ * Human-readable description of what the plugin does.
33
+ */
34
+ description?: string;
35
+ /**
36
+ * Plugin version (semver). If not provided, the version
37
+ * from package.json is used.
38
+ */
39
+ version?: string;
40
+ /**
41
+ * Plugin dependencies — other plugins that must be loaded
42
+ * before this one. Each entry is a plugin package name.
43
+ *
44
+ * @example
45
+ * dependencies: ["@acmekit/some-plugin", "@myorg/other-plugin"]
46
+ */
47
+ dependencies?: string[];
48
+ /**
49
+ * Zod schema for validating plugin options at startup.
50
+ * When provided, options passed via acmekit-config.ts are
51
+ * validated during plugin resolution — invalid options
52
+ * throw immediately with a descriptive error.
53
+ */
54
+ optionsSchema?: TSchema;
55
+ /**
56
+ * Lifecycle hook called after all modules are loaded and
57
+ * the application has started. Use this for initialization
58
+ * logic like seeding data, connecting to external services,
59
+ * or registering custom container entries.
60
+ */
61
+ onPluginStart?: (container: any) => Promise<void>;
62
+ /**
63
+ * Lifecycle hook called during graceful shutdown. Plugins
64
+ * are shut down in reverse dependency order. Use this for
65
+ * cleanup logic like closing connections or flushing buffers.
66
+ *
67
+ * Errors thrown in this hook are logged but don't prevent
68
+ * other plugins from shutting down.
69
+ */
70
+ onPluginShutdown?: (container: any) => Promise<void>;
71
+ }
72
+ /**
73
+ * The resolved plugin manifest returned by `definePlugin()`.
74
+ * Includes the original manifest fields plus `resolveOptions`
75
+ * and `config` methods bound to the plugin's name.
76
+ *
77
+ * @typeParam TSchema - Zod schema type for options validation.
78
+ */
79
+ export type ResolvedPluginManifest<TSchema extends ZodType<any> = ZodType<any>> = PluginManifest<TSchema> & {
80
+ /**
81
+ * Resolve this plugin's options from the container.
82
+ * Works in any context that has access to the container:
83
+ * API routes, subscribers, jobs, workflows, modules.
84
+ *
85
+ * When an `optionsSchema` is defined, the return type is
86
+ * automatically inferred from the schema.
87
+ *
88
+ * @example
89
+ * ```ts
90
+ * import plugin from "../plugin"
91
+ *
92
+ * export default async function handler({ container }) {
93
+ * const options = plugin.resolveOptions(container)
94
+ * }
95
+ * ```
96
+ */
97
+ resolveOptions: <T = OptionsOutput<TSchema>>(container: any) => T;
98
+ /**
99
+ * Create a typed plugin configuration entry for use in
100
+ * `acmekit-config.ts`. When an `optionsSchema` is defined,
101
+ * the options parameter gets full TypeScript autocomplete
102
+ * and validation.
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * import { plugin } from "@myorg/my-plugin"
107
+ *
108
+ * export default defineConfig({
109
+ * plugins: [
110
+ * plugin.config({ apiKey: "sk-123" }),
111
+ * ],
112
+ * })
113
+ * ```
114
+ */
115
+ config: (options: OptionsInput<TSchema>) => PluginConfigEntry<OptionsInput<TSchema>>;
116
+ };
117
+ /**
118
+ * Resolve a plugin's options from the container by plugin name.
119
+ * Works in any context that has access to the container.
120
+ *
121
+ * @example
122
+ * ```ts
123
+ * import { resolvePluginOptions } from "@acmekit/framework/utils"
124
+ *
125
+ * const options = resolvePluginOptions(container, "@myorg/analytics")
126
+ * ```
127
+ */
128
+ export declare function resolvePluginOptions<T extends Record<string, unknown> = Record<string, unknown>>(container: any, pluginName: string): T;
129
+ /**
130
+ * Defines a plugin manifest. Provides type checking, a known
131
+ * export shape for the plugin resolver, and bound
132
+ * `resolveOptions(container)` and `config(options)` methods.
133
+ *
134
+ * Create a `src/plugin.ts` file in your plugin project and
135
+ * export the result as a named export.
136
+ *
137
+ * @example
138
+ * ```ts
139
+ * import { definePlugin } from "@acmekit/framework/utils"
140
+ * import { z } from "zod"
141
+ *
142
+ * export const plugin = definePlugin({
143
+ * name: "@myorg/reviews-plugin",
144
+ * dependencies: ["@acmekit/product-plugin"],
145
+ * optionsSchema: z.object({
146
+ * apiKey: z.string().min(1),
147
+ * }),
148
+ * onPluginStart: async (container) => {
149
+ * const options = plugin.resolveOptions(container)
150
+ * },
151
+ * })
152
+ * ```
153
+ */
154
+ export declare function definePlugin<TSchema extends ZodType<any> = ZodType<any>>(manifest: PluginManifest<TSchema>): ResolvedPluginManifest<TSchema>;
155
+ export {};
156
+ //# sourceMappingURL=define-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-plugin.d.ts","sourceRoot":"","sources":["../../src/common/define-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAGlC;;GAEG;AACH,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,GACvD,CAAC,GACD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE3B;;GAEG;AACH,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEhF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IAClE,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,QAAQ,CAAA;CAClB,CAAA;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO,SAAS,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IACzE;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IAEvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAEjD;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACrD;AAED;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,CAChC,OAAO,SAAS,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IACzC,cAAc,CAAC,OAAO,CAAC,GAAG;IAC5B;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,CAAA;IAEjE;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;CACrF,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3D,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,CAIvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAS,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EACtE,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,GAChC,sBAAsB,CAAC,OAAO,CAAC,CAgBjC"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolvePluginOptions = resolvePluginOptions;
4
+ exports.definePlugin = definePlugin;
5
+ const container_1 = require("./container");
6
+ /**
7
+ * Resolve a plugin's options from the container by plugin name.
8
+ * Works in any context that has access to the container.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { resolvePluginOptions } from "@acmekit/framework/utils"
13
+ *
14
+ * const options = resolvePluginOptions(container, "@myorg/analytics")
15
+ * ```
16
+ */
17
+ function resolvePluginOptions(container, pluginName) {
18
+ return container.resolve(`${container_1.ContainerRegistrationKeys.PLUGIN_OPTIONS}_${pluginName}`);
19
+ }
20
+ /**
21
+ * Defines a plugin manifest. Provides type checking, a known
22
+ * export shape for the plugin resolver, and bound
23
+ * `resolveOptions(container)` and `config(options)` methods.
24
+ *
25
+ * Create a `src/plugin.ts` file in your plugin project and
26
+ * export the result as a named export.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * import { definePlugin } from "@acmekit/framework/utils"
31
+ * import { z } from "zod"
32
+ *
33
+ * export const plugin = definePlugin({
34
+ * name: "@myorg/reviews-plugin",
35
+ * dependencies: ["@acmekit/product-plugin"],
36
+ * optionsSchema: z.object({
37
+ * apiKey: z.string().min(1),
38
+ * }),
39
+ * onPluginStart: async (container) => {
40
+ * const options = plugin.resolveOptions(container)
41
+ * },
42
+ * })
43
+ * ```
44
+ */
45
+ function definePlugin(manifest) {
46
+ return {
47
+ ...manifest,
48
+ resolveOptions(container) {
49
+ return resolvePluginOptions(container, manifest.name);
50
+ },
51
+ config(options) {
52
+ return {
53
+ resolve: manifest.name,
54
+ options,
55
+ };
56
+ },
57
+ };
58
+ }
59
+ //# sourceMappingURL=define-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-plugin.js","sourceRoot":"","sources":["../../src/common/define-plugin.ts"],"names":[],"mappings":";;AAiJA,oDAMC;AA2BD,oCAkBC;AAnMD,2CAAuD;AAqIvD;;;;;;;;;;GAUG;AACH,SAAgB,oBAAoB,CAElC,SAAc,EAAE,UAAkB;IAClC,OAAO,SAAS,CAAC,OAAO,CACtB,GAAG,qCAAyB,CAAC,cAAc,IAAI,UAAU,EAAE,CAC5D,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAgB,YAAY,CAC1B,QAAiC;IAEjC,OAAO;QACL,GAAG,QAAQ;QACX,cAAc,CAA6B,SAAc;YACvD,OAAO,oBAAoB,CACzB,SAAS,EACT,QAAQ,CAAC,IAAI,CACd,CAAA;QACH,CAAC;QACD,MAAM,CAAC,OAA8B;YACnC,OAAO;gBACL,OAAO,EAAE,QAAQ,CAAC,IAAI;gBACtB,OAAO;aACR,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-resolved-plugins.d.ts","sourceRoot":"","sources":["../../src/common/get-resolved-plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAU5D,eAAO,MAAM,oBAAoB,mBAAmB,CAAA;AAoHpD,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,YAAY,EAC1B,gBAAgB,UAAQ,GACvB,OAAO,CAAC,aAAa,EAAE,CAAC,CA0B1B"}
1
+ {"version":3,"file":"get-resolved-plugins.d.ts","sourceRoot":"","sources":["../../src/common/get-resolved-plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAY5D,eAAO,MAAM,oBAAoB,mBAAmB,CAAA;AAuJpD,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,YAAY,EAC1B,gBAAgB,UAAQ,GACvB,OAAO,CAAC,aAAa,EAAE,CAAC,CA0C1B"}
@@ -8,6 +8,7 @@ exports.getResolvedPlugins = getResolvedPlugins;
8
8
  const promises_1 = __importDefault(require("fs/promises"));
9
9
  const path_1 = __importDefault(require("path"));
10
10
  const is_string_1 = require("./is-string");
11
+ const plugin_dependency_graph_1 = require("./plugin-dependency-graph");
11
12
  const read_dir_recursive_1 = require("./read-dir-recursive");
12
13
  const ACMEKIT_APP_SOURCE_PATH = "src";
13
14
  const ACMEKIT_PLUGIN_SOURCE_PATH = ".acmekit/server/src";
@@ -54,6 +55,20 @@ async function resolvePluginOptions(pluginRootDir) {
54
55
  throw error;
55
56
  }
56
57
  }
58
+ /**
59
+ * Attempts to load a plugin manifest from the plugin's built
60
+ * output directory. Returns undefined if no manifest exists.
61
+ */
62
+ async function loadPluginManifest(pluginRootDir) {
63
+ try {
64
+ const manifestPath = require.resolve(path_1.default.join(pluginRootDir, ACMEKIT_PLUGIN_SOURCE_PATH, "plugin"));
65
+ const mod = require(manifestPath);
66
+ return mod.default || mod.plugin || mod;
67
+ }
68
+ catch {
69
+ return undefined;
70
+ }
71
+ }
57
72
  /**
58
73
  * Finds the correct path for the plugin. If it is a local plugin it will be
59
74
  * found in the plugins folder. Otherwise we will look for the plugin in the
@@ -72,6 +87,15 @@ async function resolvePlugin(rootDirectory, pluginPath, options) {
72
87
  ignoreMissing: true,
73
88
  });
74
89
  const pluginOptions = options ?? {};
90
+ // Load plugin manifest if it exists
91
+ const manifest = await loadPluginManifest(resolvedPath);
92
+ // Validate options against manifest schema if provided
93
+ if (manifest?.optionsSchema && Object.keys(pluginOptions).length > 0) {
94
+ const result = manifest.optionsSchema.safeParse(pluginOptions);
95
+ if (!result.success) {
96
+ throw new Error(`Invalid options for plugin "${name}": ${result.error.message}`);
97
+ }
98
+ }
75
99
  const hasAdmin = !!pkgJSON.contents.exports?.["./admin"] || !!pluginStaticOptions.srcDir;
76
100
  const pluginAdminSrcDir = path_1.default.join(resolvedPath, "src", "admin");
77
101
  const hasLocalAdminSrc = hasAdmin &&
@@ -99,6 +123,10 @@ async function resolvePlugin(rootDirectory, pluginPath, options) {
99
123
  options: pluginOptions,
100
124
  };
101
125
  }),
126
+ dependencies: manifest?.dependencies,
127
+ manifest: manifest,
128
+ onPluginStart: manifest?.onPluginStart,
129
+ onPluginShutdown: manifest?.onPluginShutdown,
102
130
  };
103
131
  }
104
132
  async function getResolvedPlugins(rootDirectory, configModule, isAcmeKitProject = false) {
@@ -108,6 +136,21 @@ async function getResolvedPlugins(rootDirectory, configModule, isAcmeKitProject
108
136
  }
109
137
  return resolvePlugin(rootDirectory, plugin.resolve, plugin.options);
110
138
  }));
139
+ // Sort plugins by dependency order if any plugin declares dependencies
140
+ const hasDeps = resolved.some((p) => p.dependencies?.length);
141
+ if (hasDeps) {
142
+ const nodes = resolved.map((p) => ({
143
+ name: p.name,
144
+ dependencies: p.dependencies ?? [],
145
+ }));
146
+ const { sorted } = (0, plugin_dependency_graph_1.resolvePluginDependencies)(nodes);
147
+ const byName = new Map(resolved.map((p) => [p.name, p]));
148
+ const sortedPlugins = sorted
149
+ .map((name) => byName.get(name))
150
+ .filter(Boolean);
151
+ resolved.length = 0;
152
+ resolved.push(...sortedPlugins);
153
+ }
111
154
  if (isAcmeKitProject) {
112
155
  const extensionDirectory = path_1.default.join(rootDirectory, ACMEKIT_APP_SOURCE_PATH);
113
156
  resolved.push({
@@ -1 +1 @@
1
- {"version":3,"file":"get-resolved-plugins.js","sourceRoot":"","sources":["../../src/common/get-resolved-plugins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-resolved-plugins.js","sourceRoot":"","sources":["../../src/common/get-resolved-plugins.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,8 @@ export * from "./deep-equal-obj";
15
15
  export * from "./deep-flat-map";
16
16
  export * from "./deep-merge";
17
17
  export * from "./define-config";
18
+ export * from "./define-plugin";
19
+ export * from "./plugin-dependency-graph";
18
20
  export * from "./define-file-config";
19
21
  export * from "./dynamic-import";
20
22
  export * from "./env-editor";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,8 @@ __exportStar(require("./deep-equal-obj"), exports);
31
31
  __exportStar(require("./deep-flat-map"), exports);
32
32
  __exportStar(require("./deep-merge"), exports);
33
33
  __exportStar(require("./define-config"), exports);
34
+ __exportStar(require("./define-plugin"), exports);
35
+ __exportStar(require("./plugin-dependency-graph"), exports);
34
36
  __exportStar(require("./define-file-config"), exports);
35
37
  __exportStar(require("./dynamic-import"), exports);
36
38
  __exportStar(require("./env-editor"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAsC;AACtC,qDAAkC;AAClC,uDAAoC;AACpC,gDAA6B;AAC7B,0DAAuC;AACvC,wDAAqC;AACrC,kDAA+B;AAC/B,8CAA2B;AAC3B,4EAAyD;AACzD,0DAAuC;AACvC,6DAA0C;AAC1C,gDAA6B;AAC7B,8CAA2B;AAC3B,mDAAgC;AAChC,kDAA+B;AAC/B,+CAA4B;AAC5B,kDAA+B;AAC/B,uDAAoC;AACpC,mDAAgC;AAChC,+CAA4B;AAC5B,2CAAwB;AACxB,6DAA0C;AAC1C,gDAA6B;AAC7B,0DAAuC;AACvC,wDAAqC;AACrC,sEAAmD;AACnD,uDAAoC;AACpC,yDAAsC;AACtC,oDAAiC;AACjC,mDAAgC;AAChC,6DAA0C;AAC1C,qDAAkC;AAClC,yDAAsC;AACtC,gFAA6D;AAC7D,uDAAoC;AACpC,6DAA0C;AAC1C,6CAA0B;AAC1B,mEAAgD;AAChD,kDAA+B;AAC/B,+CAA4B;AAC5B,4CAAyB;AACzB,+CAA4B;AAC5B,6CAA0B;AAC1B,kDAA+B;AAC/B,8CAA2B;AAC3B,+CAA4B;AAC5B,8CAA2B;AAC3B,8CAA2B;AAC3B,6CAA0B;AAC1B,qDAAkC;AAClC,kDAA+B;AAC/B,sDAAmC;AACnC,mDAAgC;AAChC,yDAAsC;AACtC,wDAAqC;AACrC,sEAAmD;AACnD,qDAAkC;AAClC,4DAAyC;AACzC,0DAAuC;AACvC,8CAA2B;AAC3B,gEAA6C;AAC7C,uDAAoC;AACpC,iEAA8C;AAC9C,oDAAiC;AACjC,8CAA2B;AAC3B,2DAAwC;AACxC,8CAA2B;AAC3B,uDAAoC;AACpC,gDAA6B;AAC7B,uDAAoC;AACpC,oEAAiD;AACjD,kEAA+C;AAC/C,oDAAiC;AACjC,qDAAkC;AAClC,gEAA6C;AAC7C,oDAAiC;AACjC,oDAAiC;AACjC,0CAAuB;AACvB,mEAAgD;AAChD,oDAAiC;AACjC,gDAA6B;AAC7B,qEAAkD;AAClD,uDAAoC;AACpC,kDAA+B;AAC/B,8CAA2B;AAC3B,kDAA+B;AAC/B,mDAAgC;AAChC,kDAA+B;AAC/B,kDAA+B;AAC/B,+CAA4B;AAC5B,2DAAwC;AACxC,0DAAuC;AACvC,0DAAuC;AACvC,qDAAkC;AAClC,oDAAiC;AACjC,yDAAsC;AACtC,iDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAsC;AACtC,qDAAkC;AAClC,uDAAoC;AACpC,gDAA6B;AAC7B,0DAAuC;AACvC,wDAAqC;AACrC,kDAA+B;AAC/B,8CAA2B;AAC3B,4EAAyD;AACzD,0DAAuC;AACvC,6DAA0C;AAC1C,gDAA6B;AAC7B,8CAA2B;AAC3B,mDAAgC;AAChC,kDAA+B;AAC/B,+CAA4B;AAC5B,kDAA+B;AAC/B,kDAA+B;AAC/B,4DAAyC;AACzC,uDAAoC;AACpC,mDAAgC;AAChC,+CAA4B;AAC5B,2CAAwB;AACxB,6DAA0C;AAC1C,gDAA6B;AAC7B,0DAAuC;AACvC,wDAAqC;AACrC,sEAAmD;AACnD,uDAAoC;AACpC,yDAAsC;AACtC,oDAAiC;AACjC,mDAAgC;AAChC,6DAA0C;AAC1C,qDAAkC;AAClC,yDAAsC;AACtC,gFAA6D;AAC7D,uDAAoC;AACpC,6DAA0C;AAC1C,6CAA0B;AAC1B,mEAAgD;AAChD,kDAA+B;AAC/B,+CAA4B;AAC5B,4CAAyB;AACzB,+CAA4B;AAC5B,6CAA0B;AAC1B,kDAA+B;AAC/B,8CAA2B;AAC3B,+CAA4B;AAC5B,8CAA2B;AAC3B,8CAA2B;AAC3B,6CAA0B;AAC1B,qDAAkC;AAClC,kDAA+B;AAC/B,sDAAmC;AACnC,mDAAgC;AAChC,yDAAsC;AACtC,wDAAqC;AACrC,sEAAmD;AACnD,qDAAkC;AAClC,4DAAyC;AACzC,0DAAuC;AACvC,8CAA2B;AAC3B,gEAA6C;AAC7C,uDAAoC;AACpC,iEAA8C;AAC9C,oDAAiC;AACjC,8CAA2B;AAC3B,2DAAwC;AACxC,8CAA2B;AAC3B,uDAAoC;AACpC,gDAA6B;AAC7B,uDAAoC;AACpC,oEAAiD;AACjD,kEAA+C;AAC/C,oDAAiC;AACjC,qDAAkC;AAClC,gEAA6C;AAC7C,oDAAiC;AACjC,oDAAiC;AACjC,0CAAuB;AACvB,mEAAgD;AAChD,oDAAiC;AACjC,gDAA6B;AAC7B,qEAAkD;AAClD,uDAAoC;AACpC,kDAA+B;AAC/B,8CAA2B;AAC3B,kDAA+B;AAC/B,mDAAgC;AAChC,kDAA+B;AAC/B,kDAA+B;AAC/B,+CAA4B;AAC5B,2DAAwC;AACxC,0DAAuC;AACvC,0DAAuC;AACvC,qDAAkC;AAClC,oDAAiC;AACjC,yDAAsC;AACtC,iDAA8B"}
@@ -1 +1 @@
1
- {"version":3,"file":"merge-plugin-modules.d.ts","sourceRoot":"","sources":["../../src/common/merge-plugin-modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAEb,MAAM,gBAAgB,CAAA;AAGvB;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,aAAa,EAAE,QAqBzB"}
1
+ {"version":3,"file":"merge-plugin-modules.d.ts","sourceRoot":"","sources":["../../src/common/merge-plugin-modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAEb,MAAM,gBAAgB,CAAA;AAGvB;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,aAAa,EAAE,QAuCzB"}
@@ -7,12 +7,27 @@ const define_config_1 = require("./define-config");
7
7
  * the modules defined inside the user-config file
8
8
  */
9
9
  function mergePluginModules(configModule, plugins) {
10
+ /**
11
+ * Track which plugin provides which module to detect conflicts
12
+ */
13
+ const moduleOwnership = new Map();
10
14
  /**
11
15
  * Create a flat array of all the modules exposed by the registered
12
16
  * plugins
13
17
  */
14
18
  const pluginsModules = plugins.reduce((result, plugin) => {
15
19
  if (plugin.modules) {
20
+ for (const mod of plugin.modules) {
21
+ const key = mod.resolve ?? "";
22
+ if (key && moduleOwnership.has(key)) {
23
+ console.warn(`[acmekit] Module "${key}" is provided by both ` +
24
+ `"${moduleOwnership.get(key)}" and "${plugin.name}". ` +
25
+ `The last one takes precedence.`);
26
+ }
27
+ if (key) {
28
+ moduleOwnership.set(key, plugin.name);
29
+ }
30
+ }
16
31
  result = result.concat(plugin.modules);
17
32
  }
18
33
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"merge-plugin-modules.js","sourceRoot":"","sources":["../../src/common/merge-plugin-modules.ts"],"names":[],"mappings":";;AAWA,gDAuBC;AA7BD,mDAAkD;AAElD;;;GAGG;AACH,SAAgB,kBAAkB,CAChC,YAA0B,EAC1B,OAAwB;IAExB;;;OAGG;IACH,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QACvD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC,EAAE,EAAwB,CAAC,CAAA;IAE5B;;;OAGG;IACH,YAAY,CAAC,OAAO,GAAG;QACrB,GAAG,IAAA,gCAAgB,EAAC,cAAc,CAAC;QACnC,GAAG,YAAY,CAAC,OAAO;KACxB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"merge-plugin-modules.js","sourceRoot":"","sources":["../../src/common/merge-plugin-modules.ts"],"names":[],"mappings":";;AAWA,gDAyCC;AA/CD,mDAAkD;AAElD;;;GAGG;AACH,SAAgB,kBAAkB,CAChC,YAA0B,EAC1B,OAAwB;IAExB;;OAEG;IACH,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEjD;;;OAGG;IACH,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QACvD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAgB,EAAE,CAAC;gBAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAA;gBAC7B,IAAI,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,IAAI,CACV,qBAAqB,GAAG,wBAAwB;wBAC9C,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,IAAI,KAAK;wBACtD,gCAAgC,CACnC,CAAA;gBACH,CAAC;gBACD,IAAI,GAAG,EAAE,CAAC;oBACR,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;gBACvC,CAAC;YACH,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC,EAAE,EAAwB,CAAC,CAAA;IAE5B;;;OAGG;IACH,YAAY,CAAC,OAAO,GAAG;QACrB,GAAG,IAAA,gCAAgB,EAAC,cAAc,CAAC;QACnC,GAAG,YAAY,CAAC,OAAO;KACxB,CAAA;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface PluginNode {
2
+ name: string;
3
+ dependencies: string[];
4
+ }
5
+ export interface DependencyResolutionResult {
6
+ /** Plugins sorted in dependency order (dependencies first) */
7
+ sorted: string[];
8
+ }
9
+ /**
10
+ * Resolves plugin load order using topological sort (Kahn's algorithm).
11
+ * Returns plugins in dependency-first order so that when a plugin loads,
12
+ * all its dependencies have already been loaded.
13
+ *
14
+ * @throws {AcmeKitError} If a plugin depends on a plugin that isn't installed
15
+ * @throws {AcmeKitError} If a circular dependency is detected
16
+ */
17
+ export declare function resolvePluginDependencies(plugins: PluginNode[]): DependencyResolutionResult;
18
+ //# sourceMappingURL=plugin-dependency-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-dependency-graph.d.ts","sourceRoot":"","sources":["../../src/common/plugin-dependency-graph.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,0BAA0B;IACzC,8DAA8D;IAC9D,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,UAAU,EAAE,GACpB,0BAA0B,CA8D5B"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolvePluginDependencies = resolvePluginDependencies;
4
+ const errors_1 = require("./errors");
5
+ /**
6
+ * Resolves plugin load order using topological sort (Kahn's algorithm).
7
+ * Returns plugins in dependency-first order so that when a plugin loads,
8
+ * all its dependencies have already been loaded.
9
+ *
10
+ * @throws {AcmeKitError} If a plugin depends on a plugin that isn't installed
11
+ * @throws {AcmeKitError} If a circular dependency is detected
12
+ */
13
+ function resolvePluginDependencies(plugins) {
14
+ const nameSet = new Set(plugins.map((p) => p.name));
15
+ const adjacency = new Map();
16
+ const inDegree = new Map();
17
+ // Initialize
18
+ for (const plugin of plugins) {
19
+ adjacency.set(plugin.name, new Set());
20
+ inDegree.set(plugin.name, 0);
21
+ }
22
+ // Build edges: dependency -> dependent
23
+ for (const plugin of plugins) {
24
+ const deps = plugin.dependencies ?? [];
25
+ for (const dep of deps) {
26
+ if (!nameSet.has(dep)) {
27
+ throw new errors_1.AcmeKitError(errors_1.AcmeKitError.Types.INVALID_DATA, `Plugin "${plugin.name}" depends on "${dep}" which is not installed. ` +
28
+ `Add it to your plugins array in acmekit-config.ts.`);
29
+ }
30
+ adjacency.get(dep).add(plugin.name);
31
+ inDegree.set(plugin.name, (inDegree.get(plugin.name) ?? 0) + 1);
32
+ }
33
+ }
34
+ // Kahn's algorithm — find all nodes with no incoming edges
35
+ const queue = [];
36
+ for (const [name, degree] of inDegree) {
37
+ if (degree === 0) {
38
+ queue.push(name);
39
+ }
40
+ }
41
+ const sorted = [];
42
+ while (queue.length > 0) {
43
+ const current = queue.shift();
44
+ sorted.push(current);
45
+ for (const dependent of adjacency.get(current) ?? []) {
46
+ const newDegree = inDegree.get(dependent) - 1;
47
+ inDegree.set(dependent, newDegree);
48
+ if (newDegree === 0) {
49
+ queue.push(dependent);
50
+ }
51
+ }
52
+ }
53
+ if (sorted.length !== plugins.length) {
54
+ const remaining = plugins
55
+ .filter((p) => !sorted.includes(p.name))
56
+ .map((p) => p.name);
57
+ throw new errors_1.AcmeKitError(errors_1.AcmeKitError.Types.INVALID_DATA, `Circular plugin dependency detected involving: ${remaining.join(", ")}. ` +
58
+ `Review your plugin dependencies and remove the cycle.`);
59
+ }
60
+ return { sorted };
61
+ }
62
+ //# sourceMappingURL=plugin-dependency-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-dependency-graph.js","sourceRoot":"","sources":["../../src/common/plugin-dependency-graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Base class for all module providers. Domain-specific provider abstracts
3
+ * (e.g., AbstractFileProviderService, AbstractNotificationProviderService)
4
+ * can extend this to inherit standardized container/options handling.
5
+ *
6
+ * Provider authors extend their domain-specific abstract, which in turn
7
+ * extends this class.
8
+ *
9
+ * @typeParam TConfig - Shape of the provider options object passed via
10
+ * acmekit-config.ts. Defaults to Record<string, unknown>.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * class MyPaymentProvider extends AbstractModuleProvider<{ apiKey: string }> {
15
+ * static identifier = "my-payment"
16
+ *
17
+ * static validateOptions(options: Record<string, unknown>) {
18
+ * if (!options.apiKey) {
19
+ * throw new Error("apiKey is required")
20
+ * }
21
+ * }
22
+ *
23
+ * constructor(cradle, options) {
24
+ * super(cradle, options)
25
+ * // this.options_ is typed as { apiKey: string }
26
+ * }
27
+ * }
28
+ * ```
29
+ */
30
+ export declare abstract class AbstractModuleProvider<TConfig = Record<string, unknown>> {
31
+ /**
32
+ * Unique identifier for this provider class. Used as part of the container
33
+ * registration key. Must be set as a static property on every concrete
34
+ * provider class.
35
+ */
36
+ static identifier: string;
37
+ /**
38
+ * Override to control the awilix lifetime of this provider's registration.
39
+ * Defaults to Lifetime.SINGLETON in the loader if not set.
40
+ */
41
+ static LIFE_TIME?: import("awilix").LifetimeType;
42
+ /**
43
+ * Override to validate the provider options at startup. Throw an error
44
+ * (preferably AcmeKitError) if validation fails.
45
+ *
46
+ * Called by the framework during provider loading, before instantiation.
47
+ *
48
+ * @param options - The options from acmekit-config.ts
49
+ */
50
+ static validateOptions?(options: Record<string, unknown>): void | never;
51
+ /**
52
+ * The module's dependency injection container (awilix cradle).
53
+ */
54
+ protected readonly container_: Record<string, unknown>;
55
+ /**
56
+ * The provider options from acmekit-config.ts, typed as TConfig.
57
+ */
58
+ protected readonly options_: TConfig;
59
+ protected constructor(cradle: Record<string, unknown>, options?: TConfig);
60
+ /**
61
+ * Returns the static identifier of this provider's class.
62
+ */
63
+ getIdentifier(): string;
64
+ }
65
+ //# sourceMappingURL=abstract-module-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-module-provider.d.ts","sourceRoot":"","sources":["../../src/modules-sdk/abstract-module-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,8BAAsB,sBAAsB,CAC1C,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEjC;;;;OAIG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,CAAA;IAEzB;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,QAAQ,EAAE,YAAY,CAAA;IAEhD;;;;;;;OAOG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,KAAK;IAEvE;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAEtD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAEpC,SAAS,aAAa,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO;IAKxE;;OAEG;IACH,aAAa,IAAI,MAAM;CAGxB"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractModuleProvider = void 0;
4
+ /**
5
+ * Base class for all module providers. Domain-specific provider abstracts
6
+ * (e.g., AbstractFileProviderService, AbstractNotificationProviderService)
7
+ * can extend this to inherit standardized container/options handling.
8
+ *
9
+ * Provider authors extend their domain-specific abstract, which in turn
10
+ * extends this class.
11
+ *
12
+ * @typeParam TConfig - Shape of the provider options object passed via
13
+ * acmekit-config.ts. Defaults to Record<string, unknown>.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * class MyPaymentProvider extends AbstractModuleProvider<{ apiKey: string }> {
18
+ * static identifier = "my-payment"
19
+ *
20
+ * static validateOptions(options: Record<string, unknown>) {
21
+ * if (!options.apiKey) {
22
+ * throw new Error("apiKey is required")
23
+ * }
24
+ * }
25
+ *
26
+ * constructor(cradle, options) {
27
+ * super(cradle, options)
28
+ * // this.options_ is typed as { apiKey: string }
29
+ * }
30
+ * }
31
+ * ```
32
+ */
33
+ class AbstractModuleProvider {
34
+ constructor(cradle, options) {
35
+ this.container_ = cradle;
36
+ this.options_ = (options ?? {});
37
+ }
38
+ /**
39
+ * Returns the static identifier of this provider's class.
40
+ */
41
+ getIdentifier() {
42
+ return this.constructor.identifier;
43
+ }
44
+ }
45
+ exports.AbstractModuleProvider = AbstractModuleProvider;
46
+ //# sourceMappingURL=abstract-module-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-module-provider.js","sourceRoot":"","sources":["../../src/modules-sdk/abstract-module-provider.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAsB,sBAAsB;IAoC1C,YAAsB,MAA+B,EAAE,OAAiB;QACtE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAA;QACxB,IAAI,CAAC,QAAQ,GAAG,CAAC,OAAO,IAAI,EAAE,CAAY,CAAA;IAC5C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAQ,IAAI,CAAC,WAA6C,CAAC,UAAU,CAAA;IACvE,CAAC;CACF;AA/CD,wDA+CC"}
@@ -19,6 +19,9 @@ export * from "./mikro-orm-cli-config-builder";
19
19
  export * from "./module";
20
20
  export * from "./module-provider";
21
21
  export * from "./module-provider-registration-key";
22
+ export * from "./abstract-module-provider";
23
+ export * from "./provider-registry";
24
+ export * from "./provider-service";
22
25
  export * from "./modules-to-container-types";
23
26
  export * from "./policy-to-types";
24
27
  export * from "./query-context";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modules-sdk/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,6CAA6C,CAAA;AAC3D,cAAc,wBAAwB,CAAA;AACtC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,oCAAoC,CAAA;AAClD,cAAc,uBAAuB,CAAA;AACrC,cAAc,uCAAuC,CAAA;AACrD,cAAc,+CAA+C,CAAA;AAC7D,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA;AACjC,cAAc,oCAAoC,CAAA;AAClD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modules-sdk/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,6CAA6C,CAAA;AAC3D,cAAc,wBAAwB,CAAA;AACtC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,oCAAoC,CAAA;AAClD,cAAc,uBAAuB,CAAA;AACrC,cAAc,uCAAuC,CAAA;AACrD,cAAc,+CAA+C,CAAA;AAC7D,cAAc,4BAA4B,CAAA;AAC1C,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA;AACjC,cAAc,oCAAoC,CAAA;AAClD,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA"}
@@ -35,6 +35,9 @@ __exportStar(require("./mikro-orm-cli-config-builder"), exports);
35
35
  __exportStar(require("./module"), exports);
36
36
  __exportStar(require("./module-provider"), exports);
37
37
  __exportStar(require("./module-provider-registration-key"), exports);
38
+ __exportStar(require("./abstract-module-provider"), exports);
39
+ __exportStar(require("./provider-registry"), exports);
40
+ __exportStar(require("./provider-service"), exports);
38
41
  __exportStar(require("./modules-to-container-types"), exports);
39
42
  __exportStar(require("./policy-to-types"), exports);
40
43
  __exportStar(require("./query-context"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules-sdk/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,8EAA2D;AAC3D,yDAAsC;AACtC,+CAA4B;AAC5B,gDAA6B;AAC7B,oDAAiC;AACjC,+CAA4B;AAC5B,0DAAuC;AACvC,0DAAuC;AACvC,gEAA6C;AAC7C,qEAAkD;AAClD,wDAAqC;AACrC,wEAAqD;AACrD,gFAA6D;AAC7D,6DAA0C;AAC1C,oDAAiC;AACjC,sDAAmC;AACnC,iEAA8C;AAC9C,2CAAwB;AACxB,oDAAiC;AACjC,qEAAkD;AAClD,+DAA4C;AAC5C,oDAAiC;AACjC,kDAA+B;AAC/B,uDAAoC;AACpC,0DAAuC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules-sdk/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,8EAA2D;AAC3D,yDAAsC;AACtC,+CAA4B;AAC5B,gDAA6B;AAC7B,oDAAiC;AACjC,+CAA4B;AAC5B,0DAAuC;AACvC,0DAAuC;AACvC,gEAA6C;AAC7C,qEAAkD;AAClD,wDAAqC;AACrC,wEAAqD;AACrD,gFAA6D;AAC7D,6DAA0C;AAC1C,oDAAiC;AACjC,sDAAmC;AACnC,iEAA8C;AAC9C,2CAAwB;AACxB,oDAAiC;AACjC,qEAAkD;AAClD,6DAA0C;AAC1C,sDAAmC;AACnC,qDAAkC;AAClC,+DAA4C;AAC5C,oDAAiC;AACjC,kDAA+B;AAC/B,uDAAoC;AACpC,0DAAuC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * A typed registry for resolving module providers from the DI container.
3
+ *
4
+ * Replaces the duplicated retrieveProvider / retrieveProviderRegistration
5
+ * pattern found across caching, locking, auth, notification, file, and
6
+ * analytics modules.
7
+ *
8
+ * @typeParam T - The provider interface (e.g., ICachingProviderService)
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const registry = new ProviderRegistry<IFileProvider>(
13
+ * container, "fs_", "file_providers_identifier", "file"
14
+ * )
15
+ * const provider = registry.resolve("localfs_default")
16
+ * const all = registry.list()
17
+ * ```
18
+ */
19
+ export declare class ProviderRegistry<T> {
20
+ private readonly container_;
21
+ private readonly prefix_;
22
+ private readonly identifiersKey_;
23
+ private readonly moduleName_;
24
+ constructor(container_: Record<string, unknown>, prefix_: string, identifiersKey_: string, moduleName_: string);
25
+ /**
26
+ * Resolve a provider by its ID from the container.
27
+ *
28
+ * @param providerId - The provider ID (as registered in the container)
29
+ * @returns The resolved provider instance
30
+ * @throws AcmeKitError NOT_FOUND if the provider is not registered
31
+ */
32
+ resolve(providerId: string): T;
33
+ /**
34
+ * Returns all registered provider identifiers.
35
+ * Reads from the registerAdd list in the container.
36
+ */
37
+ list(): string[];
38
+ /**
39
+ * Check whether a provider with the given ID is registered.
40
+ */
41
+ has(providerId: string): boolean;
42
+ }
43
+ //# sourceMappingURL=provider-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-registry.d.ts","sourceRoot":"","sources":["../../src/modules-sdk/provider-registry.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,gBAAgB,CAAC,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAHX,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM;IAGtC;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC;IAqB9B;;;OAGG;IACH,IAAI,IAAI,MAAM,EAAE;IAYhB;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;CASjC"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProviderRegistry = void 0;
4
+ const common_1 = require("../common");
5
+ /**
6
+ * A typed registry for resolving module providers from the DI container.
7
+ *
8
+ * Replaces the duplicated retrieveProvider / retrieveProviderRegistration
9
+ * pattern found across caching, locking, auth, notification, file, and
10
+ * analytics modules.
11
+ *
12
+ * @typeParam T - The provider interface (e.g., ICachingProviderService)
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * const registry = new ProviderRegistry<IFileProvider>(
17
+ * container, "fs_", "file_providers_identifier", "file"
18
+ * )
19
+ * const provider = registry.resolve("localfs_default")
20
+ * const all = registry.list()
21
+ * ```
22
+ */
23
+ class ProviderRegistry {
24
+ constructor(container_, prefix_, identifiersKey_, moduleName_) {
25
+ this.container_ = container_;
26
+ this.prefix_ = prefix_;
27
+ this.identifiersKey_ = identifiersKey_;
28
+ this.moduleName_ = moduleName_;
29
+ }
30
+ /**
31
+ * Resolve a provider by its ID from the container.
32
+ *
33
+ * @param providerId - The provider ID (as registered in the container)
34
+ * @returns The resolved provider instance
35
+ * @throws AcmeKitError NOT_FOUND if the provider is not registered
36
+ */
37
+ resolve(providerId) {
38
+ const key = `${this.prefix_}${providerId}`;
39
+ try {
40
+ return this.container_[key];
41
+ }
42
+ catch (err) {
43
+ if (err.name === "AwilixResolutionError") {
44
+ throw new common_1.AcmeKitError(common_1.AcmeKitError.Types.NOT_FOUND, `Unable to retrieve the ${this.moduleName_} provider with id: ${providerId}. ` +
45
+ `Make sure the provider is registered in the container and configured correctly in your project configuration.`);
46
+ }
47
+ throw new common_1.AcmeKitError(common_1.AcmeKitError.Types.INVALID_DATA, `Unable to retrieve the ${this.moduleName_} provider with id: ${providerId}. ` +
48
+ `The following error occurred: ${err.message}`);
49
+ }
50
+ }
51
+ /**
52
+ * Returns all registered provider identifiers.
53
+ * Reads from the registerAdd list in the container.
54
+ */
55
+ list() {
56
+ try {
57
+ const identifiers = this.container_[this.identifiersKey_];
58
+ if (Array.isArray(identifiers)) {
59
+ return identifiers.filter(Boolean);
60
+ }
61
+ return [];
62
+ }
63
+ catch {
64
+ return [];
65
+ }
66
+ }
67
+ /**
68
+ * Check whether a provider with the given ID is registered.
69
+ */
70
+ has(providerId) {
71
+ const key = `${this.prefix_}${providerId}`;
72
+ try {
73
+ const val = this.container_[key];
74
+ return val !== undefined;
75
+ }
76
+ catch {
77
+ return false;
78
+ }
79
+ }
80
+ }
81
+ exports.ProviderRegistry = ProviderRegistry;
82
+ //# sourceMappingURL=provider-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../src/modules-sdk/provider-registry.ts"],"names":[],"mappings":";;;AAAA,sCAAwC;AAExC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAa,gBAAgB;IAC3B,YACmB,UAAmC,EACnC,OAAe,EACf,eAAuB,EACvB,WAAmB;QAHnB,eAAU,GAAV,UAAU,CAAyB;QACnC,YAAO,GAAP,OAAO,CAAQ;QACf,oBAAe,GAAf,eAAe,CAAQ;QACvB,gBAAW,GAAX,WAAW,CAAQ;IACnC,CAAC;IAEJ;;;;;;OAMG;IACH,OAAO,CAAC,UAAkB;QACxB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,UAAU,EAAE,CAAA;QAC1C,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAM,CAAA;QAClC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;gBACzC,MAAM,IAAI,qBAAY,CACpB,qBAAY,CAAC,KAAK,CAAC,SAAS,EAC5B,0BAA0B,IAAI,CAAC,WAAW,sBAAsB,UAAU,IAAI;oBAC5E,+GAA+G,CAClH,CAAA;YACH,CAAC;YAED,MAAM,IAAI,qBAAY,CACpB,qBAAY,CAAC,KAAK,CAAC,YAAY,EAC/B,0BAA0B,IAAI,CAAC,WAAW,sBAAsB,UAAU,IAAI;gBAC5E,iCAAiC,GAAG,CAAC,OAAO,EAAE,CACjD,CAAA;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;YACzD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/B,OAAO,WAAW,CAAC,MAAM,CAAC,OAAO,CAAa,CAAA;YAChD,CAAC;YACD,OAAO,EAAE,CAAA;QACX,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,UAAkB;QACpB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,UAAU,EAAE,CAAA;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YAChC,OAAO,GAAG,KAAK,SAAS,CAAA;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF;AAhED,4CAgEC"}
@@ -0,0 +1,35 @@
1
+ import { ProviderRegistry } from "./provider-registry";
2
+ export type ProviderServiceConfig = {
3
+ prefix: string;
4
+ identifiersKey: string;
5
+ moduleName: string;
6
+ };
7
+ /**
8
+ * Factory that returns a base class with `__container__` and a lazily-
9
+ * initialized `providers: ProviderRegistry<T>` already wired up.
10
+ *
11
+ * Mirrors the `AcmeKitService(Model)` pattern — extend the result and
12
+ * add your methods without any container boilerplate.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import { ProviderService } from "@acmekit/framework/utils"
17
+ *
18
+ * class CacheProviderService extends ProviderService<ICachingProvider>({
19
+ * prefix: "cp_",
20
+ * identifiersKey: "caching_providers_identifier",
21
+ * moduleName: "caching",
22
+ * }) {
23
+ * retrieve(id: string) {
24
+ * return this.providers.resolve(id)
25
+ * }
26
+ * }
27
+ * ```
28
+ */
29
+ export declare function ProviderService<T>(config: ProviderServiceConfig): {
30
+ new (container: Record<string, unknown>): {
31
+ readonly __container__: Record<string, unknown>;
32
+ readonly providers: ProviderRegistry<T>;
33
+ };
34
+ };
35
+ //# sourceMappingURL=provider-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-service.d.ts","sourceRoot":"","sources":["../../src/modules-sdk/provider-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEtD,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,qBAAqB,GAsBhB;IAC5C,KAAK,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC/C,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;KACxC,CAAA;CACF,CACF"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProviderService = ProviderService;
4
+ const provider_registry_1 = require("./provider-registry");
5
+ /**
6
+ * Factory that returns a base class with `__container__` and a lazily-
7
+ * initialized `providers: ProviderRegistry<T>` already wired up.
8
+ *
9
+ * Mirrors the `AcmeKitService(Model)` pattern — extend the result and
10
+ * add your methods without any container boilerplate.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * import { ProviderService } from "@acmekit/framework/utils"
15
+ *
16
+ * class CacheProviderService extends ProviderService<ICachingProvider>({
17
+ * prefix: "cp_",
18
+ * identifiersKey: "caching_providers_identifier",
19
+ * moduleName: "caching",
20
+ * }) {
21
+ * retrieve(id: string) {
22
+ * return this.providers.resolve(id)
23
+ * }
24
+ * }
25
+ * ```
26
+ */
27
+ function ProviderService(config) {
28
+ class AbstractProviderService_ {
29
+ get providers() {
30
+ if (!this.__providers__) {
31
+ this.__providers__ = new provider_registry_1.ProviderRegistry(this.__container__, config.prefix, config.identifiersKey, config.moduleName);
32
+ }
33
+ return this.__providers__;
34
+ }
35
+ constructor(container) {
36
+ this.__container__ = container;
37
+ }
38
+ }
39
+ return AbstractProviderService_;
40
+ }
41
+ //# sourceMappingURL=provider-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-service.js","sourceRoot":"","sources":["../../src/modules-sdk/provider-service.ts"],"names":[],"mappings":";;AA8BA,0CA4BC;AA1DD,2DAAsD;AAQtD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,eAAe,CAAI,MAA6B;IAC9D,MAAM,wBAAwB;QAI5B,IAAI,SAAS;YACX,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxB,IAAI,CAAC,aAAa,GAAG,IAAI,oCAAgB,CACvC,IAAI,CAAC,aAAa,EAClB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,UAAU,CAClB,CAAA;YACH,CAAC;YACD,OAAO,IAAI,CAAC,aAAa,CAAA;QAC3B,CAAC;QAED,YAAY,SAAkC;YAC5C,IAAI,CAAC,aAAa,GAAG,SAAS,CAAA;QAChC,CAAC;KACF;IAED,OAAO,wBAKN,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"root":["../src/bundles.ts","../src/index.ts","../src/analytics/abstract-analytics-provider.ts","../src/analytics/index.ts","../src/api-key/api-key-type.ts","../src/api-key/index.ts","../src/auth/abstract-auth-provider.ts","../src/auth/index.ts","../src/auth/token.ts","../src/caching/index.ts","../src/common/acmekit-container.ts","../src/common/alter-columns-helper.ts","../src/common/array-difference.ts","../src/common/array-intersection.ts","../src/common/build-query.ts","../src/common/build-regexp-if-valid.ts","../src/common/camel-to-snake-case.ts","../src/common/compress-name.ts","../src/common/container.ts","../src/common/convert-item-response-to-update-request.ts","../src/common/create-container-like.ts","../src/common/create-psql-index-helper.ts","../src/common/deduplicate.ts","../src/common/deep-copy.ts","../src/common/deep-equal-obj.ts","../src/common/deep-flat-map.ts","../src/common/deep-merge.ts","../src/common/define-config.ts","../src/common/define-file-config.ts","../src/common/dynamic-import.ts","../src/common/env-editor.ts","../src/common/errors.ts","../src/common/execute-with-concurrency.ts","../src/common/file-system.ts","../src/common/filter-object-by-keys.ts","../src/common/filter-operator-map.ts","../src/common/flatten-object-to-key-value-pairs.ts","../src/common/generate-entity-id.ts","../src/common/get-caller-file-path.ts","../src/common/get-config-file.ts","../src/common/get-duplicates.ts","../src/common/get-iso-string-from-date.ts","../src/common/get-node-version.ts","../src/common/get-resolved-plugins.ts","../src/common/get-selects-and-relations-from-object-array.ts","../src/common/get-set-difference.ts","../src/common/graceful-shutdown-server.ts","../src/common/group-by.ts","../src/common/handle-postgres-database-error.ts","../src/common/index.ts","../src/common/is-big-number.ts","../src/common/is-boolean.ts","../src/common/is-date.ts","../src/common/is-defined.ts","../src/common/is-email.ts","../src/common/is-error-like.ts","../src/common/is-object.ts","../src/common/is-present.ts","../src/common/is-string.ts","../src/common/is-truthy.ts","../src/common/load-env.ts","../src/common/lower-case-first.ts","../src/common/map-object-to.ts","../src/common/merge-metadata.ts","../src/common/merge-plugin-modules.ts","../src/common/normalize-csv-value.ts","../src/common/normalize-import-path-with-source.ts","../src/common/normalize-locale.ts","../src/common/object-from-string-path.ts","../src/common/object-to-string-path.ts","../src/common/omit-deep.ts","../src/common/optional-numeric-serializer.ts","../src/common/parse-cors-origins.ts","../src/common/parse-stringify-if-necessary.ts","../src/common/partition-array.ts","../src/common/pick-deep.ts","../src/common/pick-value-from-object.ts","../src/common/plurailze.ts","../src/common/prefix-array-items.ts","../src/common/promise-all.ts","../src/common/read-dir-recursive.ts","../src/common/remote-query-object-from-string.ts","../src/common/remote-query-object-to-string.ts","../src/common/remove-nullisih.ts","../src/common/remove-undefined-properties.ts","../src/common/remove-undefined.ts","../src/common/resolve-exports.ts","../src/common/retry-execution.ts","../src/common/rules.ts","../src/common/selector-constraints-to-string.ts","../src/common/serialize-error.ts","../src/common/simple-hash.ts","../src/common/string-to-select-relation-object.ts","../src/common/stringify-circular.ts","../src/common/to-camel-case.ts","../src/common/to-handle.ts","../src/common/to-kebab-case.ts","../src/common/to-pascal-case.ts","../src/common/to-snake-case.ts","../src/common/to-unix-slash.ts","../src/common/trim-zeros.ts","../src/common/try-convert-to-boolean.ts","../src/common/try-convert-to-number.ts","../src/common/unflatten-object-keys.ts","../src/common/upper-case-first.ts","../src/common/validate-handle.ts","../src/common/validate-module-name.ts","../src/common/wrap-handler.ts","../src/common/__fixtures__/define-config/github/index.ts","../src/common/__tests__/array-intersection.spec.ts","../src/common/__tests__/build-query.spec.ts","../src/common/__tests__/build-regexp-if-valid.spec.ts","../src/common/__tests__/compress-name.spec.ts","../src/common/__tests__/convert-item-response-to-update-request.ts","../src/common/__tests__/create-psql-index-helper.spec.ts","../src/common/__tests__/deep-copy.spec.ts","../src/common/__tests__/deep-equal-obj.spec.ts","../src/common/__tests__/deep-flat-map.ts","../src/common/__tests__/deep-merge.ts","../src/common/__tests__/define-config.spec.ts","../src/common/__tests__/env-editor.spec.ts","../src/common/__tests__/filter-object-by-keys.spec.ts","../src/common/__tests__/flatten-object-to-key-value-pairs.spec.ts","../src/common/__tests__/get-duplicates.spec.ts","../src/common/__tests__/get-resolved-plugins.spec.ts","../src/common/__tests__/get-selects-and-relations-from-object-array.spec.ts","../src/common/__tests__/graceful-shutdown-server.ts","../src/common/__tests__/group-by.spec.ts","../src/common/__tests__/handle-postgres-database-error.spec.ts","../src/common/__tests__/is-email.spec.ts","../src/common/__tests__/is-present.spec.ts","../src/common/__tests__/is-valid-handle.spec.ts","../src/common/__tests__/load-env.spec.ts","../src/common/__tests__/map-object-to.ts","../src/common/__tests__/merge-metadata.spec.ts","../src/common/__tests__/normalize-locale.spec.ts","../src/common/__tests__/object-to-string-path.spec.ts","../src/common/__tests__/omit-deep.spec.ts","../src/common/__tests__/parse-cors-origins.spec.ts","../src/common/__tests__/partition-array.spec.ts","../src/common/__tests__/pick-value-from-object.spec.ts","../src/common/__tests__/pluralize.spec.ts","../src/common/__tests__/promise-all.spec.ts","../src/common/__tests__/read-dir-recursive.spec.ts","../src/common/__tests__/remote-query-object-from-string.spec.ts","../src/common/__tests__/remote-query-object-to-string.spec.ts","../src/common/__tests__/remove-undefined-properties.spec.ts","../src/common/__tests__/remove-undefined.spec.ts","../src/common/__tests__/retry-execution.spec.ts","../src/common/__tests__/string-to-select-relation-object.ts","../src/common/__tests__/to-camel-case.spec.ts","../src/common/__tests__/to-handle.spec.ts","../src/common/__tests__/transform-modules.spec.ts","../src/common/__tests__/unflatten-object-keys.spec.ts","../src/common/__tests__/upper-case-first.spec.ts","../src/common/__tests__/validate-module-name.spec.ts","../src/core-flows/events.ts","../src/core-flows/index.ts","../src/dal/index.ts","../src/dal/utils.ts","../src/dal/mikro-orm/base-entity.ts","../src/dal/mikro-orm/big-number-field.ts","../src/dal/mikro-orm/custom-db-migrator.ts","../src/dal/mikro-orm/db-error-mapper.ts","../src/dal/mikro-orm/mikro-orm-create-connection.ts","../src/dal/mikro-orm/mikro-orm-free-text-search-filter.ts","../src/dal/mikro-orm/mikro-orm-repository.ts","../src/dal/mikro-orm/mikro-orm-serializer-old.ts","../src/dal/mikro-orm/mikro-orm-serializer.ts","../src/dal/mikro-orm/mikro-orm-soft-deletable-filter.ts","../src/dal/mikro-orm/utils.ts","../src/dal/mikro-orm/__fixtures__/utils.ts","../src/dal/mikro-orm/__tests__/base-entity.spec.ts","../src/dal/mikro-orm/__tests__/big-number-field.spec.ts","../src/dal/mikro-orm/__tests__/mikro-orm-free-text-search-filter.spec.ts","../src/dal/mikro-orm/__tests__/mikro-orm-serializer.spec.ts","../src/dal/mikro-orm/__tests__/ts-migration-generator.spec.ts","../src/dal/mikro-orm/decorators/foreign-key.ts","../src/dal/mikro-orm/decorators/searchable.ts","../src/dal/mikro-orm/integration-tests/__fixtures__/database.ts","../src/dal/mikro-orm/integration-tests/__fixtures__/utils.ts","../src/dal/mikro-orm/integration-tests/__tests__/mikro-orm-repository.spec.ts","../src/dal/mikro-orm/integration-tests/__tests__/utils.spec.ts","../src/defaults/countries.ts","../src/defaults/currencies.ts","../src/defaults/index.ts","../src/dev-server/index.ts","../src/dev-server/registry-helpers.ts","../src/dev-server/types.ts","../src/dev-server/handlers/job-handler.ts","../src/dev-server/handlers/step-handler.ts","../src/dev-server/handlers/subscriber-handler.ts","../src/dev-server/handlers/workflow-handler.ts","../src/dml/entity-builder.ts","../src/dml/entity.ts","../src/dml/errors.ts","../src/dml/index.ts","../src/dml/__tests__/array-property.spec.ts","../src/dml/__tests__/autoincrement-property.spec.ts","../src/dml/__tests__/base-property.spec.ts","../src/dml/__tests__/base-relationship.spec.ts","../src/dml/__tests__/big-number-property.spec.ts","../src/dml/__tests__/boolean-property.spec.ts","../src/dml/__tests__/create-graphql.spec.ts","../src/dml/__tests__/date-time-property.spec.ts","../src/dml/__tests__/entity-builder.spec.ts","../src/dml/__tests__/enum-schema.spec.ts","../src/dml/__tests__/float-property.spec.ts","../src/dml/__tests__/has-many-relationship.spec.ts","../src/dml/__tests__/has-one-relationship.spec.ts","../src/dml/__tests__/id-property.spec.ts","../src/dml/__tests__/json-property.spec.ts","../src/dml/__tests__/many-to-many.spec.ts","../src/dml/__tests__/number-property.spec.ts","../src/dml/__tests__/text-property.spec.ts","../src/dml/helpers/create-graphql.ts","../src/dml/helpers/create-mikro-orm-entity.ts","../src/dml/helpers/entity-builder/apply-searchable.ts","../src/dml/helpers/entity-builder/build-indexes.ts","../src/dml/helpers/entity-builder/create-big-number-properties.ts","../src/dml/helpers/entity-builder/create-default-properties.ts","../src/dml/helpers/entity-builder/define-property.ts","../src/dml/helpers/entity-builder/define-relationship.ts","../src/dml/helpers/entity-builder/index.ts","../src/dml/helpers/entity-builder/parse-entity-name.ts","../src/dml/helpers/entity-builder/query-builder.ts","../src/dml/helpers/entity-builder/relationship-helpers.ts","../src/dml/helpers/graphql-builder/get-attribute.ts","../src/dml/helpers/graphql-builder/set-relationship.ts","../src/dml/helpers/mikro-orm/apply-checks.ts","../src/dml/helpers/mikro-orm/apply-indexes.ts","../src/dml/helpers/mikro-orm/build-indexes.ts","../src/dml/integration-tests/utils.ts","../src/dml/integration-tests/__tests__/entity.spec.ts","../src/dml/integration-tests/__tests__/enum.spec.ts","../src/dml/integration-tests/__tests__/has-one-belongs-to.spec.ts","../src/dml/integration-tests/__tests__/many-to-many.spec.ts","../src/dml/integration-tests/__tests__/many-to-one.spec.ts","../src/dml/integration-tests/__tests__/translatable.spec.ts","../src/dml/properties/array.ts","../src/dml/properties/autoincrement.ts","../src/dml/properties/base.ts","../src/dml/properties/big-number.ts","../src/dml/properties/boolean.ts","../src/dml/properties/computed.ts","../src/dml/properties/date-time.ts","../src/dml/properties/enum.ts","../src/dml/properties/float.ts","../src/dml/properties/id.ts","../src/dml/properties/index.ts","../src/dml/properties/json.ts","../src/dml/properties/nullable.ts","../src/dml/properties/number.ts","../src/dml/properties/primary-key.ts","../src/dml/properties/text.ts","../src/dml/relations/base.ts","../src/dml/relations/belongs-to.ts","../src/dml/relations/has-many.ts","../src/dml/relations/has-one-fk.ts","../src/dml/relations/has-one.ts","../src/dml/relations/index.ts","../src/dml/relations/many-to-many.ts","../src/dml/relations/nullable.ts","../src/event-bus/build-event-messages.ts","../src/event-bus/common-events.ts","../src/event-bus/index.ts","../src/event-bus/message-aggregator.ts","../src/event-bus/utils.ts","../src/event-bus/__tests__/abstract-event-bus-module.spec.ts","../src/event-bus/__tests__/build-event-names-from-entity-name.spec.ts","../src/event-bus/__tests__/message-aggregator.spec.ts","../src/exceptions/index.ts","../src/exceptions/is-duplicate-error.ts","../src/exceptions/postgres-error.ts","../src/feature-flags/discover-and-register-feature-flags.ts","../src/feature-flags/discover-feature-flags.ts","../src/feature-flags/flag-router.ts","../src/feature-flags/index.ts","../src/feature-flags/register-flag.ts","../src/file/abstract-file-provider.ts","../src/file/index.ts","../src/graphql/clean-graphql.ts","../src/graphql/extract-relations-from-graphql.ts","../src/graphql/get-fields-and-relations.ts","../src/graphql/graphql-parser.ts","../src/graphql/graphql-to-fields.ts","../src/graphql/graphql-to-ts-types.ts","../src/graphql/index.ts","../src/graphql/__tests__/clean-graphql-schema.spec.ts","../src/graphql/__tests__/gql-schema-to-types.spec.ts","../src/graphql/__tests__/graphql-ast.ts","../src/graphql/__tests__/utils/gql-get-fields-and-relations.spec.ts","../src/graphql/__tests__/utils/graphql-schema-to-fields.ts","../src/link/compose-link-name.ts","../src/link/index.ts","../src/link/links.ts","../src/math/big-number.ts","../src/math/index.ts","../src/migrations/index.ts","../src/migrations/integration-tests/__tests__/migrations-generate.spec.ts","../src/migrations/integration-tests/__tests__/migrations-revert.spec.ts","../src/migrations/integration-tests/__tests__/migrations-run.spec.ts","../src/modules-sdk/acmekit-internal-service.ts","../src/modules-sdk/acmekit-service.ts","../src/modules-sdk/build-query.ts","../src/modules-sdk/create-acmekit-mikro-orm-event-subscriber.ts","../src/modules-sdk/create-pg-connection.ts","../src/modules-sdk/define-link.ts","../src/modules-sdk/define-policies.ts","../src/modules-sdk/definition.ts","../src/modules-sdk/event-builder-factory.ts","../src/modules-sdk/index.ts","../src/modules-sdk/joiner-config-builder.ts","../src/modules-sdk/load-module-database-config.ts","../src/modules-sdk/mikro-orm-cli-config-builder.ts","../src/modules-sdk/module-provider-registration-key.ts","../src/modules-sdk/module-provider.ts","../src/modules-sdk/module.ts","../src/modules-sdk/modules-to-container-types.ts","../src/modules-sdk/policy-to-types.ts","../src/modules-sdk/query-context.ts","../src/modules-sdk/__fixtures__/joiner-config/entities.ts","../src/modules-sdk/__tests__/acmekit-internal-service.ts","../src/modules-sdk/__tests__/acmekit-service-typings.spec.ts","../src/modules-sdk/__tests__/acmekit-service.spec.ts","../src/modules-sdk/__tests__/build-query.spec.ts","../src/modules-sdk/__tests__/joiner-config-builder.spec.ts","../src/modules-sdk/__tests__/load-database-config.spec.ts","../src/modules-sdk/__tests__/mikro-orm-cli-config-builder.spec.ts","../src/modules-sdk/__tests__/modules-to-container-types.spec.ts","../src/modules-sdk/decorators/context-parameter.ts","../src/modules-sdk/decorators/emit-events.ts","../src/modules-sdk/decorators/index.ts","../src/modules-sdk/decorators/inject-into-context.ts","../src/modules-sdk/decorators/inject-manager.ts","../src/modules-sdk/decorators/inject-shared-context.ts","../src/modules-sdk/decorators/inject-transaction-manager.ts","../src/modules-sdk/decorators/module.ts","../src/modules-sdk/decorators/__tests__/emit-events.ts","../src/modules-sdk/loaders/container-loader-factory.ts","../src/modules-sdk/loaders/load-models.ts","../src/modules-sdk/loaders/mikro-orm-connection-loader-factory.ts","../src/modules-sdk/loaders/mikro-orm-connection-loader.ts","../src/modules-sdk/migration-scripts/index.ts","../src/modules-sdk/migration-scripts/migration-down.ts","../src/modules-sdk/migration-scripts/migration-generate.ts","../src/modules-sdk/migration-scripts/migration-up.ts","../src/modules-sdk/migration-scripts/seed.ts","../src/modules-sdk/types/acmekit-service.ts","../src/modules-sdk/types/links-config.ts","../src/notification/abstract-notification-provider.ts","../src/notification/common.ts","../src/notification/events.ts","../src/notification/index.ts","../src/orchestration/index.ts","../src/orchestration/symbol.ts","../src/orchestration/types.ts","../src/pg/index.ts","../src/pg/integration-tests/__tests__/pg_utils.spec.ts","../src/policies/discover-policies.ts","../src/policies/index.ts","../src/routes/index.ts","../src/routes/routes-to-types.ts","../src/routes/__fixtures__/admin/api-keys/route.ts","../src/routes/__fixtures__/admin/api-keys/validators.ts","../src/routes/__fixtures__/admin/custom/route.ts","../src/routes/__fixtures__/admin/locales/route.d.ts","../src/routes/__fixtures__/admin/users/route.ts","../src/routes/__fixtures__/admin/users/[id]/route.ts","../src/routes/__tests__/routes-to-types.spec.ts","../src/search/abstract-service.ts","../src/search/index-types.ts","../src/search/index.ts","../src/search/search-relations.ts","../src/search/variant-keys.ts","../src/translations/apply-translations.ts","../src/translations/index.ts","../src/translations/__tests__/apply-translations.spec.ts","../src/user/events.ts","../src/user/index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/bundles.ts","../src/index.ts","../src/analytics/abstract-analytics-provider.ts","../src/analytics/index.ts","../src/api-key/api-key-type.ts","../src/api-key/index.ts","../src/auth/abstract-auth-provider.ts","../src/auth/index.ts","../src/auth/token.ts","../src/caching/index.ts","../src/common/acmekit-container.ts","../src/common/alter-columns-helper.ts","../src/common/array-difference.ts","../src/common/array-intersection.ts","../src/common/build-query.ts","../src/common/build-regexp-if-valid.ts","../src/common/camel-to-snake-case.ts","../src/common/compress-name.ts","../src/common/container.ts","../src/common/convert-item-response-to-update-request.ts","../src/common/create-container-like.ts","../src/common/create-psql-index-helper.ts","../src/common/deduplicate.ts","../src/common/deep-copy.ts","../src/common/deep-equal-obj.ts","../src/common/deep-flat-map.ts","../src/common/deep-merge.ts","../src/common/define-config.ts","../src/common/define-file-config.ts","../src/common/define-plugin.ts","../src/common/dynamic-import.ts","../src/common/env-editor.ts","../src/common/errors.ts","../src/common/execute-with-concurrency.ts","../src/common/file-system.ts","../src/common/filter-object-by-keys.ts","../src/common/filter-operator-map.ts","../src/common/flatten-object-to-key-value-pairs.ts","../src/common/generate-entity-id.ts","../src/common/get-caller-file-path.ts","../src/common/get-config-file.ts","../src/common/get-duplicates.ts","../src/common/get-iso-string-from-date.ts","../src/common/get-node-version.ts","../src/common/get-resolved-plugins.ts","../src/common/get-selects-and-relations-from-object-array.ts","../src/common/get-set-difference.ts","../src/common/graceful-shutdown-server.ts","../src/common/group-by.ts","../src/common/handle-postgres-database-error.ts","../src/common/index.ts","../src/common/is-big-number.ts","../src/common/is-boolean.ts","../src/common/is-date.ts","../src/common/is-defined.ts","../src/common/is-email.ts","../src/common/is-error-like.ts","../src/common/is-object.ts","../src/common/is-present.ts","../src/common/is-string.ts","../src/common/is-truthy.ts","../src/common/load-env.ts","../src/common/lower-case-first.ts","../src/common/map-object-to.ts","../src/common/merge-metadata.ts","../src/common/merge-plugin-modules.ts","../src/common/normalize-csv-value.ts","../src/common/normalize-import-path-with-source.ts","../src/common/normalize-locale.ts","../src/common/object-from-string-path.ts","../src/common/object-to-string-path.ts","../src/common/omit-deep.ts","../src/common/optional-numeric-serializer.ts","../src/common/parse-cors-origins.ts","../src/common/parse-stringify-if-necessary.ts","../src/common/partition-array.ts","../src/common/pick-deep.ts","../src/common/pick-value-from-object.ts","../src/common/plugin-dependency-graph.ts","../src/common/plurailze.ts","../src/common/prefix-array-items.ts","../src/common/promise-all.ts","../src/common/read-dir-recursive.ts","../src/common/remote-query-object-from-string.ts","../src/common/remote-query-object-to-string.ts","../src/common/remove-nullisih.ts","../src/common/remove-undefined-properties.ts","../src/common/remove-undefined.ts","../src/common/resolve-exports.ts","../src/common/retry-execution.ts","../src/common/rules.ts","../src/common/selector-constraints-to-string.ts","../src/common/serialize-error.ts","../src/common/simple-hash.ts","../src/common/string-to-select-relation-object.ts","../src/common/stringify-circular.ts","../src/common/to-camel-case.ts","../src/common/to-handle.ts","../src/common/to-kebab-case.ts","../src/common/to-pascal-case.ts","../src/common/to-snake-case.ts","../src/common/to-unix-slash.ts","../src/common/trim-zeros.ts","../src/common/try-convert-to-boolean.ts","../src/common/try-convert-to-number.ts","../src/common/unflatten-object-keys.ts","../src/common/upper-case-first.ts","../src/common/validate-handle.ts","../src/common/validate-module-name.ts","../src/common/wrap-handler.ts","../src/common/__fixtures__/define-config/github/index.ts","../src/common/__tests__/array-intersection.spec.ts","../src/common/__tests__/build-query.spec.ts","../src/common/__tests__/build-regexp-if-valid.spec.ts","../src/common/__tests__/compress-name.spec.ts","../src/common/__tests__/convert-item-response-to-update-request.ts","../src/common/__tests__/create-psql-index-helper.spec.ts","../src/common/__tests__/deep-copy.spec.ts","../src/common/__tests__/deep-equal-obj.spec.ts","../src/common/__tests__/deep-flat-map.ts","../src/common/__tests__/deep-merge.ts","../src/common/__tests__/define-config.spec.ts","../src/common/__tests__/define-plugin.spec.ts","../src/common/__tests__/env-editor.spec.ts","../src/common/__tests__/filter-object-by-keys.spec.ts","../src/common/__tests__/flatten-object-to-key-value-pairs.spec.ts","../src/common/__tests__/get-duplicates.spec.ts","../src/common/__tests__/get-resolved-plugins.spec.ts","../src/common/__tests__/get-selects-and-relations-from-object-array.spec.ts","../src/common/__tests__/graceful-shutdown-server.ts","../src/common/__tests__/group-by.spec.ts","../src/common/__tests__/handle-postgres-database-error.spec.ts","../src/common/__tests__/is-email.spec.ts","../src/common/__tests__/is-present.spec.ts","../src/common/__tests__/is-valid-handle.spec.ts","../src/common/__tests__/load-env.spec.ts","../src/common/__tests__/map-object-to.ts","../src/common/__tests__/merge-metadata.spec.ts","../src/common/__tests__/normalize-locale.spec.ts","../src/common/__tests__/object-to-string-path.spec.ts","../src/common/__tests__/omit-deep.spec.ts","../src/common/__tests__/parse-cors-origins.spec.ts","../src/common/__tests__/partition-array.spec.ts","../src/common/__tests__/pick-value-from-object.spec.ts","../src/common/__tests__/plugin-dependency-graph.spec.ts","../src/common/__tests__/pluralize.spec.ts","../src/common/__tests__/promise-all.spec.ts","../src/common/__tests__/read-dir-recursive.spec.ts","../src/common/__tests__/remote-query-object-from-string.spec.ts","../src/common/__tests__/remote-query-object-to-string.spec.ts","../src/common/__tests__/remove-undefined-properties.spec.ts","../src/common/__tests__/remove-undefined.spec.ts","../src/common/__tests__/retry-execution.spec.ts","../src/common/__tests__/string-to-select-relation-object.ts","../src/common/__tests__/to-camel-case.spec.ts","../src/common/__tests__/to-handle.spec.ts","../src/common/__tests__/transform-modules.spec.ts","../src/common/__tests__/unflatten-object-keys.spec.ts","../src/common/__tests__/upper-case-first.spec.ts","../src/common/__tests__/validate-module-name.spec.ts","../src/core-flows/events.ts","../src/core-flows/index.ts","../src/dal/index.ts","../src/dal/utils.ts","../src/dal/mikro-orm/base-entity.ts","../src/dal/mikro-orm/big-number-field.ts","../src/dal/mikro-orm/custom-db-migrator.ts","../src/dal/mikro-orm/db-error-mapper.ts","../src/dal/mikro-orm/mikro-orm-create-connection.ts","../src/dal/mikro-orm/mikro-orm-free-text-search-filter.ts","../src/dal/mikro-orm/mikro-orm-repository.ts","../src/dal/mikro-orm/mikro-orm-serializer-old.ts","../src/dal/mikro-orm/mikro-orm-serializer.ts","../src/dal/mikro-orm/mikro-orm-soft-deletable-filter.ts","../src/dal/mikro-orm/utils.ts","../src/dal/mikro-orm/__fixtures__/utils.ts","../src/dal/mikro-orm/__tests__/base-entity.spec.ts","../src/dal/mikro-orm/__tests__/big-number-field.spec.ts","../src/dal/mikro-orm/__tests__/mikro-orm-free-text-search-filter.spec.ts","../src/dal/mikro-orm/__tests__/mikro-orm-serializer.spec.ts","../src/dal/mikro-orm/__tests__/ts-migration-generator.spec.ts","../src/dal/mikro-orm/decorators/foreign-key.ts","../src/dal/mikro-orm/decorators/searchable.ts","../src/dal/mikro-orm/integration-tests/__fixtures__/database.ts","../src/dal/mikro-orm/integration-tests/__fixtures__/utils.ts","../src/dal/mikro-orm/integration-tests/__tests__/mikro-orm-repository.spec.ts","../src/dal/mikro-orm/integration-tests/__tests__/utils.spec.ts","../src/defaults/countries.ts","../src/defaults/currencies.ts","../src/defaults/index.ts","../src/dev-server/index.ts","../src/dev-server/registry-helpers.ts","../src/dev-server/types.ts","../src/dev-server/handlers/job-handler.ts","../src/dev-server/handlers/step-handler.ts","../src/dev-server/handlers/subscriber-handler.ts","../src/dev-server/handlers/workflow-handler.ts","../src/dml/entity-builder.ts","../src/dml/entity.ts","../src/dml/errors.ts","../src/dml/index.ts","../src/dml/__tests__/array-property.spec.ts","../src/dml/__tests__/autoincrement-property.spec.ts","../src/dml/__tests__/base-property.spec.ts","../src/dml/__tests__/base-relationship.spec.ts","../src/dml/__tests__/big-number-property.spec.ts","../src/dml/__tests__/boolean-property.spec.ts","../src/dml/__tests__/create-graphql.spec.ts","../src/dml/__tests__/date-time-property.spec.ts","../src/dml/__tests__/entity-builder.spec.ts","../src/dml/__tests__/enum-schema.spec.ts","../src/dml/__tests__/float-property.spec.ts","../src/dml/__tests__/has-many-relationship.spec.ts","../src/dml/__tests__/has-one-relationship.spec.ts","../src/dml/__tests__/id-property.spec.ts","../src/dml/__tests__/json-property.spec.ts","../src/dml/__tests__/many-to-many.spec.ts","../src/dml/__tests__/number-property.spec.ts","../src/dml/__tests__/text-property.spec.ts","../src/dml/helpers/create-graphql.ts","../src/dml/helpers/create-mikro-orm-entity.ts","../src/dml/helpers/entity-builder/apply-searchable.ts","../src/dml/helpers/entity-builder/build-indexes.ts","../src/dml/helpers/entity-builder/create-big-number-properties.ts","../src/dml/helpers/entity-builder/create-default-properties.ts","../src/dml/helpers/entity-builder/define-property.ts","../src/dml/helpers/entity-builder/define-relationship.ts","../src/dml/helpers/entity-builder/index.ts","../src/dml/helpers/entity-builder/parse-entity-name.ts","../src/dml/helpers/entity-builder/query-builder.ts","../src/dml/helpers/entity-builder/relationship-helpers.ts","../src/dml/helpers/graphql-builder/get-attribute.ts","../src/dml/helpers/graphql-builder/set-relationship.ts","../src/dml/helpers/mikro-orm/apply-checks.ts","../src/dml/helpers/mikro-orm/apply-indexes.ts","../src/dml/helpers/mikro-orm/build-indexes.ts","../src/dml/integration-tests/utils.ts","../src/dml/integration-tests/__tests__/entity.spec.ts","../src/dml/integration-tests/__tests__/enum.spec.ts","../src/dml/integration-tests/__tests__/has-one-belongs-to.spec.ts","../src/dml/integration-tests/__tests__/many-to-many.spec.ts","../src/dml/integration-tests/__tests__/many-to-one.spec.ts","../src/dml/integration-tests/__tests__/translatable.spec.ts","../src/dml/properties/array.ts","../src/dml/properties/autoincrement.ts","../src/dml/properties/base.ts","../src/dml/properties/big-number.ts","../src/dml/properties/boolean.ts","../src/dml/properties/computed.ts","../src/dml/properties/date-time.ts","../src/dml/properties/enum.ts","../src/dml/properties/float.ts","../src/dml/properties/id.ts","../src/dml/properties/index.ts","../src/dml/properties/json.ts","../src/dml/properties/nullable.ts","../src/dml/properties/number.ts","../src/dml/properties/primary-key.ts","../src/dml/properties/text.ts","../src/dml/relations/base.ts","../src/dml/relations/belongs-to.ts","../src/dml/relations/has-many.ts","../src/dml/relations/has-one-fk.ts","../src/dml/relations/has-one.ts","../src/dml/relations/index.ts","../src/dml/relations/many-to-many.ts","../src/dml/relations/nullable.ts","../src/event-bus/build-event-messages.ts","../src/event-bus/common-events.ts","../src/event-bus/index.ts","../src/event-bus/message-aggregator.ts","../src/event-bus/utils.ts","../src/event-bus/__tests__/abstract-event-bus-module.spec.ts","../src/event-bus/__tests__/build-event-names-from-entity-name.spec.ts","../src/event-bus/__tests__/message-aggregator.spec.ts","../src/exceptions/index.ts","../src/exceptions/is-duplicate-error.ts","../src/exceptions/postgres-error.ts","../src/feature-flags/discover-and-register-feature-flags.ts","../src/feature-flags/discover-feature-flags.ts","../src/feature-flags/flag-router.ts","../src/feature-flags/index.ts","../src/feature-flags/register-flag.ts","../src/file/abstract-file-provider.ts","../src/file/index.ts","../src/graphql/clean-graphql.ts","../src/graphql/extract-relations-from-graphql.ts","../src/graphql/get-fields-and-relations.ts","../src/graphql/graphql-parser.ts","../src/graphql/graphql-to-fields.ts","../src/graphql/graphql-to-ts-types.ts","../src/graphql/index.ts","../src/graphql/__tests__/clean-graphql-schema.spec.ts","../src/graphql/__tests__/gql-schema-to-types.spec.ts","../src/graphql/__tests__/graphql-ast.ts","../src/graphql/__tests__/utils/gql-get-fields-and-relations.spec.ts","../src/graphql/__tests__/utils/graphql-schema-to-fields.ts","../src/link/compose-link-name.ts","../src/link/index.ts","../src/link/links.ts","../src/math/big-number.ts","../src/math/index.ts","../src/migrations/index.ts","../src/migrations/integration-tests/__tests__/migrations-generate.spec.ts","../src/migrations/integration-tests/__tests__/migrations-revert.spec.ts","../src/migrations/integration-tests/__tests__/migrations-run.spec.ts","../src/modules-sdk/abstract-module-provider.ts","../src/modules-sdk/acmekit-internal-service.ts","../src/modules-sdk/acmekit-service.ts","../src/modules-sdk/build-query.ts","../src/modules-sdk/create-acmekit-mikro-orm-event-subscriber.ts","../src/modules-sdk/create-pg-connection.ts","../src/modules-sdk/define-link.ts","../src/modules-sdk/define-policies.ts","../src/modules-sdk/definition.ts","../src/modules-sdk/event-builder-factory.ts","../src/modules-sdk/index.ts","../src/modules-sdk/joiner-config-builder.ts","../src/modules-sdk/load-module-database-config.ts","../src/modules-sdk/mikro-orm-cli-config-builder.ts","../src/modules-sdk/module-provider-registration-key.ts","../src/modules-sdk/module-provider.ts","../src/modules-sdk/module.ts","../src/modules-sdk/modules-to-container-types.ts","../src/modules-sdk/policy-to-types.ts","../src/modules-sdk/provider-registry.ts","../src/modules-sdk/provider-service.ts","../src/modules-sdk/query-context.ts","../src/modules-sdk/__fixtures__/joiner-config/entities.ts","../src/modules-sdk/__tests__/acmekit-internal-service.ts","../src/modules-sdk/__tests__/acmekit-service-typings.spec.ts","../src/modules-sdk/__tests__/acmekit-service.spec.ts","../src/modules-sdk/__tests__/build-query.spec.ts","../src/modules-sdk/__tests__/joiner-config-builder.spec.ts","../src/modules-sdk/__tests__/load-database-config.spec.ts","../src/modules-sdk/__tests__/mikro-orm-cli-config-builder.spec.ts","../src/modules-sdk/__tests__/modules-to-container-types.spec.ts","../src/modules-sdk/__tests__/provider-registry.spec.ts","../src/modules-sdk/__tests__/provider-service.spec.ts","../src/modules-sdk/decorators/context-parameter.ts","../src/modules-sdk/decorators/emit-events.ts","../src/modules-sdk/decorators/index.ts","../src/modules-sdk/decorators/inject-into-context.ts","../src/modules-sdk/decorators/inject-manager.ts","../src/modules-sdk/decorators/inject-shared-context.ts","../src/modules-sdk/decorators/inject-transaction-manager.ts","../src/modules-sdk/decorators/module.ts","../src/modules-sdk/decorators/__tests__/emit-events.ts","../src/modules-sdk/loaders/container-loader-factory.ts","../src/modules-sdk/loaders/load-models.ts","../src/modules-sdk/loaders/mikro-orm-connection-loader-factory.ts","../src/modules-sdk/loaders/mikro-orm-connection-loader.ts","../src/modules-sdk/migration-scripts/index.ts","../src/modules-sdk/migration-scripts/migration-down.ts","../src/modules-sdk/migration-scripts/migration-generate.ts","../src/modules-sdk/migration-scripts/migration-up.ts","../src/modules-sdk/migration-scripts/seed.ts","../src/modules-sdk/types/acmekit-service.ts","../src/modules-sdk/types/links-config.ts","../src/notification/abstract-notification-provider.ts","../src/notification/common.ts","../src/notification/events.ts","../src/notification/index.ts","../src/orchestration/index.ts","../src/orchestration/symbol.ts","../src/orchestration/types.ts","../src/pg/index.ts","../src/pg/integration-tests/__tests__/pg_utils.spec.ts","../src/policies/discover-policies.ts","../src/policies/index.ts","../src/routes/index.ts","../src/routes/routes-to-types.ts","../src/routes/__fixtures__/admin/api-keys/route.ts","../src/routes/__fixtures__/admin/api-keys/validators.ts","../src/routes/__fixtures__/admin/custom/route.ts","../src/routes/__fixtures__/admin/locales/route.d.ts","../src/routes/__fixtures__/admin/users/route.ts","../src/routes/__fixtures__/admin/users/[id]/route.ts","../src/routes/__tests__/routes-to-types.spec.ts","../src/search/abstract-service.ts","../src/search/index-types.ts","../src/search/index.ts","../src/search/search-relations.ts","../src/search/variant-keys.ts","../src/translations/apply-translations.ts","../src/translations/index.ts","../src/translations/__tests__/apply-translations.spec.ts","../src/user/events.ts","../src/user/index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acmekit/utils",
3
- "version": "2.13.37",
3
+ "version": "2.13.39",
4
4
  "description": "AcmeKit utilities functions shared by AcmeKit core and Modules",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
@@ -26,12 +26,12 @@
26
26
  "author": "AcmeKit",
27
27
  "license": "MIT",
28
28
  "devDependencies": {
29
- "@acmekit/types": "2.13.37",
29
+ "@acmekit/types": "2.13.39",
30
30
  "express": "^4.21.0",
31
31
  "typescript": ">=5.0.0"
32
32
  },
33
33
  "dependencies": {
34
- "@acmekit/deps": "2.13.37",
34
+ "@acmekit/deps": "2.13.39",
35
35
  "@graphql-codegen/core": "^4.0.2",
36
36
  "@graphql-codegen/typescript": "^4.0.9",
37
37
  "@graphql-tools/merge": "^9.0.7",