@cwygoda/service-catalog-core 1.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 (153) hide show
  1. package/dist/adapters/index.d.ts +5 -0
  2. package/dist/adapters/index.d.ts.map +1 -0
  3. package/dist/adapters/index.js +5 -0
  4. package/dist/adapters/index.js.map +1 -0
  5. package/dist/adapters/loaders/filesystem.loader.d.ts +14 -0
  6. package/dist/adapters/loaders/filesystem.loader.d.ts.map +1 -0
  7. package/dist/adapters/loaders/filesystem.loader.js +95 -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 +222 -0
  12. package/dist/adapters/loaders/filesystem.loader.test.js.map +1 -0
  13. package/dist/adapters/parsers/bpmn-txt.parser.d.ts +21 -0
  14. package/dist/adapters/parsers/bpmn-txt.parser.d.ts.map +1 -0
  15. package/dist/adapters/parsers/bpmn-txt.parser.js +56 -0
  16. package/dist/adapters/parsers/bpmn-txt.parser.js.map +1 -0
  17. package/dist/adapters/parsers/bpmn-txt.parser.test.d.ts +2 -0
  18. package/dist/adapters/parsers/bpmn-txt.parser.test.d.ts.map +1 -0
  19. package/dist/adapters/parsers/bpmn-txt.parser.test.js +71 -0
  20. package/dist/adapters/parsers/bpmn-txt.parser.test.js.map +1 -0
  21. package/dist/adapters/parsers/toml.parser.d.ts +26 -0
  22. package/dist/adapters/parsers/toml.parser.d.ts.map +1 -0
  23. package/dist/adapters/parsers/toml.parser.js +165 -0
  24. package/dist/adapters/parsers/toml.parser.js.map +1 -0
  25. package/dist/adapters/parsers/toml.parser.test.d.ts +2 -0
  26. package/dist/adapters/parsers/toml.parser.test.d.ts.map +1 -0
  27. package/dist/adapters/parsers/toml.parser.test.js +197 -0
  28. package/dist/adapters/parsers/toml.parser.test.js.map +1 -0
  29. package/dist/adapters/persistence/json.writer.d.ts +7 -0
  30. package/dist/adapters/persistence/json.writer.d.ts.map +1 -0
  31. package/dist/adapters/persistence/json.writer.js +14 -0
  32. package/dist/adapters/persistence/json.writer.js.map +1 -0
  33. package/dist/adapters/persistence/json.writer.test.d.ts +2 -0
  34. package/dist/adapters/persistence/json.writer.test.d.ts.map +1 -0
  35. package/dist/adapters/persistence/json.writer.test.js +78 -0
  36. package/dist/adapters/persistence/json.writer.test.js.map +1 -0
  37. package/dist/domain/catalog.d.ts +22 -0
  38. package/dist/domain/catalog.d.ts.map +1 -0
  39. package/dist/domain/catalog.js +34 -0
  40. package/dist/domain/catalog.js.map +1 -0
  41. package/dist/domain/catalog.test.d.ts +2 -0
  42. package/dist/domain/catalog.test.d.ts.map +1 -0
  43. package/dist/domain/catalog.test.js +269 -0
  44. package/dist/domain/catalog.test.js.map +1 -0
  45. package/dist/domain/connection.d.ts +23 -0
  46. package/dist/domain/connection.d.ts.map +1 -0
  47. package/dist/domain/connection.js +43 -0
  48. package/dist/domain/connection.js.map +1 -0
  49. package/dist/domain/connection.test.d.ts +2 -0
  50. package/dist/domain/connection.test.d.ts.map +1 -0
  51. package/dist/domain/connection.test.js +94 -0
  52. package/dist/domain/connection.test.js.map +1 -0
  53. package/dist/domain/domain.d.ts +9 -0
  54. package/dist/domain/domain.d.ts.map +1 -0
  55. package/dist/domain/domain.js +26 -0
  56. package/dist/domain/domain.js.map +1 -0
  57. package/dist/domain/domain.test.d.ts +2 -0
  58. package/dist/domain/domain.test.d.ts.map +1 -0
  59. package/dist/domain/domain.test.js +92 -0
  60. package/dist/domain/domain.test.js.map +1 -0
  61. package/dist/domain/graph.d.ts +18 -0
  62. package/dist/domain/graph.d.ts.map +1 -0
  63. package/dist/domain/graph.js +2 -0
  64. package/dist/domain/graph.js.map +1 -0
  65. package/dist/domain/index.d.ts +7 -0
  66. package/dist/domain/index.d.ts.map +1 -0
  67. package/dist/domain/index.js +7 -0
  68. package/dist/domain/index.js.map +1 -0
  69. package/dist/domain/service.d.ts +19 -0
  70. package/dist/domain/service.d.ts.map +1 -0
  71. package/dist/domain/service.js +36 -0
  72. package/dist/domain/service.js.map +1 -0
  73. package/dist/domain/service.test.d.ts +2 -0
  74. package/dist/domain/service.test.d.ts.map +1 -0
  75. package/dist/domain/service.test.js +101 -0
  76. package/dist/domain/service.test.js.map +1 -0
  77. package/dist/domain/use-case.d.ts +36 -0
  78. package/dist/domain/use-case.d.ts.map +1 -0
  79. package/dist/domain/use-case.js +70 -0
  80. package/dist/domain/use-case.js.map +1 -0
  81. package/dist/domain/use-case.test.d.ts +2 -0
  82. package/dist/domain/use-case.test.d.ts.map +1 -0
  83. package/dist/domain/use-case.test.js +249 -0
  84. package/dist/domain/use-case.test.js.map +1 -0
  85. package/dist/index.d.ts +6 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +11 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/ports/catalog-loader.port.d.ts +5 -0
  90. package/dist/ports/catalog-loader.port.d.ts.map +1 -0
  91. package/dist/ports/catalog-loader.port.js +2 -0
  92. package/dist/ports/catalog-loader.port.js.map +1 -0
  93. package/dist/ports/catalog-writer.port.d.ts +5 -0
  94. package/dist/ports/catalog-writer.port.d.ts.map +1 -0
  95. package/dist/ports/catalog-writer.port.js +2 -0
  96. package/dist/ports/catalog-writer.port.js.map +1 -0
  97. package/dist/ports/index.d.ts +3 -0
  98. package/dist/ports/index.d.ts.map +1 -0
  99. package/dist/ports/index.js +3 -0
  100. package/dist/ports/index.js.map +1 -0
  101. package/dist/schemas/catalog-config.schema.d.ts +12 -0
  102. package/dist/schemas/catalog-config.schema.d.ts.map +1 -0
  103. package/dist/schemas/catalog-config.schema.js +14 -0
  104. package/dist/schemas/catalog-config.schema.js.map +1 -0
  105. package/dist/schemas/catalog.schema.d.ts +123 -0
  106. package/dist/schemas/catalog.schema.d.ts.map +1 -0
  107. package/dist/schemas/catalog.schema.js +52 -0
  108. package/dist/schemas/catalog.schema.js.map +1 -0
  109. package/dist/schemas/connection.schema.d.ts +16 -0
  110. package/dist/schemas/connection.schema.d.ts.map +1 -0
  111. package/dist/schemas/connection.schema.js +15 -0
  112. package/dist/schemas/connection.schema.js.map +1 -0
  113. package/dist/schemas/connection.schema.test.d.ts +2 -0
  114. package/dist/schemas/connection.schema.test.d.ts.map +1 -0
  115. package/dist/schemas/connection.schema.test.js +73 -0
  116. package/dist/schemas/connection.schema.test.js.map +1 -0
  117. package/dist/schemas/domain.schema.d.ts +11 -0
  118. package/dist/schemas/domain.schema.d.ts.map +1 -0
  119. package/dist/schemas/domain.schema.js +10 -0
  120. package/dist/schemas/domain.schema.js.map +1 -0
  121. package/dist/schemas/domain.schema.test.d.ts +2 -0
  122. package/dist/schemas/domain.schema.test.d.ts.map +1 -0
  123. package/dist/schemas/domain.schema.test.js +95 -0
  124. package/dist/schemas/domain.schema.test.js.map +1 -0
  125. package/dist/schemas/index.d.ts +7 -0
  126. package/dist/schemas/index.d.ts.map +1 -0
  127. package/dist/schemas/index.js +7 -0
  128. package/dist/schemas/index.js.map +1 -0
  129. package/dist/schemas/service.schema.d.ts +24 -0
  130. package/dist/schemas/service.schema.d.ts.map +1 -0
  131. package/dist/schemas/service.schema.js +16 -0
  132. package/dist/schemas/service.schema.js.map +1 -0
  133. package/dist/schemas/use-case.schema.d.ts +36 -0
  134. package/dist/schemas/use-case.schema.d.ts.map +1 -0
  135. package/dist/schemas/use-case.schema.js +24 -0
  136. package/dist/schemas/use-case.schema.js.map +1 -0
  137. package/dist/schemas/use-case.schema.test.d.ts +2 -0
  138. package/dist/schemas/use-case.schema.test.d.ts.map +1 -0
  139. package/dist/schemas/use-case.schema.test.js +152 -0
  140. package/dist/schemas/use-case.schema.test.js.map +1 -0
  141. package/dist/services/graph-builder.d.ts +21 -0
  142. package/dist/services/graph-builder.d.ts.map +1 -0
  143. package/dist/services/graph-builder.js +134 -0
  144. package/dist/services/graph-builder.js.map +1 -0
  145. package/dist/services/graph-builder.test.d.ts +2 -0
  146. package/dist/services/graph-builder.test.d.ts.map +1 -0
  147. package/dist/services/graph-builder.test.js +216 -0
  148. package/dist/services/graph-builder.test.js.map +1 -0
  149. package/dist/services/index.d.ts +2 -0
  150. package/dist/services/index.d.ts.map +1 -0
  151. package/dist/services/index.js +2 -0
  152. package/dist/services/index.js.map +1 -0
  153. package/package.json +48 -0
