@cwygoda/service-catalog-core 0.17.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 (201) hide show
  1. package/dist/adapters/index.d.ts +8 -0
  2. package/dist/adapters/index.d.ts.map +1 -0
  3. package/dist/adapters/index.js +8 -0
  4. package/dist/adapters/index.js.map +1 -0
  5. package/dist/adapters/loaders/filesystem.loader.d.ts +27 -0
  6. package/dist/adapters/loaders/filesystem.loader.d.ts.map +1 -0
  7. package/dist/adapters/loaders/filesystem.loader.js +183 -0
  8. package/dist/adapters/loaders/filesystem.loader.js.map +1 -0
  9. package/dist/adapters/loaders/filesystem.loader.test.d.ts +2 -0
  10. package/dist/adapters/loaders/filesystem.loader.test.d.ts.map +1 -0
  11. package/dist/adapters/loaders/filesystem.loader.test.js +576 -0
  12. package/dist/adapters/loaders/filesystem.loader.test.js.map +1 -0
  13. package/dist/adapters/parsers/bpmn-steps.d.ts +5 -0
  14. package/dist/adapters/parsers/bpmn-steps.d.ts.map +1 -0
  15. package/dist/adapters/parsers/bpmn-steps.js +124 -0
  16. package/dist/adapters/parsers/bpmn-steps.js.map +1 -0
  17. package/dist/adapters/parsers/bpmn-steps.test.d.ts +2 -0
  18. package/dist/adapters/parsers/bpmn-steps.test.d.ts.map +1 -0
  19. package/dist/adapters/parsers/bpmn-steps.test.js +112 -0
  20. package/dist/adapters/parsers/bpmn-steps.test.js.map +1 -0
  21. package/dist/adapters/parsers/bpmn-txt.parser.d.ts +21 -0
  22. package/dist/adapters/parsers/bpmn-txt.parser.d.ts.map +1 -0
  23. package/dist/adapters/parsers/bpmn-txt.parser.js +56 -0
  24. package/dist/adapters/parsers/bpmn-txt.parser.js.map +1 -0
  25. package/dist/adapters/parsers/bpmn-txt.parser.test.d.ts +2 -0
  26. package/dist/adapters/parsers/bpmn-txt.parser.test.d.ts.map +1 -0
  27. package/dist/adapters/parsers/bpmn-txt.parser.test.js +71 -0
  28. package/dist/adapters/parsers/bpmn-txt.parser.test.js.map +1 -0
  29. package/dist/adapters/parsers/markdown.parser.d.ts +22 -0
  30. package/dist/adapters/parsers/markdown.parser.d.ts.map +1 -0
  31. package/dist/adapters/parsers/markdown.parser.js +85 -0
  32. package/dist/adapters/parsers/markdown.parser.js.map +1 -0
  33. package/dist/adapters/parsers/markdown.parser.test.d.ts +2 -0
  34. package/dist/adapters/parsers/markdown.parser.test.d.ts.map +1 -0
  35. package/dist/adapters/parsers/markdown.parser.test.js +149 -0
  36. package/dist/adapters/parsers/markdown.parser.test.js.map +1 -0
  37. package/dist/adapters/parsers/sidecar.transforms.d.ts +104 -0
  38. package/dist/adapters/parsers/sidecar.transforms.d.ts.map +1 -0
  39. package/dist/adapters/parsers/sidecar.transforms.js +133 -0
  40. package/dist/adapters/parsers/sidecar.transforms.js.map +1 -0
  41. package/dist/adapters/parsers/toml.parser.d.ts +17 -0
  42. package/dist/adapters/parsers/toml.parser.d.ts.map +1 -0
  43. package/dist/adapters/parsers/toml.parser.js +91 -0
  44. package/dist/adapters/parsers/toml.parser.js.map +1 -0
  45. package/dist/adapters/parsers/toml.parser.test.d.ts +2 -0
  46. package/dist/adapters/parsers/toml.parser.test.d.ts.map +1 -0
  47. package/dist/adapters/parsers/toml.parser.test.js +345 -0
  48. package/dist/adapters/parsers/toml.parser.test.js.map +1 -0
  49. package/dist/adapters/parsers/yaml.parser.d.ts +17 -0
  50. package/dist/adapters/parsers/yaml.parser.d.ts.map +1 -0
  51. package/dist/adapters/parsers/yaml.parser.js +67 -0
  52. package/dist/adapters/parsers/yaml.parser.js.map +1 -0
  53. package/dist/adapters/parsers/yaml.parser.test.d.ts +2 -0
  54. package/dist/adapters/parsers/yaml.parser.test.d.ts.map +1 -0
  55. package/dist/adapters/parsers/yaml.parser.test.js +171 -0
  56. package/dist/adapters/parsers/yaml.parser.test.js.map +1 -0
  57. package/dist/adapters/persistence/json.writer.d.ts +7 -0
  58. package/dist/adapters/persistence/json.writer.d.ts.map +1 -0
  59. package/dist/adapters/persistence/json.writer.js +14 -0
  60. package/dist/adapters/persistence/json.writer.js.map +1 -0
  61. package/dist/adapters/persistence/json.writer.test.d.ts +2 -0
  62. package/dist/adapters/persistence/json.writer.test.d.ts.map +1 -0
  63. package/dist/adapters/persistence/json.writer.test.js +111 -0
  64. package/dist/adapters/persistence/json.writer.test.js.map +1 -0
  65. package/dist/domain/catalog.d.ts +28 -0
  66. package/dist/domain/catalog.d.ts.map +1 -0
  67. package/dist/domain/catalog.js +46 -0
  68. package/dist/domain/catalog.js.map +1 -0
  69. package/dist/domain/catalog.test.d.ts +2 -0
  70. package/dist/domain/catalog.test.d.ts.map +1 -0
  71. package/dist/domain/catalog.test.js +346 -0
  72. package/dist/domain/catalog.test.js.map +1 -0
  73. package/dist/domain/connection.d.ts +28 -0
  74. package/dist/domain/connection.d.ts.map +1 -0
  75. package/dist/domain/connection.js +53 -0
  76. package/dist/domain/connection.js.map +1 -0
  77. package/dist/domain/connection.test.d.ts +2 -0
  78. package/dist/domain/connection.test.d.ts.map +1 -0
  79. package/dist/domain/connection.test.js +150 -0
  80. package/dist/domain/connection.test.js.map +1 -0
  81. package/dist/domain/data-store.d.ts +23 -0
  82. package/dist/domain/data-store.d.ts.map +1 -0
  83. package/dist/domain/data-store.js +42 -0
  84. package/dist/domain/data-store.js.map +1 -0
  85. package/dist/domain/data-store.test.d.ts +2 -0
  86. package/dist/domain/data-store.test.d.ts.map +1 -0
  87. package/dist/domain/data-store.test.js +93 -0
  88. package/dist/domain/data-store.test.js.map +1 -0
  89. package/dist/domain/domain.d.ts +9 -0
  90. package/dist/domain/domain.d.ts.map +1 -0
  91. package/dist/domain/domain.js +26 -0
  92. package/dist/domain/domain.js.map +1 -0
  93. package/dist/domain/domain.test.d.ts +2 -0
  94. package/dist/domain/domain.test.d.ts.map +1 -0
  95. package/dist/domain/domain.test.js +92 -0
  96. package/dist/domain/domain.test.js.map +1 -0
  97. package/dist/domain/graph.d.ts +23 -0
  98. package/dist/domain/graph.d.ts.map +1 -0
  99. package/dist/domain/graph.js +2 -0
  100. package/dist/domain/graph.js.map +1 -0
  101. package/dist/domain/index.d.ts +8 -0
  102. package/dist/domain/index.d.ts.map +1 -0
  103. package/dist/domain/index.js +8 -0
  104. package/dist/domain/index.js.map +1 -0
  105. package/dist/domain/service.d.ts +66 -0
  106. package/dist/domain/service.d.ts.map +1 -0
  107. package/dist/domain/service.js +61 -0
  108. package/dist/domain/service.js.map +1 -0
  109. package/dist/domain/service.test.d.ts +2 -0
  110. package/dist/domain/service.test.d.ts.map +1 -0
  111. package/dist/domain/service.test.js +181 -0
  112. package/dist/domain/service.test.js.map +1 -0
  113. package/dist/domain/use-case.d.ts +47 -0
  114. package/dist/domain/use-case.d.ts.map +1 -0
  115. package/dist/domain/use-case.js +70 -0
  116. package/dist/domain/use-case.js.map +1 -0
  117. package/dist/domain/use-case.test.d.ts +2 -0
  118. package/dist/domain/use-case.test.d.ts.map +1 -0
  119. package/dist/domain/use-case.test.js +249 -0
  120. package/dist/domain/use-case.test.js.map +1 -0
  121. package/dist/index.d.ts +6 -0
  122. package/dist/index.d.ts.map +1 -0
  123. package/dist/index.js +11 -0
  124. package/dist/index.js.map +1 -0
  125. package/dist/ports/catalog-loader.port.d.ts +5 -0
  126. package/dist/ports/catalog-loader.port.d.ts.map +1 -0
  127. package/dist/ports/catalog-loader.port.js +2 -0
  128. package/dist/ports/catalog-loader.port.js.map +1 -0
  129. package/dist/ports/catalog-writer.port.d.ts +5 -0
  130. package/dist/ports/catalog-writer.port.d.ts.map +1 -0
  131. package/dist/ports/catalog-writer.port.js +2 -0
  132. package/dist/ports/catalog-writer.port.js.map +1 -0
  133. package/dist/ports/index.d.ts +3 -0
  134. package/dist/ports/index.d.ts.map +1 -0
  135. package/dist/ports/index.js +3 -0
  136. package/dist/ports/index.js.map +1 -0
  137. package/dist/schemas/catalog-config.schema.d.ts +23 -0
  138. package/dist/schemas/catalog-config.schema.d.ts.map +1 -0
  139. package/dist/schemas/catalog-config.schema.js +20 -0
  140. package/dist/schemas/catalog-config.schema.js.map +1 -0
  141. package/dist/schemas/catalog.schema.d.ts +248 -0
  142. package/dist/schemas/catalog.schema.d.ts.map +1 -0
  143. package/dist/schemas/catalog.schema.js +94 -0
  144. package/dist/schemas/catalog.schema.js.map +1 -0
  145. package/dist/schemas/connection.schema.d.ts +19 -0
  146. package/dist/schemas/connection.schema.d.ts.map +1 -0
  147. package/dist/schemas/connection.schema.js +25 -0
  148. package/dist/schemas/connection.schema.js.map +1 -0
  149. package/dist/schemas/connection.schema.test.d.ts +2 -0
  150. package/dist/schemas/connection.schema.test.d.ts.map +1 -0
  151. package/dist/schemas/connection.schema.test.js +114 -0
  152. package/dist/schemas/connection.schema.test.js.map +1 -0
  153. package/dist/schemas/data-store.schema.d.ts +20 -0
  154. package/dist/schemas/data-store.schema.d.ts.map +1 -0
  155. package/dist/schemas/data-store.schema.js +22 -0
  156. package/dist/schemas/data-store.schema.js.map +1 -0
  157. package/dist/schemas/data-store.schema.test.d.ts +2 -0
  158. package/dist/schemas/data-store.schema.test.d.ts.map +1 -0
  159. package/dist/schemas/data-store.schema.test.js +68 -0
  160. package/dist/schemas/data-store.schema.test.js.map +1 -0
  161. package/dist/schemas/domain.schema.d.ts +11 -0
  162. package/dist/schemas/domain.schema.d.ts.map +1 -0
  163. package/dist/schemas/domain.schema.js +10 -0
  164. package/dist/schemas/domain.schema.js.map +1 -0
  165. package/dist/schemas/domain.schema.test.d.ts +2 -0
  166. package/dist/schemas/domain.schema.test.d.ts.map +1 -0
  167. package/dist/schemas/domain.schema.test.js +95 -0
  168. package/dist/schemas/domain.schema.test.js.map +1 -0
  169. package/dist/schemas/index.d.ts +8 -0
  170. package/dist/schemas/index.d.ts.map +1 -0
  171. package/dist/schemas/index.js +8 -0
  172. package/dist/schemas/index.js.map +1 -0
  173. package/dist/schemas/service.schema.d.ts +61 -0
  174. package/dist/schemas/service.schema.d.ts.map +1 -0
  175. package/dist/schemas/service.schema.js +59 -0
  176. package/dist/schemas/service.schema.js.map +1 -0
  177. package/dist/schemas/service.schema.test.d.ts +2 -0
  178. package/dist/schemas/service.schema.test.d.ts.map +1 -0
  179. package/dist/schemas/service.schema.test.js +137 -0
  180. package/dist/schemas/service.schema.test.js.map +1 -0
  181. package/dist/schemas/use-case.schema.d.ts +54 -0
  182. package/dist/schemas/use-case.schema.d.ts.map +1 -0
  183. package/dist/schemas/use-case.schema.js +38 -0
  184. package/dist/schemas/use-case.schema.js.map +1 -0
  185. package/dist/schemas/use-case.schema.test.d.ts +2 -0
  186. package/dist/schemas/use-case.schema.test.d.ts.map +1 -0
  187. package/dist/schemas/use-case.schema.test.js +152 -0
  188. package/dist/schemas/use-case.schema.test.js.map +1 -0
  189. package/dist/services/graph-builder.d.ts +21 -0
  190. package/dist/services/graph-builder.d.ts.map +1 -0
  191. package/dist/services/graph-builder.js +138 -0
  192. package/dist/services/graph-builder.js.map +1 -0
  193. package/dist/services/graph-builder.test.d.ts +2 -0
  194. package/dist/services/graph-builder.test.d.ts.map +1 -0
  195. package/dist/services/graph-builder.test.js +393 -0
  196. package/dist/services/graph-builder.test.js.map +1 -0
  197. package/dist/services/index.d.ts +2 -0
  198. package/dist/services/index.d.ts.map +1 -0
  199. package/dist/services/index.js +2 -0
  200. package/dist/services/index.js.map +1 -0
  201. package/package.json +50 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml.parser.test.js","sourceRoot":"","sources":["../../../src/adapters/parsers/yaml.parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CatalogWriterPort } from '../../ports/catalog-writer.port.js';
