@specverse/engine-registry 4.0.2 → 4.0.4
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/package.json +1 -1
- package/dist/cache/cache-manager.d.ts +0 -132
- package/dist/cache/cache-manager.d.ts.map +0 -1
- package/dist/cache/cache-manager.js +0 -218
- package/dist/cache/cache-manager.js.map +0 -1
- package/dist/client/registry-client.d.ts +0 -129
- package/dist/client/registry-client.d.ts.map +0 -1
- package/dist/client/registry-client.js +0 -317
- package/dist/client/registry-client.js.map +0 -1
- package/dist/formatters/error-formatter.d.ts +0 -100
- package/dist/formatters/error-formatter.d.ts.map +0 -1
- package/dist/formatters/error-formatter.js +0 -290
- package/dist/formatters/error-formatter.js.map +0 -1
- package/dist/formatters/index.d.ts +0 -8
- package/dist/formatters/index.d.ts.map +0 -1
- package/dist/formatters/index.js +0 -7
- package/dist/formatters/index.js.map +0 -1
- package/dist/index.d.ts +0 -19
- package/dist/index.js +0 -22
- package/dist/index.js.map +0 -1
- package/dist/offline/offline-handler.d.ts +0 -150
- package/dist/offline/offline-handler.d.ts.map +0 -1
- package/dist/offline/offline-handler.js +0 -290
- package/dist/offline/offline-handler.js.map +0 -1
- package/dist/types/index.d.ts +0 -13
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -11
- package/dist/types/index.js.map +0 -1
- package/dist/types/registry.d.ts +0 -220
- package/dist/types/registry.d.ts.map +0 -1
- package/dist/types/registry.js +0 -55
- package/dist/types/registry.js.map +0 -1
- package/dist/types/validation.d.ts +0 -197
- package/dist/types/validation.d.ts.map +0 -1
- package/dist/types/validation.js +0 -140
- package/dist/types/validation.js.map +0 -1
- package/dist/utils/manifest-adapter.d.ts +0 -42
- package/dist/utils/manifest-adapter.js +0 -182
- package/dist/utils/manifest-adapter.js.map +0 -1
- package/dist/validators/index.d.ts +0 -12
- package/dist/validators/index.d.ts.map +0 -1
- package/dist/validators/index.js +0 -9
- package/dist/validators/index.js.map +0 -1
- package/dist/validators/installation-validator.d.ts +0 -75
- package/dist/validators/installation-validator.d.ts.map +0 -1
- package/dist/validators/installation-validator.js +0 -142
- package/dist/validators/installation-validator.js.map +0 -1
- package/dist/validators/manifest-validator.d.ts +0 -82
- package/dist/validators/manifest-validator.d.ts.map +0 -1
- package/dist/validators/manifest-validator.js +0 -213
- package/dist/validators/manifest-validator.js.map +0 -1
- package/dist/validators/validator.d.ts +0 -113
- package/dist/validators/validator.d.ts.map +0 -1
- package/dist/validators/validator.js +0 -165
- package/dist/validators/validator.js.map +0 -1
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Installation Validator
|
|
3
|
-
*
|
|
4
|
-
* Validates that instance factory npm packages are installed locally
|
|
5
|
-
* and that the factory files exist at the specified locations.
|
|
6
|
-
*
|
|
7
|
-
* @module registry/validators/installation-validator
|
|
8
|
-
* @version 2.0.0
|
|
9
|
-
*/
|
|
10
|
-
import type { ValidationResult, RegistryFactoryMetadata } from '../types/index.js';
|
|
11
|
-
import type { SpecVerseManifest } from './manifest-validator.js';
|
|
12
|
-
/**
|
|
13
|
-
* Installation validation options
|
|
14
|
-
*/
|
|
15
|
-
export interface InstallationValidationOptions {
|
|
16
|
-
/** Auto-install missing packages (not implemented yet) */
|
|
17
|
-
autoInstall?: boolean;
|
|
18
|
-
/** Project root directory (default: process.cwd()) */
|
|
19
|
-
projectRoot?: string;
|
|
20
|
-
/** File path for error reporting */
|
|
21
|
-
filePath?: string;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Package installation info
|
|
25
|
-
*/
|
|
26
|
-
export interface PackageInfo {
|
|
27
|
-
/** Package name */
|
|
28
|
-
name: string;
|
|
29
|
-
/** Is package installed? */
|
|
30
|
-
installed: boolean;
|
|
31
|
-
/** Installed version (if available) */
|
|
32
|
-
version?: string;
|
|
33
|
-
/** Package.json path */
|
|
34
|
-
packageJsonPath?: string;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Installation Validator
|
|
38
|
-
*
|
|
39
|
-
* Validates that required npm packages are installed locally.
|
|
40
|
-
*/
|
|
41
|
-
export declare class InstallationValidator {
|
|
42
|
-
/**
|
|
43
|
-
* Validate installation
|
|
44
|
-
*
|
|
45
|
-
* @param manifest - Manifest to validate
|
|
46
|
-
* @param registryFactories - Factory metadata from registry
|
|
47
|
-
* @param options - Validation options
|
|
48
|
-
* @returns Validation result
|
|
49
|
-
*/
|
|
50
|
-
validate(manifest: SpecVerseManifest, registryFactories: Map<string, RegistryFactoryMetadata>, options?: InstallationValidationOptions): Promise<ValidationResult>;
|
|
51
|
-
/**
|
|
52
|
-
* Check if a package is installed
|
|
53
|
-
*
|
|
54
|
-
* @param packageName - Package name
|
|
55
|
-
* @param projectRoot - Project root directory
|
|
56
|
-
* @returns Package info
|
|
57
|
-
*/
|
|
58
|
-
private checkPackageInstallation;
|
|
59
|
-
/**
|
|
60
|
-
* Check if a file exists
|
|
61
|
-
*
|
|
62
|
-
* @param filePath - File path to check
|
|
63
|
-
* @returns True if file exists
|
|
64
|
-
*/
|
|
65
|
-
private checkFileExists;
|
|
66
|
-
/**
|
|
67
|
-
* Get package info for a specific package
|
|
68
|
-
*
|
|
69
|
-
* @param packageName - Package name
|
|
70
|
-
* @param projectRoot - Project root directory
|
|
71
|
-
* @returns Package info
|
|
72
|
-
*/
|
|
73
|
-
getPackageInfo(packageName: string, projectRoot?: string): Promise<PackageInfo>;
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=installation-validator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"installation-validator.d.ts","sourceRoot":"","sources":["../../src/validators/installation-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACV,gBAAgB,EAEhB,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IAEb,4BAA4B;IAC5B,SAAS,EAAE,OAAO,CAAC;IAEnB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,wBAAwB;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,qBAAqB;IAChC;;;;;;;OAOG;IACG,QAAQ,CACZ,QAAQ,EAAE,iBAAiB,EAC3B,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,EACvD,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,gBAAgB,CAAC;IA2H5B;;;;;;OAMG;YACW,wBAAwB;IAiCtC;;;;;OAKG;YACW,eAAe;IAS7B;;;;;;OAMG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAGtF"}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Installation Validator
|
|
3
|
-
*
|
|
4
|
-
* Validates that instance factory npm packages are installed locally
|
|
5
|
-
* and that the factory files exist at the specified locations.
|
|
6
|
-
*
|
|
7
|
-
* @module registry/validators/installation-validator
|
|
8
|
-
* @version 2.0.0
|
|
9
|
-
*/
|
|
10
|
-
import { promises as fs } from 'fs';
|
|
11
|
-
import { join } from 'path';
|
|
12
|
-
import { createIssue, withFix, withSuggestions, ErrorCodes } from '../types/index.js';
|
|
13
|
-
/**
|
|
14
|
-
* Installation Validator
|
|
15
|
-
*
|
|
16
|
-
* Validates that required npm packages are installed locally.
|
|
17
|
-
*/
|
|
18
|
-
export class InstallationValidator {
|
|
19
|
-
/**
|
|
20
|
-
* Validate installation
|
|
21
|
-
*
|
|
22
|
-
* @param manifest - Manifest to validate
|
|
23
|
-
* @param registryFactories - Factory metadata from registry
|
|
24
|
-
* @param options - Validation options
|
|
25
|
-
* @returns Validation result
|
|
26
|
-
*/
|
|
27
|
-
async validate(manifest, registryFactories, options = {}) {
|
|
28
|
-
const errors = [];
|
|
29
|
-
const warnings = [];
|
|
30
|
-
const info = [];
|
|
31
|
-
const projectRoot = options.projectRoot || process.cwd();
|
|
32
|
-
const filePath = options.filePath || 'manifests/implementation.yaml';
|
|
33
|
-
// Check each instance factory
|
|
34
|
-
for (const instanceFactory of manifest.instanceFactories) {
|
|
35
|
-
const registryFactory = registryFactories.get(instanceFactory.name);
|
|
36
|
-
if (!registryFactory) {
|
|
37
|
-
// Factory not in registry - skip (already reported by manifest validator)
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
// Only check npm packages
|
|
41
|
-
if (registryFactory.source.type !== 'npm') {
|
|
42
|
-
info.push(createIssue('REALIZE-004', 'info', 'installation', 'Non-npm source', `Skipping installation check for "${instanceFactory.name}" (source type: ${registryFactory.source.type})`, filePath));
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
const packageName = registryFactory.source.package;
|
|
46
|
-
const requiredVersion = registryFactory.source.version;
|
|
47
|
-
// Check if package is installed
|
|
48
|
-
const packageInfo = await this.checkPackageInstallation(packageName, projectRoot);
|
|
49
|
-
if (!packageInfo.installed) {
|
|
50
|
-
const installCmd = `npm install ${packageName}${requiredVersion ? '@' + requiredVersion : ''}`;
|
|
51
|
-
errors.push(withFix(withSuggestions(createIssue(ErrorCodes.PACKAGE_NOT_INSTALLED, 'error', 'installation', 'Package not installed', `The npm package "${packageName}" is required by "${instanceFactory.name}" but is not installed.`, filePath), [
|
|
52
|
-
`Run: ${installCmd}`,
|
|
53
|
-
'Or install all dependencies: npm install'
|
|
54
|
-
]), installCmd));
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
// Package is installed - check version
|
|
58
|
-
if (requiredVersion && packageInfo.version) {
|
|
59
|
-
if (packageInfo.version !== requiredVersion) {
|
|
60
|
-
warnings.push(withFix(createIssue(ErrorCodes.VERSION_MISMATCH, 'warning', 'installation', 'Version mismatch', `Package "${packageName}" version mismatch: installed=${packageInfo.version}, required=${requiredVersion}`, filePath), `npm install ${packageName}@${requiredVersion}`));
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// Check if factory file exists
|
|
64
|
-
const entrypoint = registryFactory.source.entrypoint || 'factory.yaml';
|
|
65
|
-
const factoryPath = join(projectRoot, 'node_modules', packageName, entrypoint);
|
|
66
|
-
const factoryExists = await this.checkFileExists(factoryPath);
|
|
67
|
-
if (!factoryExists) {
|
|
68
|
-
errors.push(withSuggestions(createIssue(ErrorCodes.FACTORY_FILE_NOT_FOUND, 'error', 'installation', 'Factory file not found', `The factory file "${entrypoint}" was not found in package "${packageName}" at expected location: ${factoryPath}`, filePath), [
|
|
69
|
-
'The package may be corrupted',
|
|
70
|
-
`Try: npm install ${packageName}@${requiredVersion || 'latest'} --force`,
|
|
71
|
-
'Check that the package contains the factory file'
|
|
72
|
-
]));
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return {
|
|
76
|
-
valid: errors.length === 0,
|
|
77
|
-
errors,
|
|
78
|
-
warnings,
|
|
79
|
-
info
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Check if a package is installed
|
|
84
|
-
*
|
|
85
|
-
* @param packageName - Package name
|
|
86
|
-
* @param projectRoot - Project root directory
|
|
87
|
-
* @returns Package info
|
|
88
|
-
*/
|
|
89
|
-
async checkPackageInstallation(packageName, projectRoot) {
|
|
90
|
-
const packageJsonPath = join(projectRoot, 'node_modules', packageName, 'package.json');
|
|
91
|
-
try {
|
|
92
|
-
const packageJsonContent = await fs.readFile(packageJsonPath, 'utf8');
|
|
93
|
-
const packageJson = JSON.parse(packageJsonContent);
|
|
94
|
-
return {
|
|
95
|
-
name: packageName,
|
|
96
|
-
installed: true,
|
|
97
|
-
version: packageJson.version,
|
|
98
|
-
packageJsonPath
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
if (error.code === 'ENOENT') {
|
|
103
|
-
// Package not installed
|
|
104
|
-
return {
|
|
105
|
-
name: packageName,
|
|
106
|
-
installed: false
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
// Other error (permission, invalid JSON, etc.) - treat as not installed
|
|
110
|
-
return {
|
|
111
|
-
name: packageName,
|
|
112
|
-
installed: false
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Check if a file exists
|
|
118
|
-
*
|
|
119
|
-
* @param filePath - File path to check
|
|
120
|
-
* @returns True if file exists
|
|
121
|
-
*/
|
|
122
|
-
async checkFileExists(filePath) {
|
|
123
|
-
try {
|
|
124
|
-
await fs.access(filePath);
|
|
125
|
-
return true;
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Get package info for a specific package
|
|
133
|
-
*
|
|
134
|
-
* @param packageName - Package name
|
|
135
|
-
* @param projectRoot - Project root directory
|
|
136
|
-
* @returns Package info
|
|
137
|
-
*/
|
|
138
|
-
async getPackageInfo(packageName, projectRoot) {
|
|
139
|
-
return this.checkPackageInstallation(packageName, projectRoot || process.cwd());
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
//# sourceMappingURL=installation-validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"installation-validator.js","sourceRoot":"","sources":["../../src/validators/installation-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manifest Validator
|
|
3
|
-
*
|
|
4
|
-
* Validates SpecVerse manifests against registry metadata.
|
|
5
|
-
* Checks that all instance factories referenced in the manifest exist
|
|
6
|
-
* in the registry and validates capability mappings.
|
|
7
|
-
*
|
|
8
|
-
* @module registry/validators/manifest-validator
|
|
9
|
-
* @version 2.0.0
|
|
10
|
-
*/
|
|
11
|
-
import { OfflineHandler } from '../offline/offline-handler.js';
|
|
12
|
-
import type { ValidationResult } from '../types/index.js';
|
|
13
|
-
/**
|
|
14
|
-
* Manifest to validate
|
|
15
|
-
*/
|
|
16
|
-
export interface SpecVerseManifest {
|
|
17
|
-
/** Spec version */
|
|
18
|
-
specVersion: string;
|
|
19
|
-
/** Instance factories used */
|
|
20
|
-
instanceFactories: Array<{
|
|
21
|
-
name: string;
|
|
22
|
-
source: string;
|
|
23
|
-
}>;
|
|
24
|
-
/** Capability mappings */
|
|
25
|
-
capabilityMappings?: Array<{
|
|
26
|
-
capability: string;
|
|
27
|
-
instanceFactory: string;
|
|
28
|
-
}>;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Manifest validation options
|
|
32
|
-
*/
|
|
33
|
-
export interface ManifestValidationOptions {
|
|
34
|
-
/** Treat warnings as errors */
|
|
35
|
-
strict?: boolean;
|
|
36
|
-
/** Skip deprecated factory checks */
|
|
37
|
-
skipDeprecated?: boolean;
|
|
38
|
-
/** Offline mode - only use cache */
|
|
39
|
-
offline?: boolean;
|
|
40
|
-
/** File path for error reporting */
|
|
41
|
-
filePath?: string;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Manifest Validator
|
|
45
|
-
*
|
|
46
|
-
* Validates manifests against registry metadata.
|
|
47
|
-
*/
|
|
48
|
-
export declare class ManifestValidator {
|
|
49
|
-
private offlineHandler;
|
|
50
|
-
constructor(offlineHandler?: OfflineHandler);
|
|
51
|
-
/**
|
|
52
|
-
* Validate manifest
|
|
53
|
-
*
|
|
54
|
-
* @param manifest - Manifest to validate
|
|
55
|
-
* @param options - Validation options
|
|
56
|
-
* @returns Validation result with errors, warnings, and info
|
|
57
|
-
*/
|
|
58
|
-
validate(manifest: SpecVerseManifest, options?: ManifestValidationOptions): Promise<ValidationResult>;
|
|
59
|
-
/**
|
|
60
|
-
* Find similar factory names using Levenshtein distance
|
|
61
|
-
*
|
|
62
|
-
* @param target - Target name
|
|
63
|
-
* @param candidates - Candidate names
|
|
64
|
-
* @returns Top 5 similar names
|
|
65
|
-
*/
|
|
66
|
-
private findSimilarFactories;
|
|
67
|
-
/**
|
|
68
|
-
* Calculate Levenshtein distance between two strings
|
|
69
|
-
*
|
|
70
|
-
* @param a - First string
|
|
71
|
-
* @param b - Second string
|
|
72
|
-
* @returns Edit distance
|
|
73
|
-
*/
|
|
74
|
-
private levenshteinDistance;
|
|
75
|
-
/**
|
|
76
|
-
* Get offline handler
|
|
77
|
-
*
|
|
78
|
-
* @returns Offline handler instance
|
|
79
|
-
*/
|
|
80
|
-
getOfflineHandler(): OfflineHandler;
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=manifest-validator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-validator.d.ts","sourceRoot":"","sources":["../../src/validators/manifest-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,mBAAmB,CAAC;AAU3B;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,8BAA8B;IAC9B,iBAAiB,EAAE,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IAEH,0BAA0B;IAC1B,kBAAkB,CAAC,EAAE,KAAK,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,+BAA+B;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,qCAAqC;IACrC,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAAiB;gBAE3B,cAAc,CAAC,EAAE,cAAc;IAI3C;;;;;;OAMG;IACG,QAAQ,CACZ,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,gBAAgB,CAAC;IA4N5B;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;;;OAIG;IACH,iBAAiB,IAAI,cAAc;CAGpC"}
|
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manifest Validator
|
|
3
|
-
*
|
|
4
|
-
* Validates SpecVerse manifests against registry metadata.
|
|
5
|
-
* Checks that all instance factories referenced in the manifest exist
|
|
6
|
-
* in the registry and validates capability mappings.
|
|
7
|
-
*
|
|
8
|
-
* @module registry/validators/manifest-validator
|
|
9
|
-
* @version 2.0.0
|
|
10
|
-
*/
|
|
11
|
-
import { OfflineHandler } from '../offline/offline-handler.js';
|
|
12
|
-
import { createIssue, withSuggestions, withLearnMore, ErrorCodes, LearnMoreUrls } from '../types/index.js';
|
|
13
|
-
/**
|
|
14
|
-
* Manifest Validator
|
|
15
|
-
*
|
|
16
|
-
* Validates manifests against registry metadata.
|
|
17
|
-
*/
|
|
18
|
-
export class ManifestValidator {
|
|
19
|
-
offlineHandler;
|
|
20
|
-
constructor(offlineHandler) {
|
|
21
|
-
this.offlineHandler = offlineHandler || new OfflineHandler();
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Validate manifest
|
|
25
|
-
*
|
|
26
|
-
* @param manifest - Manifest to validate
|
|
27
|
-
* @param options - Validation options
|
|
28
|
-
* @returns Validation result with errors, warnings, and info
|
|
29
|
-
*/
|
|
30
|
-
async validate(manifest, options = {}) {
|
|
31
|
-
const errors = [];
|
|
32
|
-
const warnings = [];
|
|
33
|
-
const info = [];
|
|
34
|
-
const filePath = options.filePath || 'manifests/implementation.yaml';
|
|
35
|
-
// Enable offline mode if requested
|
|
36
|
-
if (options.offline) {
|
|
37
|
-
this.offlineHandler.enableOfflineMode();
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
// Fetch registry metadata
|
|
41
|
-
const registryResult = await this.offlineHandler.fetchFactories();
|
|
42
|
-
// Add any registry fetch warnings
|
|
43
|
-
warnings.push(...registryResult.issues);
|
|
44
|
-
// Build factory lookup map
|
|
45
|
-
const factoryMap = new Map();
|
|
46
|
-
for (const factory of registryResult.data.results) {
|
|
47
|
-
factoryMap.set(factory.name, factory);
|
|
48
|
-
}
|
|
49
|
-
// Validate instance factories
|
|
50
|
-
for (const instanceFactory of manifest.instanceFactories) {
|
|
51
|
-
const registryFactory = factoryMap.get(instanceFactory.name);
|
|
52
|
-
if (!registryFactory) {
|
|
53
|
-
// Factory not found in registry
|
|
54
|
-
const similar = this.findSimilarFactories(instanceFactory.name, Array.from(factoryMap.keys()));
|
|
55
|
-
const issue = createIssue(ErrorCodes.FACTORY_NOT_FOUND, 'error', 'manifest', 'Instance factory not found', `The instance factory "${instanceFactory.name}" was not found in the registry.`, filePath);
|
|
56
|
-
if (similar.length > 0) {
|
|
57
|
-
errors.push(withLearnMore(withSuggestions(issue, [
|
|
58
|
-
`Did you mean "${similar[0]}"?`,
|
|
59
|
-
...similar.slice(1, 3).map(name => `Or try: "${name}"`),
|
|
60
|
-
'Run "specverse lib search <query>" to find factories'
|
|
61
|
-
]), LearnMoreUrls.REGISTRY));
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
errors.push(withLearnMore(withSuggestions(issue, [
|
|
65
|
-
'Check the factory name spelling',
|
|
66
|
-
'Run "specverse lib list" to see available factories',
|
|
67
|
-
'The factory may not be published yet'
|
|
68
|
-
]), LearnMoreUrls.REGISTRY));
|
|
69
|
-
}
|
|
70
|
-
continue;
|
|
71
|
-
}
|
|
72
|
-
// Check if deprecated
|
|
73
|
-
if (!options.skipDeprecated && registryFactory.deprecated) {
|
|
74
|
-
const issue = createIssue(ErrorCodes.FACTORY_DEPRECATED, options.strict ? 'error' : 'warning', 'manifest', 'Instance factory is deprecated', `The instance factory "${instanceFactory.name}" is deprecated${registryFactory.deprecationReason ? ': ' + registryFactory.deprecationReason : ''}`, filePath);
|
|
75
|
-
const suggestions = [];
|
|
76
|
-
if (registryFactory.replacedBy) {
|
|
77
|
-
suggestions.push(`Use "${registryFactory.replacedBy}" instead`);
|
|
78
|
-
}
|
|
79
|
-
if (registryFactory.alternatives && registryFactory.alternatives.length > 0) {
|
|
80
|
-
suggestions.push(`Alternatives: ${registryFactory.alternatives.slice(0, 3).join(', ')}`);
|
|
81
|
-
}
|
|
82
|
-
suggestions.push('Update your manifest to use a supported factory');
|
|
83
|
-
const deprecatedIssue = withLearnMore(withSuggestions(issue, suggestions), LearnMoreUrls.MIGRATION);
|
|
84
|
-
if (options.strict) {
|
|
85
|
-
errors.push(deprecatedIssue);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
warnings.push(deprecatedIssue);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
// Validate capability mappings
|
|
93
|
-
if (manifest.capabilityMappings) {
|
|
94
|
-
for (const mapping of manifest.capabilityMappings) {
|
|
95
|
-
const factory = factoryMap.get(mapping.instanceFactory);
|
|
96
|
-
if (!factory) {
|
|
97
|
-
// Factory not found (already reported above, skip duplicate)
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
// Check if factory provides the capability
|
|
101
|
-
if (!factory.capabilities.includes(mapping.capability)) {
|
|
102
|
-
const issue = createIssue(ErrorCodes.INVALID_CAPABILITY_MAPPING, 'error', 'manifest', 'Invalid capability mapping', `The instance factory "${mapping.instanceFactory}" does not provide capability "${mapping.capability}". ` +
|
|
103
|
-
`Available capabilities: ${factory.capabilities.join(', ')}`, filePath);
|
|
104
|
-
// Find factories that DO provide this capability
|
|
105
|
-
const providingFactories = registryResult.data.results
|
|
106
|
-
.filter(f => f.capabilities.includes(mapping.capability))
|
|
107
|
-
.map(f => f.name)
|
|
108
|
-
.slice(0, 5);
|
|
109
|
-
if (providingFactories.length > 0) {
|
|
110
|
-
errors.push(withSuggestions(issue, [
|
|
111
|
-
`Use one of these factories instead: ${providingFactories.join(', ')}`,
|
|
112
|
-
`Or remove the capability mapping for "${mapping.capability}"`
|
|
113
|
-
]));
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
errors.push(withSuggestions(issue, [
|
|
117
|
-
`No factories provide capability "${mapping.capability}"`,
|
|
118
|
-
'Check the capability name spelling',
|
|
119
|
-
'The capability may not be supported yet'
|
|
120
|
-
]));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
// Check for unused factories (info)
|
|
126
|
-
const usedFactoryNames = new Set((manifest.capabilityMappings || []).map(m => m.instanceFactory));
|
|
127
|
-
for (const instanceFactory of manifest.instanceFactories) {
|
|
128
|
-
if (!usedFactoryNames.has(instanceFactory.name)) {
|
|
129
|
-
info.push(createIssue('MANIFEST-003', 'info', 'manifest', 'Unused instance factory', `The instance factory "${instanceFactory.name}" is declared but not mapped to any capability.`, filePath));
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
catch (error) {
|
|
134
|
-
// Handle offline errors
|
|
135
|
-
if (error.name === 'OfflineError') {
|
|
136
|
-
errors.push(withLearnMore(withSuggestions(createIssue(ErrorCodes.NETWORK_ERROR, 'error', 'manifest', 'Registry unavailable', 'Cannot validate manifest: registry is unavailable and no cache exists.', filePath), [
|
|
137
|
-
'Check your internet connection',
|
|
138
|
-
'Run with network access to populate cache',
|
|
139
|
-
'Use --offline flag with existing cache'
|
|
140
|
-
]), LearnMoreUrls.REGISTRY));
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
// Unexpected error
|
|
144
|
-
errors.push(createIssue('MANIFEST-999', 'error', 'manifest', 'Validation error', `Unexpected error during validation: ${error.message}`, filePath));
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
return {
|
|
148
|
-
valid: errors.length === 0,
|
|
149
|
-
errors,
|
|
150
|
-
warnings,
|
|
151
|
-
info
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Find similar factory names using Levenshtein distance
|
|
156
|
-
*
|
|
157
|
-
* @param target - Target name
|
|
158
|
-
* @param candidates - Candidate names
|
|
159
|
-
* @returns Top 5 similar names
|
|
160
|
-
*/
|
|
161
|
-
findSimilarFactories(target, candidates) {
|
|
162
|
-
const scored = candidates.map(candidate => ({
|
|
163
|
-
name: candidate,
|
|
164
|
-
distance: this.levenshteinDistance(target.toLowerCase(), candidate.toLowerCase())
|
|
165
|
-
}));
|
|
166
|
-
// Sort by distance (lower is better)
|
|
167
|
-
scored.sort((a, b) => a.distance - b.distance);
|
|
168
|
-
// Return top 5 with distance <= 5
|
|
169
|
-
return scored
|
|
170
|
-
.filter(s => s.distance <= 5)
|
|
171
|
-
.slice(0, 5)
|
|
172
|
-
.map(s => s.name);
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Calculate Levenshtein distance between two strings
|
|
176
|
-
*
|
|
177
|
-
* @param a - First string
|
|
178
|
-
* @param b - Second string
|
|
179
|
-
* @returns Edit distance
|
|
180
|
-
*/
|
|
181
|
-
levenshteinDistance(a, b) {
|
|
182
|
-
const matrix = [];
|
|
183
|
-
for (let i = 0; i <= b.length; i++) {
|
|
184
|
-
matrix[i] = [i];
|
|
185
|
-
}
|
|
186
|
-
for (let j = 0; j <= a.length; j++) {
|
|
187
|
-
matrix[0][j] = j;
|
|
188
|
-
}
|
|
189
|
-
for (let i = 1; i <= b.length; i++) {
|
|
190
|
-
for (let j = 1; j <= a.length; j++) {
|
|
191
|
-
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
|
192
|
-
matrix[i][j] = matrix[i - 1][j - 1];
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
|
|
196
|
-
matrix[i][j - 1] + 1, // insertion
|
|
197
|
-
matrix[i - 1][j] + 1 // deletion
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
return matrix[b.length][a.length];
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Get offline handler
|
|
206
|
-
*
|
|
207
|
-
* @returns Offline handler instance
|
|
208
|
-
*/
|
|
209
|
-
getOfflineHandler() {
|
|
210
|
-
return this.offlineHandler;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
//# sourceMappingURL=manifest-validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-validator.js","sourceRoot":"","sources":["../../src/validators/manifest-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Main Validator
|
|
3
|
-
*
|
|
4
|
-
* Orchestrates manifest and installation validation.
|
|
5
|
-
* Provides a unified interface for validating SpecVerse projects.
|
|
6
|
-
*
|
|
7
|
-
* @module registry/validators/validator
|
|
8
|
-
* @version 2.0.0
|
|
9
|
-
*/
|
|
10
|
-
import { ManifestValidator } from './manifest-validator.js';
|
|
11
|
-
import { InstallationValidator } from './installation-validator.js';
|
|
12
|
-
import { OfflineHandler } from '../offline/offline-handler.js';
|
|
13
|
-
import type { SpecVerseManifest } from './manifest-validator.js';
|
|
14
|
-
import type { ValidationResult, ManifestValidationOptions, InstallationValidationOptions } from '../types/index.js';
|
|
15
|
-
/**
|
|
16
|
-
* Complete validation options
|
|
17
|
-
*/
|
|
18
|
-
export interface ValidatorOptions {
|
|
19
|
-
/** Manifest validation options */
|
|
20
|
-
manifest?: ManifestValidationOptions;
|
|
21
|
-
/** Installation validation options */
|
|
22
|
-
installation?: InstallationValidationOptions;
|
|
23
|
-
/** Skip manifest validation */
|
|
24
|
-
skipManifest?: boolean;
|
|
25
|
-
/** Skip installation validation */
|
|
26
|
-
skipInstallation?: boolean;
|
|
27
|
-
/** Offline mode - only use cache */
|
|
28
|
-
offline?: boolean;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Validation report
|
|
32
|
-
*/
|
|
33
|
-
export interface ValidationReport {
|
|
34
|
-
/** Overall validation result */
|
|
35
|
-
result: ValidationResult;
|
|
36
|
-
/** Manifest validation result (if run) */
|
|
37
|
-
manifestResult?: ValidationResult;
|
|
38
|
-
/** Installation validation result (if run) */
|
|
39
|
-
installationResult?: ValidationResult;
|
|
40
|
-
/** Summary statistics */
|
|
41
|
-
summary: {
|
|
42
|
-
totalIssues: number;
|
|
43
|
-
errorCount: number;
|
|
44
|
-
warningCount: number;
|
|
45
|
-
infoCount: number;
|
|
46
|
-
validationsPassed: string[];
|
|
47
|
-
validationsFailed: string[];
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Main Validator
|
|
52
|
-
*
|
|
53
|
-
* Orchestrates all validation stages.
|
|
54
|
-
*/
|
|
55
|
-
export declare class Validator {
|
|
56
|
-
private manifestValidator;
|
|
57
|
-
private installationValidator;
|
|
58
|
-
private offlineHandler;
|
|
59
|
-
constructor(offlineHandler?: OfflineHandler);
|
|
60
|
-
/**
|
|
61
|
-
* Validate a manifest file
|
|
62
|
-
*
|
|
63
|
-
* Runs both manifest and installation validation unless skipped.
|
|
64
|
-
*
|
|
65
|
-
* @param manifest - Manifest to validate
|
|
66
|
-
* @param options - Validation options
|
|
67
|
-
* @returns Validation report
|
|
68
|
-
*/
|
|
69
|
-
validate(manifest: SpecVerseManifest, options?: ValidatorOptions): Promise<ValidationReport>;
|
|
70
|
-
/**
|
|
71
|
-
* Validate manifest only (skip installation check)
|
|
72
|
-
*
|
|
73
|
-
* @param manifest - Manifest to validate
|
|
74
|
-
* @param options - Manifest validation options
|
|
75
|
-
* @returns Validation report
|
|
76
|
-
*/
|
|
77
|
-
validateManifestOnly(manifest: SpecVerseManifest, options?: ManifestValidationOptions): Promise<ValidationReport>;
|
|
78
|
-
/**
|
|
79
|
-
* Validate installation only (skip manifest check)
|
|
80
|
-
*
|
|
81
|
-
* @param manifest - Manifest to validate
|
|
82
|
-
* @param options - Installation validation options
|
|
83
|
-
* @returns Validation report
|
|
84
|
-
*/
|
|
85
|
-
validateInstallationOnly(manifest: SpecVerseManifest, options?: InstallationValidationOptions): Promise<ValidationReport>;
|
|
86
|
-
/**
|
|
87
|
-
* Get offline handler
|
|
88
|
-
*
|
|
89
|
-
* @returns Offline handler instance
|
|
90
|
-
*/
|
|
91
|
-
getOfflineHandler(): OfflineHandler;
|
|
92
|
-
/**
|
|
93
|
-
* Get manifest validator
|
|
94
|
-
*
|
|
95
|
-
* @returns Manifest validator instance
|
|
96
|
-
*/
|
|
97
|
-
getManifestValidator(): ManifestValidator;
|
|
98
|
-
/**
|
|
99
|
-
* Get installation validator
|
|
100
|
-
*
|
|
101
|
-
* @returns Installation validator instance
|
|
102
|
-
*/
|
|
103
|
-
getInstallationValidator(): InstallationValidator;
|
|
104
|
-
/**
|
|
105
|
-
* Enable offline mode
|
|
106
|
-
*/
|
|
107
|
-
enableOfflineMode(): void;
|
|
108
|
-
/**
|
|
109
|
-
* Disable offline mode
|
|
110
|
-
*/
|
|
111
|
-
disableOfflineMode(): void;
|
|
112
|
-
}
|
|
113
|
-
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/validators/validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EACV,gBAAgB,EAEhB,yBAAyB,EACzB,6BAA6B,EAC9B,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IAErC,sCAAsC;IACtC,YAAY,CAAC,EAAE,6BAA6B,CAAC;IAE7C,+BAA+B;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,MAAM,EAAE,gBAAgB,CAAC;IAEzB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAElC,8CAA8C;IAC9C,kBAAkB,CAAC,EAAE,gBAAgB,CAAC;IAEtC,yBAAyB;IACzB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;CACH;AAED;;;;GAIG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,cAAc,CAAiB;gBAE3B,cAAc,CAAC,EAAE,cAAc;IAM3C;;;;;;;;OAQG;IACG,QAAQ,CACZ,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,gBAAgB,CAAC;IAkF5B;;;;;;OAMG;IACG,oBAAoB,CACxB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC,gBAAgB,CAAC;IAO5B;;;;;;OAMG;IACG,wBAAwB,CAC5B,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,CAAC,EAAE,6BAA6B,GACtC,OAAO,CAAC,gBAAgB,CAAC;IAO5B;;;;OAIG;IACH,iBAAiB,IAAI,cAAc;IAInC;;;;OAIG;IACH,oBAAoB,IAAI,iBAAiB;IAIzC;;;;OAIG;IACH,wBAAwB,IAAI,qBAAqB;IAIjD;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,kBAAkB,IAAI,IAAI;CAG3B"}
|