@@ -0,0 +1,5 @@
1
+ export * from './loaders/filesystem.loader.js';
2
+ export * from './persistence/json.writer.js';
3
+ export * from './parsers/toml.parser.js';
4
+ export * from './parsers/bpmn-txt.parser.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './loaders/filesystem.loader.js';
2
+ export * from './persistence/json.writer.js';
3
+ export * from './parsers/toml.parser.js';
4
+ export * from './parsers/bpmn-txt.parser.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { CatalogLoaderPort } from '../../ports/catalog-loader.port.js';
2
+ import type { Catalog } from '../../domain/catalog.js';
3
+ import type { BpmnLintLevel } from '../../schemas/catalog-config.schema.js';
4
+ export interface LoaderOptions {
5
+ bpmnLint?: BpmnLintLevel;
6
+ }
7
+ export declare class FilesystemLoader implements CatalogLoaderPort {
8
+ private options;
9
+ constructor(options?: LoaderOptions);
10
+ load(path: string): Promise<Catalog>;
11
+ private processBpmnSource;
12
+ }
13
+ export declare function createFilesystemLoader(options?: LoaderOptions): CatalogLoaderPort;
14
+ //# sourceMappingURL=filesystem.loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.loader.d.ts","sourceRoot":"","sources":["../../../src/adapters/loaders/filesystem.loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAcvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAM5E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAuBD,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,GAAE,aAAkB;IAIjC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YA2C5B,iBAAiB;CA8BhC;AAED,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAEjF"}
@@ -0,0 +1,95 @@
1
+ import { readFile, readdir, stat } from 'node:fs/promises';
2
+ import { join, dirname } from 'node:path';
3
+ import { createCatalog } from '../../domain/catalog.js';
4
+ import { parseToml, sidecarToService, parseUseCaseToml, sidecarToUseCase, parseDomainToml, sidecarToDomain, } from '../parsers/toml.parser.js';
5
+ import { parseBpmnTxt } from '../parsers/bpmn-txt.parser.js';
6
+ const SERVICE_FILENAME = 'service.toml';
7
+ const USE_CASE_FILENAME = 'use-case.toml';
8
+ const DOMAIN_FILENAME = 'domain.toml';
9
+ async function findFiles(dir, filename) {
10
+ const files = [];
11
+ async function walk(currentDir) {
12
+ const entries = await readdir(currentDir, { withFileTypes: true });
13
+ for (const entry of entries) {
14
+ const fullPath = join(currentDir, entry.name);
15
+ if (entry.isDirectory()) {
16
+ await walk(fullPath);
17
+ }
18
+ else if (entry.isFile() && entry.name === filename) {
19
+ files.push(fullPath);
20
+ }
21
+ }
22
+ }
23
+ await walk(dir);
24
+ return files;
25
+ }
26
+ export class FilesystemLoader {
27
+ options;
28
+ constructor(options = {}) {
29
+ this.options = options;
30
+ }
31
+ async load(path) {
32
+ const stats = await stat(path);
33
+ if (!stats.isDirectory()) {
34
+ throw new Error(`Path is not a directory: ${path}`);
35
+ }
36
+ // Load services
37
+ const serviceFiles = await findFiles(path, SERVICE_FILENAME);
38
+ const services = [];
39
+ for (const filePath of serviceFiles) {
40
+ const content = await readFile(filePath, 'utf-8');
41
+ const sidecar = parseToml(content, filePath);
42
+ services.push(sidecarToService(sidecar));
43
+ }
44
+ // Load use cases
45
+ const useCaseFiles = await findFiles(path, USE_CASE_FILENAME);
46
+ const useCases = [];
47
+ for (const filePath of useCaseFiles) {
48
+ const content = await readFile(filePath, 'utf-8');
49
+ const sidecar = parseUseCaseToml(content, filePath);
50
+ const useCase = sidecarToUseCase(sidecar);
51
+ const processedUseCase = await this.processBpmnSource(useCase, dirname(filePath));
52
+ useCases.push(processedUseCase);
53
+ }
54
+ // Load domains
55
+ const domainFiles = await findFiles(path, DOMAIN_FILENAME);
56
+ const domains = [];
57
+ for (const filePath of domainFiles) {
58
+ const content = await readFile(filePath, 'utf-8');
59
+ const sidecar = parseDomainToml(content, filePath);
60
+ domains.push(sidecarToDomain(sidecar));
61
+ }
62
+ return createCatalog(services, useCases, domains);
63
+ }
64
+ async processBpmnSource(useCase, useCaseDir) {
65
+ if (!useCase.bpmnSource) {
66
+ return useCase;
67
+ }
68
+ const source = useCase.bpmnSource;
69
+ if (source.type === 'xml') {
70
+ return useCase;
71
+ }
72
+ // source.type === 'bpmn-txt'
73
+ let content;
74
+ let filePath;
75
+ if (source.content) {
76
+ content = source.content;
77
+ filePath = `${useCase.id} (inline bpmn)`;
78
+ }
79
+ else if (source.path) {
80
+ const resolvedPath = join(useCaseDir, source.path);
81
+ content = await readFile(resolvedPath, 'utf-8');
82
+ filePath = source.path;
83
+ }
84
+ else {
85
+ return useCase;
86
+ }
87
+ const lintLevel = this.options.bpmnLint ?? 'warn';
88
+ const result = await parseBpmnTxt(content, filePath, lintLevel);
89
+ return { ...useCase, bpmn: result.xml };
90
+ }
91
+ }
92
+ export function createFilesystemLoader(options) {
93
+ return new FilesystemLoader(options);
94
+ }
95
+ //# sourceMappingURL=filesystem.loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.loader.js","sourceRoot":"","sources":["../../../src/adapters/loaders/filesystem.loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=filesystem.loader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.loader.test.d.ts","sourceRoot":"","sources":["../../../src/adapters/loaders/filesystem.loader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,222 @@
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
+ });
22
+ it('loads single service', async () => {
23
+ const serviceDir = join(tempDir, 'my-service');
24
+ await mkdir(serviceDir);
25
+ await writeFile(join(serviceDir, 'service.toml'), `[service]
26
+ id = "my-service"
27
+ name = "My Service"
28
+ description = "A test service"
29
+ `);
30
+ const catalog = await loader.load(tempDir);
31
+ expect(catalog.services).toHaveLength(1);
32
+ expect(catalog.services[0]).toEqual({
33
+ id: 'my-service',
34
+ name: 'My Service',
35
+ description: 'A test service',
36
+ });
37
+ });
38
+ it('loads multiple services from nested directories', async () => {
39
+ // Create nested structure
40
+ const service1Dir = join(tempDir, 'services', 'auth');
41
+ const service2Dir = join(tempDir, 'services', 'billing');
42
+ await mkdir(service1Dir, { recursive: true });
43
+ await mkdir(service2Dir, { recursive: true });
44
+ await writeFile(join(service1Dir, 'service.toml'), `[service]
45
+ id = "auth"
46
+ name = "Auth"
47
+ description = "Auth service"
48
+ `);
49
+ await writeFile(join(service2Dir, 'service.toml'), `[service]
50
+ id = "billing"
51
+ name = "Billing"
52
+ description = "Billing service"
53
+ `);
54
+ const catalog = await loader.load(tempDir);
55
+ expect(catalog.services).toHaveLength(2);
56
+ const ids = catalog.services.map((s) => s.id).sort();
57
+ expect(ids).toEqual(['auth', 'billing']);
58
+ });
59
+ it('loads service with metadata', async () => {
60
+ const serviceDir = join(tempDir, 'versioned');
61
+ await mkdir(serviceDir);
62
+ await writeFile(join(serviceDir, 'service.toml'), `[service]
63
+ id = "versioned"
64
+ name = "Versioned Service"
65
+ description = "Has version"
66
+
67
+ [service.metadata]
68
+ version = "1.2.3"
69
+ `);
70
+ const catalog = await loader.load(tempDir);
71
+ expect(catalog.services[0]?.metadata?.version).toBe('1.2.3');
72
+ });
73
+ it('throws for non-directory path', async () => {
74
+ const filePath = join(tempDir, 'not-a-dir.txt');
75
+ await writeFile(filePath, 'content');
76
+ await expect(loader.load(filePath)).rejects.toThrow('Path is not a directory');
77
+ });
78
+ it('throws for non-existent path', async () => {
79
+ const badPath = join(tempDir, 'does-not-exist');
80
+ await expect(loader.load(badPath)).rejects.toThrow();
81
+ });
82
+ it('ignores non-service.toml files', async () => {
83
+ await writeFile(join(tempDir, 'readme.md'), '# Hello');
84
+ await writeFile(join(tempDir, 'other.toml'), '[other]\nkey = "value"');
85
+ const catalog = await loader.load(tempDir);
86
+ expect(catalog.services).toEqual([]);
87
+ expect(catalog.useCases).toEqual([]);
88
+ });
89
+ it('loads single use case', async () => {
90
+ const useCaseDir = join(tempDir, 'checkout');
91
+ await mkdir(useCaseDir);
92
+ await writeFile(join(useCaseDir, 'use-case.toml'), `[use_case]
93
+ id = "checkout"
94
+ name = "Customer Checkout"
95
+ description = "Checkout flow"
96
+ participants = []
97
+ steps = []
98
+ `);
99
+ const catalog = await loader.load(tempDir);
100
+ expect(catalog.useCases).toHaveLength(1);
101
+ expect(catalog.useCases[0]?.id).toBe('checkout');
102
+ expect(catalog.useCases[0]?.name).toBe('Customer Checkout');
103
+ });
104
+ it('loads use case with participants and steps', async () => {
105
+ const useCaseDir = join(tempDir, 'full-checkout');
106
+ await mkdir(useCaseDir);
107
+ await writeFile(join(useCaseDir, 'use-case.toml'), `[use_case]
108
+ id = "full-checkout"
109
+ name = "Full Checkout"
110
+ description = "Complete checkout"
111
+ bpmn = "./checkout.bpmn.txt"
112
+
113
+ [[use_case.participants]]
114
+ service = "order-service"
115
+ role = "Creates order"
116
+
117
+ [[use_case.steps]]
118
+ sequence = 1
119
+ actor = "Customer"
120
+ action = "Submit order"
121
+ `);
122
+ // Create bpmn-txt file
123
+ await writeFile(join(useCaseDir, 'checkout.bpmn.txt'), `process: checkout
124
+ start: begin
125
+ -> finish
126
+ end: finish
127
+ `);
128
+ const catalog = await loader.load(tempDir);
129
+ expect(catalog.useCases[0]?.participants).toHaveLength(1);
130
+ expect(catalog.useCases[0]?.steps).toHaveLength(1);
131
+ // bpmn field now contains generated XML
132
+ expect(catalog.useCases[0]?.bpmn).toContain('<?xml');
133
+ });
134
+ it('loads services and use cases together', async () => {
135
+ // Create service
136
+ const serviceDir = join(tempDir, 'services', 'order');
137
+ await mkdir(serviceDir, { recursive: true });
138
+ await writeFile(join(serviceDir, 'service.toml'), `[service]
139
+ id = "order-service"
140
+ name = "Order Service"
141
+ description = "Handles orders"
142
+ `);
143
+ // Create use case
144
+ const useCaseDir = join(tempDir, 'use-cases', 'checkout');
145
+ await mkdir(useCaseDir, { recursive: true });
146
+ await writeFile(join(useCaseDir, 'use-case.toml'), `[use_case]
147
+ id = "checkout"
148
+ name = "Checkout"
149
+ description = "Checkout flow"
150
+ participants = []
151
+ steps = []
152
+ `);
153
+ const catalog = await loader.load(tempDir);
154
+ expect(catalog.services).toHaveLength(1);
155
+ expect(catalog.useCases).toHaveLength(1);
156
+ expect(catalog.services[0]?.id).toBe('order-service');
157
+ expect(catalog.useCases[0]?.id).toBe('checkout');
158
+ });
159
+ it('loads single domain', async () => {
160
+ const domainDir = join(tempDir, 'commerce');
161
+ await mkdir(domainDir);
162
+ await writeFile(join(domainDir, 'domain.toml'), `[domain]
163
+ id = "commerce"
164
+ name = "Commerce"
165
+ description = "E-commerce domain"
166
+ `);
167
+ const catalog = await loader.load(tempDir);
168
+ expect(catalog.domains).toHaveLength(1);
169
+ expect(catalog.domains[0]?.id).toBe('commerce');
170
+ expect(catalog.domains[0]?.name).toBe('Commerce');
171
+ });
172
+ it('loads domain with parent', async () => {
173
+ const domainDir = join(tempDir, 'orders');
174
+ await mkdir(domainDir);
175
+ await writeFile(join(domainDir, 'domain.toml'), `[domain]
176
+ id = "orders"
177
+ name = "Orders"
178
+ description = "Order subdomain"
179
+ parent = "commerce"
180
+ `);
181
+ const catalog = await loader.load(tempDir);
182
+ expect(catalog.domains[0]?.parent).toBe('commerce');
183
+ });
184
+ it('loads services, use cases, and domains together', async () => {
185
+ // Create domain
186
+ const domainDir = join(tempDir, 'domains', 'commerce');
187
+ await mkdir(domainDir, { recursive: true });
188
+ await writeFile(join(domainDir, 'domain.toml'), `[domain]
189
+ id = "commerce"
190
+ name = "Commerce"
191
+ description = "E-commerce domain"
192
+ `);
193
+ // Create service
194
+ const serviceDir = join(tempDir, 'services', 'order');
195
+ await mkdir(serviceDir, { recursive: true });
196
+ await writeFile(join(serviceDir, 'service.toml'), `[service]
197
+ id = "order-service"
198
+ name = "Order Service"
199
+ description = "Handles orders"
200
+ domain = "commerce"
201
+ `);
202
+ // Create use case
203
+ const useCaseDir = join(tempDir, 'use-cases', 'checkout');
204
+ await mkdir(useCaseDir, { recursive: true });
205
+ await writeFile(join(useCaseDir, 'use-case.toml'), `[use_case]
206
+ id = "checkout"
207
+ name = "Checkout"
208
+ description = "Checkout flow"
209
+ domain = "commerce"
210
+ participants = []
211
+ steps = []
212
+ `);
213
+ const catalog = await loader.load(tempDir);
214
+ expect(catalog.domains).toHaveLength(1);
215
+ expect(catalog.services).toHaveLength(1);
216
+ expect(catalog.useCases).toHaveLength(1);
217
+ expect(catalog.domains[0]?.id).toBe('commerce');
218
+ expect(catalog.services[0]?.domain).toBe('commerce');
219
+ expect(catalog.useCases[0]?.domain).toBe('commerce');
220
+ });
221
+ });
222
+ //# 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,21 @@
1
+ import { type ParseError, type LintResult } from 'bpmn-txt';
2
+ import type { BpmnLintLevel } from '../../schemas/catalog-config.schema.js';
3
+ export interface BpmnTxtParseResult {
4
+ xml: string;
5
+ lintResults: LintResult[];
6
+ }
7
+ export declare class BpmnTxtParseError extends Error {
8
+ readonly filePath: string;
9
+ readonly errors: ParseError[];
10
+ constructor(message: string, filePath: string, errors: ParseError[]);
11
+ toString(): string;
12
+ }
13
+ export declare class BpmnLintError extends Error {
14
+ readonly filePath: string;
15
+ readonly results: LintResult[];
16
+ constructor(message: string, filePath: string, results: LintResult[]);
17
+ toString(): string;
18
+ }
19
+ export declare function detectBpmnTxtContent(content: string): boolean;
20
+ export declare function parseBpmnTxt(content: string, filePath: string, lintLevel?: BpmnLintLevel): Promise<BpmnTxtParseResult>;
21
+ //# sourceMappingURL=bpmn-txt.parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bpmn-txt.parser.d.ts","sourceRoot":"","sources":["../../../src/adapters/parsers/bpmn-txt.parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,UAAU,EAAE;gBAFpC,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,EAAE;IAM7B,QAAQ,IAAI,MAAM;CAM5B;AAED,qBAAa,aAAc,SAAQ,KAAK;aAGpB,QAAQ,EAAE,MAAM;aAChB,OAAO,EAAE,UAAU,EAAE;gBAFrC,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,UAAU,EAAE;IAM9B,QAAQ,IAAI,MAAM;CAM5B;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,aAAsB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAsB7B"}
@@ -0,0 +1,56 @@
1
+ import { parse, toBpmnXmlAsync, lint } from 'bpmn-txt';
2
+ export class BpmnTxtParseError extends Error {
3
+ filePath;
4
+ errors;
5
+ constructor(message, filePath, errors) {
6
+ super(message);
7
+ this.filePath = filePath;
8
+ this.errors = errors;
9
+ this.name = 'BpmnTxtParseError';
10
+ }
11
+ toString() {
12
+ const errorDetails = this.errors
13
+ .map((e) => ` Line ${String(e.line)}:${String(e.column)}: ${e.message}`)
14
+ .join('\n');
15
+ return `${this.name}: ${this.message} at ${this.filePath}\n${errorDetails}`;
16
+ }
17
+ }
18
+ export class BpmnLintError extends Error {
19
+ filePath;
20
+ results;
21
+ constructor(message, filePath, results) {
22
+ super(message);
23
+ this.filePath = filePath;
24
+ this.results = results;
25
+ this.name = 'BpmnLintError';
26
+ }
27
+ toString() {
28
+ const errorDetails = this.results
29
+ .map((r) => ` [${r.category}] ${r.id}: ${r.message} (${r.rule})`)
30
+ .join('\n');
31
+ return `${this.name}: ${this.message} at ${this.filePath}\n${errorDetails}`;
32
+ }
33
+ }
34
+ export function detectBpmnTxtContent(content) {
35
+ const trimmed = content.trim();
36
+ return trimmed.startsWith('process:') || trimmed.startsWith('collaboration:');
37
+ }
38
+ export async function parseBpmnTxt(content, filePath, lintLevel = 'warn') {
39
+ const result = parse(content);
40
+ if (result.errors.length > 0 || !result.document) {
41
+ throw new BpmnTxtParseError('Failed to parse bpmn-txt', filePath, result.errors);
42
+ }
43
+ const xml = await toBpmnXmlAsync(result.document, { includeDiagram: true });
44
+ let lintResults = [];
45
+ if (lintLevel !== 'off') {
46
+ lintResults = await lint(xml);
47
+ if (lintLevel === 'error') {
48
+ const errors = lintResults.filter((r) => r.category === 'error');
49
+ if (errors.length > 0) {
50
+ throw new BpmnLintError('BPMN lint errors found', filePath, errors);
51
+ }
52
+ }
53
+ }
54
+ return { xml, lintResults };
55
+ }
56
+ //# sourceMappingURL=bpmn-txt.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bpmn-txt.parser.js","sourceRoot":"","sources":["../../../src/adapters/parsers/bpmn-txt.parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bpmn-txt.parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bpmn-txt.parser.test.d.ts","sourceRoot":"","sources":["../../../src/adapters/parsers/bpmn-txt.parser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { detectBpmnTxtContent, parseBpmnTxt, BpmnTxtParseError } from './bpmn-txt.parser.js';
3
+ describe('bpmn-txt.parser', () => {
4
+ describe('detectBpmnTxtContent', () => {
5
+ it('detects process: prefix', () => {
6
+ expect(detectBpmnTxtContent('process: my-process\n')).toBe(true);
7
+ });
8
+ it('detects collaboration: prefix', () => {
9
+ expect(detectBpmnTxtContent('collaboration: my-collab\n')).toBe(true);
10
+ });
11
+ it('handles whitespace before content', () => {
12
+ expect(detectBpmnTxtContent(' \n process: test\n')).toBe(true);
13
+ });
14
+ it('returns false for XML content', () => {
15
+ expect(detectBpmnTxtContent('<?xml version="1.0"?>\n<bpmn:definitions')).toBe(false);
16
+ });
17
+ it('returns false for file paths', () => {
18
+ expect(detectBpmnTxtContent('/bpmn/checkout.bpmn')).toBe(false);
19
+ });
20
+ it('returns false for empty content', () => {
21
+ expect(detectBpmnTxtContent('')).toBe(false);
22
+ });
23
+ });
24
+ describe('parseBpmnTxt', () => {
25
+ it('parses valid bpmn-txt to XML', async () => {
26
+ const input = `process: test
27
+ start: begin
28
+ -> finish
29
+ end: finish
30
+ `;
31
+ const result = await parseBpmnTxt(input, 'test.bpmn.txt', 'off');
32
+ expect(result.xml).toContain('<?xml');
33
+ expect(result.xml).toContain('bpmn:definitions');
34
+ expect(result.xml).toContain('bpmn:startEvent');
35
+ expect(result.xml).toContain('bpmn:endEvent');
36
+ });
37
+ it('returns lint results when linting enabled', async () => {
38
+ const input = `process: test
39
+ task: lonely-task
40
+ name: "No connections"
41
+ `;
42
+ const result = await parseBpmnTxt(input, 'test.bpmn.txt', 'warn');
43
+ expect(result.lintResults.length).toBeGreaterThan(0);
44
+ });
45
+ it('skips linting when lint level is off', async () => {
46
+ const input = `process: test
47
+ task: lonely-task
48
+ `;
49
+ const result = await parseBpmnTxt(input, 'test.bpmn.txt', 'off');
50
+ expect(result.lintResults).toHaveLength(0);
51
+ });
52
+ it('throws BpmnTxtParseError for invalid syntax', async () => {
53
+ const input = `invalid syntax here`;
54
+ await expect(parseBpmnTxt(input, 'bad.bpmn.txt', 'off')).rejects.toThrow(BpmnTxtParseError);
55
+ });
56
+ it('includes file path in parse error', async () => {
57
+ const input = `process: test
58
+ invalid-keyword: foo
59
+ `;
60
+ try {
61
+ await parseBpmnTxt(input, 'my-file.bpmn.txt', 'off');
62
+ expect.fail('Should have thrown');
63
+ }
64
+ catch (e) {
65
+ expect(e).toBeInstanceOf(BpmnTxtParseError);
66
+ expect(e.filePath).toBe('my-file.bpmn.txt');
67
+ }
68
+ });
69
+ });
70
+ });
71
+ //# sourceMappingURL=bpmn-txt.parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bpmn-txt.parser.test.js","sourceRoot":"","sources":["../../../src/adapters/parsers/bpmn-txt.parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type ServiceSidecar } from '../../schemas/service.schema.js';
2
+ import { type UseCaseSidecar } from '../../schemas/use-case.schema.js';
3
+ import { type DomainSidecar } from '../../schemas/domain.schema.js';
4
+ import type { Service } from '../../domain/service.js';
5
+ import type { UseCase } from '../../domain/use-case.js';
6
+ import type { Domain } from '../../domain/domain.js';
7
+ export declare class TomlParseError extends Error {
8
+ readonly filePath: string;
9
+ readonly line?: number | undefined;
10
+ readonly column?: number | undefined;
11
+ constructor(message: string, filePath: string, line?: number | undefined, column?: number | undefined);
12
+ toString(): string;
13
+ }
14
+ export declare class ValidationError extends Error {
15
+ readonly filePath: string;
16
+ readonly errors: string[];
17
+ constructor(message: string, filePath: string, errors: string[]);
18
+ toString(): string;
19
+ }
20
+ export declare function parseToml(content: string, filePath: string): ServiceSidecar;
21
+ export declare function sidecarToService(sidecar: ServiceSidecar): Service;
22
+ export declare function parseUseCaseToml(content: string, filePath: string): UseCaseSidecar;
23
+ export declare function sidecarToUseCase(sidecar: UseCaseSidecar): UseCase;
24
+ export declare function parseDomainToml(content: string, filePath: string): DomainSidecar;
25
+ export declare function sidecarToDomain(sidecar: DomainSidecar): Domain;
26
+ //# sourceMappingURL=toml.parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toml.parser.d.ts","sourceRoot":"","sources":["../../../src/adapters/parsers/toml.parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAC5F,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAc,MAAM,0BAA0B,CAAC;AAEpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAMrD,qBAAa,cAAe,SAAQ,KAAK;aAGrB,QAAQ,EAAE,MAAM;aAChB,IAAI,CAAC,EAAE,MAAM;aACb,MAAM,CAAC,EAAE,MAAM;gBAH/B,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,MAAM,CAAC,EAAE,MAAM,YAAA;IAMxB,QAAQ,IAAI,MAAM;CAM5B;AAED,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,MAAM,EAAE;gBAFhC,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EAAE;IAMzB,QAAQ,IAAI,MAAM;CAG5B;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAuB3E;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAyBjE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAuBlF;AAeD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CA8BjE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,CAuBhF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAc9D"}