2
+ import type { Catalog } from '../../domain/catalog.js';
3
+ export declare class JsonWriter implements CatalogWriterPort {
4
+ write(catalog: Catalog, outputPath: string): Promise<void>;
5
+ }
6
+ export declare function createJsonWriter(): CatalogWriterPort;
7
+ //# sourceMappingURL=json.writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.writer.d.ts","sourceRoot":"","sources":["../../../src/adapters/persistence/json.writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,qBAAa,UAAW,YAAW,iBAAiB;IAC5C,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOjE;AAED,wBAAgB,gBAAgB,IAAI,iBAAiB,CAEpD"}
@@ -0,0 +1,14 @@
1
+ import { writeFile, mkdir } from 'node:fs/promises';
2
+ import { dirname } from 'node:path';
3
+ export class JsonWriter {
4
+ async write(catalog, outputPath) {
5
+ const dir = dirname(outputPath);
6
+ await mkdir(dir, { recursive: true });
7
+ const json = JSON.stringify(catalog, null, 2);
8
+ await writeFile(outputPath, json, 'utf-8');
9
+ }
10
+ }
11
+ export function createJsonWriter() {
12
+ return new JsonWriter();
13
+ }
14
+ //# sourceMappingURL=json.writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.writer.js","sourceRoot":"","sources":["../../../src/adapters/persistence/json.writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,OAAO,UAAU;IACrB,KAAK,CAAC,KAAK,CAAC,OAAgB,EAAE,UAAkB;QAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAChC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,UAAU,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=json.writer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.writer.test.d.ts","sourceRoot":"","sources":["../../../src/adapters/persistence/json.writer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,111 @@
1
+ import { describe, expect, it, beforeEach, afterEach } from 'vitest';
2
+ import { mkdtemp, rm, readFile } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { JsonWriter } from './json.writer.js';
6
+ describe('JsonWriter', () => {
7
+ let tempDir;
8
+ let writer;
9
+ beforeEach(async () => {
10
+ tempDir = await mkdtemp(join(tmpdir(), 'writer-test-'));
11
+ writer = new JsonWriter();
12
+ });
13
+ afterEach(async () => {
14
+ await rm(tempDir, { recursive: true, force: true });
15
+ });
16
+ it('writes catalog to JSON file', async () => {
17
+ const catalog = {
18
+ useCases: [],
19
+ services: [
20
+ {
21
+ id: 'svc-1',
22
+ name: 'Service 1',
23
+ description: 'First',
24
+ type: 'web-service',
25
+ lifecycle: 'active',
26
+ },
27
+ {
28
+ id: 'svc-2',
29
+ name: 'Service 2',
30
+ description: 'Second',
31
+ type: 'web-service',
32
+ lifecycle: 'active',
33
+ },
34
+ ],
35
+ domains: [],
36
+ dataStores: [],
37
+ };
38
+ const outputPath = join(tempDir, 'catalog.json');
39
+ await writer.write(catalog, outputPath);
40
+ const content = await readFile(outputPath, 'utf-8');
41
+ const parsed = JSON.parse(content);
42
+ expect(parsed).toEqual(catalog);
43
+ });
44
+ it('creates nested directories if needed', async () => {
45
+ const catalog = { useCases: [], services: [], domains: [], dataStores: [] };
46
+ const outputPath = join(tempDir, 'nested', 'deep', 'catalog.json');
47
+ await writer.write(catalog, outputPath);
48
+ const content = await readFile(outputPath, 'utf-8');
49
+ expect(JSON.parse(content)).toEqual(catalog);
50
+ });
51
+ it('writes pretty-printed JSON', async () => {
52
+ const catalog = {
53
+ useCases: [],
54
+ services: [
55
+ { id: 'test', name: 'Test', description: 'Desc', type: 'web-service', lifecycle: 'active' },
56
+ ],
57
+ domains: [],
58
+ dataStores: [],
59
+ };
60
+ const outputPath = join(tempDir, 'catalog.json');
61
+ await writer.write(catalog, outputPath);
62
+ const content = await readFile(outputPath, 'utf-8');
63
+ expect(content).toContain('\n'); // Has newlines
64
+ expect(content).toContain(' '); // Has indentation
65
+ });
66
+ it('overwrites existing file', async () => {
67
+ const outputPath = join(tempDir, 'catalog.json');
68
+ await writer.write({
69
+ useCases: [],
70
+ services: [
71
+ { id: 'old', name: 'Old', description: 'Old', type: 'web-service', lifecycle: 'active' },
72
+ ],
73
+ domains: [],
74
+ dataStores: [],
75
+ }, outputPath);
76
+ await writer.write({
77
+ useCases: [],
78
+ services: [
79
+ { id: 'new', name: 'New', description: 'New', type: 'web-service', lifecycle: 'active' },
80
+ ],
81
+ domains: [],
82
+ dataStores: [],
83
+ }, outputPath);
84
+ const content = await readFile(outputPath, 'utf-8');
85
+ const parsed = JSON.parse(content);
86
+ expect(parsed.services[0]?.id).toBe('new');
87
+ });
88
+ it('preserves service type and lifecycle', async () => {
89
+ const catalog = {
90
+ useCases: [],
91
+ services: [
92
+ {
93
+ id: 'with-type',
94
+ name: 'With Type',
95
+ description: 'Has type info',
96
+ type: 'event-producer',
97
+ lifecycle: 'deprecated',
98
+ },
99
+ ],
100
+ domains: [],
101
+ dataStores: [],
102
+ };
103
+ const outputPath = join(tempDir, 'catalog.json');
104
+ await writer.write(catalog, outputPath);
105
+ const content = await readFile(outputPath, 'utf-8');
106
+ const parsed = JSON.parse(content);
107
+ expect(parsed.services[0]?.type).toBe('event-producer');
108
+ expect(parsed.services[0]?.lifecycle).toBe('deprecated');
109
+ });
110
+ });
111
+ //# sourceMappingURL=json.writer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.writer.test.js","sourceRoot":"","sources":["../../../src/adapters/persistence/json.writer.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { Service } from './service.js';
2
+ import type { UseCase } from './use-case.js';
3
+ import type { Domain } from './domain.js';
4
+ import type { DataStore } from './data-store.js';
5
+ import type { ServiceGraph } from './graph.js';
6
+ export interface Catalog {
7
+ services: Service[];
8
+ useCases: UseCase[];
9
+ domains: Domain[];
10
+ dataStores: DataStore[];
11
+ graph?: ServiceGraph;
12
+ }
13
+ export declare function createCatalog(services?: Service[], useCases?: UseCase[], domains?: Domain[], dataStores?: DataStore[]): Catalog;
14
+ export declare function addService(catalog: Catalog, service: Service): Catalog;
15
+ export declare function addUseCase(catalog: Catalog, useCase: UseCase): Catalog;
16
+ export declare function findService(catalog: Catalog, id: string): Service | undefined;
17
+ export declare function findUseCase(catalog: Catalog, id: string): UseCase | undefined;
18
+ export declare function getServiceUseCases(catalog: Catalog, serviceId: string): UseCase[];
19
+ export declare function addDomain(catalog: Catalog, domain: Domain): Catalog;
20
+ export declare function findDomain(catalog: Catalog, id: string): Domain | undefined;
21
+ export declare function getDomainUseCases(catalog: Catalog, domainId: string): UseCase[];
22
+ export declare function getDomainServices(catalog: Catalog, domainId: string): Service[];
23
+ export declare function getChildDomains(catalog: Catalog, parentId: string): Domain[];
24
+ export declare function addDataStore(catalog: Catalog, dataStore: DataStore): Catalog;
25
+ export declare function findDataStore(catalog: Catalog, id: string): DataStore | undefined;
26
+ export declare function getDomainDataStores(catalog: Catalog, domainId: string): DataStore[];
27
+ export declare function getServiceDataStores(catalog: Catalog, serviceId: string): DataStore[];
28
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/domain/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,GAAE,OAAO,EAAO,EACxB,QAAQ,GAAE,OAAO,EAAO,EACxB,OAAO,GAAE,MAAM,EAAO,EACtB,UAAU,GAAE,SAAS,EAAO,GAC3B,OAAO,CAET;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAEtE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAEtE;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE7E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE,CAEjF;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE3E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,CAE/E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,CAE/E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAE5E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEjF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAEnF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,CAErF"}
@@ -0,0 +1,46 @@
1
+ export function createCatalog(services = [], useCases = [], domains = [], dataStores = []) {
2
+ return { services, useCases, domains, dataStores };
3
+ }
4
+ export function addService(catalog, service) {
5
+ return { ...catalog, services: [...catalog.services, service] };
6
+ }
7
+ export function addUseCase(catalog, useCase) {
8
+ return { ...catalog, useCases: [...catalog.useCases, useCase] };
9
+ }
10
+ export function findService(catalog, id) {
11
+ return catalog.services.find((s) => s.id === id);
12
+ }
13
+ export function findUseCase(catalog, id) {
14
+ return catalog.useCases.find((uc) => uc.id === id);
15
+ }
16
+ export function getServiceUseCases(catalog, serviceId) {
17
+ return catalog.useCases.filter((uc) => uc.participants.some((p) => p.service === serviceId));
18
+ }
19
+ export function addDomain(catalog, domain) {
20
+ return { ...catalog, domains: [...catalog.domains, domain] };
21
+ }
22
+ export function findDomain(catalog, id) {
23
+ return catalog.domains.find((d) => d.id === id);
24
+ }
25
+ export function getDomainUseCases(catalog, domainId) {
26
+ return catalog.useCases.filter((uc) => uc.domain === domainId);
27
+ }
28
+ export function getDomainServices(catalog, domainId) {
29
+ return catalog.services.filter((s) => s.domain === domainId);
30
+ }
31
+ export function getChildDomains(catalog, parentId) {
32
+ return catalog.domains.filter((d) => d.parent === parentId);
33
+ }
34
+ export function addDataStore(catalog, dataStore) {
35
+ return { ...catalog, dataStores: [...catalog.dataStores, dataStore] };
36
+ }
37
+ export function findDataStore(catalog, id) {
38
+ return catalog.dataStores.find((ds) => ds.id === id);
39
+ }
40
+ export function getDomainDataStores(catalog, domainId) {
41
+ return catalog.dataStores.filter((ds) => ds.domain === domainId);
42
+ }
43
+ export function getServiceDataStores(catalog, serviceId) {
44
+ return catalog.dataStores.filter((ds) => ds.owner === serviceId);
45
+ }
46
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/domain/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=catalog.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.test.d.ts","sourceRoot":"","sources":["../../src/domain/catalog.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,346 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { createCatalog, addService, addUseCase, addDomain, addDataStore, findService, findUseCase, findDomain, findDataStore, getServiceUseCases, getServiceDataStores, getDomainUseCases, getDomainServices, getDomainDataStores, getChildDomains, } from './catalog.js';
3
+ import { createService } from './service.js';
4
+ import { createUseCase } from './use-case.js';
5
+ import { createDomain } from './domain.js';
6
+ import { createDataStore } from './data-store.js';
7
+ describe('Catalog', () => {
8
+ describe('createCatalog', () => {
9
+ it('creates empty catalog', () => {
10
+ const catalog = createCatalog();
11
+ expect(catalog.services).toEqual([]);
12
+ expect(catalog.useCases).toEqual([]);
13
+ expect(catalog.domains).toEqual([]);
14
+ expect(catalog.dataStores).toEqual([]);
15
+ });
16
+ it('creates catalog with services', () => {
17
+ const service = createService('test', 'Test', 'Description');
18
+ const catalog = createCatalog([service]);
19
+ expect(catalog.services).toHaveLength(1);
20
+ expect(catalog.services[0]).toBe(service);
21
+ expect(catalog.useCases).toEqual([]);
22
+ expect(catalog.domains).toEqual([]);
23
+ });
24
+ it('creates catalog with services and use cases', () => {
25
+ const service = createService('test', 'Test', 'Description');
26
+ const useCase = createUseCase('checkout', 'Checkout', 'Flow');
27
+ const catalog = createCatalog([service], [useCase]);
28
+ expect(catalog.services).toHaveLength(1);
29
+ expect(catalog.useCases).toHaveLength(1);
30
+ expect(catalog.domains).toEqual([]);
31
+ });
32
+ it('creates catalog with domains', () => {
33
+ const domain = createDomain('commerce', 'Commerce', 'E-commerce domain');
34
+ const catalog = createCatalog([], [], [domain]);
35
+ expect(catalog.domains).toHaveLength(1);
36
+ expect(catalog.domains[0]).toBe(domain);
37
+ });
38
+ });
39
+ describe('addService', () => {
40
+ it('adds service to empty catalog', () => {
41
+ const catalog = createCatalog();
42
+ const service = createService('test', 'Test', 'Description');
43
+ const updated = addService(catalog, service);
44
+ expect(updated.services).toHaveLength(1);
45
+ expect(updated.services[0]).toBe(service);
46
+ });
47
+ it('does not mutate original catalog', () => {
48
+ const catalog = createCatalog();
49
+ const service = createService('test', 'Test', 'Description');
50
+ addService(catalog, service);
51
+ expect(catalog.services).toHaveLength(0);
52
+ });
53
+ it('preserves useCases when adding service', () => {
54
+ const useCase = createUseCase('checkout', 'Checkout', 'Flow');
55
+ const catalog = createCatalog([], [useCase]);
56
+ const service = createService('test', 'Test', 'Description');
57
+ const updated = addService(catalog, service);
58
+ expect(updated.useCases).toHaveLength(1);
59
+ expect(updated.useCases[0]).toBe(useCase);
60
+ });
61
+ });
62
+ describe('addUseCase', () => {
63
+ it('adds use case to empty catalog', () => {
64
+ const catalog = createCatalog();
65
+ const useCase = createUseCase('checkout', 'Checkout', 'Flow');
66
+ const updated = addUseCase(catalog, useCase);
67
+ expect(updated.useCases).toHaveLength(1);
68
+ expect(updated.useCases[0]).toBe(useCase);
69
+ });
70
+ it('does not mutate original catalog', () => {
71
+ const catalog = createCatalog();
72
+ const useCase = createUseCase('checkout', 'Checkout', 'Flow');
73
+ addUseCase(catalog, useCase);
74
+ expect(catalog.useCases).toHaveLength(0);
75
+ });
76
+ it('preserves services when adding use case', () => {
77
+ const service = createService('test', 'Test', 'Description');
78
+ const catalog = createCatalog([service]);
79
+ const useCase = createUseCase('checkout', 'Checkout', 'Flow');
80
+ const updated = addUseCase(catalog, useCase);
81
+ expect(updated.services).toHaveLength(1);
82
+ expect(updated.services[0]).toBe(service);
83
+ });
84
+ });
85
+ describe('findService', () => {
86
+ it('finds service by id', () => {
87
+ const service = createService('test', 'Test', 'Description');
88
+ const catalog = createCatalog([service]);
89
+ expect(findService(catalog, 'test')).toBe(service);
90
+ });
91
+ it('returns undefined for unknown id', () => {
92
+ const catalog = createCatalog();
93
+ expect(findService(catalog, 'unknown')).toBeUndefined();
94
+ });
95
+ });
96
+ describe('findUseCase', () => {
97
+ it('finds use case by id', () => {
98
+ const useCase = createUseCase('checkout', 'Checkout', 'Flow');
99
+ const catalog = createCatalog([], [useCase]);
100
+ expect(findUseCase(catalog, 'checkout')).toBe(useCase);
101
+ });
102
+ it('returns undefined for unknown id', () => {
103
+ const catalog = createCatalog();
104
+ expect(findUseCase(catalog, 'unknown')).toBeUndefined();
105
+ });
106
+ });
107
+ describe('getServiceUseCases', () => {
108
+ it('returns use cases where service participates', () => {
109
+ const useCase = {
110
+ id: 'checkout',
111
+ name: 'Checkout',
112
+ description: 'Flow',
113
+ participants: [
114
+ { service: 'order-service', role: 'Creates orders' },
115
+ { service: 'billing-service', role: 'Processes payment' },
116
+ ],
117
+ steps: [],
118
+ };
119
+ const catalog = createCatalog([], [useCase]);
120
+ const result = getServiceUseCases(catalog, 'order-service');
121
+ expect(result).toHaveLength(1);
122
+ expect(result[0]).toBe(useCase);
123
+ });
124
+ it('returns empty array when service not in any use case', () => {
125
+ const useCase = {
126
+ id: 'checkout',
127
+ name: 'Checkout',
128
+ description: 'Flow',
129
+ participants: [{ service: 'order-service', role: 'Creates orders' }],
130
+ steps: [],
131
+ };
132
+ const catalog = createCatalog([], [useCase]);
133
+ const result = getServiceUseCases(catalog, 'unknown-service');
134
+ expect(result).toEqual([]);
135
+ });
136
+ it('returns multiple use cases when service participates in many', () => {
137
+ const useCase1 = {
138
+ id: 'checkout',
139
+ name: 'Checkout',
140
+ description: 'Flow',
141
+ participants: [{ service: 'order-service', role: 'Creates orders' }],
142
+ steps: [],
143
+ };
144
+ const useCase2 = {
145
+ id: 'returns',
146
+ name: 'Returns',
147
+ description: 'Flow',
148
+ participants: [{ service: 'order-service', role: 'Processes returns' }],
149
+ steps: [],
150
+ };
151
+ const catalog = createCatalog([], [useCase1, useCase2]);
152
+ const result = getServiceUseCases(catalog, 'order-service');
153
+ expect(result).toHaveLength(2);
154
+ });
155
+ });
156
+ describe('addDomain', () => {
157
+ it('adds domain to empty catalog', () => {
158
+ const catalog = createCatalog();
159
+ const domain = createDomain('commerce', 'Commerce', 'Description');
160
+ const updated = addDomain(catalog, domain);
161
+ expect(updated.domains).toHaveLength(1);
162
+ expect(updated.domains[0]).toBe(domain);
163
+ });
164
+ it('does not mutate original catalog', () => {
165
+ const catalog = createCatalog();
166
+ const domain = createDomain('commerce', 'Commerce', 'Description');
167
+ addDomain(catalog, domain);
168
+ expect(catalog.domains).toHaveLength(0);
169
+ });
170
+ it('preserves services and useCases when adding domain', () => {
171
+ const service = createService('test', 'Test', 'Description');
172
+ const useCase = createUseCase('checkout', 'Checkout', 'Flow');
173
+ const catalog = createCatalog([service], [useCase]);
174
+ const domain = createDomain('commerce', 'Commerce', 'Description');
175
+ const updated = addDomain(catalog, domain);
176
+ expect(updated.services).toHaveLength(1);
177
+ expect(updated.useCases).toHaveLength(1);
178
+ });
179
+ });
180
+ describe('findDomain', () => {
181
+ it('finds domain by id', () => {
182
+ const domain = createDomain('commerce', 'Commerce', 'Description');
183
+ const catalog = createCatalog([], [], [domain]);
184
+ expect(findDomain(catalog, 'commerce')).toBe(domain);
185
+ });
186
+ it('returns undefined for unknown id', () => {
187
+ const catalog = createCatalog();
188
+ expect(findDomain(catalog, 'unknown')).toBeUndefined();
189
+ });
190
+ });
191
+ describe('getDomainUseCases', () => {
192
+ it('returns use cases in domain', () => {
193
+ const useCase = createUseCase('checkout', 'Checkout', 'Flow', [], [], { domain: 'commerce' });
194
+ const catalog = createCatalog([], [useCase]);
195
+ const result = getDomainUseCases(catalog, 'commerce');
196
+ expect(result).toHaveLength(1);
197
+ expect(result[0]).toBe(useCase);
198
+ });
199
+ it('returns empty array when no use cases in domain', () => {
200
+ const useCase = createUseCase('checkout', 'Checkout', 'Flow', [], [], { domain: 'other' });
201
+ const catalog = createCatalog([], [useCase]);
202
+ const result = getDomainUseCases(catalog, 'commerce');
203
+ expect(result).toEqual([]);
204
+ });
205
+ it('returns multiple use cases in same domain', () => {
206
+ const useCase1 = createUseCase('checkout', 'Checkout', 'Flow', [], [], {
207
+ domain: 'commerce',
208
+ });
209
+ const useCase2 = createUseCase('returns', 'Returns', 'Flow', [], [], { domain: 'commerce' });
210
+ const catalog = createCatalog([], [useCase1, useCase2]);
211
+ const result = getDomainUseCases(catalog, 'commerce');
212
+ expect(result).toHaveLength(2);
213
+ });
214
+ });
215
+ describe('getDomainServices', () => {
216
+ it('returns services in domain', () => {
217
+ const service = createService('order-service', 'Order', 'Desc', { domain: 'commerce' });
218
+ const catalog = createCatalog([service]);
219
+ const result = getDomainServices(catalog, 'commerce');
220
+ expect(result).toHaveLength(1);
221
+ expect(result[0]).toBe(service);
222
+ });
223
+ it('returns empty array when no services in domain', () => {
224
+ const service = createService('order-service', 'Order', 'Desc', { domain: 'other' });
225
+ const catalog = createCatalog([service]);
226
+ const result = getDomainServices(catalog, 'commerce');
227
+ expect(result).toEqual([]);
228
+ });
229
+ it('returns multiple services in same domain', () => {
230
+ const service1 = createService('order-service', 'Order', 'Desc', { domain: 'commerce' });
231
+ const service2 = createService('billing-service', 'Billing', 'Desc', { domain: 'commerce' });
232
+ const catalog = createCatalog([service1, service2]);
233
+ const result = getDomainServices(catalog, 'commerce');
234
+ expect(result).toHaveLength(2);
235
+ });
236
+ });
237
+ describe('getChildDomains', () => {
238
+ it('returns child domains', () => {
239
+ const parent = createDomain('commerce', 'Commerce', 'Parent domain');
240
+ const child = createDomain('orders', 'Orders', 'Child domain', 'commerce');
241
+ const catalog = createCatalog([], [], [parent, child]);
242
+ const result = getChildDomains(catalog, 'commerce');
243
+ expect(result).toHaveLength(1);
244
+ expect(result[0]).toBe(child);
245
+ });
246
+ it('returns empty array when no children', () => {
247
+ const domain = createDomain('commerce', 'Commerce', 'Domain');
248
+ const catalog = createCatalog([], [], [domain]);
249
+ const result = getChildDomains(catalog, 'commerce');
250
+ expect(result).toEqual([]);
251
+ });
252
+ it('returns multiple children', () => {
253
+ const parent = createDomain('commerce', 'Commerce', 'Parent');
254
+ const child1 = createDomain('orders', 'Orders', 'Child 1', 'commerce');
255
+ const child2 = createDomain('billing', 'Billing', 'Child 2', 'commerce');
256
+ const catalog = createCatalog([], [], [parent, child1, child2]);
257
+ const result = getChildDomains(catalog, 'commerce');
258
+ expect(result).toHaveLength(2);
259
+ });
260
+ it('only returns direct children, not grandchildren', () => {
261
+ const grandparent = createDomain('platform', 'Platform', 'Top level');
262
+ const parent = createDomain('commerce', 'Commerce', 'Middle level', 'platform');
263
+ const child = createDomain('orders', 'Orders', 'Bottom level', 'commerce');
264
+ const catalog = createCatalog([], [], [grandparent, parent, child]);
265
+ const result = getChildDomains(catalog, 'platform');
266
+ expect(result).toHaveLength(1);
267
+ expect(result[0]?.id).toBe('commerce');
268
+ });
269
+ });
270
+ describe('addDataStore', () => {
271
+ it('adds data store to empty catalog', () => {
272
+ const catalog = createCatalog();
273
+ const ds = createDataStore('orders-db', 'Orders DB', 'Database', 'database');
274
+ const updated = addDataStore(catalog, ds);
275
+ expect(updated.dataStores).toHaveLength(1);
276
+ expect(updated.dataStores[0]).toBe(ds);
277
+ });
278
+ it('does not mutate original catalog', () => {
279
+ const catalog = createCatalog();
280
+ const ds = createDataStore('orders-db', 'Orders DB', 'Database', 'database');
281
+ addDataStore(catalog, ds);
282
+ expect(catalog.dataStores).toHaveLength(0);
283
+ });
284
+ it('preserves other collections when adding data store', () => {
285
+ const service = createService('test', 'Test', 'Description');
286
+ const catalog = createCatalog([service]);
287
+ const ds = createDataStore('orders-db', 'Orders DB', 'Database', 'database');
288
+ const updated = addDataStore(catalog, ds);
289
+ expect(updated.services).toHaveLength(1);
290
+ });
291
+ });
292
+ describe('findDataStore', () => {
293
+ it('finds data store by id', () => {
294
+ const ds = createDataStore('orders-db', 'Orders DB', 'Database', 'database');
295
+ const catalog = createCatalog([], [], [], [ds]);
296
+ expect(findDataStore(catalog, 'orders-db')).toBe(ds);
297
+ });
298
+ it('returns undefined for unknown id', () => {
299
+ const catalog = createCatalog();
300
+ expect(findDataStore(catalog, 'unknown')).toBeUndefined();
301
+ });
302
+ });
303
+ describe('getDomainDataStores', () => {
304
+ it('returns data stores in domain', () => {
305
+ const ds = createDataStore('orders-db', 'Orders DB', 'Database', 'database', {
306
+ domain: 'commerce',
307
+ });
308
+ const catalog = createCatalog([], [], [], [ds]);
309
+ const result = getDomainDataStores(catalog, 'commerce');
310
+ expect(result).toHaveLength(1);
311
+ expect(result[0]).toBe(ds);
312
+ });
313
+ it('returns empty array when no data stores in domain', () => {
314
+ const ds = createDataStore('orders-db', 'Orders DB', 'Database', 'database', {
315
+ domain: 'other',
316
+ });
317
+ const catalog = createCatalog([], [], [], [ds]);
318
+ expect(getDomainDataStores(catalog, 'commerce')).toEqual([]);
319
+ });
320
+ });
321
+ describe('getServiceDataStores', () => {
322
+ it('returns data stores owned by service', () => {
323
+ const ds = createDataStore('orders-db', 'Orders DB', 'Database', 'database', {
324
+ owner: 'orders-service',
325
+ });
326
+ const catalog = createCatalog([], [], [], [ds]);
327
+ const result = getServiceDataStores(catalog, 'orders-service');
328
+ expect(result).toHaveLength(1);
329
+ expect(result[0]).toBe(ds);
330
+ });
331
+ it('returns empty array when no data stores owned by service', () => {
332
+ const ds = createDataStore('orders-db', 'Orders DB', 'Database', 'database', {
333
+ owner: 'other-service',
334
+ });
335
+ const catalog = createCatalog([], [], [], [ds]);
336
+ expect(getServiceDataStores(catalog, 'orders-service')).toEqual([]);
337
+ });
338
+ it('returns multiple data stores for same owner', () => {
339
+ const ds1 = createDataStore('db', 'DB', 'Database', 'database', { owner: 'svc' });
340
+ const ds2 = createDataStore('cache', 'Cache', 'Cache', 'cache', { owner: 'svc' });
341
+ const catalog = createCatalog([], [], [], [ds1, ds2]);
342
+ expect(getServiceDataStores(catalog, 'svc')).toHaveLength(2);
343
+ });
344
+ });
345
+ });
346
+ //# sourceMappingURL=catalog.test.js.map