@docupace/ihub-config 1.0.8-alpha.0 → 1.0.8-alpha.2

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 (75) hide show
  1. package/README.md +116 -21
  2. package/dist/config-extension.d.ts +3 -3
  3. package/dist/config-extension.d.ts.map +1 -1
  4. package/dist/config-extension.js +29 -33
  5. package/dist/config-extension.js.map +1 -1
  6. package/dist/config-service.d.ts +35 -14
  7. package/dist/config-service.d.ts.map +1 -1
  8. package/dist/config-service.js +148 -100
  9. package/dist/config-service.js.map +1 -1
  10. package/dist/index.d.ts +6 -8
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +2 -4
  13. package/dist/index.js.map +1 -1
  14. package/dist/{config → injector-resolvers}/config-injector.d.ts +1 -4
  15. package/dist/injector-resolvers/config-injector.d.ts.map +1 -0
  16. package/dist/{config → injector-resolvers}/config-injector.js +2 -12
  17. package/dist/injector-resolvers/config-injector.js.map +1 -0
  18. package/dist/injector-resolvers/template-processor.d.ts.map +1 -0
  19. package/dist/{config → injector-resolvers}/template-processor.js +2 -5
  20. package/dist/injector-resolvers/template-processor.js.map +1 -0
  21. package/dist/instance-config.d.ts +1 -0
  22. package/dist/instance-config.d.ts.map +1 -1
  23. package/dist/instance-config.js +7 -4
  24. package/dist/instance-config.js.map +1 -1
  25. package/dist/lib/file-system.d.ts.map +1 -1
  26. package/dist/lib/file-system.js +7 -4
  27. package/dist/lib/file-system.js.map +1 -1
  28. package/dist/lib/get-first-existing-path.js +2 -2
  29. package/dist/lib/get-first-existing-path.js.map +1 -1
  30. package/dist/lib/module-format.esm.js +2 -2
  31. package/dist/lib/module-format.esm.js.map +1 -1
  32. package/dist/lib/replace-dots-outside-expressions.js +1 -1
  33. package/dist/lib/replace-dots-outside-expressions.js.map +1 -1
  34. package/dist/mappers/config-mapper.d.ts +3 -8
  35. package/dist/mappers/config-mapper.d.ts.map +1 -1
  36. package/dist/mappers/config-mapper.js +11 -18
  37. package/dist/mappers/config-mapper.js.map +1 -1
  38. package/dist/model/graphs/config/table.graphql +8 -0
  39. package/dist/{config-providers → providers}/base-config.d.ts +1 -1
  40. package/dist/providers/base-config.d.ts.map +1 -0
  41. package/dist/providers/base-config.js.map +1 -0
  42. package/dist/providers/dashboard-page-config.d.ts +7 -0
  43. package/dist/providers/dashboard-page-config.d.ts.map +1 -0
  44. package/dist/providers/dashboard-page-config.js +24 -0
  45. package/dist/providers/dashboard-page-config.js.map +1 -0
  46. package/dist/providers/index.d.ts +4 -0
  47. package/dist/providers/index.d.ts.map +1 -0
  48. package/dist/providers/index.js +5 -0
  49. package/dist/providers/index.js.map +1 -0
  50. package/dist/{config-resolvers → resolvers}/index.d.ts +1 -3
  51. package/dist/resolvers/index.d.ts.map +1 -0
  52. package/dist/{config-resolvers → resolvers}/index.js +0 -7
  53. package/dist/resolvers/index.js.map +1 -0
  54. package/dist/server.js +5 -2
  55. package/dist/server.js.map +1 -1
  56. package/dist/types/graphql.d.ts +62 -6
  57. package/dist/types/graphql.d.ts.map +1 -1
  58. package/dist/types/graphql.js +10 -0
  59. package/dist/types/graphql.js.map +1 -1
  60. package/model/graphs/config/table.graphql +8 -0
  61. package/package.json +10 -6
  62. package/dist/config/config-injector.d.ts.map +0 -1
  63. package/dist/config/config-injector.js.map +0 -1
  64. package/dist/config/template-processor.d.ts.map +0 -1
  65. package/dist/config/template-processor.js.map +0 -1
  66. package/dist/config-providers/base-config.d.ts.map +0 -1
  67. package/dist/config-providers/base-config.js.map +0 -1
  68. package/dist/config-providers/index.d.ts +0 -5
  69. package/dist/config-providers/index.d.ts.map +0 -1
  70. package/dist/config-providers/index.js +0 -8
  71. package/dist/config-providers/index.js.map +0 -1
  72. package/dist/config-resolvers/index.d.ts.map +0 -1
  73. package/dist/config-resolvers/index.js.map +0 -1
  74. /package/dist/{config → injector-resolvers}/template-processor.d.ts +0 -0
  75. /package/dist/{config-providers → providers}/base-config.js +0 -0
