@konker.dev/config-o-tron 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +131 -0
  3. package/dist/api.d.ts +24 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +44 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/cli.d.ts +8 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +267 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/commands/delete.d.ts +22 -0
  12. package/dist/commands/delete.d.ts.map +1 -0
  13. package/dist/commands/delete.js +105 -0
  14. package/dist/commands/delete.js.map +1 -0
  15. package/dist/commands/delete.test.d.ts +2 -0
  16. package/dist/commands/delete.test.d.ts.map +1 -0
  17. package/dist/commands/delete.test.js +165 -0
  18. package/dist/commands/delete.test.js.map +1 -0
  19. package/dist/commands/export.d.ts +31 -0
  20. package/dist/commands/export.d.ts.map +1 -0
  21. package/dist/commands/export.js +117 -0
  22. package/dist/commands/export.js.map +1 -0
  23. package/dist/commands/export.test.d.ts +2 -0
  24. package/dist/commands/export.test.d.ts.map +1 -0
  25. package/dist/commands/export.test.js +173 -0
  26. package/dist/commands/export.test.js.map +1 -0
  27. package/dist/commands/index.d.ts +10 -0
  28. package/dist/commands/index.d.ts.map +1 -0
  29. package/dist/commands/index.js +10 -0
  30. package/dist/commands/index.js.map +1 -0
  31. package/dist/commands/list.d.ts +37 -0
  32. package/dist/commands/list.d.ts.map +1 -0
  33. package/dist/commands/list.js +107 -0
  34. package/dist/commands/list.js.map +1 -0
  35. package/dist/commands/list.test.d.ts +2 -0
  36. package/dist/commands/list.test.d.ts.map +1 -0
  37. package/dist/commands/list.test.js +275 -0
  38. package/dist/commands/list.test.js.map +1 -0
  39. package/dist/commands/snapshot.d.ts +67 -0
  40. package/dist/commands/snapshot.d.ts.map +1 -0
  41. package/dist/commands/snapshot.js +261 -0
  42. package/dist/commands/snapshot.js.map +1 -0
  43. package/dist/commands/snapshot.test.d.ts +2 -0
  44. package/dist/commands/snapshot.test.d.ts.map +1 -0
  45. package/dist/commands/snapshot.test.js +527 -0
  46. package/dist/commands/snapshot.test.js.map +1 -0
  47. package/dist/commands/upsert.d.ts +33 -0
  48. package/dist/commands/upsert.d.ts.map +1 -0
  49. package/dist/commands/upsert.js +98 -0
  50. package/dist/commands/upsert.js.map +1 -0
  51. package/dist/commands/upsert.test.d.ts +2 -0
  52. package/dist/commands/upsert.test.d.ts.map +1 -0
  53. package/dist/commands/upsert.test.js +184 -0
  54. package/dist/commands/upsert.test.js.map +1 -0
  55. package/dist/commands/validate.d.ts +23 -0
  56. package/dist/commands/validate.d.ts.map +1 -0
  57. package/dist/commands/validate.js +138 -0
  58. package/dist/commands/validate.js.map +1 -0
  59. package/dist/commands/validate.test.d.ts +2 -0
  60. package/dist/commands/validate.test.d.ts.map +1 -0
  61. package/dist/commands/validate.test.js +210 -0
  62. package/dist/commands/validate.test.js.map +1 -0
  63. package/dist/config.d.ts +75 -0
  64. package/dist/config.d.ts.map +1 -0
  65. package/dist/config.js +212 -0
  66. package/dist/config.js.map +1 -0
  67. package/dist/errors.d.ts +107 -0
  68. package/dist/errors.d.ts.map +1 -0
  69. package/dist/errors.js +362 -0
  70. package/dist/errors.js.map +1 -0
  71. package/dist/index.d.ts +10 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +8 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/lib/flatten.d.ts +84 -0
  76. package/dist/lib/flatten.d.ts.map +1 -0
  77. package/dist/lib/flatten.js +158 -0
  78. package/dist/lib/flatten.js.map +1 -0
  79. package/dist/lib/flatten.test.d.ts +2 -0
  80. package/dist/lib/flatten.test.d.ts.map +1 -0
  81. package/dist/lib/flatten.test.js +230 -0
  82. package/dist/lib/flatten.test.js.map +1 -0
  83. package/dist/lib/format.d.ts +41 -0
  84. package/dist/lib/format.d.ts.map +1 -0
  85. package/dist/lib/format.js +182 -0
  86. package/dist/lib/format.js.map +1 -0
  87. package/dist/lib/format.test.d.ts +2 -0
  88. package/dist/lib/format.test.d.ts.map +1 -0
  89. package/dist/lib/format.test.js +317 -0
  90. package/dist/lib/format.test.js.map +1 -0
  91. package/dist/lib/index.d.ts +8 -0
  92. package/dist/lib/index.d.ts.map +1 -0
  93. package/dist/lib/index.js +8 -0
  94. package/dist/lib/index.js.map +1 -0
  95. package/dist/lib/merge.d.ts +42 -0
  96. package/dist/lib/merge.d.ts.map +1 -0
  97. package/dist/lib/merge.js +167 -0
  98. package/dist/lib/merge.js.map +1 -0
  99. package/dist/lib/merge.test.d.ts +2 -0
  100. package/dist/lib/merge.test.d.ts.map +1 -0
  101. package/dist/lib/merge.test.js +218 -0
  102. package/dist/lib/merge.test.js.map +1 -0
  103. package/dist/lib/redact.d.ts +29 -0
  104. package/dist/lib/redact.d.ts.map +1 -0
  105. package/dist/lib/redact.js +77 -0
  106. package/dist/lib/redact.js.map +1 -0
  107. package/dist/lib/redact.test.d.ts +2 -0
  108. package/dist/lib/redact.test.d.ts.map +1 -0
  109. package/dist/lib/redact.test.js +192 -0
  110. package/dist/lib/redact.test.js.map +1 -0
  111. package/dist/providers/AwsSsmProvider.d.ts +3 -0
  112. package/dist/providers/AwsSsmProvider.d.ts.map +1 -0
  113. package/dist/providers/AwsSsmProvider.js +230 -0
  114. package/dist/providers/AwsSsmProvider.js.map +1 -0
  115. package/dist/providers/AwsSsmProvider.test.d.ts +5 -0
  116. package/dist/providers/AwsSsmProvider.test.d.ts.map +1 -0
  117. package/dist/providers/AwsSsmProvider.test.js +200 -0
  118. package/dist/providers/AwsSsmProvider.test.js.map +1 -0
  119. package/dist/providers/MockProvider.d.ts +21 -0
  120. package/dist/providers/MockProvider.d.ts.map +1 -0
  121. package/dist/providers/MockProvider.js +118 -0
  122. package/dist/providers/MockProvider.js.map +1 -0
  123. package/dist/providers/MockProvider.test.d.ts +2 -0
  124. package/dist/providers/MockProvider.test.d.ts.map +1 -0
  125. package/dist/providers/MockProvider.test.js +166 -0
  126. package/dist/providers/MockProvider.test.js.map +1 -0
  127. package/dist/providers/Provider.d.ts +95 -0
  128. package/dist/providers/Provider.d.ts.map +1 -0
  129. package/dist/providers/Provider.js +49 -0
  130. package/dist/providers/Provider.js.map +1 -0
  131. package/dist/providers/Provider.test.d.ts +2 -0
  132. package/dist/providers/Provider.test.d.ts.map +1 -0
  133. package/dist/providers/Provider.test.js +136 -0
  134. package/dist/providers/Provider.test.js.map +1 -0
  135. package/dist/providers/guards.d.ts +13 -0
  136. package/dist/providers/guards.d.ts.map +1 -0
  137. package/dist/providers/guards.js +60 -0
  138. package/dist/providers/guards.js.map +1 -0
  139. package/dist/providers/guards.test.d.ts +2 -0
  140. package/dist/providers/guards.test.d.ts.map +1 -0
  141. package/dist/providers/guards.test.js +84 -0
  142. package/dist/providers/guards.test.js.map +1 -0
  143. package/dist/providers/index.d.ts +8 -0
  144. package/dist/providers/index.d.ts.map +1 -0
  145. package/dist/providers/index.js +8 -0
  146. package/dist/providers/index.js.map +1 -0
  147. package/dist/providers/registry.d.ts +27 -0
  148. package/dist/providers/registry.d.ts.map +1 -0
  149. package/dist/providers/registry.js +50 -0
  150. package/dist/providers/registry.js.map +1 -0
  151. package/dist/providers/registry.test.d.ts +5 -0
  152. package/dist/providers/registry.test.d.ts.map +1 -0
  153. package/dist/providers/registry.test.js +89 -0
  154. package/dist/providers/registry.test.js.map +1 -0
  155. package/dist/schema/index.d.ts +8 -0
  156. package/dist/schema/index.d.ts.map +1 -0
  157. package/dist/schema/index.js +8 -0
  158. package/dist/schema/index.js.map +1 -0
  159. package/dist/schema/loader.d.ts +21 -0
  160. package/dist/schema/loader.d.ts.map +1 -0
  161. package/dist/schema/loader.js +68 -0
  162. package/dist/schema/loader.js.map +1 -0
  163. package/dist/schema/loader.test.d.ts +2 -0
  164. package/dist/schema/loader.test.d.ts.map +1 -0
  165. package/dist/schema/loader.test.js +111 -0
  166. package/dist/schema/loader.test.js.map +1 -0
  167. package/dist/schema/parser.d.ts +17 -0
  168. package/dist/schema/parser.d.ts.map +1 -0
  169. package/dist/schema/parser.js +55 -0
  170. package/dist/schema/parser.js.map +1 -0
  171. package/dist/schema/parser.test.d.ts +2 -0
  172. package/dist/schema/parser.test.d.ts.map +1 -0
  173. package/dist/schema/parser.test.js +62 -0
  174. package/dist/schema/parser.test.js.map +1 -0
  175. package/dist/schema/resolver.d.ts +16 -0
  176. package/dist/schema/resolver.d.ts.map +1 -0
  177. package/dist/schema/resolver.js +41 -0
  178. package/dist/schema/resolver.js.map +1 -0
  179. package/dist/schema/resolver.test.d.ts +2 -0
  180. package/dist/schema/resolver.test.d.ts.map +1 -0
  181. package/dist/schema/resolver.test.js +77 -0
  182. package/dist/schema/resolver.test.js.map +1 -0
  183. package/dist/schema/validator.d.ts +16 -0
  184. package/dist/schema/validator.d.ts.map +1 -0
  185. package/dist/schema/validator.js +21 -0
  186. package/dist/schema/validator.js.map +1 -0
  187. package/dist/schema/validator.test.d.ts +2 -0
  188. package/dist/schema/validator.test.d.ts.map +1 -0
  189. package/dist/schema/validator.test.js +40 -0
  190. package/dist/schema/validator.test.js.map +1 -0
  191. package/dist/test/fixtures/index.d.ts +39 -0
  192. package/dist/test/fixtures/index.d.ts.map +1 -0
  193. package/dist/test/fixtures/index.js +85 -0
  194. package/dist/test/fixtures/index.js.map +1 -0
  195. package/dist/test/fixtures/schema.basic.d.ts +16 -0
  196. package/dist/test/fixtures/schema.basic.d.ts.map +1 -0
  197. package/dist/test/fixtures/schema.basic.js +16 -0
  198. package/dist/test/fixtures/schema.basic.js.map +1 -0
  199. package/dist/test/fixtures/schema.basic.zod.d.ts +58 -0
  200. package/dist/test/fixtures/schema.basic.zod.d.ts.map +1 -0
  201. package/dist/test/fixtures/schema.basic.zod.js +16 -0
  202. package/dist/test/fixtures/schema.basic.zod.js.map +1 -0
  203. package/dist/validation/effect.d.ts +3 -0
  204. package/dist/validation/effect.d.ts.map +1 -0
  205. package/dist/validation/effect.js +368 -0
  206. package/dist/validation/effect.js.map +1 -0
  207. package/dist/validation/effect.test.d.ts +2 -0
  208. package/dist/validation/effect.test.d.ts.map +1 -0
  209. package/dist/validation/effect.test.js +137 -0
  210. package/dist/validation/effect.test.js.map +1 -0
  211. package/dist/validation/hash.d.ts +2 -0
  212. package/dist/validation/hash.d.ts.map +1 -0
  213. package/dist/validation/hash.js +27 -0
  214. package/dist/validation/hash.js.map +1 -0
  215. package/dist/validation/hash.test.d.ts +2 -0
  216. package/dist/validation/hash.test.d.ts.map +1 -0
  217. package/dist/validation/hash.test.js +25 -0
  218. package/dist/validation/hash.test.js.map +1 -0
  219. package/dist/validation/index.d.ts +7 -0
  220. package/dist/validation/index.d.ts.map +1 -0
  221. package/dist/validation/index.js +11 -0
  222. package/dist/validation/index.js.map +1 -0
  223. package/dist/validation/parse.d.ts +7 -0
  224. package/dist/validation/parse.d.ts.map +1 -0
  225. package/dist/validation/parse.js +44 -0
  226. package/dist/validation/parse.js.map +1 -0
  227. package/dist/validation/parse.test.d.ts +2 -0
  228. package/dist/validation/parse.test.d.ts.map +1 -0
  229. package/dist/validation/parse.test.js +47 -0
  230. package/dist/validation/parse.test.js.map +1 -0
  231. package/dist/validation/types.d.ts +33 -0
  232. package/dist/validation/types.d.ts.map +1 -0
  233. package/dist/validation/types.js +2 -0
  234. package/dist/validation/types.js.map +1 -0
  235. package/dist/validation/zod.d.ts +3 -0
  236. package/dist/validation/zod.d.ts.map +1 -0
  237. package/dist/validation/zod.js +326 -0
  238. package/dist/validation/zod.js.map +1 -0
  239. package/dist/validation/zod.test.d.ts +2 -0
  240. package/dist/validation/zod.test.d.ts.map +1 -0
  241. package/dist/validation/zod.test.js +161 -0
  242. package/dist/validation/zod.test.js.map +1 -0
  243. package/package.json +242 -0
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Provider Guards Tests
3
+ */
4
+ import * as Effect from 'effect/Effect';
5
+ import { afterEach, describe, expect, it } from 'vitest';
6
+ import { providerGuardMismatchError } from '../errors.js';
7
+ import { checkProviderGuards, getProviderGuardConfig } from './guards.js';
8
+ import {} from './Provider.js';
9
+ describe('provider guards', () => {
10
+ const ctx = {
11
+ prefix: '/config-o-tron',
12
+ service: 'api',
13
+ env: 'dev',
14
+ };
15
+ const baseProvider = {
16
+ name: 'mock',
17
+ capabilities: {},
18
+ fetch: () => Effect.succeed({}),
19
+ upsert: () => Effect.void,
20
+ delete: () => Effect.void,
21
+ };
22
+ afterEach(() => {
23
+ // eslint-disable-next-line fp/no-delete
24
+ delete process.env.CONFIG_O_TRON_IGNORE_PROVIDER_GUARDS;
25
+ });
26
+ it('getProviderGuardConfig should match provider names case-insensitively', () => {
27
+ const guards = {
28
+ 'Aws-Ssm': { region: 'us-east-1' },
29
+ };
30
+ expect(getProviderGuardConfig('aws-ssm', guards)).toEqual({ region: 'us-east-1' });
31
+ expect(getProviderGuardConfig('Aws-Ssm', guards)).toEqual({ region: 'us-east-1' });
32
+ });
33
+ it('getProviderGuardConfig should return direct matches', () => {
34
+ const guards = {
35
+ mock: { env: 'dev' },
36
+ };
37
+ expect(getProviderGuardConfig('mock', guards)).toEqual({ env: 'dev' });
38
+ });
39
+ it('getProviderGuardConfig should match normalized provider names', () => {
40
+ const guards = {
41
+ 'aws-ssm': { region: 'us-east-1' },
42
+ };
43
+ expect(getProviderGuardConfig('Aws-Ssm', guards)).toEqual({ region: 'us-east-1' });
44
+ });
45
+ it('checkProviderGuards should no-op when provider lacks guard hook', async () => {
46
+ const provider = {
47
+ ...baseProvider,
48
+ };
49
+ await expect(Effect.runPromise(checkProviderGuards(provider, ctx, {}))).resolves.toBeUndefined();
50
+ });
51
+ it('checkProviderGuards should no-op when provider has no guard config', async () => {
52
+ const provider = {
53
+ ...baseProvider,
54
+ checkGuards: () => Effect.fail(providerGuardMismatchError('mock', 'should not run')),
55
+ };
56
+ await expect(Effect.runPromise(checkProviderGuards(provider, ctx, {}))).resolves.toBeUndefined();
57
+ });
58
+ it('checkProviderGuards should skip when override flag is enabled', async () => {
59
+ process.env.CONFIG_O_TRON_IGNORE_PROVIDER_GUARDS = 'true';
60
+ let called = false;
61
+ const provider = {
62
+ ...baseProvider,
63
+ checkGuards: () => Effect.sync(() => {
64
+ called = true;
65
+ }),
66
+ };
67
+ const guards = { mock: { env: 'dev' } };
68
+ await expect(Effect.runPromise(checkProviderGuards(provider, ctx, guards))).resolves.toBeUndefined();
69
+ expect(called).toBe(false);
70
+ });
71
+ it('checkProviderGuards should pass guard config to provider', async () => {
72
+ let received;
73
+ const provider = {
74
+ ...baseProvider,
75
+ checkGuards: (_ctx, guards) => Effect.sync(() => {
76
+ received = guards;
77
+ }),
78
+ };
79
+ const guards = { mock: { env: 'dev' } };
80
+ await Effect.runPromise(checkProviderGuards(provider, ctx, guards));
81
+ expect(received).toEqual({ env: 'dev' });
82
+ });
83
+ });
84
+ //# sourceMappingURL=guards.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.test.js","sourceRoot":"","sources":["../../src/providers/guards.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Providers module exports
3
+ */
4
+ export * from './Provider.js';
5
+ export * from './MockProvider.js';
6
+ export * from './AwsSsmProvider.js';
7
+ export * from './registry.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Providers module exports
3
+ */
4
+ export * from './Provider.js';
5
+ export * from './MockProvider.js';
6
+ export * from './AwsSsmProvider.js';
7
+ export * from './registry.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Provider Registry
3
+ *
4
+ * Manages available providers and returns instances by name
5
+ */
6
+ import * as Effect from 'effect/Effect';
7
+ import { type ProviderError } from '../errors.js';
8
+ import { type Provider } from './Provider.js';
9
+ type ProviderFactory = () => Provider;
10
+ /**
11
+ * Register a provider factory
12
+ */
13
+ export declare function registerProvider(name: string, factory: ProviderFactory): void;
14
+ /**
15
+ * Get a provider by name
16
+ */
17
+ export declare function getProvider(name: string): Effect.Effect<Provider, ProviderError>;
18
+ /**
19
+ * Get list of registered provider names
20
+ */
21
+ export declare function getRegisteredProviders(): ReadonlyArray<string>;
22
+ /**
23
+ * Check if a provider is registered
24
+ */
25
+ export declare function isProviderRegistered(name: string): boolean;
26
+ export {};
27
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAM9C,KAAK,eAAe,GAAG,MAAM,QAAQ,CAAC;AAatC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAE7E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,CAKhF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,aAAa,CAAC,MAAM,CAAC,CAE9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Provider Registry
3
+ *
4
+ * Manages available providers and returns instances by name
5
+ */
6
+ import * as Effect from 'effect/Effect';
7
+ import { connectionFailedError } from '../errors.js';
8
+ import { mockProvider } from './MockProvider.js';
9
+ import {} from './Provider.js';
10
+ // --------------------------------------------------------------------------
11
+ // Registry
12
+ // --------------------------------------------------------------------------
13
+ /**
14
+ * Global provider registry
15
+ */
16
+ const registry = new Map();
17
+ /**
18
+ * Register a provider factory
19
+ */
20
+ export function registerProvider(name, factory) {
21
+ registry.set(name.toLowerCase(), factory);
22
+ }
23
+ /**
24
+ * Get a provider by name
25
+ */
26
+ export function getProvider(name) {
27
+ const factory = registry.get(name.toLowerCase());
28
+ return factory
29
+ ? Effect.succeed(factory())
30
+ : Effect.fail(connectionFailedError(name, `Provider '${name}' is not registered`));
31
+ }
32
+ /**
33
+ * Get list of registered provider names
34
+ */
35
+ export function getRegisteredProviders() {
36
+ return Array.from(registry.keys());
37
+ }
38
+ /**
39
+ * Check if a provider is registered
40
+ */
41
+ export function isProviderRegistered(name) {
42
+ return registry.has(name.toLowerCase());
43
+ }
44
+ // --------------------------------------------------------------------------
45
+ // Default Providers
46
+ // --------------------------------------------------------------------------
47
+ // Register mock provider
48
+ registerProvider('mock', () => mockProvider);
49
+ // Note: AwsSsmProvider will be registered separately in AwsSsmProvider.ts
50
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,qBAAqB,EAAsB,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAiB,MAAM,eAAe,CAAC;AAU9C,6EAA6E;AAC7E,WAAW;AACX,6EAA6E;AAE7E;;GAEG;AACH,MAAM,QAAQ,GAAqB,IAAI,GAAG,EAAE,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,OAAwB;IACrE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,OAAO,OAAO;QACZ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,aAAa,IAAI,qBAAqB,CAAC,CAAC,CAAC;AACvF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,6EAA6E;AAC7E,oBAAoB;AACpB,6EAA6E;AAE7E,yBAAyB;AACzB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;AAE7C,0EAA0E"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Provider Registry Tests
3
+ */
4
+ import './AwsSsmProvider.js';
5
+ //# sourceMappingURL=registry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../src/providers/registry.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,qBAAqB,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Provider Registry Tests
3
+ */
4
+ // Import AwsSsmProvider to trigger its side-effect registration
5
+ import './AwsSsmProvider.js';
6
+ import * as Effect from 'effect/Effect';
7
+ import { describe, expect, it } from 'vitest';
8
+ import { ErrorCode } from '../errors.js';
9
+ import { getProvider, getRegisteredProviders, isProviderRegistered, registerProvider } from './registry.js';
10
+ describe('Provider Registry', () => {
11
+ describe('registerProvider', () => {
12
+ it('should register a provider factory', () => {
13
+ const customProvider = {
14
+ name: 'custom-test',
15
+ capabilities: {},
16
+ fetch: () => Effect.succeed({}),
17
+ upsert: () => Effect.void,
18
+ delete: () => Effect.void,
19
+ };
20
+ registerProvider('custom-test', () => customProvider);
21
+ expect(isProviderRegistered('custom-test')).toBe(true);
22
+ });
23
+ it('should normalize provider names to lowercase', () => {
24
+ const customProvider = {
25
+ name: 'uppercase-test',
26
+ capabilities: {},
27
+ fetch: () => Effect.succeed({}),
28
+ upsert: () => Effect.void,
29
+ delete: () => Effect.void,
30
+ };
31
+ registerProvider('UPPERCASE-TEST', () => customProvider);
32
+ expect(isProviderRegistered('uppercase-test')).toBe(true);
33
+ expect(isProviderRegistered('UPPERCASE-TEST')).toBe(true);
34
+ });
35
+ });
36
+ describe('getProvider', () => {
37
+ it('should return mock provider', async () => {
38
+ const provider = await Effect.runPromise(getProvider('mock'));
39
+ expect(provider.name).toBe('mock');
40
+ });
41
+ it('should return aws-ssm provider', async () => {
42
+ const provider = await Effect.runPromise(getProvider('aws-ssm'));
43
+ expect(provider.name).toBe('aws-ssm');
44
+ });
45
+ it('should be case-insensitive', async () => {
46
+ const provider1 = await Effect.runPromise(getProvider('Mock'));
47
+ const provider2 = await Effect.runPromise(getProvider('MOCK'));
48
+ expect(provider1.name).toBe('mock');
49
+ expect(provider2.name).toBe('mock');
50
+ });
51
+ it('should fail for unregistered provider', async () => {
52
+ const exit = await Effect.runPromiseExit(getProvider('nonexistent'));
53
+ expect(exit._tag).toBe('Failure');
54
+ if (exit._tag === 'Failure') {
55
+ const cause = exit.cause;
56
+ if (cause._tag === 'Fail') {
57
+ expect(cause.error.context.code).toBe(ErrorCode.PROV001);
58
+ }
59
+ }
60
+ });
61
+ });
62
+ describe('getRegisteredProviders', () => {
63
+ it('should return list of registered provider names', () => {
64
+ const providers = getRegisteredProviders();
65
+ expect(providers).toContain('mock');
66
+ expect(providers).toContain('aws-ssm');
67
+ });
68
+ it('should return lowercase names', () => {
69
+ const providers = getRegisteredProviders();
70
+ for (const name of providers) {
71
+ expect(name).toBe(name.toLowerCase());
72
+ }
73
+ });
74
+ });
75
+ describe('isProviderRegistered', () => {
76
+ it('should return true for registered providers', () => {
77
+ expect(isProviderRegistered('mock')).toBe(true);
78
+ expect(isProviderRegistered('aws-ssm')).toBe(true);
79
+ });
80
+ it('should return false for unregistered providers', () => {
81
+ expect(isProviderRegistered('nonexistent')).toBe(false);
82
+ });
83
+ it('should be case-insensitive', () => {
84
+ expect(isProviderRegistered('Mock')).toBe(true);
85
+ expect(isProviderRegistered('AWS-SSM')).toBe(true);
86
+ });
87
+ });
88
+ });
89
+ //# sourceMappingURL=registry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../src/providers/registry.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Schema module exports
3
+ */
4
+ export * from './loader.js';
5
+ export * from './resolver.js';
6
+ export * from './parser.js';
7
+ export * from './validator.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Schema module exports
3
+ */
4
+ export * from './loader.js';
5
+ export * from './resolver.js';
6
+ export * from './parser.js';
7
+ export * from './validator.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { type ConfigOTronError, type SystemError, type ValidationError } from '../errors.js';
3
+ import { type ValidationKind, type ValidatorAdapter } from '../validation/index.js';
4
+ export type SchemaLoadResult = {
5
+ readonly schema: unknown;
6
+ readonly schemaHash: string;
7
+ readonly adapter: ValidatorAdapter;
8
+ readonly validation: ValidationKind;
9
+ };
10
+ /**
11
+ * Load a schema from a TypeScript file
12
+ *
13
+ * @param schemaPath - Path to the schema file
14
+ * @param validation - Validation layer (effect | zod)
15
+ */
16
+ export declare function loadSchema(schemaPath: string, validation: ValidationKind): Effect.Effect<SchemaLoadResult, SystemError | ValidationError | ConfigOTronError>;
17
+ /**
18
+ * Load schema with fallback to default path
19
+ */
20
+ export declare function loadSchemaWithDefaults(schemaPath?: string, validation?: ValidationKind): Effect.Effect<SchemaLoadResult, SystemError | ValidationError | ConfigOTronError>;
21
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/schema/loader.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,KAAK,gBAAgB,EAAqB,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChH,OAAO,EAAuB,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAMzG,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;CACrC,CAAC;AAoBF;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,cAAc,GACzB,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,WAAW,GAAG,eAAe,GAAG,gBAAgB,CAAC,CA4CnF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,cAAc,GAC1B,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,WAAW,GAAG,eAAe,GAAG,gBAAgB,CAAC,CAInF"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Schema Loader
3
+ *
4
+ * Dynamically loads validation schemas from TypeScript files
5
+ */
6
+ import * as fs from 'node:fs';
7
+ import * as path from 'node:path';
8
+ import { pathToFileURL } from 'node:url';
9
+ import * as Effect from 'effect/Effect';
10
+ import { pipe } from 'effect/Function';
11
+ import { fileNotFoundError } from '../errors.js';
12
+ import { getValidatorAdapter } from '../validation/index.js';
13
+ // --------------------------------------------------------------------------
14
+ // Schema Loading
15
+ // --------------------------------------------------------------------------
16
+ /**
17
+ * Check if a file exists and is readable
18
+ */
19
+ function fileExists(filePath) {
20
+ return Effect.sync(() => {
21
+ try {
22
+ fs.accessSync(filePath, fs.constants.R_OK);
23
+ return true;
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ });
29
+ }
30
+ /**
31
+ * Load a schema from a TypeScript file
32
+ *
33
+ * @param schemaPath - Path to the schema file
34
+ * @param validation - Validation layer (effect | zod)
35
+ */
36
+ export function loadSchema(schemaPath, validation) {
37
+ const adapter = getValidatorAdapter(validation);
38
+ return pipe(Effect.sync(() => path.resolve(schemaPath)), Effect.flatMap((absolutePath) => pipe(fileExists(absolutePath), Effect.flatMap((exists) => {
39
+ if (!exists) {
40
+ return Effect.fail(fileNotFoundError(absolutePath));
41
+ }
42
+ const fileUrl = pathToFileURL(absolutePath).href;
43
+ return pipe(Effect.tryPromise({
44
+ try: () => import(fileUrl),
45
+ catch: () => fileNotFoundError(absolutePath),
46
+ }), Effect.flatMap((module) => {
47
+ const schema = module.ConfigSchema;
48
+ if (!schema) {
49
+ const availableExports = Object.keys(module).filter((k) => k !== 'default' && k !== '__esModule');
50
+ return Effect.fail(fileNotFoundError(`Export 'ConfigSchema' not found in ${absolutePath}. Available exports: ${availableExports.join(', ')}`));
51
+ }
52
+ if (!adapter.isSchema(schema)) {
53
+ return Effect.fail(fileNotFoundError(`Export 'ConfigSchema' is not a valid ${adapter.name} schema`));
54
+ }
55
+ const schemaHash = adapter.computeSchemaHash(schema);
56
+ return Effect.succeed({ schema, schemaHash, adapter, validation });
57
+ }));
58
+ }))));
59
+ }
60
+ /**
61
+ * Load schema with fallback to default path
62
+ */
63
+ export function loadSchemaWithDefaults(schemaPath, validation) {
64
+ const resolvedPath = schemaPath ?? 'src/schema.ts';
65
+ const resolvedValidation = validation ?? 'effect';
66
+ return loadSchema(resolvedPath, resolvedValidation);
67
+ }
68
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/schema/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=loader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.test.d.ts","sourceRoot":"","sources":["../../src/schema/loader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Schema Loader Tests
3
+ */
4
+ import * as fs from 'node:fs';
5
+ import * as os from 'node:os';
6
+ import * as path from 'node:path';
7
+ import * as Effect from 'effect/Effect';
8
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
9
+ import { ErrorCode } from '../errors.js';
10
+ import { loadSchema, loadSchemaWithDefaults } from './loader.js';
11
+ describe('Schema Loader', () => {
12
+ let tempDir;
13
+ const createdFiles = [];
14
+ beforeEach(() => {
15
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'config-o-tron-loader-test-'));
16
+ });
17
+ afterEach(() => {
18
+ for (const file of createdFiles) {
19
+ try {
20
+ if (fs.existsSync(file)) {
21
+ fs.unlinkSync(file);
22
+ }
23
+ }
24
+ catch {
25
+ // Ignore cleanup errors
26
+ }
27
+ }
28
+ createdFiles.length = 0;
29
+ try {
30
+ fs.rmSync(tempDir, { recursive: true, force: true });
31
+ }
32
+ catch {
33
+ // Ignore cleanup errors
34
+ }
35
+ });
36
+ it('fails for non-existent file', async () => {
37
+ const exit = await Effect.runPromiseExit(loadSchema('/nonexistent/path/schema.ts', 'effect'));
38
+ expect(exit._tag).toBe('Failure');
39
+ if (exit._tag === 'Failure' && exit.cause._tag === 'Fail') {
40
+ expect(exit.cause.error.context.code).toBe(ErrorCode.SYS001);
41
+ }
42
+ });
43
+ it('loads Effect Schema from TypeScript file', async () => {
44
+ const schemaContent = `
45
+ import * as Schema from 'effect/Schema';
46
+ export const ConfigSchema = Schema.Struct({
47
+ database: Schema.Struct({
48
+ host: Schema.String,
49
+ port: Schema.Number,
50
+ }),
51
+ });
52
+ `;
53
+ const schemaPath = path.join(tempDir, 'schema.effect.ts');
54
+ fs.writeFileSync(schemaPath, schemaContent);
55
+ createdFiles.push(schemaPath);
56
+ const result = await Effect.runPromise(loadSchema(schemaPath, 'effect'));
57
+ expect(result.schema).toBeDefined();
58
+ expect(result.schemaHash).toMatch(/^sha256:/);
59
+ expect(result.adapter.name).toBe('effect');
60
+ });
61
+ it('loads Zod schema from TypeScript file', async () => {
62
+ const schemaContent = `
63
+ import { z } from 'zod';
64
+ export const ConfigSchema = z.object({
65
+ database: z.object({
66
+ host: z.string(),
67
+ port: z.number(),
68
+ }),
69
+ });
70
+ `;
71
+ const schemaPath = path.join(tempDir, 'schema.zod.ts');
72
+ fs.writeFileSync(schemaPath, schemaContent);
73
+ createdFiles.push(schemaPath);
74
+ const result = await Effect.runPromise(loadSchema(schemaPath, 'zod'));
75
+ expect(result.schema).toBeDefined();
76
+ expect(result.schemaHash).toMatch(/^sha256:/);
77
+ expect(result.adapter.name).toBe('zod');
78
+ });
79
+ it('fails when export not found', async () => {
80
+ const schemaContent = `
81
+ export const WrongExportName = {};
82
+ `;
83
+ const schemaPath = path.join(tempDir, 'schema.mjs');
84
+ fs.writeFileSync(schemaPath, schemaContent);
85
+ createdFiles.push(schemaPath);
86
+ const exit = await Effect.runPromiseExit(loadSchema(schemaPath, 'effect'));
87
+ expect(exit._tag).toBe('Failure');
88
+ if (exit._tag === 'Failure' && exit.cause._tag === 'Fail') {
89
+ expect(exit.cause.error.context.code).toBe(ErrorCode.SYS001);
90
+ }
91
+ });
92
+ it('fails when export is wrong validator type', async () => {
93
+ const schemaContent = `
94
+ import * as Schema from 'effect/Schema';
95
+ export const ConfigSchema = Schema.String;
96
+ `;
97
+ const schemaPath = path.join(tempDir, 'schema.invalid.ts');
98
+ fs.writeFileSync(schemaPath, schemaContent);
99
+ createdFiles.push(schemaPath);
100
+ const exit = await Effect.runPromiseExit(loadSchema(schemaPath, 'zod'));
101
+ expect(exit._tag).toBe('Failure');
102
+ if (exit._tag === 'Failure' && exit.cause._tag === 'Fail') {
103
+ expect(exit.cause.error.context.code).toBe(ErrorCode.SYS001);
104
+ }
105
+ });
106
+ it('loadSchemaWithDefaults uses defaults when not specified', async () => {
107
+ const exit = await Effect.runPromiseExit(loadSchemaWithDefaults());
108
+ expect(exit._tag).toBe('Failure');
109
+ });
110
+ });
111
+ //# sourceMappingURL=loader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../src/schema/loader.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Schema-Directed Value Parser
3
+ *
4
+ * Adapter-backed parsing of provider values
5
+ */
6
+ import * as Effect from 'effect/Effect';
7
+ import { type ValidationError } from '../errors.js';
8
+ import type { ParsedValue, ParseMode, ValidatorAdapter } from '../validation/types.js';
9
+ export type { ParseMode, ParsedValue } from '../validation/types.js';
10
+ export type ProviderParseResult = {
11
+ readonly parsed: Record<string, unknown>;
12
+ readonly unknownKeys: ReadonlyArray<string>;
13
+ };
14
+ export declare function parseValue(value: string, schema: unknown, path: string, mode: ParseMode | undefined, adapter: ValidatorAdapter): Effect.Effect<ParsedValue, ValidationError>;
15
+ export declare function serializeValue(value: unknown, schema: unknown, adapter: ValidatorAdapter): string;
16
+ export declare function parseProviderKV(kv: Record<string, string>, schema: unknown, adapter: ValidatorAdapter): Effect.Effect<ProviderParseResult, ValidationError>;
17
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/schema/parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAOvF,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErE,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC7C,CAAC;AAMF,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,YAAS,EACxB,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CAE7C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAEjG;AAED,wBAAgB,eAAe,CAC7B,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC,CA6DrD"}