@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.
- package/dist/common/container.d.ts +1 -0
- package/dist/common/container.d.ts.map +1 -1
- package/dist/common/container.js +1 -0
- package/dist/common/container.js.map +1 -1
- package/dist/common/define-plugin.d.ts +156 -0
- package/dist/common/define-plugin.d.ts.map +1 -0
- package/dist/common/define-plugin.js +59 -0
- package/dist/common/define-plugin.js.map +1 -0
- package/dist/common/get-resolved-plugins.d.ts.map +1 -1
- package/dist/common/get-resolved-plugins.js +43 -0
- package/dist/common/get-resolved-plugins.js.map +1 -1
- package/dist/common/index.d.ts +2 -0
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +2 -0
- package/dist/common/index.js.map +1 -1
- package/dist/common/merge-plugin-modules.d.ts.map +1 -1
- package/dist/common/merge-plugin-modules.js +15 -0
- package/dist/common/merge-plugin-modules.js.map +1 -1
- package/dist/common/plugin-dependency-graph.d.ts +18 -0
- package/dist/common/plugin-dependency-graph.d.ts.map +1 -0
- package/dist/common/plugin-dependency-graph.js +62 -0
- package/dist/common/plugin-dependency-graph.js.map +1 -0
- package/dist/modules-sdk/abstract-module-provider.d.ts +65 -0
- package/dist/modules-sdk/abstract-module-provider.d.ts.map +1 -0
- package/dist/modules-sdk/abstract-module-provider.js +46 -0
- package/dist/modules-sdk/abstract-module-provider.js.map +1 -0
- package/dist/modules-sdk/index.d.ts +3 -0
- package/dist/modules-sdk/index.d.ts.map +1 -1
- package/dist/modules-sdk/index.js +3 -0
- package/dist/modules-sdk/index.js.map +1 -1
- package/dist/modules-sdk/provider-registry.d.ts +43 -0
- package/dist/modules-sdk/provider-registry.d.ts.map +1 -0
- package/dist/modules-sdk/provider-registry.js +82 -0
- package/dist/modules-sdk/provider-registry.js.map +1 -0
- package/dist/modules-sdk/provider-service.d.ts +35 -0
- package/dist/modules-sdk/provider-service.d.ts.map +1 -0
- package/dist/modules-sdk/provider-service.js +41 -0
- package/dist/modules-sdk/provider-service.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -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
|
|
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"}
|
package/dist/common/container.js
CHANGED
|
@@ -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;
|
|
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;
|
|
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":";;;;;;
|
|
1
|
+
{"version":3,"file":"get-resolved-plugins.js","sourceRoot":"","sources":["../../src/common/get-resolved-plugins.ts"],"names":[],"mappings":"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"}
|
package/dist/common/index.d.ts
CHANGED
|
@@ -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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"}
|
package/dist/common/index.js
CHANGED
|
@@ -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);
|
package/dist/common/index.js.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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":";;AAoBA,8DAgEC;AApFD,qCAAuC;AAYvC;;;;;;;GAOG;AACH,SAAgB,yBAAyB,CACvC,OAAqB;IAErB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACnD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAA;IAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;IAE1C,aAAa;IACb,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QACrC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC9B,CAAC;IAED,uCAAuC;IACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAA;QACtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,qBAAY,CACpB,qBAAY,CAAC,KAAK,CAAC,YAAY,EAC/B,WAAW,MAAM,CAAC,IAAI,iBAAiB,GAAG,4BAA4B;oBACpE,oDAAoD,CACvD,CAAA;YACH,CAAC;YAED,SAAS,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACpC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACtC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;QAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEpB,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACrD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAE,GAAG,CAAC,CAAA;YAC9C,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YAClC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,OAAO;aACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACrB,MAAM,IAAI,qBAAY,CACpB,qBAAY,CAAC,KAAK,CAAC,YAAY,EAC/B,kDAAkD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACxE,uDAAuD,CAC1D,CAAA;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,CAAA;AACnB,CAAC"}
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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",
|