@principal-ai/principal-view-core 0.24.73 → 0.24.74
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.
- package/dist/discovery/LibraryDiscovery.d.ts +23 -4
- package/dist/discovery/LibraryDiscovery.d.ts.map +1 -1
- package/dist/discovery/LibraryDiscovery.js +73 -1
- package/dist/discovery/LibraryDiscovery.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/discovery/CanvasDiscovery.test.ts +6 -5
- package/src/discovery/LibraryDiscovery.test.ts +315 -0
- package/src/discovery/LibraryDiscovery.ts +116 -3
- package/src/index.ts +2 -0
|
@@ -32,6 +32,18 @@ export interface DiscoveredLibrary {
|
|
|
32
32
|
/** Services with their owned scopes */
|
|
33
33
|
servicesWithScopes: ServiceWithScopes[];
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Types of validation errors
|
|
37
|
+
*/
|
|
38
|
+
export type LibraryValidationErrorType = 'parse-error' | 'validation-error' | 'scopes-canvas-required';
|
|
39
|
+
/**
|
|
40
|
+
* Library validation error with type information
|
|
41
|
+
*/
|
|
42
|
+
export interface LibraryValidationError {
|
|
43
|
+
path: string;
|
|
44
|
+
error: string;
|
|
45
|
+
type?: LibraryValidationErrorType;
|
|
46
|
+
}
|
|
35
47
|
/**
|
|
36
48
|
* Result of library discovery
|
|
37
49
|
*/
|
|
@@ -48,10 +60,7 @@ export interface LibraryDiscoveryResult {
|
|
|
48
60
|
*/
|
|
49
61
|
scopeToServiceMap: Map<string, string>;
|
|
50
62
|
/** Errors encountered during discovery */
|
|
51
|
-
errors:
|
|
52
|
-
path: string;
|
|
53
|
-
error: string;
|
|
54
|
-
}>;
|
|
63
|
+
errors: LibraryValidationError[];
|
|
55
64
|
}
|
|
56
65
|
/**
|
|
57
66
|
* Discovery system for finding and loading all library.yaml files in a monorepo
|
|
@@ -78,10 +87,12 @@ export declare class LibraryDiscovery {
|
|
|
78
87
|
* @param fileTree - FileTree from repository-abstraction
|
|
79
88
|
* @param options - Discovery options
|
|
80
89
|
* @param options.fileReader - Optional function to read file contents (for package.json parsing)
|
|
90
|
+
* @param options.requireScopesCanvas - If true, validates that .scopes.canvas exists when owned-scopes is defined (default: true)
|
|
81
91
|
* @returns Discovery result with libraries, service names, and errors
|
|
82
92
|
*/
|
|
83
93
|
discover(fileTree: FileTree, options?: {
|
|
84
94
|
fileReader?: (path: string) => Promise<string>;
|
|
95
|
+
requireScopesCanvas?: boolean;
|
|
85
96
|
}): Promise<LibraryDiscoveryResult>;
|
|
86
97
|
/**
|
|
87
98
|
* Clear package cache (useful when file tree changes)
|
|
@@ -91,6 +102,14 @@ export declare class LibraryDiscovery {
|
|
|
91
102
|
* Extract service names and owned scopes from a library's resources
|
|
92
103
|
*/
|
|
93
104
|
private extractServicesInfo;
|
|
105
|
+
/**
|
|
106
|
+
* Validate that a .scopes.canvas file exists when owned-scopes is defined
|
|
107
|
+
*/
|
|
108
|
+
private validateScopesCanvasRequirement;
|
|
109
|
+
/**
|
|
110
|
+
* Check if any .scopes.canvas file exists in a directory
|
|
111
|
+
*/
|
|
112
|
+
private checkScopesCanvasExists;
|
|
94
113
|
/**
|
|
95
114
|
* Discover packages with caching by fileTree SHA
|
|
96
115
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LibraryDiscovery.d.ts","sourceRoot":"","sources":["../../src/discovery/LibraryDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAGxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IAEpB,mDAAmD;IACnD,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IAEpB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,6BAA6B;IAC7B,OAAO,EAAE,gBAAgB,CAAC;IAE1B,kDAAkD;IAClD,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,uCAAuC;IACvC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAE/B,6CAA6C;IAC7C,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;;OAKG;IACH,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC,0CAA0C;IAC1C,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"LibraryDiscovery.d.ts","sourceRoot":"","sources":["../../src/discovery/LibraryDiscovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAGxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGzD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IAEpB,mDAAmD;IACnD,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IAEpB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,6BAA6B;IAC7B,OAAO,EAAE,gBAAgB,CAAC;IAE1B,kDAAkD;IAClD,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,uCAAuC;IACvC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAClC,aAAa,GACb,kBAAkB,GAClB,wBAAwB,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,0BAA0B,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAE/B,6CAA6C;IAC7C,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B;;;;;OAKG;IACH,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC,0CAA0C;IAC1C,MAAM,EAAE,sBAAsB,EAAE,CAAC;CAClC;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAgB;IAOf,OAAO,CAAC,SAAS;IAN7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAsB;IAExD,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,MAAM,CAAgB;gBAEV,SAAS,EAAE,iBAAiB;IAKhD;;;;;;;;OAQG;IACG,QAAQ,CACZ,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC/B,GACA,OAAO,CAAC,sBAAsB,CAAC;IA+IlC;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;OAEG;YACW,+BAA+B;IAyC7C;;OAEG;YACW,uBAAuB;IAyBrC;;OAEG;YACW,yBAAyB;CAexC"}
|
|
@@ -35,10 +35,11 @@ class LibraryDiscovery {
|
|
|
35
35
|
* @param fileTree - FileTree from repository-abstraction
|
|
36
36
|
* @param options - Discovery options
|
|
37
37
|
* @param options.fileReader - Optional function to read file contents (for package.json parsing)
|
|
38
|
+
* @param options.requireScopesCanvas - If true, validates that .scopes.canvas exists when owned-scopes is defined (default: true)
|
|
38
39
|
* @returns Discovery result with libraries, service names, and errors
|
|
39
40
|
*/
|
|
40
41
|
async discover(fileTree, options) {
|
|
41
|
-
const { fileReader } = options || {};
|
|
42
|
+
const { fileReader, requireScopesCanvas = true } = options || {};
|
|
42
43
|
const errors = [];
|
|
43
44
|
const libraries = [];
|
|
44
45
|
// 1. Discover packages (with caching by fileTree.sha)
|
|
@@ -72,12 +73,17 @@ class LibraryDiscovery {
|
|
|
72
73
|
serviceNames,
|
|
73
74
|
servicesWithScopes,
|
|
74
75
|
});
|
|
76
|
+
// Validate scopes canvas requirement
|
|
77
|
+
if (requireScopesCanvas) {
|
|
78
|
+
await this.validateScopesCanvasRequirement(absolutePackagePath, servicesWithScopes, loadResult.path, errors);
|
|
79
|
+
}
|
|
75
80
|
}
|
|
76
81
|
else if (loadResult.error && !loadResult.error.includes('No library file found')) {
|
|
77
82
|
// Only report errors that aren't "file not found" (which is normal)
|
|
78
83
|
errors.push({
|
|
79
84
|
path: loadResult.path,
|
|
80
85
|
error: loadResult.error,
|
|
86
|
+
type: 'parse-error',
|
|
81
87
|
});
|
|
82
88
|
}
|
|
83
89
|
}
|
|
@@ -107,12 +113,17 @@ class LibraryDiscovery {
|
|
|
107
113
|
serviceNames,
|
|
108
114
|
servicesWithScopes,
|
|
109
115
|
});
|
|
116
|
+
// Validate scopes canvas requirement for root library
|
|
117
|
+
if (requireScopesCanvas) {
|
|
118
|
+
await this.validateScopesCanvasRequirement(rootPath, servicesWithScopes, loadResult.path, errors);
|
|
119
|
+
}
|
|
110
120
|
}
|
|
111
121
|
}
|
|
112
122
|
else if (loadResult.error) {
|
|
113
123
|
errors.push({
|
|
114
124
|
path: loadResult.path,
|
|
115
125
|
error: loadResult.error,
|
|
126
|
+
type: 'parse-error',
|
|
116
127
|
});
|
|
117
128
|
}
|
|
118
129
|
}
|
|
@@ -173,6 +184,67 @@ class LibraryDiscovery {
|
|
|
173
184
|
}
|
|
174
185
|
return { serviceNames, servicesWithScopes };
|
|
175
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Validate that a .scopes.canvas file exists when owned-scopes is defined
|
|
189
|
+
*/
|
|
190
|
+
async validateScopesCanvasRequirement(packagePath, servicesWithScopes, libraryPath, errors) {
|
|
191
|
+
// Check if any service has owned-scopes
|
|
192
|
+
const hasOwnedScopes = servicesWithScopes.some(s => s.ownedScopes.length > 0);
|
|
193
|
+
if (!hasOwnedScopes) {
|
|
194
|
+
return; // No owned-scopes defined, no canvas required
|
|
195
|
+
}
|
|
196
|
+
// Collect all owned scopes
|
|
197
|
+
const allOwnedScopes = servicesWithScopes.flatMap(s => s.ownedScopes);
|
|
198
|
+
// Check if a .scopes.canvas file exists
|
|
199
|
+
// Look for any file matching *.scopes.canvas in .principal-views/
|
|
200
|
+
const pvDir = this.fsAdapter.join(packagePath, LibraryDiscovery.CANVAS_DIR);
|
|
201
|
+
const pvDirExists = await this.fsAdapter.exists(pvDir);
|
|
202
|
+
if (!pvDirExists) {
|
|
203
|
+
errors.push({
|
|
204
|
+
path: libraryPath,
|
|
205
|
+
error: `Scopes canvas required: library.yaml defines owned-scopes [${allOwnedScopes.join(', ')}] but no .principal-views/ directory exists. Create a .scopes.canvas file (e.g., architecture.scopes.canvas) documenting scope boundaries.`,
|
|
206
|
+
type: 'scopes-canvas-required',
|
|
207
|
+
});
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
// Check for any .scopes.canvas file in the directory
|
|
211
|
+
const scopesCanvasExists = await this.checkScopesCanvasExists(pvDir);
|
|
212
|
+
if (!scopesCanvasExists) {
|
|
213
|
+
errors.push({
|
|
214
|
+
path: libraryPath,
|
|
215
|
+
error: `Scopes canvas required: library.yaml defines owned-scopes [${allOwnedScopes.join(', ')}] but no .scopes.canvas file found. Create a .scopes.canvas file (e.g., .principal-views/architecture.scopes.canvas) with nodes for each scope (set pv.otel.scope to the scope name).`,
|
|
216
|
+
type: 'scopes-canvas-required',
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Check if any .scopes.canvas file exists in a directory
|
|
222
|
+
*/
|
|
223
|
+
async checkScopesCanvasExists(dirPath) {
|
|
224
|
+
try {
|
|
225
|
+
const entries = await this.fsAdapter.readDir(dirPath);
|
|
226
|
+
for (const entry of entries) {
|
|
227
|
+
if (entry.endsWith('.scopes.canvas')) {
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
// Also check subdirectories (for hierarchical structure)
|
|
231
|
+
const fullPath = this.fsAdapter.join(dirPath, entry);
|
|
232
|
+
const isDir = await this.fsAdapter.isDirectory(fullPath);
|
|
233
|
+
if (isDir) {
|
|
234
|
+
const subEntries = await this.fsAdapter.readDir(fullPath);
|
|
235
|
+
for (const subEntry of subEntries) {
|
|
236
|
+
if (subEntry.endsWith('.scopes.canvas')) {
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
176
248
|
/**
|
|
177
249
|
* Discover packages with caching by fileTree SHA
|
|
178
250
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LibraryDiscovery.js","sourceRoot":"","sources":["../../src/discovery/LibraryDiscovery.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAGH,6EAA2F;AAC3F,oDAAiD;AAEjD,2CAAgD;
|
|
1
|
+
{"version":3,"file":"LibraryDiscovery.js","sourceRoot":"","sources":["../../src/discovery/LibraryDiscovery.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -59,7 +59,7 @@ export { LibraryConverter } from './utils/LibraryConverter';
|
|
|
59
59
|
export type { CreateNodeOptions, CreateEdgeOptions } from './utils/LibraryConverter';
|
|
60
60
|
export type { ResourceAttributes, ScopeDefinition, OwnedScopes } from './types/library';
|
|
61
61
|
export { LibraryDiscovery } from './discovery/LibraryDiscovery';
|
|
62
|
-
export type { DiscoveredLibrary, LibraryDiscoveryResult, } from './discovery/LibraryDiscovery';
|
|
62
|
+
export type { DiscoveredLibrary, LibraryDiscoveryResult, LibraryValidationError, LibraryValidationErrorType, } from './discovery/LibraryDiscovery';
|
|
63
63
|
export type { StoryboardReference, WorkflowReference, ScenarioReference, StoryboardContextSliceData, EventNodeMap, BuildStoryboardContextOptions, } from './storyboard/index';
|
|
64
64
|
export { buildStoryboardContext, buildNodeSourcesMap, buildEventNodeMap, getNodeEventName, resolveScenarioNodeIds, resolveWorkflowNodeIds, findNodesMatchingEventPattern, getAllNodeIds, } from './storyboard/index';
|
|
65
65
|
export type { FileSystemAdapter } from '@principal-ai/repository-abstraction';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -21,7 +21,7 @@ describe('CanvasDiscovery', () => {
|
|
|
21
21
|
|
|
22
22
|
expect(result.canvases).toHaveLength(2);
|
|
23
23
|
expect(result.canvases[0]).toMatchObject({
|
|
24
|
-
id: 'api-flow',
|
|
24
|
+
id: 'api-flow.otel', // non-regular types get suffix to prevent ID collisions
|
|
25
25
|
name: 'Api Flow',
|
|
26
26
|
basename: 'api-flow',
|
|
27
27
|
type: 'otel',
|
|
@@ -59,7 +59,7 @@ describe('CanvasDiscovery', () => {
|
|
|
59
59
|
|
|
60
60
|
expect(result.canvases).toHaveLength(2);
|
|
61
61
|
expect(result.canvases.map(c => c.id)).toEqual([
|
|
62
|
-
'api/request-flow',
|
|
62
|
+
'api/request-flow.otel', // non-regular types get suffix
|
|
63
63
|
'core/auth-flow',
|
|
64
64
|
]);
|
|
65
65
|
expect(result.canvases[0].packageName).toBe('api');
|
|
@@ -99,7 +99,8 @@ describe('CanvasDiscovery', () => {
|
|
|
99
99
|
|
|
100
100
|
expect(result.canvases[0].basename).toBe('test');
|
|
101
101
|
expect(result.canvases[0].type).toBe('otel');
|
|
102
|
-
|
|
102
|
+
// ID includes type suffix to prevent collisions with regular canvas of same name
|
|
103
|
+
expect(result.canvases[0].id).toBe('test.otel');
|
|
103
104
|
});
|
|
104
105
|
|
|
105
106
|
test('parses canvas content when fileReader and includeContent provided', async () => {
|
|
@@ -145,7 +146,7 @@ describe('CanvasDiscovery', () => {
|
|
|
145
146
|
|
|
146
147
|
expect(result.canvases).toHaveLength(2);
|
|
147
148
|
expect(result.canvases[0]).toMatchObject({
|
|
148
|
-
id: 'checkout-flow',
|
|
149
|
+
id: 'checkout-flow.otel', // non-regular types get suffix
|
|
149
150
|
name: 'Checkout Flow',
|
|
150
151
|
basename: 'checkout-flow',
|
|
151
152
|
type: 'otel',
|
|
@@ -182,7 +183,7 @@ describe('CanvasDiscovery', () => {
|
|
|
182
183
|
|
|
183
184
|
expect(result.canvases).toHaveLength(2);
|
|
184
185
|
expect(result.canvases[0]).toMatchObject({
|
|
185
|
-
id: 'api/request-flow',
|
|
186
|
+
id: 'api/request-flow.otel', // non-regular types get suffix
|
|
186
187
|
name: 'Request Flow',
|
|
187
188
|
basename: 'request-flow',
|
|
188
189
|
type: 'otel',
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { describe, expect, test, beforeEach } from 'bun:test';
|
|
2
|
+
import { LibraryDiscovery } from './LibraryDiscovery';
|
|
3
|
+
import type { FileTree, FileInfo, DirectoryInfo, FileSystemAdapter } from '@principal-ai/repository-abstraction';
|
|
4
|
+
|
|
5
|
+
describe('LibraryDiscovery', () => {
|
|
6
|
+
let discovery: LibraryDiscovery;
|
|
7
|
+
let mockFsAdapter: FileSystemAdapter;
|
|
8
|
+
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
mockFsAdapter = createMockFsAdapter({});
|
|
11
|
+
discovery = new LibraryDiscovery(mockFsAdapter);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
describe('scopes canvas validation', () => {
|
|
15
|
+
test('adds error when library has owned-scopes but no .scopes.canvas file', async () => {
|
|
16
|
+
const libraryYaml = `
|
|
17
|
+
version: '1.0'
|
|
18
|
+
name: test-library
|
|
19
|
+
nodeComponents:
|
|
20
|
+
box: { shape: rectangle }
|
|
21
|
+
edgeComponents:
|
|
22
|
+
connection: {}
|
|
23
|
+
resources:
|
|
24
|
+
my-service:
|
|
25
|
+
service.name: my-service
|
|
26
|
+
owned-scopes:
|
|
27
|
+
scope-a:
|
|
28
|
+
color: "#ff0000"
|
|
29
|
+
scope-b:
|
|
30
|
+
color: "#00ff00"
|
|
31
|
+
`;
|
|
32
|
+
mockFsAdapter = createMockFsAdapter({
|
|
33
|
+
'/.principal-views': { isDir: true, contents: ['library.yaml'] },
|
|
34
|
+
'/.principal-views/library.yaml': { content: libraryYaml },
|
|
35
|
+
});
|
|
36
|
+
discovery = new LibraryDiscovery(mockFsAdapter);
|
|
37
|
+
|
|
38
|
+
const fileTree = createMockFileTree([
|
|
39
|
+
'.principal-views/library.yaml',
|
|
40
|
+
]);
|
|
41
|
+
|
|
42
|
+
const result = await discovery.discover(fileTree);
|
|
43
|
+
|
|
44
|
+
expect(result.errors).toHaveLength(1);
|
|
45
|
+
expect(result.errors[0].type).toBe('scopes-canvas-required');
|
|
46
|
+
expect(result.errors[0].error).toContain('owned-scopes');
|
|
47
|
+
expect(result.errors[0].error).toContain('scope-a');
|
|
48
|
+
expect(result.errors[0].error).toContain('scope-b');
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test('no error when library has owned-scopes and .scopes.canvas exists', async () => {
|
|
52
|
+
const libraryYaml = `
|
|
53
|
+
version: '1.0'
|
|
54
|
+
name: test-library
|
|
55
|
+
nodeComponents:
|
|
56
|
+
box: { shape: rectangle }
|
|
57
|
+
edgeComponents:
|
|
58
|
+
connection: {}
|
|
59
|
+
resources:
|
|
60
|
+
my-service:
|
|
61
|
+
service.name: my-service
|
|
62
|
+
owned-scopes:
|
|
63
|
+
scope-a:
|
|
64
|
+
color: "#ff0000"
|
|
65
|
+
`;
|
|
66
|
+
mockFsAdapter = createMockFsAdapter({
|
|
67
|
+
'/.principal-views': { isDir: true, contents: ['library.yaml', 'architecture.scopes.canvas'] },
|
|
68
|
+
'/.principal-views/library.yaml': { content: libraryYaml },
|
|
69
|
+
'/.principal-views/architecture.scopes.canvas': { content: '{}' },
|
|
70
|
+
});
|
|
71
|
+
discovery = new LibraryDiscovery(mockFsAdapter);
|
|
72
|
+
|
|
73
|
+
const fileTree = createMockFileTree([
|
|
74
|
+
'.principal-views/library.yaml',
|
|
75
|
+
'.principal-views/architecture.scopes.canvas',
|
|
76
|
+
]);
|
|
77
|
+
|
|
78
|
+
const result = await discovery.discover(fileTree);
|
|
79
|
+
|
|
80
|
+
// No scopes-canvas-required errors
|
|
81
|
+
const scopesErrors = result.errors.filter(e => e.type === 'scopes-canvas-required');
|
|
82
|
+
expect(scopesErrors).toHaveLength(0);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test('no error when library has no owned-scopes', async () => {
|
|
86
|
+
const libraryYaml = `
|
|
87
|
+
version: '1.0'
|
|
88
|
+
name: test-library
|
|
89
|
+
nodeComponents:
|
|
90
|
+
box: { shape: rectangle }
|
|
91
|
+
edgeComponents:
|
|
92
|
+
connection: {}
|
|
93
|
+
resources:
|
|
94
|
+
my-service:
|
|
95
|
+
service.name: my-service
|
|
96
|
+
`;
|
|
97
|
+
mockFsAdapter = createMockFsAdapter({
|
|
98
|
+
'/.principal-views': { isDir: true, contents: ['library.yaml'] },
|
|
99
|
+
'/.principal-views/library.yaml': { content: libraryYaml },
|
|
100
|
+
});
|
|
101
|
+
discovery = new LibraryDiscovery(mockFsAdapter);
|
|
102
|
+
|
|
103
|
+
const fileTree = createMockFileTree([
|
|
104
|
+
'.principal-views/library.yaml',
|
|
105
|
+
]);
|
|
106
|
+
|
|
107
|
+
const result = await discovery.discover(fileTree);
|
|
108
|
+
|
|
109
|
+
// No errors
|
|
110
|
+
expect(result.errors).toHaveLength(0);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
test('supports legacy array format for owned-scopes', async () => {
|
|
114
|
+
const libraryYaml = `
|
|
115
|
+
version: '1.0'
|
|
116
|
+
name: test-library
|
|
117
|
+
nodeComponents:
|
|
118
|
+
box: { shape: rectangle }
|
|
119
|
+
edgeComponents:
|
|
120
|
+
connection: {}
|
|
121
|
+
resources:
|
|
122
|
+
my-service:
|
|
123
|
+
service.name: my-service
|
|
124
|
+
owned-scopes:
|
|
125
|
+
- scope-a
|
|
126
|
+
- scope-b
|
|
127
|
+
`;
|
|
128
|
+
mockFsAdapter = createMockFsAdapter({
|
|
129
|
+
'/.principal-views': { isDir: true, contents: ['library.yaml'] },
|
|
130
|
+
'/.principal-views/library.yaml': { content: libraryYaml },
|
|
131
|
+
});
|
|
132
|
+
discovery = new LibraryDiscovery(mockFsAdapter);
|
|
133
|
+
|
|
134
|
+
const fileTree = createMockFileTree([
|
|
135
|
+
'.principal-views/library.yaml',
|
|
136
|
+
]);
|
|
137
|
+
|
|
138
|
+
const result = await discovery.discover(fileTree);
|
|
139
|
+
|
|
140
|
+
expect(result.errors).toHaveLength(1);
|
|
141
|
+
expect(result.errors[0].type).toBe('scopes-canvas-required');
|
|
142
|
+
expect(result.errors[0].error).toContain('scope-a');
|
|
143
|
+
expect(result.errors[0].error).toContain('scope-b');
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
test('finds .scopes.canvas in subdirectory', async () => {
|
|
147
|
+
const libraryYaml = `
|
|
148
|
+
version: '1.0'
|
|
149
|
+
name: test-library
|
|
150
|
+
nodeComponents:
|
|
151
|
+
box: { shape: rectangle }
|
|
152
|
+
edgeComponents:
|
|
153
|
+
connection: {}
|
|
154
|
+
resources:
|
|
155
|
+
my-service:
|
|
156
|
+
service.name: my-service
|
|
157
|
+
owned-scopes:
|
|
158
|
+
scope-a:
|
|
159
|
+
color: "#ff0000"
|
|
160
|
+
`;
|
|
161
|
+
mockFsAdapter = createMockFsAdapter({
|
|
162
|
+
'/.principal-views': { isDir: true, contents: ['library.yaml', 'architecture'] },
|
|
163
|
+
'/.principal-views/library.yaml': { content: libraryYaml },
|
|
164
|
+
'/.principal-views/architecture': { isDir: true, contents: ['architecture.scopes.canvas'] },
|
|
165
|
+
'/.principal-views/architecture/architecture.scopes.canvas': { content: '{}' },
|
|
166
|
+
});
|
|
167
|
+
discovery = new LibraryDiscovery(mockFsAdapter);
|
|
168
|
+
|
|
169
|
+
const fileTree = createMockFileTree([
|
|
170
|
+
'.principal-views/library.yaml',
|
|
171
|
+
'.principal-views/architecture/architecture.scopes.canvas',
|
|
172
|
+
]);
|
|
173
|
+
|
|
174
|
+
const result = await discovery.discover(fileTree);
|
|
175
|
+
|
|
176
|
+
// No scopes-canvas-required errors
|
|
177
|
+
const scopesErrors = result.errors.filter(e => e.type === 'scopes-canvas-required');
|
|
178
|
+
expect(scopesErrors).toHaveLength(0);
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
test('validation can be disabled with requireScopesCanvas: false', async () => {
|
|
182
|
+
const libraryYaml = `
|
|
183
|
+
version: '1.0'
|
|
184
|
+
name: test-library
|
|
185
|
+
nodeComponents:
|
|
186
|
+
box: { shape: rectangle }
|
|
187
|
+
edgeComponents:
|
|
188
|
+
connection: {}
|
|
189
|
+
resources:
|
|
190
|
+
my-service:
|
|
191
|
+
service.name: my-service
|
|
192
|
+
owned-scopes:
|
|
193
|
+
scope-a:
|
|
194
|
+
color: "#ff0000"
|
|
195
|
+
`;
|
|
196
|
+
mockFsAdapter = createMockFsAdapter({
|
|
197
|
+
'/.principal-views': { isDir: true, contents: ['library.yaml'] },
|
|
198
|
+
'/.principal-views/library.yaml': { content: libraryYaml },
|
|
199
|
+
});
|
|
200
|
+
discovery = new LibraryDiscovery(mockFsAdapter);
|
|
201
|
+
|
|
202
|
+
const fileTree = createMockFileTree([
|
|
203
|
+
'.principal-views/library.yaml',
|
|
204
|
+
]);
|
|
205
|
+
|
|
206
|
+
const result = await discovery.discover(fileTree, { requireScopesCanvas: false });
|
|
207
|
+
|
|
208
|
+
// No errors when validation is disabled
|
|
209
|
+
expect(result.errors).toHaveLength(0);
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Helper to create mock FileTree for testing
|
|
216
|
+
*/
|
|
217
|
+
function createMockFileTree(paths: string[]): FileTree {
|
|
218
|
+
const allFiles: FileInfo[] = paths.map(path => ({
|
|
219
|
+
path,
|
|
220
|
+
relativePath: path,
|
|
221
|
+
name: path.split('/').pop() || '',
|
|
222
|
+
extension: path.split('.').pop() || '',
|
|
223
|
+
size: 100,
|
|
224
|
+
lastModified: new Date(),
|
|
225
|
+
isDirectory: false,
|
|
226
|
+
}));
|
|
227
|
+
|
|
228
|
+
const root: DirectoryInfo = {
|
|
229
|
+
path: '/',
|
|
230
|
+
name: '',
|
|
231
|
+
relativePath: '',
|
|
232
|
+
children: [],
|
|
233
|
+
fileCount: allFiles.length,
|
|
234
|
+
totalSize: allFiles.length * 100,
|
|
235
|
+
depth: 0,
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
return {
|
|
239
|
+
sha: 'test-sha-' + Math.random(),
|
|
240
|
+
root,
|
|
241
|
+
allFiles,
|
|
242
|
+
allDirectories: [],
|
|
243
|
+
stats: {
|
|
244
|
+
totalFiles: allFiles.length,
|
|
245
|
+
totalDirectories: 0,
|
|
246
|
+
totalSize: allFiles.length * 100,
|
|
247
|
+
maxDepth: 3,
|
|
248
|
+
},
|
|
249
|
+
metadata: {
|
|
250
|
+
id: 'test',
|
|
251
|
+
timestamp: new Date(),
|
|
252
|
+
sourceType: 'test',
|
|
253
|
+
sourceInfo: {},
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Helper to create mock FileSystemAdapter for testing
|
|
260
|
+
*/
|
|
261
|
+
function createMockFsAdapter(
|
|
262
|
+
files: Record<string, { content?: string; isDir?: boolean; contents?: string[] }>
|
|
263
|
+
): FileSystemAdapter {
|
|
264
|
+
return {
|
|
265
|
+
async readFile(path: string): Promise<string> {
|
|
266
|
+
const file = files[path];
|
|
267
|
+
if (file?.content !== undefined) {
|
|
268
|
+
return file.content;
|
|
269
|
+
}
|
|
270
|
+
throw new Error(`ENOENT: no such file or directory, open '${path}'`);
|
|
271
|
+
},
|
|
272
|
+
async exists(path: string): Promise<boolean> {
|
|
273
|
+
return path in files;
|
|
274
|
+
},
|
|
275
|
+
async isDirectory(path: string): Promise<boolean> {
|
|
276
|
+
return files[path]?.isDir === true;
|
|
277
|
+
},
|
|
278
|
+
async readDir(path: string): Promise<string[]> {
|
|
279
|
+
const file = files[path];
|
|
280
|
+
if (file?.isDir && file.contents) {
|
|
281
|
+
return file.contents;
|
|
282
|
+
}
|
|
283
|
+
return [];
|
|
284
|
+
},
|
|
285
|
+
join(...parts: string[]): string {
|
|
286
|
+
return parts.join('/').replace(/\/+/g, '/');
|
|
287
|
+
},
|
|
288
|
+
dirname(path: string): string {
|
|
289
|
+
return path.split('/').slice(0, -1).join('/');
|
|
290
|
+
},
|
|
291
|
+
basename(path: string): string {
|
|
292
|
+
return path.split('/').pop() || '';
|
|
293
|
+
},
|
|
294
|
+
async writeFile(): Promise<void> {},
|
|
295
|
+
async mkdir(): Promise<void> {},
|
|
296
|
+
async rm(): Promise<void> {},
|
|
297
|
+
async stat(): Promise<{ isDirectory: boolean; size: number; mtime: Date }> {
|
|
298
|
+
return { isDirectory: false, size: 0, mtime: new Date() };
|
|
299
|
+
},
|
|
300
|
+
async copyFile(): Promise<void> {},
|
|
301
|
+
async rename(): Promise<void> {},
|
|
302
|
+
async getAbsolutePath(path: string): Promise<string> {
|
|
303
|
+
return path;
|
|
304
|
+
},
|
|
305
|
+
isAbsolute(path: string): boolean {
|
|
306
|
+
return path.startsWith('/');
|
|
307
|
+
},
|
|
308
|
+
resolve(...paths: string[]): string {
|
|
309
|
+
return paths.join('/').replace(/\/+/g, '/');
|
|
310
|
+
},
|
|
311
|
+
relative(from: string, to: string): string {
|
|
312
|
+
return to.replace(from, '').replace(/^\//, '');
|
|
313
|
+
},
|
|
314
|
+
};
|
|
315
|
+
}
|
|
@@ -45,6 +45,23 @@ export interface DiscoveredLibrary {
|
|
|
45
45
|
servicesWithScopes: ServiceWithScopes[];
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Types of validation errors
|
|
50
|
+
*/
|
|
51
|
+
export type LibraryValidationErrorType =
|
|
52
|
+
| 'parse-error'
|
|
53
|
+
| 'validation-error'
|
|
54
|
+
| 'scopes-canvas-required';
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Library validation error with type information
|
|
58
|
+
*/
|
|
59
|
+
export interface LibraryValidationError {
|
|
60
|
+
path: string;
|
|
61
|
+
error: string;
|
|
62
|
+
type?: LibraryValidationErrorType;
|
|
63
|
+
}
|
|
64
|
+
|
|
48
65
|
/**
|
|
49
66
|
* Result of library discovery
|
|
50
67
|
*/
|
|
@@ -64,7 +81,7 @@ export interface LibraryDiscoveryResult {
|
|
|
64
81
|
scopeToServiceMap: Map<string, string>;
|
|
65
82
|
|
|
66
83
|
/** Errors encountered during discovery */
|
|
67
|
-
errors:
|
|
84
|
+
errors: LibraryValidationError[];
|
|
68
85
|
}
|
|
69
86
|
|
|
70
87
|
/**
|
|
@@ -97,16 +114,18 @@ export class LibraryDiscovery {
|
|
|
97
114
|
* @param fileTree - FileTree from repository-abstraction
|
|
98
115
|
* @param options - Discovery options
|
|
99
116
|
* @param options.fileReader - Optional function to read file contents (for package.json parsing)
|
|
117
|
+
* @param options.requireScopesCanvas - If true, validates that .scopes.canvas exists when owned-scopes is defined (default: true)
|
|
100
118
|
* @returns Discovery result with libraries, service names, and errors
|
|
101
119
|
*/
|
|
102
120
|
async discover(
|
|
103
121
|
fileTree: FileTree,
|
|
104
122
|
options?: {
|
|
105
123
|
fileReader?: (path: string) => Promise<string>;
|
|
124
|
+
requireScopesCanvas?: boolean;
|
|
106
125
|
}
|
|
107
126
|
): Promise<LibraryDiscoveryResult> {
|
|
108
|
-
const { fileReader } = options || {};
|
|
109
|
-
const errors:
|
|
127
|
+
const { fileReader, requireScopesCanvas = true } = options || {};
|
|
128
|
+
const errors: LibraryValidationError[] = [];
|
|
110
129
|
const libraries: DiscoveredLibrary[] = [];
|
|
111
130
|
|
|
112
131
|
// 1. Discover packages (with caching by fileTree.sha)
|
|
@@ -147,11 +166,22 @@ export class LibraryDiscovery {
|
|
|
147
166
|
serviceNames,
|
|
148
167
|
servicesWithScopes,
|
|
149
168
|
});
|
|
169
|
+
|
|
170
|
+
// Validate scopes canvas requirement
|
|
171
|
+
if (requireScopesCanvas) {
|
|
172
|
+
await this.validateScopesCanvasRequirement(
|
|
173
|
+
absolutePackagePath,
|
|
174
|
+
servicesWithScopes,
|
|
175
|
+
loadResult.path,
|
|
176
|
+
errors
|
|
177
|
+
);
|
|
178
|
+
}
|
|
150
179
|
} else if (loadResult.error && !loadResult.error.includes('No library file found')) {
|
|
151
180
|
// Only report errors that aren't "file not found" (which is normal)
|
|
152
181
|
errors.push({
|
|
153
182
|
path: loadResult.path,
|
|
154
183
|
error: loadResult.error,
|
|
184
|
+
type: 'parse-error',
|
|
155
185
|
});
|
|
156
186
|
}
|
|
157
187
|
} catch (error) {
|
|
@@ -185,11 +215,22 @@ export class LibraryDiscovery {
|
|
|
185
215
|
serviceNames,
|
|
186
216
|
servicesWithScopes,
|
|
187
217
|
});
|
|
218
|
+
|
|
219
|
+
// Validate scopes canvas requirement for root library
|
|
220
|
+
if (requireScopesCanvas) {
|
|
221
|
+
await this.validateScopesCanvasRequirement(
|
|
222
|
+
rootPath,
|
|
223
|
+
servicesWithScopes,
|
|
224
|
+
loadResult.path,
|
|
225
|
+
errors
|
|
226
|
+
);
|
|
227
|
+
}
|
|
188
228
|
}
|
|
189
229
|
} else if (loadResult.error) {
|
|
190
230
|
errors.push({
|
|
191
231
|
path: loadResult.path,
|
|
192
232
|
error: loadResult.error,
|
|
233
|
+
type: 'parse-error',
|
|
193
234
|
});
|
|
194
235
|
}
|
|
195
236
|
}
|
|
@@ -265,6 +306,78 @@ export class LibraryDiscovery {
|
|
|
265
306
|
return { serviceNames, servicesWithScopes };
|
|
266
307
|
}
|
|
267
308
|
|
|
309
|
+
/**
|
|
310
|
+
* Validate that a .scopes.canvas file exists when owned-scopes is defined
|
|
311
|
+
*/
|
|
312
|
+
private async validateScopesCanvasRequirement(
|
|
313
|
+
packagePath: string,
|
|
314
|
+
servicesWithScopes: ServiceWithScopes[],
|
|
315
|
+
libraryPath: string,
|
|
316
|
+
errors: LibraryValidationError[]
|
|
317
|
+
): Promise<void> {
|
|
318
|
+
// Check if any service has owned-scopes
|
|
319
|
+
const hasOwnedScopes = servicesWithScopes.some(s => s.ownedScopes.length > 0);
|
|
320
|
+
if (!hasOwnedScopes) {
|
|
321
|
+
return; // No owned-scopes defined, no canvas required
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// Collect all owned scopes
|
|
325
|
+
const allOwnedScopes = servicesWithScopes.flatMap(s => s.ownedScopes);
|
|
326
|
+
|
|
327
|
+
// Check if a .scopes.canvas file exists
|
|
328
|
+
// Look for any file matching *.scopes.canvas in .principal-views/
|
|
329
|
+
const pvDir = this.fsAdapter.join(packagePath, LibraryDiscovery.CANVAS_DIR);
|
|
330
|
+
const pvDirExists = await this.fsAdapter.exists(pvDir);
|
|
331
|
+
|
|
332
|
+
if (!pvDirExists) {
|
|
333
|
+
errors.push({
|
|
334
|
+
path: libraryPath,
|
|
335
|
+
error: `Scopes canvas required: library.yaml defines owned-scopes [${allOwnedScopes.join(', ')}] but no .principal-views/ directory exists. Create a .scopes.canvas file (e.g., architecture.scopes.canvas) documenting scope boundaries.`,
|
|
336
|
+
type: 'scopes-canvas-required',
|
|
337
|
+
});
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// Check for any .scopes.canvas file in the directory
|
|
342
|
+
const scopesCanvasExists = await this.checkScopesCanvasExists(pvDir);
|
|
343
|
+
|
|
344
|
+
if (!scopesCanvasExists) {
|
|
345
|
+
errors.push({
|
|
346
|
+
path: libraryPath,
|
|
347
|
+
error: `Scopes canvas required: library.yaml defines owned-scopes [${allOwnedScopes.join(', ')}] but no .scopes.canvas file found. Create a .scopes.canvas file (e.g., .principal-views/architecture.scopes.canvas) with nodes for each scope (set pv.otel.scope to the scope name).`,
|
|
348
|
+
type: 'scopes-canvas-required',
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Check if any .scopes.canvas file exists in a directory
|
|
355
|
+
*/
|
|
356
|
+
private async checkScopesCanvasExists(dirPath: string): Promise<boolean> {
|
|
357
|
+
try {
|
|
358
|
+
const entries = await this.fsAdapter.readDir(dirPath);
|
|
359
|
+
for (const entry of entries) {
|
|
360
|
+
if (entry.endsWith('.scopes.canvas')) {
|
|
361
|
+
return true;
|
|
362
|
+
}
|
|
363
|
+
// Also check subdirectories (for hierarchical structure)
|
|
364
|
+
const fullPath = this.fsAdapter.join(dirPath, entry);
|
|
365
|
+
const isDir = await this.fsAdapter.isDirectory(fullPath);
|
|
366
|
+
if (isDir) {
|
|
367
|
+
const subEntries = await this.fsAdapter.readDir(fullPath);
|
|
368
|
+
for (const subEntry of subEntries) {
|
|
369
|
+
if (subEntry.endsWith('.scopes.canvas')) {
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return false;
|
|
376
|
+
} catch {
|
|
377
|
+
return false;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
268
381
|
/**
|
|
269
382
|
* Discover packages with caching by fileTree SHA
|
|
270
383
|
*/
|
package/src/index.ts
CHANGED
|
@@ -363,6 +363,8 @@ export { LibraryDiscovery } from './discovery/LibraryDiscovery';
|
|
|
363
363
|
export type {
|
|
364
364
|
DiscoveredLibrary,
|
|
365
365
|
LibraryDiscoveryResult,
|
|
366
|
+
LibraryValidationError,
|
|
367
|
+
LibraryValidationErrorType,
|
|
366
368
|
} from './discovery/LibraryDiscovery';
|
|
367
369
|
|
|
368
370
|
// Export storyboard context types and builder (browser-safe)
|