@principal-ai/principal-view-core 0.10.4 → 0.11.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/dist/narrative/template-parser.d.ts +1 -0
- package/dist/narrative/template-parser.d.ts.map +1 -1
- package/dist/narrative/template-parser.js +19 -0
- package/dist/narrative/template-parser.js.map +1 -1
- package/dist/narrative/validator.d.ts +67 -1
- package/dist/narrative/validator.d.ts.map +1 -1
- package/dist/narrative/validator.js +215 -4
- package/dist/narrative/validator.js.map +1 -1
- package/package.json +1 -1
- package/src/narrative/template-parser.ts +20 -0
- package/src/narrative/validator.ts +290 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-parser.d.ts","sourceRoot":"","sources":["../../src/narrative/template-parser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"template-parser.d.ts","sourceRoot":"","sources":["../../src/narrative/template-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAuBH;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAOxF"}
|
|
@@ -6,8 +6,27 @@
|
|
|
6
6
|
* - Nested properties: {{result.violations.total}}
|
|
7
7
|
* - Conditionals: {{#if condition}}...{{/if}}
|
|
8
8
|
* - Loops: {{#each items}}...{{/each}}
|
|
9
|
+
* - Comparison helpers: {{#if (eq a b)}}...{{/if}}
|
|
9
10
|
*/
|
|
10
11
|
import Handlebars from 'handlebars';
|
|
12
|
+
// Register common comparison helpers
|
|
13
|
+
Handlebars.registerHelper('eq', (a, b) => a === b);
|
|
14
|
+
Handlebars.registerHelper('ne', (a, b) => a !== b);
|
|
15
|
+
Handlebars.registerHelper('lt', (a, b) => a < b);
|
|
16
|
+
Handlebars.registerHelper('gt', (a, b) => a > b);
|
|
17
|
+
Handlebars.registerHelper('lte', (a, b) => a <= b);
|
|
18
|
+
Handlebars.registerHelper('gte', (a, b) => a >= b);
|
|
19
|
+
Handlebars.registerHelper('and', (...args) => {
|
|
20
|
+
// Last argument is Handlebars options object
|
|
21
|
+
const values = args.slice(0, -1);
|
|
22
|
+
return values.every(Boolean);
|
|
23
|
+
});
|
|
24
|
+
Handlebars.registerHelper('or', (...args) => {
|
|
25
|
+
// Last argument is Handlebars options object
|
|
26
|
+
const values = args.slice(0, -1);
|
|
27
|
+
return values.some(Boolean);
|
|
28
|
+
});
|
|
29
|
+
Handlebars.registerHelper('not', (a) => !a);
|
|
11
30
|
/**
|
|
12
31
|
* Parse and evaluate a template string using Handlebars
|
|
13
32
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-parser.js","sourceRoot":"","sources":["../../src/narrative/template-parser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"template-parser.js","sourceRoot":"","sources":["../../src/narrative/template-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,qCAAqC;AACrC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;IAC3C,6CAA6C;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AACH,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;IAC1C,6CAA6C;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AACH,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAgC;IAC9E,IAAI;QACF,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;KACnC;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC;KACnG;AACH,CAAC"}
|
|
@@ -17,6 +17,13 @@ export interface NarrativeValidationContext {
|
|
|
17
17
|
basePath: string;
|
|
18
18
|
/** Raw narrative content for line number lookup */
|
|
19
19
|
rawContent?: string;
|
|
20
|
+
/** Execution data for validating attribute references (optional) */
|
|
21
|
+
executionData?: {
|
|
22
|
+
/** Aggregated attributes available in templates */
|
|
23
|
+
aggregates: Record<string, unknown>;
|
|
24
|
+
/** Attributes grouped by event name */
|
|
25
|
+
eventAttributes: Map<string, Record<string, unknown>>;
|
|
26
|
+
};
|
|
20
27
|
}
|
|
21
28
|
export interface NarrativeViolation {
|
|
22
29
|
/** Rule ID that detected this violation */
|
|
@@ -94,9 +101,36 @@ export declare class NarrativeValidator {
|
|
|
94
101
|
*/
|
|
95
102
|
private validateTemplateString;
|
|
96
103
|
/**
|
|
97
|
-
* Check attribute references
|
|
104
|
+
* Check attribute references against execution data
|
|
105
|
+
*
|
|
106
|
+
* Validates that:
|
|
107
|
+
* - Attributes referenced in templates exist in execution data
|
|
108
|
+
* - Object attributes are accessed via properties (not used directly)
|
|
109
|
+
* - Attribute names are correct (catches typos)
|
|
98
110
|
*/
|
|
99
111
|
private checkAttributeReferences;
|
|
112
|
+
/**
|
|
113
|
+
* Validate a list of attribute references against available data
|
|
114
|
+
*
|
|
115
|
+
* @param attributes - Attribute paths to validate
|
|
116
|
+
* @param aggregates - Global aggregate attributes
|
|
117
|
+
* @param eventAttributes - Event-specific attributes (if validating event template)
|
|
118
|
+
* @param file - File path for violation reporting
|
|
119
|
+
* @param path - JSON path for violation reporting
|
|
120
|
+
* @param eventName - Event name (if validating event template)
|
|
121
|
+
* @returns Array of violations found
|
|
122
|
+
*/
|
|
123
|
+
private validateAttributes;
|
|
124
|
+
/**
|
|
125
|
+
* Find similar attribute names for helpful suggestions
|
|
126
|
+
*
|
|
127
|
+
* Uses simple string similarity (Levenshtein-like) to find typos
|
|
128
|
+
*
|
|
129
|
+
* @param target - The attribute being searched for
|
|
130
|
+
* @param available - Available attribute names
|
|
131
|
+
* @returns Array of similar attribute names (max 3)
|
|
132
|
+
*/
|
|
133
|
+
private findSimilarAttributes;
|
|
100
134
|
/**
|
|
101
135
|
* Check formatting options
|
|
102
136
|
*/
|
|
@@ -131,6 +165,38 @@ export declare class NarrativeValidator {
|
|
|
131
165
|
* - "installation.started" -> ""
|
|
132
166
|
*/
|
|
133
167
|
private extractAttributeValue;
|
|
168
|
+
/**
|
|
169
|
+
* Extract attribute references from Handlebars template
|
|
170
|
+
*
|
|
171
|
+
* Parses template strings like:
|
|
172
|
+
* - "{{source}}" -> ["source"]
|
|
173
|
+
* - "{{source.url}}" -> ["source.url"]
|
|
174
|
+
* - "{{#if options.global}}" -> ["options.global"]
|
|
175
|
+
* - "{{#if (eq install.mode 'symlink')}}" -> ["install.mode"]
|
|
176
|
+
*
|
|
177
|
+
* @param template - Handlebars template string
|
|
178
|
+
* @returns Array of attribute paths referenced in the template
|
|
179
|
+
*/
|
|
180
|
+
private extractAttributeReferences;
|
|
181
|
+
/**
|
|
182
|
+
* Extract attribute references from a single Handlebars expression
|
|
183
|
+
*
|
|
184
|
+
* Handles:
|
|
185
|
+
* - Simple references: source.url
|
|
186
|
+
* - Helper calls: (eq install.mode 'symlink')
|
|
187
|
+
* - Nested expressions
|
|
188
|
+
*
|
|
189
|
+
* @param expression - The expression to parse
|
|
190
|
+
* @param attributes - Set to add found attributes to
|
|
191
|
+
*/
|
|
192
|
+
private extractAttributesFromExpression;
|
|
193
|
+
/**
|
|
194
|
+
* Check if an attribute is an object type
|
|
195
|
+
*
|
|
196
|
+
* @param value - The attribute value to check
|
|
197
|
+
* @returns true if value is a plain object (not array, not null)
|
|
198
|
+
*/
|
|
199
|
+
private isObjectType;
|
|
134
200
|
}
|
|
135
201
|
/**
|
|
136
202
|
* Create a validator instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/narrative/validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAQtD,MAAM,WAAW,0BAA0B;IACzC,6CAA6C;IAC7C,SAAS,EAAE,iBAAiB,CAAC;IAE7B,iCAAiC;IACjC,aAAa,EAAE,MAAM,CAAC;IAEtB,iCAAiC;IACjC,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IAEjB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/narrative/validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAQtD,MAAM,WAAW,0BAA0B;IACzC,6CAA6C;IAC7C,SAAS,EAAE,iBAAiB,CAAC;IAE7B,iCAAiC;IACjC,aAAa,EAAE,MAAM,CAAC;IAEtB,iCAAiC;IACjC,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IAEjB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,oEAAoE;IACpE,aAAa,CAAC,EAAE;QACd,mDAAmD;QACnD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,uCAAuC;QACvC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KACvD,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IAEf,qBAAqB;IACrB,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAE3B,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IAEb,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAEhB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IAEf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,2BAA2B;IAC3B,UAAU,EAAE,kBAAkB,EAAE,CAAC;IAEjC,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IAEnB,wBAAwB;IACxB,YAAY,EAAE,MAAM,CAAC;IAErB,kCAAkC;IAClC,YAAY,EAAE,MAAM,CAAC;CACtB;AAMD,qBAAa,kBAAkB;IAC7B;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,yBAAyB,CAAC;IAwBrC;;OAEG;IACH,OAAO,CAAC,WAAW;IA4InB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4BzB;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAuE5B;;OAEG;IACH,OAAO,CAAC,cAAc;IA6ItB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqD/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqD9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+D5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4E3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyF9B;;;;;;;OAOG;IACH,OAAO,CAAC,wBAAwB;IAkEhC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kBAAkB;IA6D1B;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;IAmC7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,0BAA0B;IAgClC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,+BAA+B;IA4BvC;;;;;OAKG;IACH,OAAO,CAAC,YAAY;CAQrB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D"}
|
|
@@ -691,14 +691,144 @@ export class NarrativeValidator {
|
|
|
691
691
|
return violations;
|
|
692
692
|
}
|
|
693
693
|
/**
|
|
694
|
-
* Check attribute references
|
|
694
|
+
* Check attribute references against execution data
|
|
695
|
+
*
|
|
696
|
+
* Validates that:
|
|
697
|
+
* - Attributes referenced in templates exist in execution data
|
|
698
|
+
* - Object attributes are accessed via properties (not used directly)
|
|
699
|
+
* - Attribute names are correct (catches typos)
|
|
700
|
+
*/
|
|
701
|
+
checkAttributeReferences(context) {
|
|
702
|
+
const violations = [];
|
|
703
|
+
const { narrative, narrativePath, executionData } = context;
|
|
704
|
+
// Skip if no execution data provided
|
|
705
|
+
if (!executionData) {
|
|
706
|
+
return violations;
|
|
707
|
+
}
|
|
708
|
+
const { aggregates, eventAttributes } = executionData;
|
|
709
|
+
// Check each scenario's template
|
|
710
|
+
for (const scenario of narrative.scenarios) {
|
|
711
|
+
const scenarioPath = `scenarios[${scenario.id}]`;
|
|
712
|
+
// Check introduction template
|
|
713
|
+
if (scenario.template.introduction) {
|
|
714
|
+
const attrs = this.extractAttributeReferences(scenario.template.introduction);
|
|
715
|
+
violations.push(...this.validateAttributes(attrs, aggregates, null, // introduction doesn't have specific event context
|
|
716
|
+
narrativePath, `${scenarioPath}.template.introduction`));
|
|
717
|
+
}
|
|
718
|
+
// Check event templates
|
|
719
|
+
if (scenario.template.events) {
|
|
720
|
+
for (const [eventName, eventTemplate] of Object.entries(scenario.template.events)) {
|
|
721
|
+
const attrs = this.extractAttributeReferences(eventTemplate);
|
|
722
|
+
const eventAttrs = eventAttributes.get(eventName);
|
|
723
|
+
violations.push(...this.validateAttributes(attrs, aggregates, eventAttrs || null, narrativePath, `${scenarioPath}.template.events.${eventName}`, eventName));
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
// Check summary template
|
|
727
|
+
if (scenario.template.summary) {
|
|
728
|
+
const attrs = this.extractAttributeReferences(scenario.template.summary);
|
|
729
|
+
violations.push(...this.validateAttributes(attrs, aggregates, null, // summary uses global aggregates
|
|
730
|
+
narrativePath, `${scenarioPath}.template.summary`));
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
return violations;
|
|
734
|
+
}
|
|
735
|
+
/**
|
|
736
|
+
* Validate a list of attribute references against available data
|
|
737
|
+
*
|
|
738
|
+
* @param attributes - Attribute paths to validate
|
|
739
|
+
* @param aggregates - Global aggregate attributes
|
|
740
|
+
* @param eventAttributes - Event-specific attributes (if validating event template)
|
|
741
|
+
* @param file - File path for violation reporting
|
|
742
|
+
* @param path - JSON path for violation reporting
|
|
743
|
+
* @param eventName - Event name (if validating event template)
|
|
744
|
+
* @returns Array of violations found
|
|
695
745
|
*/
|
|
696
|
-
|
|
746
|
+
validateAttributes(attributes, aggregates, eventAttributes, file, path, eventName) {
|
|
697
747
|
const violations = [];
|
|
698
|
-
|
|
699
|
-
|
|
748
|
+
for (const attr of attributes) {
|
|
749
|
+
// Check if attribute exists in global aggregates
|
|
750
|
+
const globalValue = aggregates[attr];
|
|
751
|
+
const eventValue = eventAttributes?.[attr];
|
|
752
|
+
// Attribute doesn't exist anywhere
|
|
753
|
+
if (globalValue === undefined && eventValue === undefined) {
|
|
754
|
+
// Try to find similar attributes for helpful suggestions
|
|
755
|
+
const allKeys = [
|
|
756
|
+
...Object.keys(aggregates),
|
|
757
|
+
...(eventAttributes ? Object.keys(eventAttributes) : []),
|
|
758
|
+
];
|
|
759
|
+
const similar = this.findSimilarAttributes(attr, allKeys);
|
|
760
|
+
violations.push({
|
|
761
|
+
ruleId: 'narrative-attribute-undefined',
|
|
762
|
+
severity: 'warn',
|
|
763
|
+
file,
|
|
764
|
+
path,
|
|
765
|
+
message: eventName
|
|
766
|
+
? `Attribute "{{${attr}}}" not found in event "${eventName}" or global aggregates`
|
|
767
|
+
: `Attribute "{{${attr}}}" not found in execution data`,
|
|
768
|
+
impact: 'Template will render as empty or "undefined"',
|
|
769
|
+
suggestion: similar.length > 0 ? `Did you mean: ${similar.join(', ')}?` : undefined,
|
|
770
|
+
fixable: false,
|
|
771
|
+
});
|
|
772
|
+
continue;
|
|
773
|
+
}
|
|
774
|
+
// Check if object is used directly (should use property access)
|
|
775
|
+
const value = eventValue !== undefined ? eventValue : globalValue;
|
|
776
|
+
if (this.isObjectType(value)) {
|
|
777
|
+
const objectKeys = Object.keys(value);
|
|
778
|
+
const suggestions = objectKeys.slice(0, 3).map((k) => `{{${attr}.${k}}}`);
|
|
779
|
+
violations.push({
|
|
780
|
+
ruleId: 'narrative-attribute-object',
|
|
781
|
+
severity: 'warn',
|
|
782
|
+
file,
|
|
783
|
+
path,
|
|
784
|
+
message: `Attribute "{{${attr}}}" is an object and will render as "[object Object]"`,
|
|
785
|
+
impact: 'Template will show "[object Object]" instead of useful data',
|
|
786
|
+
suggestion: `Access a property instead: ${suggestions.join(', ')}`,
|
|
787
|
+
fixable: false,
|
|
788
|
+
});
|
|
789
|
+
}
|
|
790
|
+
}
|
|
700
791
|
return violations;
|
|
701
792
|
}
|
|
793
|
+
/**
|
|
794
|
+
* Find similar attribute names for helpful suggestions
|
|
795
|
+
*
|
|
796
|
+
* Uses simple string similarity (Levenshtein-like) to find typos
|
|
797
|
+
*
|
|
798
|
+
* @param target - The attribute being searched for
|
|
799
|
+
* @param available - Available attribute names
|
|
800
|
+
* @returns Array of similar attribute names (max 3)
|
|
801
|
+
*/
|
|
802
|
+
findSimilarAttributes(target, available) {
|
|
803
|
+
const similar = [];
|
|
804
|
+
for (const attr of available) {
|
|
805
|
+
// Check for prefix match
|
|
806
|
+
if (attr.startsWith(target) || target.startsWith(attr)) {
|
|
807
|
+
similar.push({ attr, score: 10 });
|
|
808
|
+
continue;
|
|
809
|
+
}
|
|
810
|
+
// Check for substring match
|
|
811
|
+
if (attr.includes(target) || target.includes(attr)) {
|
|
812
|
+
similar.push({ attr, score: 5 });
|
|
813
|
+
continue;
|
|
814
|
+
}
|
|
815
|
+
// Check for similar structure (same number of dots)
|
|
816
|
+
const targetParts = target.split('.');
|
|
817
|
+
const attrParts = attr.split('.');
|
|
818
|
+
if (targetParts.length === attrParts.length) {
|
|
819
|
+
// Check if any parts match
|
|
820
|
+
const matchingParts = targetParts.filter((p, i) => p === attrParts[i]).length;
|
|
821
|
+
if (matchingParts > 0) {
|
|
822
|
+
similar.push({ attr, score: matchingParts });
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
// Sort by score and return top 3
|
|
827
|
+
return similar
|
|
828
|
+
.sort((a, b) => b.score - a.score)
|
|
829
|
+
.slice(0, 3)
|
|
830
|
+
.map((s) => s.attr);
|
|
831
|
+
}
|
|
702
832
|
/**
|
|
703
833
|
* Check formatting options
|
|
704
834
|
*/
|
|
@@ -805,6 +935,87 @@ export class NarrativeValidator {
|
|
|
805
935
|
}
|
|
806
936
|
return match[1];
|
|
807
937
|
}
|
|
938
|
+
/**
|
|
939
|
+
* Extract attribute references from Handlebars template
|
|
940
|
+
*
|
|
941
|
+
* Parses template strings like:
|
|
942
|
+
* - "{{source}}" -> ["source"]
|
|
943
|
+
* - "{{source.url}}" -> ["source.url"]
|
|
944
|
+
* - "{{#if options.global}}" -> ["options.global"]
|
|
945
|
+
* - "{{#if (eq install.mode 'symlink')}}" -> ["install.mode"]
|
|
946
|
+
*
|
|
947
|
+
* @param template - Handlebars template string
|
|
948
|
+
* @returns Array of attribute paths referenced in the template
|
|
949
|
+
*/
|
|
950
|
+
extractAttributeReferences(template) {
|
|
951
|
+
const attributes = new Set();
|
|
952
|
+
// Match all Handlebars expressions: {{...}}
|
|
953
|
+
const expressionPattern = /\{\{([^}]+)\}\}/g;
|
|
954
|
+
let match;
|
|
955
|
+
while ((match = expressionPattern.exec(template)) !== null) {
|
|
956
|
+
const expression = match[1].trim();
|
|
957
|
+
// Skip block helpers closing tags
|
|
958
|
+
if (expression.startsWith('/')) {
|
|
959
|
+
continue;
|
|
960
|
+
}
|
|
961
|
+
// Handle block helpers: #if, #each, #unless, etc.
|
|
962
|
+
if (expression.startsWith('#')) {
|
|
963
|
+
// Extract the condition/expression after the helper
|
|
964
|
+
const helperMatch = expression.match(/^#\w+\s+(.+)$/);
|
|
965
|
+
if (helperMatch) {
|
|
966
|
+
this.extractAttributesFromExpression(helperMatch[1], attributes);
|
|
967
|
+
}
|
|
968
|
+
continue;
|
|
969
|
+
}
|
|
970
|
+
// Handle regular expressions
|
|
971
|
+
this.extractAttributesFromExpression(expression, attributes);
|
|
972
|
+
}
|
|
973
|
+
return Array.from(attributes);
|
|
974
|
+
}
|
|
975
|
+
/**
|
|
976
|
+
* Extract attribute references from a single Handlebars expression
|
|
977
|
+
*
|
|
978
|
+
* Handles:
|
|
979
|
+
* - Simple references: source.url
|
|
980
|
+
* - Helper calls: (eq install.mode 'symlink')
|
|
981
|
+
* - Nested expressions
|
|
982
|
+
*
|
|
983
|
+
* @param expression - The expression to parse
|
|
984
|
+
* @param attributes - Set to add found attributes to
|
|
985
|
+
*/
|
|
986
|
+
extractAttributesFromExpression(expression, attributes) {
|
|
987
|
+
// Remove helper parentheses: (eq install.mode 'symlink') -> eq install.mode 'symlink'
|
|
988
|
+
const cleaned = expression.replace(/^\(|\)$/g, '').trim();
|
|
989
|
+
// Split on spaces to handle helper arguments
|
|
990
|
+
const parts = cleaned.split(/\s+/);
|
|
991
|
+
for (const part of parts) {
|
|
992
|
+
// Skip helper names, string literals, numbers, and boolean literals
|
|
993
|
+
if (part.match(/^(if|unless|each|with|eq|ne|lt|gt|lte|gte|and|or|not)$/) ||
|
|
994
|
+
part.match(/^['"].*['"]$/) ||
|
|
995
|
+
part.match(/^\d+$/) ||
|
|
996
|
+
part.match(/^(true|false|null|undefined)$/)) {
|
|
997
|
+
continue;
|
|
998
|
+
}
|
|
999
|
+
// Remove any remaining quotes or parentheses
|
|
1000
|
+
const cleanPart = part.replace(/['"()]/g, '');
|
|
1001
|
+
// If it looks like an attribute path (contains letters/dots/underscores)
|
|
1002
|
+
if (cleanPart && cleanPart.match(/^[a-zA-Z_][a-zA-Z0-9_.]*$/)) {
|
|
1003
|
+
attributes.add(cleanPart);
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
/**
|
|
1008
|
+
* Check if an attribute is an object type
|
|
1009
|
+
*
|
|
1010
|
+
* @param value - The attribute value to check
|
|
1011
|
+
* @returns true if value is a plain object (not array, not null)
|
|
1012
|
+
*/
|
|
1013
|
+
isObjectType(value) {
|
|
1014
|
+
return (typeof value === 'object' &&
|
|
1015
|
+
value !== null &&
|
|
1016
|
+
!Array.isArray(value) &&
|
|
1017
|
+
!(value instanceof Date));
|
|
1018
|
+
}
|
|
808
1019
|
}
|
|
809
1020
|
/**
|
|
810
1021
|
* Create a validator instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/narrative/validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAqE/B,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACH,KAAK,CAAC,QAAQ,CACZ,OAAmC;QAEnC,MAAM,UAAU,GAAyB,EAAE,CAAC;QAE5C,2BAA2B;QAC3B,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9C,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QAEjD,2DAA2D;QAC3D,yEAAyE;QACzE,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;QAEvD,wDAAwD;QACxD,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;YACvD,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;SAC5D;QAED,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzD,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,OAAmC;QACrD,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;QAE7C,gBAAgB;QAChB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;YACtB,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,kCAAkC;gBAC3C,MAAM,EAAE,qDAAqD;gBAC7D,UAAU,EAAE,qCAAqC;gBACjD,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;aAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;YACjD,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,4BAA4B,SAAS,CAAC,OAAO,GAAG;gBACzD,MAAM,EAAE,mCAAmC;gBAC3C,UAAU,EAAE,gCAAgC;gBAC5C,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;QAED,yBAAyB;QACzB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACrB,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,iCAAiC;gBAC1C,MAAM,EAAE,yDAAyD;gBACjE,UAAU,EAAE,qDAAqD;gBACjE,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;QAED,aAAa;QACb,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACnB,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,+BAA+B;gBACxC,MAAM,EAAE,yCAAyC;gBACjD,UAAU,EAAE,2BAA2B;gBACvC,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;QAED,oBAAoB;QACpB,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YAC1B,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,sCAAsC;gBAC/C,MAAM,EAAE,iDAAiD;gBACzD,UAAU,EAAE,wDAAwD;gBACpE,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;QAED,aAAa;QACb,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;YACnB,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,+BAA+B;gBACxC,MAAM,EAAE,iDAAiD;gBACzD,UAAU,EAAE,uBAAuB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC1D,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;aAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YAC/C,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,kBAAkB,SAAS,CAAC,IAAI,GAAG;gBAC5C,MAAM,EAAE,yCAAyC;gBACjD,UAAU,EAAE,eAAe,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAClD,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;QAED,0BAA0B;QAC1B,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,SAAS,CAAC,iBAAiB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE;YACzF,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,+BAA+B,SAAS,CAAC,iBAAiB,GAAG;gBACtE,MAAM,EAAE,yCAAyC;gBACjD,UAAU,EAAE,eAAe,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACvD,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;QAED,wBAAwB;QACxB,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;YAC/D,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,sCAAsC;gBAC/C,MAAM,EAAE,8CAA8C;gBACtD,UAAU,EAAE,kDAAkD;gBAC9D,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;aAAM,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3C,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,wBAAwB;gBAChC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,0BAA0B;gBACnC,MAAM,EAAE,8CAA8C;gBACtD,UAAU,EAAE,sCAAsC;gBAClD,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,OAAmC;QAC3D,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAEnE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACrB,iCAAiC;YACjC,OAAO,UAAU,CAAC;SACnB;QAED,sBAAsB;QACtB,MAAM,YAAY,GAAG,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAEvE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;YAC7B,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,yBAAyB;gBACjC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,0CAA0C,SAAS,CAAC,MAAM,EAAE;gBACrE,MAAM,EAAE,qDAAqD;gBAC7D,UAAU,EAAE,6DAA6D;gBACzE,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACK,oBAAoB,CAAC,OAAmC;QAC9D,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAErD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAC5B,OAAO,UAAU,CAAC;SACnB;QAED,4CAA4C;QAC5C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE;YAC/B,IAAI,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;gBACxB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aACtC;SACF;QAED,mDAAmD;QACnD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;QAC1C,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE;YAC1C,0BAA0B;YAC1B,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE;gBAChC,KAAK,MAAM,YAAY,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE;oBACtD,iCAAiC;oBACjC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wBAC/B,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;qBACnC;iBACF;aACF;YACD,uBAAuB;YACvB,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;gBAC7B,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBAC7D,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;iBAChC;aACF;SACF;QAED,2CAA2C;QAC3C,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE;YACvC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBAChC,UAAU,CAAC,IAAI,CAAC;oBACd,MAAM,EAAE,sBAAsB;oBAC9B,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,+BAA+B,SAAS,kCAAkC;oBACnF,MAAM,EAAE,mEAAmE;oBAC3E,UAAU,EAAE,cAAc,SAAS,kBAAkB,SAAS,CAAC,MAAM,kCAAkC;oBACvG,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;aACJ;SACF;QAED,0DAA0D;QAC1D,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE;YACpC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;gBACnC,UAAU,CAAC,IAAI,CAAC;oBACd,MAAM,EAAE,0BAA0B;oBAClC,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,yBAAyB,SAAS,+CAA+C;oBAC1F,MAAM,EAAE,qEAAqE;oBAC7E,UAAU,EAAE,cAAc,SAAS,yDAAyD;oBAC5F,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;aACJ;SACF;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,OAAmC;QACxD,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;QAE7C,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5D,OAAO,UAAU,CAAC,CAAC,iCAAiC;SACrD;QAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YAC5C,4BAA4B;YAC5B,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,UAAU,CAAC,IAAI,CAAC;oBACd,MAAM,EAAE,0BAA0B;oBAClC,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,aAAa,GAAG,MAAM;oBAC5B,OAAO,EAAE,yCAAyC;oBAClD,MAAM,EAAE,+BAA+B;oBACvC,UAAU,EAAE,mCAAmC;oBAC/C,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;aACJ;iBAAM;gBACL,0BAA0B;gBAC1B,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;oBAChC,UAAU,CAAC,IAAI,CAAC;wBACd,MAAM,EAAE,0BAA0B;wBAClC,QAAQ,EAAE,OAAO;wBACjB,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,aAAa,GAAG,MAAM;wBAC5B,OAAO,EAAE,2BAA2B,QAAQ,CAAC,EAAE,GAAG;wBAClD,MAAM,EAAE,6BAA6B;wBACrC,UAAU,EAAE,2CAA2C;wBACvD,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;iBACJ;gBACD,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;aAC9B;YAED,iBAAiB;YACjB,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,EAAE;gBACjE,UAAU,CAAC,IAAI,CAAC;oBACd,MAAM,EAAE,0BAA0B;oBAClC,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,aAAa,GAAG,YAAY;oBAClC,OAAO,EAAE,+CAA+C;oBACxD,MAAM,EAAE,2CAA2C;oBACnD,UAAU,EAAE,iDAAiD;oBAC7D,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;aACJ;iBAAM;gBACL,IAAI,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE;oBACzB,UAAU,CAAC,IAAI,CAAC;wBACd,MAAM,EAAE,0BAA0B;wBAClC,QAAQ,EAAE,OAAO;wBACjB,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,aAAa,GAAG,YAAY;wBAClC,OAAO,EAAE,wCAAwC;wBACjD,MAAM,EAAE,wBAAwB;wBAChC,UAAU,EAAE,+CAA+C;wBAC3D,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;iBACJ;gBAED,iCAAiC;gBACjC,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBACrC,UAAU,CAAC,IAAI,CAAC;wBACd,MAAM,EAAE,0BAA0B;wBAClC,QAAQ,EAAE,OAAO;wBACjB,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,aAAa,GAAG,YAAY;wBAClC,OAAO,EAAE,uBAAuB,QAAQ,CAAC,QAAQ,EAAE;wBACnD,MAAM,EAAE,wDAAwD;wBAChE,UAAU,EAAE,gDAAgD;wBAC5D,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;iBACJ;gBACD,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACnC;YAED,6BAA6B;YAC7B,IAAI,QAAQ,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,EAAE;gBACxC,UAAU,GAAG,IAAI,CAAC;aACnB;YAED,kBAAkB;YAClB,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;gBACvB,UAAU,CAAC,IAAI,CAAC;oBACd,MAAM,EAAE,0BAA0B;oBAClC,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,aAAa,GAAG,aAAa;oBACnC,OAAO,EAAE,gDAAgD;oBACzD,MAAM,EAAE,4CAA4C;oBACpD,UAAU,EAAE,sCAAsC;oBAClD,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;aACJ;iBAAM;gBACL,+BAA+B;gBAC/B,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;aAC1F;YAED,iBAAiB;YACjB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBACtB,UAAU,CAAC,IAAI,CAAC;oBACd,MAAM,EAAE,0BAA0B;oBAClC,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,aAAa,GAAG,YAAY;oBAClC,OAAO,EAAE,+CAA+C;oBACxD,MAAM,EAAE,4CAA4C;oBACpD,UAAU,EAAE,mDAAmD;oBAC/D,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;aACJ;iBAAM;gBACL,8BAA8B;gBAC9B,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;aACxF;QACH,CAAC,CAAC,CAAC;QAEH,8CAA8C;QAC9C,IAAI,CAAC,UAAU,EAAE;YACf,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,0BAA0B;gBAClC,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,6BAA6B;gBACtC,MAAM,EAAE,qDAAqD;gBAC7D,UAAU,EAAE,6DAA6D;gBACzE,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,uBAAuB,CAC7B,SAAc,EACd,IAAY,EACZ,WAAmB;QAEnB,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7E,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7C,kCAAkC;QAClC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;YAC/B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAC9B,wCAAwC;gBACxC,IAAI,GAAG,KAAK,OAAO,EAAE;oBACnB,UAAU,CAAC,IAAI,CAAC;wBACd,MAAM,EAAE,+BAA+B;wBACvC,QAAQ,EAAE,OAAO;wBACjB,IAAI;wBACJ,IAAI,EAAE,aAAa,WAAW,eAAe,GAAG,EAAE;wBAClD,OAAO,EAAE,4BAA4B,GAAG,4BAA4B;wBACpE,MAAM,EAAE,0DAA0D;wBAClE,UAAU,EAAE,2DAA2D;wBACvE,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;iBACJ;qBAAM,IAAI,GAAG,KAAK,YAAY,EAAE;oBAC/B,UAAU,CAAC,IAAI,CAAC;wBACd,MAAM,EAAE,+BAA+B;wBACvC,QAAQ,EAAE,OAAO;wBACjB,IAAI;wBACJ,IAAI,EAAE,aAAa,WAAW,eAAe,GAAG,EAAE;wBAClD,OAAO,EAAE,4BAA4B,GAAG,4BAA4B;wBACpE,MAAM,EAAE,+DAA+D;wBACvE,UAAU,EAAE,kEAAkE;wBAC9E,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;iBACJ;qBAAM;oBACL,UAAU,CAAC,IAAI,CAAC;wBACd,MAAM,EAAE,+BAA+B;wBACvC,QAAQ,EAAE,OAAO;wBACjB,IAAI;wBACJ,IAAI,EAAE,aAAa,WAAW,eAAe,GAAG,EAAE;wBAClD,OAAO,EAAE,4BAA4B,GAAG,GAAG;wBAC3C,MAAM,EAAE,8DAA8D;wBACtE,UAAU,EAAE,qBAAqB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBACzD,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;iBACJ;aACF;SACF;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,sBAAsB,CAC5B,QAAa,EACb,IAAY,EACZ,WAAmB;QAEnB,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9F,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3C,kCAAkC;QAClC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE;YAC9B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAC9B,wCAAwC;gBACxC,IAAI,GAAG,KAAK,OAAO,EAAE;oBACnB,UAAU,CAAC,IAAI,CAAC;wBACd,MAAM,EAAE,8BAA8B;wBACtC,QAAQ,EAAE,OAAO;wBACjB,IAAI;wBACJ,IAAI,EAAE,aAAa,WAAW,cAAc,GAAG,EAAE;wBACjD,OAAO,EAAE,2BAA2B,GAAG,4BAA4B;wBACnE,MAAM,EAAE,2DAA2D;wBACnE,UAAU,EAAE,uEAAuE;wBACnF,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;iBACJ;qBAAM,IAAI,GAAG,KAAK,SAAS,EAAE;oBAC5B,UAAU,CAAC,IAAI,CAAC;wBACd,MAAM,EAAE,8BAA8B;wBACtC,QAAQ,EAAE,OAAO;wBACjB,IAAI;wBACJ,IAAI,EAAE,aAAa,WAAW,cAAc,GAAG,EAAE;wBACjD,OAAO,EAAE,2BAA2B,GAAG,4BAA4B;wBACnE,MAAM,EAAE,6DAA6D;wBACrE,UAAU,EAAE,kFAAkF;wBAC9F,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;iBACJ;qBAAM;oBACL,UAAU,CAAC,IAAI,CAAC;wBACd,MAAM,EAAE,8BAA8B;wBACtC,QAAQ,EAAE,OAAO;wBACjB,IAAI;wBACJ,IAAI,EAAE,aAAa,WAAW,cAAc,GAAG,EAAE;wBACjD,OAAO,EAAE,2BAA2B,GAAG,GAAG;wBAC1C,MAAM,EAAE,8DAA8D;wBACtE,UAAU,EAAE,qBAAqB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBACzD,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;iBACJ;aACF;SACF;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,OAAmC;QAC9D,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;QAE7C,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE;YACpD,2BAA2B;YAC3B,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE;gBAChC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE;oBACxD,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wBAC5D,UAAU,CAAC,IAAI,CAAC;4BACd,MAAM,EAAE,6BAA6B;4BACrC,QAAQ,EAAE,OAAO;4BACjB,IAAI,EAAE,aAAa;4BACnB,IAAI,EAAE,aAAa,WAAW,wBAAwB,GAAG,GAAG;4BAC5D,OAAO,EAAE,0DAA0D,YAAY,GAAG;4BAClF,MAAM,EAAE,iEAAiE;4BACzE,UAAU,EAAE,6CAA6C,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI;4BAChJ,OAAO,EAAE,KAAK;yBACf,CAAC,CAAC;qBACJ;gBACH,CAAC,CAAC,CAAC;aACJ;YAED,2BAA2B;YAC3B,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE;gBAChC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE;oBACxD,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wBAC5D,UAAU,CAAC,IAAI,CAAC;4BACd,MAAM,EAAE,6BAA6B;4BACrC,QAAQ,EAAE,OAAO;4BACjB,IAAI,EAAE,aAAa;4BACnB,IAAI,EAAE,aAAa,WAAW,wBAAwB,GAAG,GAAG;4BAC5D,OAAO,EAAE,0DAA0D,YAAY,GAAG;4BAClF,MAAM,EAAE,iEAAiE;4BACzE,UAAU,EAAE,6CAA6C,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI;4BAChJ,OAAO,EAAE,KAAK;yBACf,CAAC,CAAC;qBACJ;gBACH,CAAC,CAAC,CAAC;aACJ;YAED,wBAAwB;YACxB,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;gBAC7B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;oBAC1D,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wBACtD,UAAU,CAAC,IAAI,CAAC;4BACd,MAAM,EAAE,6BAA6B;4BACrC,QAAQ,EAAE,OAAO;4BACjB,IAAI,EAAE,aAAa;4BACnB,IAAI,EAAE,aAAa,WAAW,sBAAsB,SAAS,IAAI;4BACjE,OAAO,EAAE,0DAA0D,SAAS,GAAG;4BAC/E,MAAM,EAAE,uEAAuE;4BAC/E,UAAU,EAAE,6CAA6C,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI;4BAC1I,OAAO,EAAE,KAAK;yBACf,CAAC,CAAC;qBACJ;gBACH,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAAmC;QAC7D,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;QAE7C,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE;YACpD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBACtB,OAAO;aACR;YAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAEnC,qBAAqB;YACrB,IAAI,QAAQ,CAAC,YAAY,EAAE;gBACzB,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAC5C,QAAQ,CAAC,YAAY,EACrB,aAAa,EACb,aAAa,WAAW,yBAAyB,CAClD,CAAC,CAAC;aACJ;YAED,gBAAgB;YAChB,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACpB,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAC5C,QAAQ,CAAC,OAAO,EAChB,aAAa,EACb,aAAa,WAAW,oBAAoB,CAC7C,CAAC,CAAC;aACJ;YAED,wBAAwB;YACxB,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACnB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE;oBACnE,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAC5C,WAAW,EACX,aAAa,EACb,aAAa,WAAW,qBAAqB,SAAS,EAAE,CACzD,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;aACJ;YAED,sBAAsB;YACtB,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACjB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE;oBAChE,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;wBACnC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAC5C,WAAW,EACX,aAAa,EACb,aAAa,WAAW,mBAAmB,QAAQ,EAAE,CACtD,CAAC,CAAC;qBACJ;gBACH,CAAC,CAAC,CAAC;aACJ;YAED,uBAAuB;YACvB,IAAI,QAAQ,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACjD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;oBACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;wBAC5B,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAC5C,IAAI,EACJ,aAAa,EACb,aAAa,WAAW,mBAAmB,OAAO,GAAG,CACtD,CAAC,CAAC;qBACJ;yBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;wBACpD,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAC5C,IAAI,CAAC,QAAQ,EACb,aAAa,EACb,aAAa,WAAW,mBAAmB,OAAO,YAAY,CAC/D,CAAC,CAAC;qBACJ;gBACH,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,sBAAsB,CAC5B,WAAmB,EACnB,IAAY,EACZ,IAAY;QAEZ,MAAM,UAAU,GAAyB,EAAE,CAAC;QAE5C,4BAA4B;QAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,SAAS,GAAG,EAAE,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAEjD,eAAe;YACf,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,QAAQ,KAAK,IAAI,EAAE;gBACvD,IAAI,CAAC,OAAO,EAAE;oBACZ,OAAO,GAAG,IAAI,CAAC;oBACf,SAAS,GAAG,IAAI,CAAC;iBAClB;qBAAM,IAAI,IAAI,KAAK,SAAS,EAAE;oBAC7B,OAAO,GAAG,KAAK,CAAC;oBAChB,SAAS,GAAG,EAAE,CAAC;iBAChB;aACF;YAED,wCAAwC;YACxC,IAAI,CAAC,OAAO,EAAE;gBACZ,IAAI,IAAI,KAAK,GAAG,EAAE;oBAChB,UAAU,EAAE,CAAC;iBACd;qBAAM,IAAI,IAAI,KAAK,GAAG,EAAE;oBACvB,UAAU,EAAE,CAAC;oBACb,IAAI,UAAU,GAAG,CAAC,EAAE;wBAClB,UAAU,CAAC,IAAI,CAAC;4BACd,MAAM,EAAE,2BAA2B;4BACnC,QAAQ,EAAE,OAAO;4BACjB,IAAI;4BACJ,IAAI;4BACJ,OAAO,EAAE,gDAAgD;4BACzD,MAAM,EAAE,8BAA8B;4BACtC,UAAU,EAAE,iEAAiE;4BAC7E,OAAO,EAAE,KAAK;yBACf,CAAC,CAAC;wBACH,MAAM;qBACP;iBACF;aACF;SACF;QAED,IAAI,UAAU,GAAG,CAAC,EAAE;YAClB,UAAU,CAAC,IAAI,CAAC;gBACd,MAAM,EAAE,2BAA2B;gBACnC,QAAQ,EAAE,OAAO;gBACjB,IAAI;gBACJ,IAAI;gBACJ,OAAO,EAAE,sCAAsC;gBAC/C,MAAM,EAAE,8BAA8B;gBACtC,UAAU,EAAE,iEAAiE;gBAC7E,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;SACJ;QAED,6DAA6D;QAC7D,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;QAC/C,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAEjE,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5B,mDAAmD;YACnD,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YACvD,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAEnD,IAAI,aAAa,GAAG,UAAU,EAAE;gBAC9B,UAAU,CAAC,IAAI,CAAC;oBACd,MAAM,EAAE,2BAA2B;oBACnC,QAAQ,EAAE,OAAO;oBACjB,IAAI;oBACJ,IAAI;oBACJ,OAAO,EAAE,sCAAsC,IAAI,EAAE;oBACrD,MAAM,EAAE,8BAA8B;oBACtC,UAAU,EAAE,oDAAoD;oBAChE,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,wBAAwB,CAAC,QAAoC;QACnE,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,sFAAsF;QACtF,+DAA+D;QAC/D,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,OAAmC;QAChE,MAAM,UAAU,GAAyB,EAAE,CAAC;QAC5C,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;QAE7C,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;YACzB,OAAO,UAAU,CAAC;SACnB;QAED,uBAAuB;QACvB,IAAI,SAAS,CAAC,UAAU,CAAC,cAAc,EAAE;YACvC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;gBAC9D,UAAU,CAAC,IAAI,CAAC;oBACd,MAAM,EAAE,8BAA8B;oBACtC,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,2BAA2B;oBACjC,OAAO,EAAE,kCAAkC,SAAS,CAAC,UAAU,CAAC,cAAc,GAAG;oBACjF,MAAM,EAAE,sCAAsC;oBAC9C,UAAU,EAAE,eAAe,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACnD,OAAO,EAAE,KAAK;iBACf,CAAC,CAAC;aACJ;SACF;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,UAAgC;QACvD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,EAAE;gBAC1B,UAAU,EAAE,CAAC;aACd;iBAAM;gBACL,YAAY,EAAE,CAAC;aAChB;YACD,IAAI,CAAC,CAAC,OAAO,EAAE;gBACb,YAAY,EAAE,CAAC;aAChB;QACH,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,UAAU;YACV,UAAU;YACV,YAAY;YACZ,YAAY;SACb,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,iBAAiB;IACjB,+EAA+E;IAE/E;;OAEG;IACK,aAAa,CAAC,OAAe;QACnC,MAAM,aAAa,GAAG,sDAAsD,CAAC;QAC7E,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,SAAiB,EAAE,eAAyB;QACtE,cAAc;QACd,IAAI,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACvC,OAAO,IAAI,CAAC;SACb;QAED,gDAAgD;QAChD,iCAAiC;QACjC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;QAEzC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;;OAOG;IACK,oBAAoB,CAAC,YAAoB;QAC/C,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;YACvB,OAAO,YAAY,CAAC;SACrB;QACD,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;;OAOG;IACK,qBAAqB,CAAC,YAAoB;QAChD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,EAAE,CAAC;SACX;QACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC"}
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/narrative/validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -6,10 +6,30 @@
|
|
|
6
6
|
* - Nested properties: {{result.violations.total}}
|
|
7
7
|
* - Conditionals: {{#if condition}}...{{/if}}
|
|
8
8
|
* - Loops: {{#each items}}...{{/each}}
|
|
9
|
+
* - Comparison helpers: {{#if (eq a b)}}...{{/if}}
|
|
9
10
|
*/
|
|
10
11
|
|
|
11
12
|
import Handlebars from 'handlebars';
|
|
12
13
|
|
|
14
|
+
// Register common comparison helpers
|
|
15
|
+
Handlebars.registerHelper('eq', (a, b) => a === b);
|
|
16
|
+
Handlebars.registerHelper('ne', (a, b) => a !== b);
|
|
17
|
+
Handlebars.registerHelper('lt', (a, b) => a < b);
|
|
18
|
+
Handlebars.registerHelper('gt', (a, b) => a > b);
|
|
19
|
+
Handlebars.registerHelper('lte', (a, b) => a <= b);
|
|
20
|
+
Handlebars.registerHelper('gte', (a, b) => a >= b);
|
|
21
|
+
Handlebars.registerHelper('and', (...args) => {
|
|
22
|
+
// Last argument is Handlebars options object
|
|
23
|
+
const values = args.slice(0, -1);
|
|
24
|
+
return values.every(Boolean);
|
|
25
|
+
});
|
|
26
|
+
Handlebars.registerHelper('or', (...args) => {
|
|
27
|
+
// Last argument is Handlebars options object
|
|
28
|
+
const values = args.slice(0, -1);
|
|
29
|
+
return values.some(Boolean);
|
|
30
|
+
});
|
|
31
|
+
Handlebars.registerHelper('not', (a) => !a);
|
|
32
|
+
|
|
13
33
|
/**
|
|
14
34
|
* Parse and evaluate a template string using Handlebars
|
|
15
35
|
*
|
|
@@ -30,6 +30,14 @@ export interface NarrativeValidationContext {
|
|
|
30
30
|
|
|
31
31
|
/** Raw narrative content for line number lookup */
|
|
32
32
|
rawContent?: string;
|
|
33
|
+
|
|
34
|
+
/** Execution data for validating attribute references (optional) */
|
|
35
|
+
executionData?: {
|
|
36
|
+
/** Aggregated attributes available in templates */
|
|
37
|
+
aggregates: Record<string, unknown>;
|
|
38
|
+
/** Attributes grouped by event name */
|
|
39
|
+
eventAttributes: Map<string, Record<string, unknown>>;
|
|
40
|
+
};
|
|
33
41
|
}
|
|
34
42
|
|
|
35
43
|
export interface NarrativeViolation {
|
|
@@ -855,15 +863,195 @@ export class NarrativeValidator {
|
|
|
855
863
|
}
|
|
856
864
|
|
|
857
865
|
/**
|
|
858
|
-
* Check attribute references
|
|
866
|
+
* Check attribute references against execution data
|
|
867
|
+
*
|
|
868
|
+
* Validates that:
|
|
869
|
+
* - Attributes referenced in templates exist in execution data
|
|
870
|
+
* - Object attributes are accessed via properties (not used directly)
|
|
871
|
+
* - Attribute names are correct (catches typos)
|
|
872
|
+
*/
|
|
873
|
+
private checkAttributeReferences(context: NarrativeValidationContext): NarrativeViolation[] {
|
|
874
|
+
const violations: NarrativeViolation[] = [];
|
|
875
|
+
const { narrative, narrativePath, executionData } = context;
|
|
876
|
+
|
|
877
|
+
// Skip if no execution data provided
|
|
878
|
+
if (!executionData) {
|
|
879
|
+
return violations;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
const { aggregates, eventAttributes } = executionData;
|
|
883
|
+
|
|
884
|
+
// Check each scenario's template
|
|
885
|
+
for (const scenario of narrative.scenarios) {
|
|
886
|
+
const scenarioPath = `scenarios[${scenario.id}]`;
|
|
887
|
+
|
|
888
|
+
// Check introduction template
|
|
889
|
+
if (scenario.template.introduction) {
|
|
890
|
+
const attrs = this.extractAttributeReferences(scenario.template.introduction);
|
|
891
|
+
violations.push(
|
|
892
|
+
...this.validateAttributes(
|
|
893
|
+
attrs,
|
|
894
|
+
aggregates,
|
|
895
|
+
null, // introduction doesn't have specific event context
|
|
896
|
+
narrativePath,
|
|
897
|
+
`${scenarioPath}.template.introduction`
|
|
898
|
+
)
|
|
899
|
+
);
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
// Check event templates
|
|
903
|
+
if (scenario.template.events) {
|
|
904
|
+
for (const [eventName, eventTemplate] of Object.entries(scenario.template.events)) {
|
|
905
|
+
const attrs = this.extractAttributeReferences(eventTemplate);
|
|
906
|
+
const eventAttrs = eventAttributes.get(eventName);
|
|
907
|
+
|
|
908
|
+
violations.push(
|
|
909
|
+
...this.validateAttributes(
|
|
910
|
+
attrs,
|
|
911
|
+
aggregates,
|
|
912
|
+
eventAttrs || null,
|
|
913
|
+
narrativePath,
|
|
914
|
+
`${scenarioPath}.template.events.${eventName}`,
|
|
915
|
+
eventName
|
|
916
|
+
)
|
|
917
|
+
);
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
// Check summary template
|
|
922
|
+
if (scenario.template.summary) {
|
|
923
|
+
const attrs = this.extractAttributeReferences(scenario.template.summary);
|
|
924
|
+
violations.push(
|
|
925
|
+
...this.validateAttributes(
|
|
926
|
+
attrs,
|
|
927
|
+
aggregates,
|
|
928
|
+
null, // summary uses global aggregates
|
|
929
|
+
narrativePath,
|
|
930
|
+
`${scenarioPath}.template.summary`
|
|
931
|
+
)
|
|
932
|
+
);
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
return violations;
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
/**
|
|
940
|
+
* Validate a list of attribute references against available data
|
|
941
|
+
*
|
|
942
|
+
* @param attributes - Attribute paths to validate
|
|
943
|
+
* @param aggregates - Global aggregate attributes
|
|
944
|
+
* @param eventAttributes - Event-specific attributes (if validating event template)
|
|
945
|
+
* @param file - File path for violation reporting
|
|
946
|
+
* @param path - JSON path for violation reporting
|
|
947
|
+
* @param eventName - Event name (if validating event template)
|
|
948
|
+
* @returns Array of violations found
|
|
859
949
|
*/
|
|
860
|
-
private
|
|
950
|
+
private validateAttributes(
|
|
951
|
+
attributes: string[],
|
|
952
|
+
aggregates: Record<string, unknown>,
|
|
953
|
+
eventAttributes: Record<string, unknown> | null,
|
|
954
|
+
file: string,
|
|
955
|
+
path: string,
|
|
956
|
+
eventName?: string
|
|
957
|
+
): NarrativeViolation[] {
|
|
861
958
|
const violations: NarrativeViolation[] = [];
|
|
862
|
-
|
|
863
|
-
|
|
959
|
+
|
|
960
|
+
for (const attr of attributes) {
|
|
961
|
+
// Check if attribute exists in global aggregates
|
|
962
|
+
const globalValue = aggregates[attr];
|
|
963
|
+
const eventValue = eventAttributes?.[attr];
|
|
964
|
+
|
|
965
|
+
// Attribute doesn't exist anywhere
|
|
966
|
+
if (globalValue === undefined && eventValue === undefined) {
|
|
967
|
+
// Try to find similar attributes for helpful suggestions
|
|
968
|
+
const allKeys = [
|
|
969
|
+
...Object.keys(aggregates),
|
|
970
|
+
...(eventAttributes ? Object.keys(eventAttributes) : []),
|
|
971
|
+
];
|
|
972
|
+
const similar = this.findSimilarAttributes(attr, allKeys);
|
|
973
|
+
|
|
974
|
+
violations.push({
|
|
975
|
+
ruleId: 'narrative-attribute-undefined',
|
|
976
|
+
severity: 'warn',
|
|
977
|
+
file,
|
|
978
|
+
path,
|
|
979
|
+
message: eventName
|
|
980
|
+
? `Attribute "{{${attr}}}" not found in event "${eventName}" or global aggregates`
|
|
981
|
+
: `Attribute "{{${attr}}}" not found in execution data`,
|
|
982
|
+
impact: 'Template will render as empty or "undefined"',
|
|
983
|
+
suggestion: similar.length > 0 ? `Did you mean: ${similar.join(', ')}?` : undefined,
|
|
984
|
+
fixable: false,
|
|
985
|
+
});
|
|
986
|
+
continue;
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
// Check if object is used directly (should use property access)
|
|
990
|
+
const value = eventValue !== undefined ? eventValue : globalValue;
|
|
991
|
+
if (this.isObjectType(value)) {
|
|
992
|
+
const objectKeys = Object.keys(value as Record<string, unknown>);
|
|
993
|
+
const suggestions = objectKeys.slice(0, 3).map((k) => `{{${attr}.${k}}}`);
|
|
994
|
+
|
|
995
|
+
violations.push({
|
|
996
|
+
ruleId: 'narrative-attribute-object',
|
|
997
|
+
severity: 'warn',
|
|
998
|
+
file,
|
|
999
|
+
path,
|
|
1000
|
+
message: `Attribute "{{${attr}}}" is an object and will render as "[object Object]"`,
|
|
1001
|
+
impact: 'Template will show "[object Object]" instead of useful data',
|
|
1002
|
+
suggestion: `Access a property instead: ${suggestions.join(', ')}`,
|
|
1003
|
+
fixable: false,
|
|
1004
|
+
});
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
|
|
864
1008
|
return violations;
|
|
865
1009
|
}
|
|
866
1010
|
|
|
1011
|
+
/**
|
|
1012
|
+
* Find similar attribute names for helpful suggestions
|
|
1013
|
+
*
|
|
1014
|
+
* Uses simple string similarity (Levenshtein-like) to find typos
|
|
1015
|
+
*
|
|
1016
|
+
* @param target - The attribute being searched for
|
|
1017
|
+
* @param available - Available attribute names
|
|
1018
|
+
* @returns Array of similar attribute names (max 3)
|
|
1019
|
+
*/
|
|
1020
|
+
private findSimilarAttributes(target: string, available: string[]): string[] {
|
|
1021
|
+
const similar: Array<{ attr: string; score: number }> = [];
|
|
1022
|
+
|
|
1023
|
+
for (const attr of available) {
|
|
1024
|
+
// Check for prefix match
|
|
1025
|
+
if (attr.startsWith(target) || target.startsWith(attr)) {
|
|
1026
|
+
similar.push({ attr, score: 10 });
|
|
1027
|
+
continue;
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
// Check for substring match
|
|
1031
|
+
if (attr.includes(target) || target.includes(attr)) {
|
|
1032
|
+
similar.push({ attr, score: 5 });
|
|
1033
|
+
continue;
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
// Check for similar structure (same number of dots)
|
|
1037
|
+
const targetParts = target.split('.');
|
|
1038
|
+
const attrParts = attr.split('.');
|
|
1039
|
+
if (targetParts.length === attrParts.length) {
|
|
1040
|
+
// Check if any parts match
|
|
1041
|
+
const matchingParts = targetParts.filter((p, i) => p === attrParts[i]).length;
|
|
1042
|
+
if (matchingParts > 0) {
|
|
1043
|
+
similar.push({ attr, score: matchingParts });
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
// Sort by score and return top 3
|
|
1049
|
+
return similar
|
|
1050
|
+
.sort((a, b) => b.score - a.score)
|
|
1051
|
+
.slice(0, 3)
|
|
1052
|
+
.map((s) => s.attr);
|
|
1053
|
+
}
|
|
1054
|
+
|
|
867
1055
|
/**
|
|
868
1056
|
* Check formatting options
|
|
869
1057
|
*/
|
|
@@ -982,6 +1170,104 @@ export class NarrativeValidator {
|
|
|
982
1170
|
}
|
|
983
1171
|
return match[1];
|
|
984
1172
|
}
|
|
1173
|
+
|
|
1174
|
+
/**
|
|
1175
|
+
* Extract attribute references from Handlebars template
|
|
1176
|
+
*
|
|
1177
|
+
* Parses template strings like:
|
|
1178
|
+
* - "{{source}}" -> ["source"]
|
|
1179
|
+
* - "{{source.url}}" -> ["source.url"]
|
|
1180
|
+
* - "{{#if options.global}}" -> ["options.global"]
|
|
1181
|
+
* - "{{#if (eq install.mode 'symlink')}}" -> ["install.mode"]
|
|
1182
|
+
*
|
|
1183
|
+
* @param template - Handlebars template string
|
|
1184
|
+
* @returns Array of attribute paths referenced in the template
|
|
1185
|
+
*/
|
|
1186
|
+
private extractAttributeReferences(template: string): string[] {
|
|
1187
|
+
const attributes = new Set<string>();
|
|
1188
|
+
|
|
1189
|
+
// Match all Handlebars expressions: {{...}}
|
|
1190
|
+
const expressionPattern = /\{\{([^}]+)\}\}/g;
|
|
1191
|
+
let match;
|
|
1192
|
+
|
|
1193
|
+
while ((match = expressionPattern.exec(template)) !== null) {
|
|
1194
|
+
const expression = match[1].trim();
|
|
1195
|
+
|
|
1196
|
+
// Skip block helpers closing tags
|
|
1197
|
+
if (expression.startsWith('/')) {
|
|
1198
|
+
continue;
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1201
|
+
// Handle block helpers: #if, #each, #unless, etc.
|
|
1202
|
+
if (expression.startsWith('#')) {
|
|
1203
|
+
// Extract the condition/expression after the helper
|
|
1204
|
+
const helperMatch = expression.match(/^#\w+\s+(.+)$/);
|
|
1205
|
+
if (helperMatch) {
|
|
1206
|
+
this.extractAttributesFromExpression(helperMatch[1], attributes);
|
|
1207
|
+
}
|
|
1208
|
+
continue;
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
// Handle regular expressions
|
|
1212
|
+
this.extractAttributesFromExpression(expression, attributes);
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
return Array.from(attributes);
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1218
|
+
/**
|
|
1219
|
+
* Extract attribute references from a single Handlebars expression
|
|
1220
|
+
*
|
|
1221
|
+
* Handles:
|
|
1222
|
+
* - Simple references: source.url
|
|
1223
|
+
* - Helper calls: (eq install.mode 'symlink')
|
|
1224
|
+
* - Nested expressions
|
|
1225
|
+
*
|
|
1226
|
+
* @param expression - The expression to parse
|
|
1227
|
+
* @param attributes - Set to add found attributes to
|
|
1228
|
+
*/
|
|
1229
|
+
private extractAttributesFromExpression(expression: string, attributes: Set<string>): void {
|
|
1230
|
+
// Remove helper parentheses: (eq install.mode 'symlink') -> eq install.mode 'symlink'
|
|
1231
|
+
const cleaned = expression.replace(/^\(|\)$/g, '').trim();
|
|
1232
|
+
|
|
1233
|
+
// Split on spaces to handle helper arguments
|
|
1234
|
+
const parts = cleaned.split(/\s+/);
|
|
1235
|
+
|
|
1236
|
+
for (const part of parts) {
|
|
1237
|
+
// Skip helper names, string literals, numbers, and boolean literals
|
|
1238
|
+
if (
|
|
1239
|
+
part.match(/^(if|unless|each|with|eq|ne|lt|gt|lte|gte|and|or|not)$/) ||
|
|
1240
|
+
part.match(/^['"].*['"]$/) ||
|
|
1241
|
+
part.match(/^\d+$/) ||
|
|
1242
|
+
part.match(/^(true|false|null|undefined)$/)
|
|
1243
|
+
) {
|
|
1244
|
+
continue;
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
// Remove any remaining quotes or parentheses
|
|
1248
|
+
const cleanPart = part.replace(/['"()]/g, '');
|
|
1249
|
+
|
|
1250
|
+
// If it looks like an attribute path (contains letters/dots/underscores)
|
|
1251
|
+
if (cleanPart && cleanPart.match(/^[a-zA-Z_][a-zA-Z0-9_.]*$/)) {
|
|
1252
|
+
attributes.add(cleanPart);
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
/**
|
|
1258
|
+
* Check if an attribute is an object type
|
|
1259
|
+
*
|
|
1260
|
+
* @param value - The attribute value to check
|
|
1261
|
+
* @returns true if value is a plain object (not array, not null)
|
|
1262
|
+
*/
|
|
1263
|
+
private isObjectType(value: unknown): boolean {
|
|
1264
|
+
return (
|
|
1265
|
+
typeof value === 'object' &&
|
|
1266
|
+
value !== null &&
|
|
1267
|
+
!Array.isArray(value) &&
|
|
1268
|
+
!(value instanceof Date)
|
|
1269
|
+
);
|
|
1270
|
+
}
|
|
985
1271
|
}
|
|
986
1272
|
|
|
987
1273
|
/**
|