@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,576 @@
1
+ import { describe, expect, it, beforeEach, afterEach } from 'vitest';
2
+ import { mkdtemp, rm, mkdir, writeFile } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { FilesystemLoader } from './filesystem.loader.js';
6
+ describe('FilesystemLoader', () => {
7
+ let tempDir;
8
+ let loader;
9
+ beforeEach(async () => {
10
+ tempDir = await mkdtemp(join(tmpdir(), 'catalog-test-'));
11
+ loader = new FilesystemLoader();
12
+ });
13
+ afterEach(async () => {
14
+ await rm(tempDir, { recursive: true, force: true });
15
+ });
16
+ it('loads empty catalog from empty directory', async () => {
17
+ const catalog = await loader.load(tempDir);
18
+ expect(catalog.services).toEqual([]);
19
+ expect(catalog.useCases).toEqual([]);
20
+ expect(catalog.domains).toEqual([]);
21
+ expect(catalog.dataStores).toEqual([]);
22
+ });
23
+ it('loads single service', async () => {
24
+ const serviceDir = join(tempDir, 'my-service');
25
+ await mkdir(serviceDir);
26
+ await writeFile(join(serviceDir, 'service.toml'), `[service]
27
+ id = "my-service"
28
+ name = "My Service"
29
+ description = "A test service"
30
+ `);
31
+ const catalog = await loader.load(tempDir);
32
+ expect(catalog.services).toHaveLength(1);
33
+ expect(catalog.services[0]).toEqual({
34
+ id: 'my-service',
35
+ name: 'My Service',
36
+ description: 'A test service',
37
+ type: 'web-service',
38
+ lifecycle: 'active',
39
+ });
40
+ });
41
+ it('loads multiple services from nested directories', async () => {
42
+ // Create nested structure
43
+ const service1Dir = join(tempDir, 'services', 'auth');
44
+ const service2Dir = join(tempDir, 'services', 'billing');
45
+ await mkdir(service1Dir, { recursive: true });
46
+ await mkdir(service2Dir, { recursive: true });
47
+ await writeFile(join(service1Dir, 'service.toml'), `[service]
48
+ id = "auth"
49
+ name = "Auth"
50
+ description = "Auth service"
51
+ `);
52
+ await writeFile(join(service2Dir, 'service.toml'), `[service]
53
+ id = "billing"
54
+ name = "Billing"
55
+ description = "Billing service"
56
+ `);
57
+ const catalog = await loader.load(tempDir);
58
+ expect(catalog.services).toHaveLength(2);
59
+ const ids = catalog.services.map((s) => s.id).sort();
60
+ expect(ids).toEqual(['auth', 'billing']);
61
+ });
62
+ it('loads service with type and lifecycle defaults', async () => {
63
+ const serviceDir = join(tempDir, 'typed');
64
+ await mkdir(serviceDir);
65
+ await writeFile(join(serviceDir, 'service.toml'), `[service]
66
+ id = "typed"
67
+ name = "Typed Service"
68
+ description = "Has defaults"
69
+ `);
70
+ const catalog = await loader.load(tempDir);
71
+ expect(catalog.services[0]?.type).toBe('web-service');
72
+ expect(catalog.services[0]?.lifecycle).toBe('active');
73
+ });
74
+ it('loads service with all new metadata fields', async () => {
75
+ const serviceDir = join(tempDir, 'rich');
76
+ await mkdir(serviceDir);
77
+ await writeFile(join(serviceDir, 'service.toml'), `[service]
78
+ id = "rich-service"
79
+ name = "Rich Service"
80
+ description = "Has all fields"
81
+ domain = "commerce"
82
+ type = "event-producer"
83
+ lifecycle = "deprecated"
84
+ owner = "team-a"
85
+ tags = ["core", "data"]
86
+ repository = "https://github.com/acme/rich"
87
+ tier = "critical"
88
+ language = ["typescript", "go"]
89
+ frameworks = ["nestjs"]
90
+
91
+ [[service.links]]
92
+ url = "https://grafana.internal/d/rich"
93
+ title = "Dashboard"
94
+ type = "dashboard"
95
+
96
+ [[service.contacts]]
97
+ type = "slack"
98
+ value = "#eng"
99
+
100
+ [[service.connections]]
101
+ target = "billing"
102
+ type = "http"
103
+ endpoints = ["/pay"]
104
+ `);
105
+ const catalog = await loader.load(tempDir);
106
+ const svc = catalog.services[0];
107
+ expect(svc?.id).toBe('rich-service');
108
+ expect(svc?.type).toBe('event-producer');
109
+ expect(svc?.lifecycle).toBe('deprecated');
110
+ expect(svc?.owner).toBe('team-a');
111
+ expect(svc?.tags).toEqual(['core', 'data']);
112
+ expect(svc?.repository).toBe('https://github.com/acme/rich');
113
+ expect(svc?.tier).toBe('critical');
114
+ expect(svc?.language).toEqual(['typescript', 'go']);
115
+ expect(svc?.frameworks).toEqual(['nestjs']);
116
+ expect(svc?.links).toEqual([
117
+ { url: 'https://grafana.internal/d/rich', title: 'Dashboard', type: 'dashboard' },
118
+ ]);
119
+ expect(svc?.contacts).toEqual([{ type: 'slack', value: '#eng' }]);
120
+ expect(svc?.connections).toEqual([{ target: 'billing', type: 'http', endpoints: ['/pay'] }]);
121
+ });
122
+ it('throws for non-directory path', async () => {
123
+ const filePath = join(tempDir, 'not-a-dir.txt');
124
+ await writeFile(filePath, 'content');
125
+ await expect(loader.load(filePath)).rejects.toThrow('Path is not a directory');
126
+ });
127
+ it('throws for non-existent path', async () => {
128
+ const badPath = join(tempDir, 'does-not-exist');
129
+ await expect(loader.load(badPath)).rejects.toThrow();
130
+ });
131
+ it('ignores non-service.toml files', async () => {
132
+ await writeFile(join(tempDir, 'readme.md'), '# Hello');
133
+ await writeFile(join(tempDir, 'other.toml'), '[other]\nkey = "value"');
134
+ const catalog = await loader.load(tempDir);
135
+ expect(catalog.services).toEqual([]);
136
+ expect(catalog.useCases).toEqual([]);
137
+ });
138
+ it('loads single use case', async () => {
139
+ const useCaseDir = join(tempDir, 'checkout');
140
+ await mkdir(useCaseDir);
141
+ await writeFile(join(useCaseDir, 'use-case.toml'), `[use_case]
142
+ id = "checkout"
143
+ name = "Customer Checkout"
144
+ description = "Checkout flow"
145
+ participants = []
146
+ steps = []
147
+ `);
148
+ const catalog = await loader.load(tempDir);
149
+ expect(catalog.useCases).toHaveLength(1);
150
+ expect(catalog.useCases[0]?.id).toBe('checkout');
151
+ expect(catalog.useCases[0]?.name).toBe('Customer Checkout');
152
+ });
153
+ it('loads use case with participants and steps', async () => {
154
+ const useCaseDir = join(tempDir, 'full-checkout');
155
+ await mkdir(useCaseDir);
156
+ await writeFile(join(useCaseDir, 'use-case.toml'), `[use_case]
157
+ id = "full-checkout"
158
+ name = "Full Checkout"
159
+ description = "Complete checkout"
160
+ bpmn = "./checkout.bpmn.txt"
161
+
162
+ [[use_case.participants]]
163
+ service = "order-service"
164
+ role = "Creates order"
165
+
166
+ [[use_case.steps]]
167
+ sequence = 1
168
+ actor = "Customer"
169
+ action = "Submit order"
170
+ `);
171
+ // Create bpmn-txt file
172
+ await writeFile(join(useCaseDir, 'checkout.bpmn.txt'), `process: checkout
173
+ start: begin
174
+ -> finish
175
+ end: finish
176
+ `);
177
+ const catalog = await loader.load(tempDir);
178
+ expect(catalog.useCases[0]?.participants).toHaveLength(1);
179
+ expect(catalog.useCases[0]?.steps).toHaveLength(1);
180
+ // bpmn field now contains generated XML
181
+ expect(catalog.useCases[0]?.bpmn).toContain('<?xml');
182
+ });
183
+ it('loads services and use cases together', async () => {
184
+ // Create service
185
+ const serviceDir = join(tempDir, 'services', 'order');
186
+ await mkdir(serviceDir, { recursive: true });
187
+ await writeFile(join(serviceDir, 'service.toml'), `[service]
188
+ id = "order-service"
189
+ name = "Order Service"
190
+ description = "Handles orders"
191
+ `);
192
+ // Create use case
193
+ const useCaseDir = join(tempDir, 'use-cases', 'checkout');
194
+ await mkdir(useCaseDir, { recursive: true });
195
+ await writeFile(join(useCaseDir, 'use-case.toml'), `[use_case]
196
+ id = "checkout"
197
+ name = "Checkout"
198
+ description = "Checkout flow"
199
+ participants = []
200
+ steps = []
201
+ `);
202
+ const catalog = await loader.load(tempDir);
203
+ expect(catalog.services).toHaveLength(1);
204
+ expect(catalog.useCases).toHaveLength(1);
205
+ expect(catalog.services[0]?.id).toBe('order-service');
206
+ expect(catalog.useCases[0]?.id).toBe('checkout');
207
+ });
208
+ it('loads single domain', async () => {
209
+ const domainDir = join(tempDir, 'commerce');
210
+ await mkdir(domainDir);
211
+ await writeFile(join(domainDir, 'domain.toml'), `[domain]
212
+ id = "commerce"
213
+ name = "Commerce"
214
+ description = "E-commerce domain"
215
+ `);
216
+ const catalog = await loader.load(tempDir);
217
+ expect(catalog.domains).toHaveLength(1);
218
+ expect(catalog.domains[0]?.id).toBe('commerce');
219
+ expect(catalog.domains[0]?.name).toBe('Commerce');
220
+ });
221
+ it('loads domain with parent', async () => {
222
+ const domainDir = join(tempDir, 'orders');
223
+ await mkdir(domainDir);
224
+ await writeFile(join(domainDir, 'domain.toml'), `[domain]
225
+ id = "orders"
226
+ name = "Orders"
227
+ description = "Order subdomain"
228
+ parent = "commerce"
229
+ `);
230
+ const catalog = await loader.load(tempDir);
231
+ expect(catalog.domains[0]?.parent).toBe('commerce');
232
+ });
233
+ it('loads services, use cases, and domains together', async () => {
234
+ // Create domain
235
+ const domainDir = join(tempDir, 'domains', 'commerce');
236
+ await mkdir(domainDir, { recursive: true });
237
+ await writeFile(join(domainDir, 'domain.toml'), `[domain]
238
+ id = "commerce"
239
+ name = "Commerce"
240
+ description = "E-commerce domain"
241
+ `);
242
+ // Create service
243
+ const serviceDir = join(tempDir, 'services', 'order');
244
+ await mkdir(serviceDir, { recursive: true });
245
+ await writeFile(join(serviceDir, 'service.toml'), `[service]
246
+ id = "order-service"
247
+ name = "Order Service"
248
+ description = "Handles orders"
249
+ domain = "commerce"
250
+ `);
251
+ // Create use case
252
+ const useCaseDir = join(tempDir, 'use-cases', 'checkout');
253
+ await mkdir(useCaseDir, { recursive: true });
254
+ await writeFile(join(useCaseDir, 'use-case.toml'), `[use_case]
255
+ id = "checkout"
256
+ name = "Checkout"
257
+ description = "Checkout flow"
258
+ domain = "commerce"
259
+ participants = []
260
+ steps = []
261
+ `);
262
+ const catalog = await loader.load(tempDir);
263
+ expect(catalog.domains).toHaveLength(1);
264
+ expect(catalog.services).toHaveLength(1);
265
+ expect(catalog.useCases).toHaveLength(1);
266
+ expect(catalog.domains[0]?.id).toBe('commerce');
267
+ expect(catalog.services[0]?.domain).toBe('commerce');
268
+ expect(catalog.useCases[0]?.domain).toBe('commerce');
269
+ });
270
+ it('loads markdown use case', async () => {
271
+ const useCaseDir = join(tempDir, 'order-data');
272
+ await mkdir(useCaseDir);
273
+ await writeFile(join(useCaseDir, 'use-case.md'), `---
274
+ id: order-data
275
+ name: Order Data Products
276
+ domain: data-delivery
277
+ ---
278
+
279
+ # Overview
280
+ Customer browses and orders data.
281
+
282
+ \`\`\`bpmn
283
+ process: order-data
284
+ start: begin
285
+ -> browse
286
+ task: browse
287
+ name: "Browse"
288
+ type: user
289
+ service: catalog-ui
290
+ doc: browsing
291
+ -> finish
292
+ end: finish
293
+ \`\`\`
294
+
295
+ ## Browsing {#browsing}
296
+
297
+ Details about browsing...
298
+ `);
299
+ const catalog = await loader.load(tempDir);
300
+ expect(catalog.useCases).toHaveLength(1);
301
+ const uc = catalog.useCases[0];
302
+ expect(uc).toBeDefined();
303
+ expect(uc?.id).toBe('order-data');
304
+ expect(uc?.name).toBe('Order Data Products');
305
+ expect(uc?.domain).toBe('data-delivery');
306
+ expect(uc?.description).toBe('Customer browses and orders data.');
307
+ expect(uc?.bpmn).toContain('<?xml');
308
+ expect(uc?.content).toContain('## Browsing');
309
+ expect(uc?.docLinks).toEqual([{ elementId: 'browse', anchor: 'browsing' }]);
310
+ expect(uc?.serviceRefs).toEqual([{ elementId: 'browse', serviceId: 'catalog-ui' }]);
311
+ expect(uc?.participants).toHaveLength(1);
312
+ expect(uc?.participants[0]?.service).toBe('catalog-ui');
313
+ });
314
+ it('markdown takes precedence over TOML', async () => {
315
+ const useCaseDir = join(tempDir, 'dual-format');
316
+ await mkdir(useCaseDir);
317
+ // TOML version
318
+ await writeFile(join(useCaseDir, 'use-case.toml'), `[use_case]
319
+ id = "dual-format"
320
+ name = "TOML Version"
321
+ description = "From TOML"
322
+ participants = []
323
+ steps = []
324
+ `);
325
+ // Markdown version (should win)
326
+ await writeFile(join(useCaseDir, 'use-case.md'), `---
327
+ id: dual-format
328
+ name: Markdown Version
329
+ ---
330
+
331
+ From markdown.
332
+ `);
333
+ const catalog = await loader.load(tempDir);
334
+ expect(catalog.useCases).toHaveLength(1);
335
+ expect(catalog.useCases[0]?.name).toBe('Markdown Version');
336
+ });
337
+ it('TOML still works when no markdown present', async () => {
338
+ const useCaseDir = join(tempDir, 'toml-only');
339
+ await mkdir(useCaseDir);
340
+ await writeFile(join(useCaseDir, 'use-case.toml'), `[use_case]
341
+ id = "toml-only"
342
+ name = "TOML Only"
343
+ description = "Still works"
344
+ participants = []
345
+ steps = []
346
+ `);
347
+ const catalog = await loader.load(tempDir);
348
+ expect(catalog.useCases).toHaveLength(1);
349
+ expect(catalog.useCases[0]?.id).toBe('toml-only');
350
+ });
351
+ // --- YAML dual-format tests ---
352
+ it('loads YAML service', async () => {
353
+ const serviceDir = join(tempDir, 'yaml-svc');
354
+ await mkdir(serviceDir);
355
+ await writeFile(join(serviceDir, 'service.yaml'), `service:
356
+ id: yaml-service
357
+ name: YAML Service
358
+ description: From YAML
359
+ `);
360
+ const catalog = await loader.load(tempDir);
361
+ expect(catalog.services).toHaveLength(1);
362
+ expect(catalog.services[0]?.id).toBe('yaml-service');
363
+ expect(catalog.services[0]?.name).toBe('YAML Service');
364
+ });
365
+ it('YAML service takes precedence over TOML', async () => {
366
+ const serviceDir = join(tempDir, 'dual-svc');
367
+ await mkdir(serviceDir);
368
+ await writeFile(join(serviceDir, 'service.toml'), `[service]
369
+ id = "toml-service"
370
+ name = "TOML Service"
371
+ description = "From TOML"
372
+ `);
373
+ await writeFile(join(serviceDir, 'service.yaml'), `service:
374
+ id: yaml-service
375
+ name: YAML Service
376
+ description: From YAML
377
+ `);
378
+ const catalog = await loader.load(tempDir);
379
+ expect(catalog.services).toHaveLength(1);
380
+ expect(catalog.services[0]?.id).toBe('yaml-service');
381
+ });
382
+ it('TOML service still works alone', async () => {
383
+ const serviceDir = join(tempDir, 'toml-svc');
384
+ await mkdir(serviceDir);
385
+ await writeFile(join(serviceDir, 'service.toml'), `[service]
386
+ id = "toml-only"
387
+ name = "TOML Only"
388
+ description = "Still works"
389
+ `);
390
+ const catalog = await loader.load(tempDir);
391
+ expect(catalog.services).toHaveLength(1);
392
+ expect(catalog.services[0]?.id).toBe('toml-only');
393
+ });
394
+ it('loads YAML use case', async () => {
395
+ const useCaseDir = join(tempDir, 'yaml-uc');
396
+ await mkdir(useCaseDir);
397
+ await writeFile(join(useCaseDir, 'use-case.yaml'), `use_case:
398
+ id: yaml-checkout
399
+ name: YAML Checkout
400
+ description: From YAML
401
+ participants: []
402
+ steps: []
403
+ `);
404
+ const catalog = await loader.load(tempDir);
405
+ expect(catalog.useCases).toHaveLength(1);
406
+ expect(catalog.useCases[0]?.id).toBe('yaml-checkout');
407
+ });
408
+ it('loads YAML domain', async () => {
409
+ const domainDir = join(tempDir, 'yaml-dom');
410
+ await mkdir(domainDir);
411
+ await writeFile(join(domainDir, 'domain.yaml'), `domain:
412
+ id: yaml-domain
413
+ name: YAML Domain
414
+ description: From YAML
415
+ `);
416
+ const catalog = await loader.load(tempDir);
417
+ expect(catalog.domains).toHaveLength(1);
418
+ expect(catalog.domains[0]?.id).toBe('yaml-domain');
419
+ });
420
+ it('YAML domain takes precedence over TOML', async () => {
421
+ const domainDir = join(tempDir, 'dual-dom');
422
+ await mkdir(domainDir);
423
+ await writeFile(join(domainDir, 'domain.toml'), `[domain]
424
+ id = "toml-domain"
425
+ name = "TOML Domain"
426
+ description = "From TOML"
427
+ `);
428
+ await writeFile(join(domainDir, 'domain.yaml'), `domain:
429
+ id: yaml-domain
430
+ name: YAML Domain
431
+ description: From YAML
432
+ `);
433
+ const catalog = await loader.load(tempDir);
434
+ expect(catalog.domains).toHaveLength(1);
435
+ expect(catalog.domains[0]?.id).toBe('yaml-domain');
436
+ });
437
+ it('use-case.md > use-case.yaml > use-case.toml priority', async () => {
438
+ // Dir with all three formats
439
+ const allDir = join(tempDir, 'all-three');
440
+ await mkdir(allDir);
441
+ await writeFile(join(allDir, 'use-case.toml'), `[use_case]
442
+ id = "toml-uc"
443
+ name = "TOML UC"
444
+ description = "From TOML"
445
+ participants = []
446
+ steps = []
447
+ `);
448
+ await writeFile(join(allDir, 'use-case.yaml'), `use_case:
449
+ id: yaml-uc
450
+ name: YAML UC
451
+ description: From YAML
452
+ participants: []
453
+ steps: []
454
+ `);
455
+ await writeFile(join(allDir, 'use-case.md'), `---
456
+ id: md-uc
457
+ name: MD UC
458
+ ---
459
+
460
+ From markdown.
461
+ `);
462
+ const catalog = await loader.load(tempDir);
463
+ expect(catalog.useCases).toHaveLength(1);
464
+ expect(catalog.useCases[0]?.id).toBe('md-uc');
465
+ });
466
+ it('use-case.yaml takes precedence over use-case.toml', async () => {
467
+ const yamlTomlDir = join(tempDir, 'yaml-toml-uc');
468
+ await mkdir(yamlTomlDir);
469
+ await writeFile(join(yamlTomlDir, 'use-case.toml'), `[use_case]
470
+ id = "toml-uc"
471
+ name = "TOML UC"
472
+ description = "From TOML"
473
+ participants = []
474
+ steps = []
475
+ `);
476
+ await writeFile(join(yamlTomlDir, 'use-case.yaml'), `use_case:
477
+ id: yaml-uc
478
+ name: YAML UC
479
+ description: From YAML
480
+ participants: []
481
+ steps: []
482
+ `);
483
+ const catalog = await loader.load(tempDir);
484
+ expect(catalog.useCases).toHaveLength(1);
485
+ expect(catalog.useCases[0]?.id).toBe('yaml-uc');
486
+ });
487
+ it('loads single data store', async () => {
488
+ const dsDir = join(tempDir, 'services', 'orders', 'orders-db');
489
+ await mkdir(dsDir, { recursive: true });
490
+ await writeFile(join(dsDir, 'data-store.yaml'), `data_store:
491
+ id: orders-db
492
+ name: Orders Database
493
+ type: database
494
+ domain: commerce
495
+ owner: orders-service
496
+ technology: PostgreSQL
497
+ `);
498
+ const catalog = await loader.load(tempDir);
499
+ expect(catalog.dataStores).toHaveLength(1);
500
+ expect(catalog.dataStores[0]?.id).toBe('orders-db');
501
+ expect(catalog.dataStores[0]?.type).toBe('database');
502
+ expect(catalog.dataStores[0]?.technology).toBe('PostgreSQL');
503
+ });
504
+ it('loads TOML data store', async () => {
505
+ const dsDir = join(tempDir, 'cache');
506
+ await mkdir(dsDir);
507
+ await writeFile(join(dsDir, 'data-store.toml'), `[data_store]
508
+ id = "user-cache"
509
+ name = "User Cache"
510
+ type = "cache"
511
+ technology = "Redis"
512
+ `);
513
+ const catalog = await loader.load(tempDir);
514
+ expect(catalog.dataStores).toHaveLength(1);
515
+ expect(catalog.dataStores[0]?.id).toBe('user-cache');
516
+ });
517
+ it('YAML data store takes precedence over TOML', async () => {
518
+ const dsDir = join(tempDir, 'dual-ds');
519
+ await mkdir(dsDir);
520
+ await writeFile(join(dsDir, 'data-store.toml'), `[data_store]
521
+ id = "toml-ds"
522
+ name = "TOML DS"
523
+ type = "database"
524
+ `);
525
+ await writeFile(join(dsDir, 'data-store.yaml'), `data_store:
526
+ id: yaml-ds
527
+ name: YAML DS
528
+ type: database
529
+ `);
530
+ const catalog = await loader.load(tempDir);
531
+ expect(catalog.dataStores).toHaveLength(1);
532
+ expect(catalog.dataStores[0]?.id).toBe('yaml-ds');
533
+ });
534
+ it('loads data stores alongside services and domains', async () => {
535
+ // Service
536
+ const svcDir = join(tempDir, 'services', 'orders');
537
+ await mkdir(svcDir, { recursive: true });
538
+ await writeFile(join(svcDir, 'service.yaml'), `service:
539
+ id: orders-service
540
+ name: Orders Service
541
+ description: Handles orders
542
+ `);
543
+ // Data store under service
544
+ const dsDir = join(svcDir, 'orders-db');
545
+ await mkdir(dsDir);
546
+ await writeFile(join(dsDir, 'data-store.yaml'), `data_store:
547
+ id: orders-db
548
+ name: Orders DB
549
+ type: database
550
+ owner: orders-service
551
+ `);
552
+ const catalog = await loader.load(tempDir);
553
+ expect(catalog.services).toHaveLength(1);
554
+ expect(catalog.dataStores).toHaveLength(1);
555
+ expect(catalog.dataStores[0]?.owner).toBe('orders-service');
556
+ });
557
+ it('markdown without bpmn block has no XML', async () => {
558
+ const useCaseDir = join(tempDir, 'no-bpmn');
559
+ await mkdir(useCaseDir);
560
+ await writeFile(join(useCaseDir, 'use-case.md'), `---
561
+ id: no-bpmn
562
+ name: No BPMN
563
+ ---
564
+
565
+ Just documentation, no process.
566
+ `);
567
+ const catalog = await loader.load(tempDir);
568
+ expect(catalog.useCases).toHaveLength(1);
569
+ const uc = catalog.useCases[0];
570
+ expect(uc).toBeDefined();
571
+ expect(uc?.bpmn).toBeUndefined();
572
+ expect(uc?.docLinks).toBeUndefined();
573
+ expect(uc?.serviceRefs).toBeUndefined();
574
+ });
575
+ });
576
+ //# sourceMappingURL=filesystem.loader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.loader.test.js","sourceRoot":"","sources":["../../../src/adapters/loaders/filesystem.loader.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Document } from '@cwygoda/bpmn-txt';
2
+ import type { Step } from '../../domain/use-case.js';
3
+ /** Extract steps from BPMN AST — tasks ordered by sequence flow topology */
4
+ export declare function extractSteps(doc: Document): Step[];
5
+ //# sourceMappingURL=bpmn-steps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bpmn-steps.d.ts","sourceRoot":"","sources":["../../../src/adapters/parsers/bpmn-steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAgC,MAAM,mBAAmB,CAAC;AAChF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAwCrD,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,EAAE,CAyFlD"}