package/README.md CHANGED
@@ -1,29 +1,45 @@
1
1
  # @docupace/ihub-config
2
2
 
3
- Reusable config-service GraphQL package extracted from docupace server.
3
+ Reusable GraphQL config extension and standalone server extracted from the
4
+ Docupace GraphQL server.
4
5
 
5
- ## Run standalone server
6
+ ## Run locally
6
7
 
7
8
  ```bash
8
9
  pnpm install
10
+ ```
11
+
12
+ To run the package as a standalone GraphQL server, copy
13
+ `.env.example` to `.env`, fill in the required values, and start the dev
14
+ server:
15
+
16
+ ```bash
17
+ cp .env.example .env
9
18
  pnpm start:dev
10
19
  ```
11
20
 
12
- ## Use as extension in another server
21
+ The standalone server listens on `http://localhost:4000/api/graphql`.
22
+
23
+ ## Use as an extension in another server
13
24
 
14
25
  ```ts
15
26
  import { getConfigExtension } from '@docupace/ihub-config';
16
27
  ```
17
28
 
18
- Then add to server extensions array.
29
+ Then add the returned extension to the host server's extensions array:
19
30
 
20
- The package is published as ESM and is intended to be consumed with
21
- `import '@docupace/ihub-config'`.
31
+ ```ts
32
+ const configExtension = await getConfigExtension();
22
33
 
23
- Deep imports into `dist/**` are not supported.
34
+ const serverInfo: ServerConfig = {
35
+ instanceConfig: instanceConfig,
36
+ extensions: [docupaceExtension, configExtension],
37
+ port: 4000,
38
+ createContext,
39
+ };
40
+ ```
24
41
 
25
- To resolve template expressions (for example `$${applicationPreference:...}`),
26
- provide `configInjectorResolvers` from the host app:
42
+ Extend the config extension with domain-specific providers, resolvers, etc.
27
43
 
28
44
  ```ts
29
45
  import { getConfigExtension } from '@docupace/ihub-config';
@@ -63,25 +79,104 @@ const configExtension = await getConfigExtension({
63
79
  });
64
80
  ```
65
81
 
66
- ## Required environment variables
82
+ ### `configInjectorResolvers`
83
+
84
+ Use `configInjectorResolvers` to resolve template expressions embedded in config
85
+ values, for example:
86
+
87
+ ```ts
88
+ $${applicationPreference:timezone}
89
+ ```
90
+
91
+ Each key in `configInjectorResolvers` is a template prefix, and each value is an
92
+ async resolver function with this shape:
67
93
 
68
- - `AUTH0_DOMAIN`
69
- - `AUTH0_AUDIENCE`
70
- - `AUTH0_CLIENT_ID`
71
- - `AUTH0_CLIENT_SECRET`
94
+ ```ts
95
+ type ResolverFunction = (
96
+ keys: string[],
97
+ context: any,
98
+ ) => Promise<Record<string, any>>;
99
+ ```
100
+
101
+ When config processing encounters `$${prefix:key}`, it looks up the resolver for
102
+ that `prefix`, batches the requested keys, and replaces the template with the
103
+ resolved value. This is the right place to connect host-specific data sources
104
+ such as application preferences, tenant settings, or user-scoped values.
72
105
 
73
- Optional:
106
+ ### `providers`
74
107
 
75
- - `CORE_URL`
76
- - `AUTH0_CC_CLIENT_ID`
77
- - `AUTH0_CC_CLIENT_SECRET`
78
- - `INTEGRATION_HUB_URL`
108
+ Use `providers` to register config processors by `__typename`. A provider runs
109
+ after nested config values have been loaded and template expressions have been
110
+ resolved, and can reshape or enrich the final config object before it is
111
+ returned.
79
112
 
80
- Config stores (repeat by prefix such as `STANDARD`, `SITE`):
113
+ ```ts
114
+ providers: {
115
+ DashboardPage: DashboardPageConfigProvider,
116
+ TablePage: TablePageConfigProvider,
117
+ AnyPage: AnyPageConfigProvider,
118
+ DetailsPage: DetailsPageConfigProvider,
119
+ }
120
+ ```
121
+
122
+ Each provider must be a class with a `processConfig` method:
123
+
124
+ ```ts
125
+ interface ConfigProvider {
126
+ processConfig(config: any, configService: ConfigService, context: any): any;
127
+ }
128
+ ```
129
+
130
+ This is useful for page-specific post-processing such as normalizing fragments,
131
+ rewriting references, or deriving extra fields for a particular page type.
132
+ Built-in providers are preserved and host providers are merged in on top.
133
+
134
+ ### `resolvers`
135
+
136
+ Use `resolvers` to extend the GraphQL API exposed by the config extension.
137
+ Resolvers are provided as factories so they can receive the initialized
138
+ `configService` instance:
139
+
140
+ ```ts
141
+ const configResolvers = {
142
+ query: ({ configService }) => ({
143
+ pages: () => ({
144
+ myCustomPage: async (obj: { path: string }, context: any) => {
145
+ return await configService.getDirectConfig(obj.path, context);
146
+ },
147
+ }),
148
+ }),
149
+ mutation: ({ configService }) => ({
150
+ pages: () => ({
151
+ refreshCustomConfig: async () => {
152
+ await configService.init();
153
+ return true;
154
+ },
155
+ }),
156
+ }),
157
+ };
158
+ ```
159
+
160
+ Host query and mutation resolvers are deep-merged with the built-in config
161
+ resolvers, so you can add new fields without re-declaring the entire resolver
162
+ tree. If the same field exists in both places, the host resolver wins.
163
+
164
+ If you want to pass config stores programmatically instead of through
165
+ environment variables, `getConfigExtension` also accepts `configStores` (usually used for tests only).
166
+
167
+ ## Environment variables
168
+
169
+ Config stores are discovered from environment variables grouped by prefix such
170
+ as `STANDARD` or `SITE`:
81
171
 
82
172
  - `<PREFIX>_CONFIG_LOCAL_PATH`
83
173
  - `<PREFIX>_CONFIG_REMOTE_PATH`
84
174
  - `<PREFIX>_CONFIG_REMOTE_BRANCH`
85
175
  - `<PREFIX>_CONFIG_PRIORITY`
86
176
  - `<PREFIX>_CONFIG_NAME`
87
- - `CONFIG_LOCAL_PATH_ROOT` (optional fallback)
177
+
178
+ `<PREFIX>_CONFIG_PRIORITY` is required for every configured store.
179
+
180
+ `CONFIG_LOCAL_PATH_ROOT` can be used as a fallback base path when
181
+ `<PREFIX>_CONFIG_LOCAL_PATH` is omitted, but the store still needs enough
182
+ configuration to be discovered.
@@ -1,8 +1,8 @@
1
1
  import { ExtensionConfig } from '@docupace/ihub-core/types';
2
2
  import { ConfigStoreParams } from './config-service.js';
3
- import { ConfigInjectorResolvers } from './config/config-injector.js';
4
- import { ConfigProviders } from './config-providers/index.js';
5
- import { ConfigResolversConfig } from './config-resolvers/index.js';
3
+ import type { ConfigInjectorResolvers } from './injector-resolvers/config-injector.js';
4
+ import type { ConfigProviders } from './providers/index.js';
5
+ import type { ConfigResolversConfig } from './resolvers/index.js';
6
6
  export interface ConfigExtensionOptions {
7
7
  configInjectorResolvers?: ConfigInjectorResolvers;
8
8
  providers?: ConfigProviders;
@@ -1 +1 @@
1
- {"version":3,"file":"config-extension.d.ts","sourceRoot":"","sources":["../src/config-extension.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAwB,MAAM,qBAAqB,CAAC;AAI9E,OAAO,EACL,uBAAuB,EAExB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,eAAe,EAEhB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,qBAAqB,EAEtB,MAAM,6BAA6B,CAAC;AAKrC,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACpC;AAgCD,eAAO,MAAM,kBAAkB,GAC7B,UAAS,sBAA2B,KACnC,OAAO,CAAC,eAAe,CA8BzB,CAAC"}
1
+ {"version":3,"file":"config-extension.d.ts","sourceRoot":"","sources":["../src/config-extension.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAwB,MAAM,qBAAqB,CAAC;AAE9E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAEvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAGlE,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACpC;AA2BD,eAAO,MAAM,kBAAkB,GAC7B,UAAS,sBAA2B,KACnC,OAAO,CAAC,eAAe,CA2BzB,CAAC"}
@@ -1,44 +1,40 @@
1
- import path from 'path';
2
- import { getInstanceConfig } from './instance-config.js';
1
+ import path from 'node:path';
2
+ import { getConfigStores } from './instance-config.js';
3
3
  import { defaultConfigService } from './config-service.js';
4
- import ConfigMapper, { createConfigMapperClass, } from './mappers/config-mapper.js';
5
- import { setConfigInjectorResolvers, } from './config/config-injector.js';
6
- import { setConfigProviders, } from './config-providers/index.js';
7
- import { setConfigResolvers, } from './config-resolvers/index.js';
4
+ import { _logger as log } from './globals.js';
5
+ import { createConfigMapperClass } from './mappers/config-mapper.js';
8
6
  import { getPackageModelPath } from '#module-format';
9
- const configStoreInitPromises = new Map();
10
- const getConfigStoresCacheKey = (configStores) => {
11
- return JSON.stringify(configStores.map((configStore) => ({
7
+ const summarizeConfigStores = (configStores) => {
8
+ return configStores.map((configStore) => ({
12
9
  key: configStore.key,
13
- localPath: configStore.localPath,
14
10
  name: configStore.name,
15
11
  priority: configStore.priority,
16
- remoteBranch: configStore.remoteBranch ?? null,
17
- remotePath: configStore.remotePath ?? null,
18
- })));
12
+ localPath: configStore.localPath,
13
+ modelPath: path.resolve(configStore.localPath, 'model'),
14
+ remotePath: configStore.remotePath,
15
+ remoteBranch: configStore.remoteBranch,
16
+ }));
19
17
  };
20
- const ensureConfigStoresInitialized = async (configStores) => {
21
- const cacheKey = getConfigStoresCacheKey(configStores);
22
- if (!configStoreInitPromises.has(cacheKey)) {
23
- const configService = defaultConfigService({
24
- model: undefined,
25
- configStores,
26
- });
27
- configStoreInitPromises.set(cacheKey, configService.init());
28
- }
29
- await configStoreInitPromises.get(cacheKey);
18
+ const initializeConfigStores = async (configStores) => {
19
+ log.info({
20
+ configStores: summarizeConfigStores(configStores),
21
+ });
22
+ const configService = defaultConfigService({
23
+ model: undefined,
24
+ configStores,
25
+ });
26
+ await configService.init();
30
27
  };
31
28
  export const getConfigExtension = async (options = {}) => {
32
- setConfigInjectorResolvers(options.configInjectorResolvers ?? {});
33
- setConfigProviders(options.providers ?? {});
34
- setConfigResolvers(options.resolvers ?? {});
35
- const instanceConfig = await getInstanceConfig();
36
- const resolvedConfigStores = options.configStores ?? instanceConfig.configStores;
37
- await ensureConfigStoresInitialized(resolvedConfigStores);
38
- const configModelPaths = resolvedConfigStores.map((configStore) => path.resolve(configStore.localPath, 'model'));
39
- const mapperClass = options.configStores
40
- ? createConfigMapperClass(resolvedConfigStores)
41
- : ConfigMapper;
29
+ const configStores = options.configStores ?? getConfigStores();
30
+ await initializeConfigStores(configStores);
31
+ const configModelPaths = configStores.map((configStore) => path.resolve(configStore.localPath, 'model'));
32
+ const mapperClass = createConfigMapperClass({
33
+ configInjectorResolvers: options.configInjectorResolvers,
34
+ providers: options.providers,
35
+ resolvers: options.resolvers,
36
+ configStores,
37
+ });
42
38
  return {
43
39
  name: 'config',
44
40
  modelPaths: [getPackageModelPath(), ...configModelPaths],
@@ -1 +1 @@
1
- {"version":3,"file":"config-extension.js","sourceRoot":"","sources":["../src/config-extension.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAqB,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,YAAY,EAAE,EACnB,uBAAuB,GACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEL,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAwB,CAAC;AAShE,MAAM,uBAAuB,GAAG,CAAC,YAAiC,EAAU,EAAE;IAC5E,OAAO,IAAI,CAAC,SAAS,CACnB,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACjC,GAAG,EAAE,WAAW,CAAC,GAAG;QACpB,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,YAAY,EAAE,WAAW,CAAC,YAAY,IAAI,IAAI;QAC9C,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,IAAI;KAC3C,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,KAAK,EACzC,YAAiC,EACjC,EAAE;IACF,MAAM,QAAQ,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;IAEvD,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,MAAM,aAAa,GAAG,oBAAoB,CAAC;YACzC,KAAK,EAAE,SAAS;YAChB,YAAY;SACb,CAAC,CAAC;QAEH,uBAAuB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,uBAAuB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,UAAkC,EAAE,EACV,EAAE;IAC5B,0BAA0B,CAAC,OAAO,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IAClE,kBAAkB,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC5C,kBAAkB,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAE5C,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACjD,MAAM,oBAAoB,GACxB,OAAO,CAAC,YAAY,IAAI,cAAc,CAAC,YAAY,CAAC;IAEtD,MAAM,6BAA6B,CAAC,oBAAoB,CAAC,CAAC;IAE1D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAChE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAC7C,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY;QACtC,CAAC,CAAC,uBAAuB,CAAC,oBAAoB,CAAC;QAC/C,CAAC,CAAC,YAAY,CAAC;IAEjB,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,CAAC,mBAAmB,EAAE,EAAE,GAAG,gBAAgB,CAAC;QACxD,OAAO,EAAE;YACP;gBACE,WAAW;aACZ;SACF;QACD,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"config-extension.js","sourceRoot":"","sources":["../src/config-extension.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAqB,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AASrD,MAAM,qBAAqB,GAAG,CAAC,YAAiC,EAAE,EAAE;IAClE,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACxC,GAAG,EAAE,WAAW,CAAC,GAAG;QACpB,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC;QACvD,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,YAAY,EAAE,WAAW,CAAC,YAAY;KACvC,CAAC,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,KAAK,EAAE,YAAiC,EAAE,EAAE;IACzE,GAAG,CAAC,IAAI,CAAC;QACP,YAAY,EAAE,qBAAqB,CAAC,YAAY,CAAC;KAClD,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,oBAAoB,CAAC;QACzC,KAAK,EAAE,SAAS;QAChB,YAAY;KACb,CAAC,CAAC;IAEH,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,UAAkC,EAAE,EACV,EAAE;IAC5B,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,eAAe,EAAE,CAAC;IAE/D,MAAM,sBAAsB,CAAC,YAAY,CAAC,CAAC;IAE3C,MAAM,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CACxD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAC7C,CAAC;IAEF,MAAM,WAAW,GAAG,uBAAuB,CAAC;QAC1C,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;QACxD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY;KACb,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,CAAC,mBAAmB,EAAE,EAAE,GAAG,gBAAgB,CAAC;QACxD,OAAO,EAAE;YACP;gBACE,WAAW;aACZ;SACF;QACD,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC,CAAC"}
@@ -1,11 +1,13 @@
1
+ import type { ConfigExtensionOptions } from './config-extension.js';
1
2
  import { Model } from '@docupace/ihub-core';
2
3
  export interface ConfigStore {
3
4
  supportsRefresh(): boolean;
4
- getConfig(path: string): any;
5
- listConfigs(path: string): any;
6
- updateConfig(path: string, config: any): any;
7
- init(): void;
8
- refresh(): void;
5
+ hasConfig(path: string): Promise<boolean>;
6
+ getConfig(path: string): Promise<any>;
7
+ listConfigs(path: string): Promise<any>;
8
+ updateConfig(path: string, config: any): Promise<any>;
9
+ init(): Promise<void>;
10
+ refresh(): Promise<void>;
9
11
  }
10
12
  export interface ConfigStoreParams {
11
13
  key: string;
@@ -18,28 +20,46 @@ export interface ConfigStoreParams {
18
20
  export interface DefaultConfigServiceParams {
19
21
  model?: Model;
20
22
  configStores: ConfigStoreParams[];
23
+ configInjectorResolvers?: ConfigExtensionOptions['configInjectorResolvers'];
24
+ providers?: ConfigExtensionOptions['providers'];
25
+ resolvers?: ConfigExtensionOptions['resolvers'];
21
26
  }
22
27
  export declare class ConfigFileStore implements ConfigStore {
23
- private localPath;
24
- private remotePath?;
25
- private remoteBranch?;
28
+ private readonly localPath;
29
+ private readonly remotePath?;
30
+ private readonly remoteBranch?;
26
31
  constructor(params: ConfigStoreParams);
27
32
  getLocalPath(): string;
28
33
  supportsRefresh(): boolean;
29
34
  private getFilesWithRemovedExtensions;
30
35
  private isDirectory;
31
36
  getFinalPath(fullPath: string): Promise<string>;
32
- getAbsConfig(fullPath: string): Promise<any>;
33
- getConfig(configPath: string): Promise<any>;
37
+ getAbsConfig(fullPath: string): Promise<unknown>;
38
+ getConfig(configPath: string): Promise<unknown>;
39
+ hasConfig(configPath: string): Promise<boolean>;
34
40
  listConfigs(configPath: string): Promise<string[]>;
35
41
  updateConfig(configPath: string, config: any): Promise<void>;
36
42
  init(): Promise<void>;
37
43
  refresh(): Promise<void>;
38
44
  }
39
45
  declare class ConfigService {
40
- private configStores;
41
- private model?;
42
- constructor(configStores: ConfigStore[], model?: Model);
46
+ private readonly configStores;
47
+ private readonly model?;
48
+ private readonly configInjectorResolvers;
49
+ private readonly providers;
50
+ private readonly resolvers;
51
+ constructor(model: Model | undefined, configStores: ConfigStore[], extensionOptions?: ConfigExtensionOptions);
52
+ private filterConfigsBySearch;
53
+ private appendTestConfigPaths;
54
+ private mapDataRecords;
55
+ private mergeRefValues;
56
+ private isObjectRecord;
57
+ private hasRef;
58
+ private processObjectArray;
59
+ private processObjectProperties;
60
+ private applyReferenceOverrides;
61
+ private processReferencedObject;
62
+ private injectConfigValue;
43
63
  generateResolvers(): void;
44
64
  processConfig(config: any, context: any, processProviders?: boolean): Promise<any>;
45
65
  getRefConfig(configPath: string, refConfigPath: string, context: any, values?: any): Promise<any>;
@@ -50,6 +70,7 @@ declare class ConfigService {
50
70
  processObject(configPath: string, obj: any, context: any, values?: any): Promise<any>;
51
71
  private getFileMimeType;
52
72
  getConfigFromStore(path: string): Promise<any>;
73
+ hasConfig(configPath: string): Promise<boolean>;
53
74
  getConfig(configPath: string, context: any, values?: any, processProviders?: boolean): Promise<any>;
54
75
  getDirectConfig(configPath: string, context: any, values?: any, processProviders?: boolean): Promise<any>;
55
76
  listDirectConfigs(configPath: string): Promise<any[]>;
@@ -57,6 +78,6 @@ declare class ConfigService {
57
78
  getPageConfig(pagePath: string, context: any, processConfig?: boolean): Promise<any>;
58
79
  init(): Promise<void[]>;
59
80
  }
60
- export declare const defaultConfigService: ({ model, configStores, }: DefaultConfigServiceParams) => ConfigService;
81
+ export declare const defaultConfigService: ({ model, configStores, configInjectorResolvers, providers, resolvers, }: DefaultConfigServiceParams) => ConfigService;
61
82
  export default ConfigService;
62
83
  //# sourceMappingURL=config-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-service.d.ts","sourceRoot":"","sources":["../src/config-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAgB5C,MAAM,WAAW,WAAW;IAC1B,eAAe,IAAI,OAAO,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;IAC7B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;IAC/B,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAC7C,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,YAAY,EAAE,iBAAiB,EAAE,CAAC;CACnC;AAED,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAS;gBAElB,MAAM,EAAE,iBAAiB;IAM9B,YAAY,IAAI,MAAM;IAItB,eAAe,IAAI,OAAO;YAInB,6BAA6B;YAkB7B,WAAW;IAcnB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB/C,YAAY,CAAC,QAAQ,EAAE,MAAM;IAO7B,SAAS,CAAC,UAAU,EAAE,MAAM;IAK5B,WAAW,CAAC,UAAU,EAAE,MAAM;IAS9B,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG;IAO5C,IAAI;IAwBJ,OAAO;CAWd;AAED,cAAM,aAAa;IACjB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,KAAK,CAAC,CAAQ;gBAEV,YAAY,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK;IAQtD,iBAAiB;IAyLX,aAAa,CACjB,MAAM,EAAE,GAAG,EACX,OAAO,EAAE,GAAG,EACZ,gBAAgB,CAAC,EAAE,OAAO,GACzB,OAAO,CAAC,GAAG,CAAC;IAkDT,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,GAAG,EACZ,MAAM,CAAC,EAAE,GAAG;IAYd,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,GAAG;IAuBlD,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE;IAYzB,wBAAwB,CAC5B,MAAM,EAAE,GAAG,EACX,WAAW,EAAE,GAAG,EAChB,OAAO,EAAE,GAAG,GACX,OAAO,CAAC,GAAG,CAAC;YAgDD,qBAAqB;IA4C7B,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,GAAG,EACZ,MAAM,GAAE,GAAQ,GACf,OAAO,CAAC,GAAG,CAAC;IAoEf,OAAO,CAAC,eAAe;IAcjB,kBAAkB,CAAC,IAAI,EAAE,MAAM;IAiB/B,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,GAAG,EACZ,MAAM,CAAC,EAAE,GAAG,EACZ,gBAAgB,CAAC,EAAE,OAAO;IAMtB,eAAe,CACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,GAAG,EACZ,MAAM,CAAC,EAAE,GAAG,EACZ,gBAAgB,CAAC,EAAE,OAAO;IAatB,iBAAiB,CAAC,UAAU,EAAE,MAAM;IASpC,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,GAAG,EACX,OAAO,EAAE,GAAG,GACX,OAAO,CAAC,GAAG,CAAC;IAMT,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,OAAO;IAUrE,IAAI;CAKX;AAED,eAAO,MAAM,oBAAoB,GAAI,0BAGlC,0BAA0B,KAAG,aAK/B,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"config-service.d.ts","sourceRoot":"","sources":["../src/config-service.ts"],"names":[],"mappings":"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"}