@nahisaho/musubix-core 1.0.0
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/bin/musubix.js +18 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +27 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/auth/auth-manager.d.ts +320 -0
- package/dist/auth/auth-manager.d.ts.map +1 -0
- package/dist/auth/auth-manager.js +580 -0
- package/dist/auth/auth-manager.js.map +1 -0
- package/dist/cli/base.d.ts +58 -0
- package/dist/cli/base.d.ts.map +1 -0
- package/dist/cli/base.js +93 -0
- package/dist/cli/base.js.map +1 -0
- package/dist/cli/commands/help.d.ts +17 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +228 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/index.d.ts +14 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +25 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +38 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +258 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/codegen/coding-standards.d.ts +250 -0
- package/dist/codegen/coding-standards.d.ts.map +1 -0
- package/dist/codegen/coding-standards.js +976 -0
- package/dist/codegen/coding-standards.js.map +1 -0
- package/dist/codegen/coverage-reporter.d.ts +264 -0
- package/dist/codegen/coverage-reporter.d.ts.map +1 -0
- package/dist/codegen/coverage-reporter.js +697 -0
- package/dist/codegen/coverage-reporter.js.map +1 -0
- package/dist/codegen/dependency-analyzer.d.ts +271 -0
- package/dist/codegen/dependency-analyzer.d.ts.map +1 -0
- package/dist/codegen/dependency-analyzer.js +661 -0
- package/dist/codegen/dependency-analyzer.js.map +1 -0
- package/dist/codegen/generator.d.ts +275 -0
- package/dist/codegen/generator.d.ts.map +1 -0
- package/dist/codegen/generator.js +781 -0
- package/dist/codegen/generator.js.map +1 -0
- package/dist/codegen/index.d.ts +18 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +27 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/integration-test-generator.d.ts +312 -0
- package/dist/codegen/integration-test-generator.d.ts.map +1 -0
- package/dist/codegen/integration-test-generator.js +765 -0
- package/dist/codegen/integration-test-generator.js.map +1 -0
- package/dist/codegen/pattern-conformance.d.ts +309 -0
- package/dist/codegen/pattern-conformance.d.ts.map +1 -0
- package/dist/codegen/pattern-conformance.js +590 -0
- package/dist/codegen/pattern-conformance.js.map +1 -0
- package/dist/codegen/quality-metrics.d.ts +235 -0
- package/dist/codegen/quality-metrics.d.ts.map +1 -0
- package/dist/codegen/quality-metrics.js +439 -0
- package/dist/codegen/quality-metrics.js.map +1 -0
- package/dist/codegen/security-scanner.d.ts +179 -0
- package/dist/codegen/security-scanner.d.ts.map +1 -0
- package/dist/codegen/security-scanner.js +495 -0
- package/dist/codegen/security-scanner.js.map +1 -0
- package/dist/codegen/static-analyzer.d.ts +188 -0
- package/dist/codegen/static-analyzer.d.ts.map +1 -0
- package/dist/codegen/static-analyzer.js +490 -0
- package/dist/codegen/static-analyzer.js.map +1 -0
- package/dist/codegen/unit-test-generator.d.ts +289 -0
- package/dist/codegen/unit-test-generator.d.ts.map +1 -0
- package/dist/codegen/unit-test-generator.js +634 -0
- package/dist/codegen/unit-test-generator.js.map +1 -0
- package/dist/design/adr-generator.d.ts +227 -0
- package/dist/design/adr-generator.d.ts.map +1 -0
- package/dist/design/adr-generator.js +423 -0
- package/dist/design/adr-generator.js.map +1 -0
- package/dist/design/c4-generator.d.ts +267 -0
- package/dist/design/c4-generator.d.ts.map +1 -0
- package/dist/design/c4-generator.js +453 -0
- package/dist/design/c4-generator.js.map +1 -0
- package/dist/design/framework-optimizer.d.ts +190 -0
- package/dist/design/framework-optimizer.d.ts.map +1 -0
- package/dist/design/framework-optimizer.js +589 -0
- package/dist/design/framework-optimizer.js.map +1 -0
- package/dist/design/index.d.ts +12 -0
- package/dist/design/index.d.ts.map +1 -0
- package/dist/design/index.js +13 -0
- package/dist/design/index.js.map +1 -0
- package/dist/design/pattern-detector.d.ts +270 -0
- package/dist/design/pattern-detector.d.ts.map +1 -0
- package/dist/design/pattern-detector.js +621 -0
- package/dist/design/pattern-detector.js.map +1 -0
- package/dist/design/solid-validator.d.ts +188 -0
- package/dist/design/solid-validator.d.ts.map +1 -0
- package/dist/design/solid-validator.js +579 -0
- package/dist/design/solid-validator.js.map +1 -0
- package/dist/error/data-persistence.d.ts +311 -0
- package/dist/error/data-persistence.d.ts.map +1 -0
- package/dist/error/data-persistence.js +586 -0
- package/dist/error/data-persistence.js.map +1 -0
- package/dist/error/graceful-degradation.d.ts +309 -0
- package/dist/error/graceful-degradation.d.ts.map +1 -0
- package/dist/error/graceful-degradation.js +510 -0
- package/dist/error/graceful-degradation.js.map +1 -0
- package/dist/error/index.d.ts +11 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +19 -0
- package/dist/error/index.js.map +1 -0
- package/dist/explanation/explanation-generator.d.ts +228 -0
- package/dist/explanation/explanation-generator.d.ts.map +1 -0
- package/dist/explanation/explanation-generator.js +662 -0
- package/dist/explanation/explanation-generator.js.map +1 -0
- package/dist/explanation/index.d.ts +11 -0
- package/dist/explanation/index.d.ts.map +1 -0
- package/dist/explanation/index.js +19 -0
- package/dist/explanation/index.js.map +1 -0
- package/dist/explanation/reasoning-chain.d.ts +314 -0
- package/dist/explanation/reasoning-chain.d.ts.map +1 -0
- package/dist/explanation/reasoning-chain.js +414 -0
- package/dist/explanation/reasoning-chain.js.map +1 -0
- package/dist/explanation/visual-explanation.d.ts +315 -0
- package/dist/explanation/visual-explanation.d.ts.map +1 -0
- package/dist/explanation/visual-explanation.js +667 -0
- package/dist/explanation/visual-explanation.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/requirements/decomposer.d.ts +235 -0
- package/dist/requirements/decomposer.d.ts.map +1 -0
- package/dist/requirements/decomposer.js +587 -0
- package/dist/requirements/decomposer.js.map +1 -0
- package/dist/requirements/related-finder.d.ts +261 -0
- package/dist/requirements/related-finder.d.ts.map +1 -0
- package/dist/requirements/related-finder.js +629 -0
- package/dist/requirements/related-finder.js.map +1 -0
- package/dist/traceability/impact.d.ts +196 -0
- package/dist/traceability/impact.d.ts.map +1 -0
- package/dist/traceability/impact.js +438 -0
- package/dist/traceability/impact.js.map +1 -0
- package/dist/traceability/index.d.ts +9 -0
- package/dist/traceability/index.d.ts.map +1 -0
- package/dist/traceability/index.js +10 -0
- package/dist/traceability/index.js.map +1 -0
- package/dist/traceability/manager.d.ts +266 -0
- package/dist/traceability/manager.d.ts.map +1 -0
- package/dist/traceability/manager.js +412 -0
- package/dist/traceability/manager.js.map +1 -0
- package/dist/types/common.d.ts +294 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +15 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/ears.d.ts +158 -0
- package/dist/types/ears.d.ts.map +1 -0
- package/dist/types/ears.js +33 -0
- package/dist/types/ears.js.map +1 -0
- package/dist/types/errors.d.ts +176 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +55 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/data-protector.d.ts +122 -0
- package/dist/utils/data-protector.d.ts.map +1 -0
- package/dist/utils/data-protector.js +275 -0
- package/dist/utils/data-protector.js.map +1 -0
- package/dist/utils/error-handler.d.ts +101 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +324 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/i18n-manager.d.ts +259 -0
- package/dist/utils/i18n-manager.d.ts.map +1 -0
- package/dist/utils/i18n-manager.js +554 -0
- package/dist/utils/i18n-manager.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +120 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +237 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/performance-profiler.d.ts +251 -0
- package/dist/utils/performance-profiler.d.ts.map +1 -0
- package/dist/utils/performance-profiler.js +458 -0
- package/dist/utils/performance-profiler.js.map +1 -0
- package/dist/utils/scalability-optimizer.d.ts +294 -0
- package/dist/utils/scalability-optimizer.d.ts.map +1 -0
- package/dist/utils/scalability-optimizer.js +606 -0
- package/dist/utils/scalability-optimizer.js.map +1 -0
- package/dist/utils/structured-logger.d.ts +294 -0
- package/dist/utils/structured-logger.d.ts.map +1 -0
- package/dist/utils/structured-logger.js +630 -0
- package/dist/utils/structured-logger.js.map +1 -0
- package/dist/utils/version-compatibility.d.ts +217 -0
- package/dist/utils/version-compatibility.d.ts.map +1 -0
- package/dist/utils/version-compatibility.js +443 -0
- package/dist/utils/version-compatibility.js.map +1 -0
- package/dist/validators/ears-validator.d.ts +182 -0
- package/dist/validators/ears-validator.d.ts.map +1 -0
- package/dist/validators/ears-validator.js +357 -0
- package/dist/validators/ears-validator.js.map +1 -0
- package/dist/validators/index.d.ts +8 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +9 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +100 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EARS Validator
|
|
3
|
+
*
|
|
4
|
+
* Validates requirements against EARS (Easy Approach to Requirements Syntax) patterns
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module validators/ears-validator
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-RA-001 - EARS Pattern Recognition
|
|
10
|
+
* @see Article II - Requirements First
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Validation issue
|
|
14
|
+
*/
|
|
15
|
+
export interface ValidationIssue {
|
|
16
|
+
/** Issue code (same as ruleId) */
|
|
17
|
+
code?: string;
|
|
18
|
+
/** Rule ID */
|
|
19
|
+
ruleId?: string;
|
|
20
|
+
/** Issue message */
|
|
21
|
+
message: string;
|
|
22
|
+
/** Severity */
|
|
23
|
+
severity: 'error' | 'warning' | 'info';
|
|
24
|
+
/** Location if applicable */
|
|
25
|
+
location?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* EARS Pattern types
|
|
29
|
+
*/
|
|
30
|
+
export type EARSPatternType = 'ubiquitous' | 'event-driven' | 'state-driven' | 'unwanted' | 'optional' | 'complex';
|
|
31
|
+
/**
|
|
32
|
+
* EARS Pattern match
|
|
33
|
+
*/
|
|
34
|
+
export interface EARSPatternMatch {
|
|
35
|
+
/** Pattern type */
|
|
36
|
+
type: EARSPatternType;
|
|
37
|
+
/** Match confidence (0-1) */
|
|
38
|
+
confidence: number;
|
|
39
|
+
/** Extracted components */
|
|
40
|
+
components: EARSComponents;
|
|
41
|
+
/** Original text */
|
|
42
|
+
original: string;
|
|
43
|
+
/** Suggested rewrite (if needed) */
|
|
44
|
+
suggestion?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* EARS Components extracted from requirement
|
|
48
|
+
*/
|
|
49
|
+
export interface EARSComponents {
|
|
50
|
+
/** System or actor */
|
|
51
|
+
system?: string;
|
|
52
|
+
/** Trigger condition (event-driven) */
|
|
53
|
+
trigger?: string;
|
|
54
|
+
/** State condition (state-driven) */
|
|
55
|
+
state?: string;
|
|
56
|
+
/** Precondition (unwanted behavior) */
|
|
57
|
+
condition?: string;
|
|
58
|
+
/** Feature flag (optional) */
|
|
59
|
+
feature?: string;
|
|
60
|
+
/** Action/behavior */
|
|
61
|
+
action?: string;
|
|
62
|
+
/** Response/result */
|
|
63
|
+
response?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* EARS validation options
|
|
67
|
+
*/
|
|
68
|
+
export interface EARSValidatorOptions {
|
|
69
|
+
/** Minimum confidence threshold */
|
|
70
|
+
confidenceThreshold: number;
|
|
71
|
+
/** Allow complex patterns */
|
|
72
|
+
allowComplex: boolean;
|
|
73
|
+
/** Strict mode (require exact pattern match) */
|
|
74
|
+
strictMode: boolean;
|
|
75
|
+
/** Suggest rewrites for non-conforming requirements */
|
|
76
|
+
suggestRewrites: boolean;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Default validation options
|
|
80
|
+
*/
|
|
81
|
+
export declare const DEFAULT_EARS_OPTIONS: EARSValidatorOptions;
|
|
82
|
+
/**
|
|
83
|
+
* EARS Validator
|
|
84
|
+
*
|
|
85
|
+
* Validates and analyzes requirements using EARS patterns
|
|
86
|
+
*/
|
|
87
|
+
export declare class EARSValidator {
|
|
88
|
+
private options;
|
|
89
|
+
constructor(options?: Partial<EARSValidatorOptions>);
|
|
90
|
+
/**
|
|
91
|
+
* Validate a single requirement
|
|
92
|
+
*/
|
|
93
|
+
validateRequirement(requirement: string): EARSValidationResult;
|
|
94
|
+
/**
|
|
95
|
+
* Validate multiple requirements
|
|
96
|
+
*/
|
|
97
|
+
validateRequirements(requirements: string[]): EARSBatchValidationResult;
|
|
98
|
+
/**
|
|
99
|
+
* Match requirement against EARS patterns
|
|
100
|
+
*/
|
|
101
|
+
private matchPattern;
|
|
102
|
+
/**
|
|
103
|
+
* Match complex (combined) patterns
|
|
104
|
+
*/
|
|
105
|
+
private matchComplexPattern;
|
|
106
|
+
/**
|
|
107
|
+
* Calculate confidence score for pattern match
|
|
108
|
+
*/
|
|
109
|
+
private calculateConfidence;
|
|
110
|
+
/**
|
|
111
|
+
* Check quality of matched requirement
|
|
112
|
+
*/
|
|
113
|
+
private checkQuality;
|
|
114
|
+
/**
|
|
115
|
+
* Generate rewrite suggestions for non-conforming requirements
|
|
116
|
+
*/
|
|
117
|
+
private generateRewrites;
|
|
118
|
+
/**
|
|
119
|
+
* Extract action from text
|
|
120
|
+
*/
|
|
121
|
+
private extractAction;
|
|
122
|
+
/**
|
|
123
|
+
* Analyze pattern distribution
|
|
124
|
+
*/
|
|
125
|
+
private analyzeDistribution;
|
|
126
|
+
/**
|
|
127
|
+
* Aggregate issues from all results
|
|
128
|
+
*/
|
|
129
|
+
private aggregateIssues;
|
|
130
|
+
/**
|
|
131
|
+
* Get pattern description
|
|
132
|
+
*/
|
|
133
|
+
static getPatternDescription(type: EARSPatternType): string;
|
|
134
|
+
/**
|
|
135
|
+
* Get all pattern descriptions
|
|
136
|
+
*/
|
|
137
|
+
static getAllPatterns(): Array<{
|
|
138
|
+
type: EARSPatternType;
|
|
139
|
+
description: string;
|
|
140
|
+
}>;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* EARS Validation Result
|
|
144
|
+
*/
|
|
145
|
+
export interface EARSValidationResult {
|
|
146
|
+
/** Is valid EARS format */
|
|
147
|
+
valid: boolean;
|
|
148
|
+
/** Pattern match details */
|
|
149
|
+
patternMatch: EARSPatternMatch | null;
|
|
150
|
+
/** Quality issues */
|
|
151
|
+
issues: ValidationIssue[];
|
|
152
|
+
/** Rewrite suggestions */
|
|
153
|
+
suggestions: string[];
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* EARS Batch Validation Result
|
|
157
|
+
*/
|
|
158
|
+
export interface EARSBatchValidationResult {
|
|
159
|
+
/** Total requirements */
|
|
160
|
+
total: number;
|
|
161
|
+
/** Valid requirements */
|
|
162
|
+
valid: number;
|
|
163
|
+
/** Invalid requirements */
|
|
164
|
+
invalid: number;
|
|
165
|
+
/** Coverage ratio */
|
|
166
|
+
coverage: number;
|
|
167
|
+
/** Individual results */
|
|
168
|
+
results: Array<{
|
|
169
|
+
index: number;
|
|
170
|
+
requirement: string;
|
|
171
|
+
result: EARSValidationResult;
|
|
172
|
+
}>;
|
|
173
|
+
/** Pattern distribution */
|
|
174
|
+
patternDistribution: Record<EARSPatternType, number>;
|
|
175
|
+
/** Aggregated issues */
|
|
176
|
+
overallIssues: Map<string, number>;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Create EARS validator instance
|
|
180
|
+
*/
|
|
181
|
+
export declare function createEARSValidator(options?: Partial<EARSValidatorOptions>): EARSValidator;
|
|
182
|
+
//# sourceMappingURL=ears-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ears-validator.d.ts","sourceRoot":"","sources":["../../src/validators/ears-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EARS Validator
|
|
3
|
+
*
|
|
4
|
+
* Validates requirements against EARS (Easy Approach to Requirements Syntax) patterns
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
* @module validators/ears-validator
|
|
8
|
+
*
|
|
9
|
+
* @see REQ-RA-001 - EARS Pattern Recognition
|
|
10
|
+
* @see Article II - Requirements First
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Default validation options
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_EARS_OPTIONS = {
|
|
16
|
+
confidenceThreshold: 0.7,
|
|
17
|
+
allowComplex: true,
|
|
18
|
+
strictMode: false,
|
|
19
|
+
suggestRewrites: true,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Pattern definitions for EARS
|
|
23
|
+
*/
|
|
24
|
+
const EARS_PATTERNS = [
|
|
25
|
+
{
|
|
26
|
+
type: 'ubiquitous',
|
|
27
|
+
regex: /^(?:the\s+)?(.+?)\s+shall\s+(.+)$/i,
|
|
28
|
+
extract: (match) => ({
|
|
29
|
+
system: match[1]?.trim(),
|
|
30
|
+
action: match[2]?.trim(),
|
|
31
|
+
}),
|
|
32
|
+
description: 'The <system> shall <action>',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
type: 'event-driven',
|
|
36
|
+
regex: /^when\s+(.+?),?\s+(?:the\s+)?(.+?)\s+shall\s+(.+)$/i,
|
|
37
|
+
extract: (match) => ({
|
|
38
|
+
trigger: match[1]?.trim(),
|
|
39
|
+
system: match[2]?.trim(),
|
|
40
|
+
action: match[3]?.trim(),
|
|
41
|
+
}),
|
|
42
|
+
description: 'When <trigger>, the <system> shall <action>',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: 'state-driven',
|
|
46
|
+
regex: /^while\s+(.+?),?\s+(?:the\s+)?(.+?)\s+shall\s+(.+)$/i,
|
|
47
|
+
extract: (match) => ({
|
|
48
|
+
state: match[1]?.trim(),
|
|
49
|
+
system: match[2]?.trim(),
|
|
50
|
+
action: match[3]?.trim(),
|
|
51
|
+
}),
|
|
52
|
+
description: 'While <state>, the <system> shall <action>',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
type: 'unwanted',
|
|
56
|
+
regex: /^if\s+(.+?),?\s+(?:then\s+)?(?:the\s+)?(.+?)\s+shall\s+(.+)$/i,
|
|
57
|
+
extract: (match) => ({
|
|
58
|
+
condition: match[1]?.trim(),
|
|
59
|
+
system: match[2]?.trim(),
|
|
60
|
+
action: match[3]?.trim(),
|
|
61
|
+
}),
|
|
62
|
+
description: 'If <condition>, then the <system> shall <action>',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
type: 'optional',
|
|
66
|
+
regex: /^where\s+(.+?),?\s+(?:the\s+)?(.+?)\s+shall\s+(.+)$/i,
|
|
67
|
+
extract: (match) => ({
|
|
68
|
+
feature: match[1]?.trim(),
|
|
69
|
+
system: match[2]?.trim(),
|
|
70
|
+
action: match[3]?.trim(),
|
|
71
|
+
}),
|
|
72
|
+
description: 'Where <feature>, the <system> shall <action>',
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
/**
|
|
76
|
+
* EARS Validator
|
|
77
|
+
*
|
|
78
|
+
* Validates and analyzes requirements using EARS patterns
|
|
79
|
+
*/
|
|
80
|
+
export class EARSValidator {
|
|
81
|
+
options;
|
|
82
|
+
constructor(options) {
|
|
83
|
+
this.options = { ...DEFAULT_EARS_OPTIONS, ...options };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Validate a single requirement
|
|
87
|
+
*/
|
|
88
|
+
validateRequirement(requirement) {
|
|
89
|
+
const trimmed = requirement.trim();
|
|
90
|
+
if (!trimmed) {
|
|
91
|
+
return {
|
|
92
|
+
valid: false,
|
|
93
|
+
patternMatch: null,
|
|
94
|
+
issues: [{
|
|
95
|
+
severity: 'error',
|
|
96
|
+
message: 'Requirement text is empty',
|
|
97
|
+
ruleId: 'ears-empty',
|
|
98
|
+
}],
|
|
99
|
+
suggestions: ['Provide a non-empty requirement text'],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// Try to match EARS patterns
|
|
103
|
+
const match = this.matchPattern(trimmed);
|
|
104
|
+
if (match && match.confidence >= this.options.confidenceThreshold) {
|
|
105
|
+
return {
|
|
106
|
+
valid: true,
|
|
107
|
+
patternMatch: match,
|
|
108
|
+
issues: this.checkQuality(match),
|
|
109
|
+
suggestions: [],
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// No pattern match - provide suggestions
|
|
113
|
+
const issues = [{
|
|
114
|
+
severity: this.options.strictMode ? 'error' : 'warning',
|
|
115
|
+
message: 'Requirement does not match any EARS pattern',
|
|
116
|
+
ruleId: 'ears-no-pattern',
|
|
117
|
+
}];
|
|
118
|
+
const suggestions = this.options.suggestRewrites
|
|
119
|
+
? this.generateRewrites(trimmed)
|
|
120
|
+
: [];
|
|
121
|
+
return {
|
|
122
|
+
valid: !this.options.strictMode,
|
|
123
|
+
patternMatch: match,
|
|
124
|
+
issues,
|
|
125
|
+
suggestions,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Validate multiple requirements
|
|
130
|
+
*/
|
|
131
|
+
validateRequirements(requirements) {
|
|
132
|
+
const results = requirements.map((req, index) => ({
|
|
133
|
+
index,
|
|
134
|
+
requirement: req,
|
|
135
|
+
result: this.validateRequirement(req),
|
|
136
|
+
}));
|
|
137
|
+
const valid = results.filter((r) => r.result.valid);
|
|
138
|
+
const invalid = results.filter((r) => !r.result.valid);
|
|
139
|
+
// Analyze pattern distribution
|
|
140
|
+
const patternDistribution = this.analyzeDistribution(results);
|
|
141
|
+
return {
|
|
142
|
+
total: requirements.length,
|
|
143
|
+
valid: valid.length,
|
|
144
|
+
invalid: invalid.length,
|
|
145
|
+
coverage: requirements.length > 0 ? valid.length / requirements.length : 0,
|
|
146
|
+
results,
|
|
147
|
+
patternDistribution,
|
|
148
|
+
overallIssues: this.aggregateIssues(results),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Match requirement against EARS patterns
|
|
153
|
+
*/
|
|
154
|
+
matchPattern(text) {
|
|
155
|
+
let bestMatch = null;
|
|
156
|
+
let bestConfidence = 0;
|
|
157
|
+
for (const pattern of EARS_PATTERNS) {
|
|
158
|
+
const match = text.match(pattern.regex);
|
|
159
|
+
if (match) {
|
|
160
|
+
const components = pattern.extract(match);
|
|
161
|
+
const confidence = this.calculateConfidence(components, pattern.type);
|
|
162
|
+
if (confidence > bestConfidence) {
|
|
163
|
+
bestConfidence = confidence;
|
|
164
|
+
bestMatch = {
|
|
165
|
+
type: pattern.type,
|
|
166
|
+
confidence,
|
|
167
|
+
components,
|
|
168
|
+
original: text,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Check for complex patterns
|
|
174
|
+
if (!bestMatch && this.options.allowComplex) {
|
|
175
|
+
bestMatch = this.matchComplexPattern(text);
|
|
176
|
+
}
|
|
177
|
+
return bestMatch;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Match complex (combined) patterns
|
|
181
|
+
*/
|
|
182
|
+
matchComplexPattern(text) {
|
|
183
|
+
// Complex: When + While combination
|
|
184
|
+
const complexRegex = /^when\s+(.+?)\s+(?:and\s+)?while\s+(.+?),?\s+(?:the\s+)?(.+?)\s+shall\s+(.+)$/i;
|
|
185
|
+
const match = text.match(complexRegex);
|
|
186
|
+
if (match) {
|
|
187
|
+
return {
|
|
188
|
+
type: 'complex',
|
|
189
|
+
confidence: 0.85,
|
|
190
|
+
components: {
|
|
191
|
+
trigger: match[1]?.trim(),
|
|
192
|
+
state: match[2]?.trim(),
|
|
193
|
+
system: match[3]?.trim(),
|
|
194
|
+
action: match[4]?.trim(),
|
|
195
|
+
},
|
|
196
|
+
original: text,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Calculate confidence score for pattern match
|
|
203
|
+
*/
|
|
204
|
+
calculateConfidence(components, _type) {
|
|
205
|
+
let confidence = 0.5; // Base confidence for pattern match
|
|
206
|
+
// Check component quality
|
|
207
|
+
if (components.system && components.system.length > 2) {
|
|
208
|
+
confidence += 0.15;
|
|
209
|
+
}
|
|
210
|
+
if (components.action && components.action.length > 5) {
|
|
211
|
+
confidence += 0.2;
|
|
212
|
+
}
|
|
213
|
+
// Bonus for well-formed components
|
|
214
|
+
if (components.action?.includes(' ')) {
|
|
215
|
+
confidence += 0.1; // Action has multiple words
|
|
216
|
+
}
|
|
217
|
+
// Cap at 1.0
|
|
218
|
+
return Math.min(confidence, 1.0);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Check quality of matched requirement
|
|
222
|
+
*/
|
|
223
|
+
checkQuality(match) {
|
|
224
|
+
const issues = [];
|
|
225
|
+
const { components } = match;
|
|
226
|
+
// Check for vague terms
|
|
227
|
+
const vagueTerms = ['appropriate', 'adequate', 'etc', 'and/or', 'as needed'];
|
|
228
|
+
const text = match.original.toLowerCase();
|
|
229
|
+
for (const term of vagueTerms) {
|
|
230
|
+
if (text.includes(term)) {
|
|
231
|
+
issues.push({
|
|
232
|
+
severity: 'warning',
|
|
233
|
+
message: `Requirement contains vague term: "${term}"`,
|
|
234
|
+
ruleId: 'ears-vague-term',
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
// Check system name
|
|
239
|
+
if (components.system && components.system.length < 3) {
|
|
240
|
+
issues.push({
|
|
241
|
+
severity: 'warning',
|
|
242
|
+
message: 'System name is too short',
|
|
243
|
+
ruleId: 'ears-short-system',
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
// Check action specificity
|
|
247
|
+
if (components.action) {
|
|
248
|
+
const actionWords = components.action.split(/\s+/).length;
|
|
249
|
+
if (actionWords < 2) {
|
|
250
|
+
issues.push({
|
|
251
|
+
severity: 'info',
|
|
252
|
+
message: 'Action could be more specific',
|
|
253
|
+
ruleId: 'ears-vague-action',
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Check for measurability
|
|
258
|
+
const hasMetric = /\d+|percent|seconds?|minutes?|hours?|ms|milliseconds?/i.test(text);
|
|
259
|
+
if (!hasMetric && match.type !== 'ubiquitous') {
|
|
260
|
+
issues.push({
|
|
261
|
+
severity: 'info',
|
|
262
|
+
message: 'Consider adding measurable criteria',
|
|
263
|
+
ruleId: 'ears-no-metric',
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
return issues;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Generate rewrite suggestions for non-conforming requirements
|
|
270
|
+
*/
|
|
271
|
+
generateRewrites(text) {
|
|
272
|
+
const suggestions = [];
|
|
273
|
+
const lowerText = text.toLowerCase();
|
|
274
|
+
// Detect potential pattern and suggest
|
|
275
|
+
if (lowerText.includes('when') || lowerText.includes('upon')) {
|
|
276
|
+
suggestions.push(`Event-driven: "When <trigger>, the system shall ${this.extractAction(text)}"`);
|
|
277
|
+
}
|
|
278
|
+
if (lowerText.includes('while') || lowerText.includes('during')) {
|
|
279
|
+
suggestions.push(`State-driven: "While <state>, the system shall ${this.extractAction(text)}"`);
|
|
280
|
+
}
|
|
281
|
+
if (lowerText.includes('if') || lowerText.includes('in case')) {
|
|
282
|
+
suggestions.push(`Unwanted behavior: "If <condition>, then the system shall ${this.extractAction(text)}"`);
|
|
283
|
+
}
|
|
284
|
+
// Default ubiquitous suggestion
|
|
285
|
+
if (suggestions.length === 0) {
|
|
286
|
+
suggestions.push(`Ubiquitous: "The system shall ${this.extractAction(text)}"`);
|
|
287
|
+
}
|
|
288
|
+
return suggestions;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Extract action from text
|
|
292
|
+
*/
|
|
293
|
+
extractAction(text) {
|
|
294
|
+
// Try to find verb phrase
|
|
295
|
+
const verbMatch = text.match(/(?:should|must|will|shall|can|may)\s+(.+?)(?:\.|$)/i);
|
|
296
|
+
if (verbMatch) {
|
|
297
|
+
return verbMatch[1].trim();
|
|
298
|
+
}
|
|
299
|
+
// Return cleaned text as action
|
|
300
|
+
return text.replace(/^(?:the\s+)?system\s+/i, '').trim() || '<action>';
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Analyze pattern distribution
|
|
304
|
+
*/
|
|
305
|
+
analyzeDistribution(results) {
|
|
306
|
+
const distribution = {
|
|
307
|
+
'ubiquitous': 0,
|
|
308
|
+
'event-driven': 0,
|
|
309
|
+
'state-driven': 0,
|
|
310
|
+
'unwanted': 0,
|
|
311
|
+
'optional': 0,
|
|
312
|
+
'complex': 0,
|
|
313
|
+
};
|
|
314
|
+
for (const { result } of results) {
|
|
315
|
+
if (result.patternMatch) {
|
|
316
|
+
distribution[result.patternMatch.type]++;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
return distribution;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Aggregate issues from all results
|
|
323
|
+
*/
|
|
324
|
+
aggregateIssues(results) {
|
|
325
|
+
const issueCount = new Map();
|
|
326
|
+
for (const { result } of results) {
|
|
327
|
+
for (const issue of result.issues) {
|
|
328
|
+
const key = issue.ruleId ?? issue.message;
|
|
329
|
+
issueCount.set(key, (issueCount.get(key) ?? 0) + 1);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return issueCount;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Get pattern description
|
|
336
|
+
*/
|
|
337
|
+
static getPatternDescription(type) {
|
|
338
|
+
const pattern = EARS_PATTERNS.find((p) => p.type === type);
|
|
339
|
+
return pattern?.description ?? 'Unknown pattern';
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Get all pattern descriptions
|
|
343
|
+
*/
|
|
344
|
+
static getAllPatterns() {
|
|
345
|
+
return EARS_PATTERNS.map((p) => ({
|
|
346
|
+
type: p.type,
|
|
347
|
+
description: p.description,
|
|
348
|
+
}));
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Create EARS validator instance
|
|
353
|
+
*/
|
|
354
|
+
export function createEARSValidator(options) {
|
|
355
|
+
return new EARSValidator(options);
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=ears-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ears-validator.js","sourceRoot":"","sources":["../../src/validators/ears-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validators Module
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
* @module validators
|
|
6
|
+
*/
|
|
7
|
+
export { EARSValidator, createEARSValidator, type EARSPatternType, type EARSPatternMatch, type EARSValidatorOptions, type EARSBatchValidationResult, DEFAULT_EARS_OPTIONS, } from './ears-validator.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,oBAAoB,GACrB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validators Module
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
* @module validators
|
|
6
|
+
*/
|
|
7
|
+
export { EARSValidator, createEARSValidator, DEFAULT_EARS_OPTIONS, } from './ears-validator.js';
|
|
8
|
+
// Note: EARSComponents and EARSValidationResult are exported from types module
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validators/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,mBAAmB,EAKnB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,+EAA+E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|