@principal-ai/principal-view-core 0.19.0 → 0.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +2 -2
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +1 -1
- package/dist/node.js.map +1 -1
- package/dist/workflow/index.d.ts +2 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +1 -1
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/template-parser.d.ts +26 -2
- package/dist/workflow/template-parser.d.ts.map +1 -1
- package/dist/workflow/template-parser.js +204 -3
- package/dist/workflow/template-parser.js.map +1 -1
- package/dist/workflow/template-renderer.js +12 -12
- package/dist/workflow/template-renderer.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +2 -1
- package/src/node.ts +2 -0
- package/src/workflow/__tests__/template-parser.test.ts +142 -42
- package/src/workflow/index.ts +2 -1
- package/src/workflow/template-parser.ts +253 -5
- package/src/workflow/template-renderer.ts +12 -12
package/dist/index.d.ts
CHANGED
|
@@ -18,7 +18,8 @@ export type { ReactFlowNode, ReactFlowEdge } from './utils/CanvasConverter';
|
|
|
18
18
|
export { parseYaml, isYamlFile, getConfigNameFromFilename } from './utils/YamlParser';
|
|
19
19
|
export type { YamlParseResult } from './utils/YamlParser';
|
|
20
20
|
export { renderWorkflow } from './workflow/template-renderer';
|
|
21
|
-
export { parseTemplate } from './workflow/template-parser';
|
|
21
|
+
export { parseTemplate, ParsedTemplate } from './workflow/template-parser';
|
|
22
|
+
export type { TemplateSegment } from './workflow/template-parser';
|
|
22
23
|
export { selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue, } from './workflow/scenario-matcher';
|
|
23
24
|
export type { WorkflowTemplate, WorkflowScenario, WorkflowMode, ScenarioCondition, ScenarioTemplate, Assertion, FlowDirective, LogTemplates, FormattingOptions, OtelEvent, OtelSignal, WorkflowContext, WorkflowResult, ScenarioMatchResult, SpanTreeNode, } from './workflow/types';
|
|
24
25
|
export type { OtelAttributes, OtelAttributeValue, OtelLog, OtelSpan, OtelResource, OtelSeverity, OtelSeverityText, OtelSeverityNumber, OtelSpanKind, OtelSpanStatus, } from './types/otel';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,YAAY,EACV,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAG7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAGxF,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG5E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACtF,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,7 @@ export { parseYaml, isYamlFile, getConfigNameFromFilename } from './utils/YamlPa
|
|
|
18
18
|
// Export workflow template system (browser-safe)
|
|
19
19
|
// Import directly from files to avoid pulling in Node.js validator
|
|
20
20
|
export { renderWorkflow } from './workflow/template-renderer';
|
|
21
|
-
export { parseTemplate } from './workflow/template-parser';
|
|
21
|
+
export { parseTemplate, ParsedTemplate } from './workflow/template-parser';
|
|
22
22
|
export { selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue, } from './workflow/scenario-matcher';
|
|
23
23
|
// Export canvas, workflow, and test trace discovery (browser-safe)
|
|
24
24
|
export { CanvasDiscovery } from './discovery/CanvasDiscovery';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkCH,mFAAmF;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,2CAA2C;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,iDAAiD;AACjD,mEAAmE;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkCH,mFAAmF;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,2CAA2C;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,iDAAiD;AACjD,mEAAmE;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE3E,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AAiCrC,mEAAmE;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAiB9D,uEAAuE;AACvE,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAO9F,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,gEAAgE;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,oEAAoE;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYlD,+CAA+C;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqB9D,uFAAuF;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,4FAA4F;AAC5F,mFAAmF;AACnF,EAAE;AACF,kFAAkF;AAClF,mDAAmD;AACnD,oDAAoD;AACpD,+DAA+D;AAC/D,2GAA2G;AAC3G,0FAA0F;AAC1F,uDAAuD;AACvD,8CAA8C;AAC9C,qEAAqE;AACrE,gEAAgE;AAChE,EAAE;AACF,WAAW;AACX,iIAAiI"}
|
package/dist/node.d.ts
CHANGED
|
@@ -46,8 +46,8 @@ export type { CreateNodeOptions, CreateEdgeOptions } from './utils/LibraryConver
|
|
|
46
46
|
export type { FileSystemAdapter } from '@principal-ai/repository-abstraction';
|
|
47
47
|
export { InMemoryFileSystemAdapter } from '@principal-ai/repository-abstraction';
|
|
48
48
|
export * from './rules';
|
|
49
|
-
export { renderWorkflow, parseTemplate, selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue, createWorkflowValidator, WorkflowValidator, } from './workflow';
|
|
50
|
-
export type { WorkflowTemplate, WorkflowScenario, WorkflowMode, ScenarioCondition, ScenarioTemplate, Assertion, FlowDirective, LogTemplates, FormattingOptions, OtelEvent, OtelSignal, WorkflowContext, WorkflowResult, ScenarioMatchResult, SpanTreeNode, WorkflowValidationContext, WorkflowViolation, WorkflowValidationResult, } from './workflow';
|
|
49
|
+
export { renderWorkflow, parseTemplate, ParsedTemplate, selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue, createWorkflowValidator, WorkflowValidator, } from './workflow';
|
|
50
|
+
export type { TemplateSegment, WorkflowTemplate, WorkflowScenario, WorkflowMode, ScenarioCondition, ScenarioTemplate, Assertion, FlowDirective, LogTemplates, FormattingOptions, OtelEvent, OtelSignal, WorkflowContext, WorkflowResult, ScenarioMatchResult, SpanTreeNode, WorkflowValidationContext, WorkflowViolation, WorkflowValidationResult, } from './workflow';
|
|
51
51
|
export { CanvasDiscovery } from './discovery/CanvasDiscovery';
|
|
52
52
|
export type { DiscoveredCanvas, DiscoveredTestTrace, CanvasDiscoveryResult, DiscoveryOptions, CanvasType, TestTraceType, DiscoveredCanvasWithContent, DiscoveredTestTraceWithContent, CanvasDiscoveryResultWithContent, } from './discovery/types';
|
|
53
53
|
export { ExecutionValidator, createExecutionValidator } from './execution/ExecutionValidator';
|
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
package/dist/node.js
CHANGED
|
@@ -49,7 +49,7 @@ export { InMemoryFileSystemAdapter } from '@principal-ai/repository-abstraction'
|
|
|
49
49
|
// Export rules engine (Node.js only - OpenTelemetry dependencies)
|
|
50
50
|
export * from './rules';
|
|
51
51
|
// Export workflow template system (full system including Node.js validator)
|
|
52
|
-
export { renderWorkflow, parseTemplate, selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue, createWorkflowValidator, WorkflowValidator, } from './workflow';
|
|
52
|
+
export { renderWorkflow, parseTemplate, ParsedTemplate, selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue, createWorkflowValidator, WorkflowValidator, } from './workflow';
|
|
53
53
|
// Export canvas, workflow, and test trace discovery
|
|
54
54
|
export { CanvasDiscovery } from './discovery/CanvasDiscovery';
|
|
55
55
|
// Export execution validation
|
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,8CAA8C;AAC9C,cAAc,SAAS,CAAC;AAExB,2CAA2C;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,iBAAiB;AACjB,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAElF,iDAAiD;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,wBAAwB;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,oCAAoC;AACpC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG3G,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,4EAA4E;AAC5E,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE3F,iEAAiE;AACjE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGjG,oCAAoC;AACpC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAQzE,qDAAqD;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYlD,gCAAgC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqB9D,4DAA4D;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,gEAAgE;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,kEAAkE;AAClE,cAAc,SAAS,CAAC;AAExB,4EAA4E;AAC5E,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,8CAA8C;AAC9C,cAAc,SAAS,CAAC;AAExB,2CAA2C;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,iBAAiB;AACjB,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAElF,iDAAiD;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,wBAAwB;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,oCAAoC;AACpC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG3G,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,4EAA4E;AAC5E,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE3F,iEAAiE;AACjE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGjG,oCAAoC;AACpC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAQzE,qDAAqD;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAYlD,gCAAgC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqB9D,4DAA4D;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAGtF,gEAAgE;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,kEAAkE;AAClE,cAAc,SAAS,CAAC;AAExB,4EAA4E;AAC5E,OAAO,EACL,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAuBpB,oDAAoD;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAa9D,8BAA8B;AAC9B,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAO9F,wDAAwD;AACxD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC"}
|
package/dist/workflow/index.d.ts
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export type { WorkflowTemplate, WorkflowScenario, WorkflowMode, ScenarioCondition, ScenarioTemplate, Assertion, FlowDirective, LogTemplates, FormattingOptions, OtelEvent, OtelSignal, WorkflowContext, WorkflowResult, ScenarioMatchResult, SpanTreeNode, } from './types';
|
|
9
9
|
export { selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue } from './scenario-matcher';
|
|
10
|
-
export { parseTemplate } from './template-parser';
|
|
10
|
+
export { parseTemplate, ParsedTemplate } from './template-parser';
|
|
11
|
+
export type { TemplateSegment } from './template-parser';
|
|
11
12
|
export { renderWorkflow } from './template-renderer';
|
|
12
13
|
export type { WorkflowValidationContext, WorkflowViolation, WorkflowValidationResult, } from './validator';
|
|
13
14
|
export { WorkflowValidator, createWorkflowValidator } from './validator';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,YAAY,GACb,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAG9J,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,YAAY,GACb,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAG9J,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,YAAY,EACV,yBAAyB,EACzB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/workflow/index.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// Scenario Matching
|
|
9
9
|
export { selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue } from './scenario-matcher';
|
|
10
10
|
// Template Parsing
|
|
11
|
-
export { parseTemplate } from './template-parser';
|
|
11
|
+
export { parseTemplate, ParsedTemplate } from './template-parser';
|
|
12
12
|
// Template Rendering
|
|
13
13
|
export { renderWorkflow } from './template-renderer';
|
|
14
14
|
export { WorkflowValidator, createWorkflowValidator } from './validator';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE9J,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE9J,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGlE,qBAAqB;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQrD,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -8,12 +8,36 @@
|
|
|
8
8
|
* - Loops: {{#each items}}...{{/each}}
|
|
9
9
|
* - Comparison helpers: {{#if (eq a b)}}...{{/if}}
|
|
10
10
|
*/
|
|
11
|
+
/**
|
|
12
|
+
* Represents a segment in a parsed template
|
|
13
|
+
*/
|
|
14
|
+
export interface TemplateSegment {
|
|
15
|
+
/** Segment type: text (static) or variable (dynamic) */
|
|
16
|
+
type: 'text' | 'variable';
|
|
17
|
+
/** The rendered value (interpolated for variables, raw for text) */
|
|
18
|
+
value: string;
|
|
19
|
+
/** Original template variable name (e.g., "customer.name"), only for variables */
|
|
20
|
+
variableName?: string;
|
|
21
|
+
/** Whether the variable had data in the context, only for variables */
|
|
22
|
+
resolved?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Structured representation of a parsed template with metadata about variables
|
|
26
|
+
*/
|
|
27
|
+
export declare class ParsedTemplate {
|
|
28
|
+
readonly segments: TemplateSegment[];
|
|
29
|
+
constructor(segments: TemplateSegment[]);
|
|
30
|
+
/**
|
|
31
|
+
* Convert to flat string for backwards compatibility
|
|
32
|
+
*/
|
|
33
|
+
toString(): string;
|
|
34
|
+
}
|
|
11
35
|
/**
|
|
12
36
|
* Parse and evaluate a template string using Handlebars
|
|
13
37
|
*
|
|
14
38
|
* @param template - Template string with {{variables}}
|
|
15
39
|
* @param context - Data context for variable lookup
|
|
16
|
-
* @returns
|
|
40
|
+
* @returns ParsedTemplate with structured segments and variable metadata
|
|
17
41
|
*/
|
|
18
|
-
export declare function parseTemplate(template: string, context: Record<string, unknown>):
|
|
42
|
+
export declare function parseTemplate(template: string, context: Record<string, unknown>): ParsedTemplate;
|
|
19
43
|
//# sourceMappingURL=template-parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-parser.d.ts","sourceRoot":"","sources":["../../src/workflow/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,
|
|
1
|
+
{"version":3,"file":"template-parser.d.ts","sourceRoot":"","sources":["../../src/workflow/template-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAuBH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,cAAc;aACG,QAAQ,EAAE,eAAe,EAAE;gBAA3B,QAAQ,EAAE,eAAe,EAAE;IAEvD;;OAEG;IACH,QAAQ,IAAI,MAAM;CAGnB;AAoND;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAkBhG"}
|
|
@@ -27,20 +27,221 @@ Handlebars.registerHelper('or', (...args) => {
|
|
|
27
27
|
return values.some(Boolean);
|
|
28
28
|
});
|
|
29
29
|
Handlebars.registerHelper('not', (a) => !a);
|
|
30
|
+
/**
|
|
31
|
+
* Structured representation of a parsed template with metadata about variables
|
|
32
|
+
*/
|
|
33
|
+
export class ParsedTemplate {
|
|
34
|
+
constructor(segments) {
|
|
35
|
+
this.segments = segments;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Convert to flat string for backwards compatibility
|
|
39
|
+
*/
|
|
40
|
+
toString() {
|
|
41
|
+
return this.segments.map((seg) => seg.value).join('');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Extract variable references from a Handlebars AST node
|
|
46
|
+
*/
|
|
47
|
+
function extractVariables(node, variables = new Set()) {
|
|
48
|
+
if (node.type === 'MustacheStatement' || node.type === 'SubExpression') {
|
|
49
|
+
const mustache = node;
|
|
50
|
+
if (mustache.path.type === 'PathExpression') {
|
|
51
|
+
const pathExpr = mustache.path;
|
|
52
|
+
// Only track simple variable references, not helpers
|
|
53
|
+
if (pathExpr.data === false && !mustache.params?.length) {
|
|
54
|
+
variables.add(pathExpr.original);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Process parameters (they might contain variables)
|
|
58
|
+
if (mustache.params) {
|
|
59
|
+
mustache.params.forEach((param) => extractVariables(param, variables));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else if (node.type === 'PathExpression') {
|
|
63
|
+
const pathExpr = node;
|
|
64
|
+
if (pathExpr.data === false) {
|
|
65
|
+
variables.add(pathExpr.original);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else if (node.type === 'BlockStatement') {
|
|
69
|
+
const block = node;
|
|
70
|
+
if (block.program) {
|
|
71
|
+
extractVariables(block.program, variables);
|
|
72
|
+
}
|
|
73
|
+
if (block.inverse) {
|
|
74
|
+
extractVariables(block.inverse, variables);
|
|
75
|
+
}
|
|
76
|
+
// Process block parameters
|
|
77
|
+
if (block.params) {
|
|
78
|
+
block.params.forEach((param) => extractVariables(param, variables));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else if (node.type === 'Program') {
|
|
82
|
+
const program = node;
|
|
83
|
+
program.body.forEach((child) => extractVariables(child, variables));
|
|
84
|
+
}
|
|
85
|
+
else if (node.type === 'PartialStatement') {
|
|
86
|
+
const partial = node;
|
|
87
|
+
if (partial.params) {
|
|
88
|
+
partial.params.forEach((param) => extractVariables(param, variables));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return variables;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Resolve a variable path in a context object
|
|
95
|
+
* Returns [value, resolved] where resolved indicates if the path exists
|
|
96
|
+
*/
|
|
97
|
+
function resolveVariable(path, context) {
|
|
98
|
+
const parts = path.split('.');
|
|
99
|
+
let current = context;
|
|
100
|
+
for (const part of parts) {
|
|
101
|
+
if (current == null || typeof current !== 'object') {
|
|
102
|
+
return [undefined, false];
|
|
103
|
+
}
|
|
104
|
+
if (!(part in current)) {
|
|
105
|
+
return [undefined, false];
|
|
106
|
+
}
|
|
107
|
+
current = current[part];
|
|
108
|
+
}
|
|
109
|
+
return [current, true];
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Build segments from rendered output by identifying variable boundaries
|
|
113
|
+
*/
|
|
114
|
+
function buildSegments(template, rendered, context) {
|
|
115
|
+
const segments = [];
|
|
116
|
+
// Find all {{variable}} patterns in the rendered output (these are unresolved)
|
|
117
|
+
const unresolvedPattern = /\{\{([^}]+)\}\}/g;
|
|
118
|
+
const unresolvedMatches = Array.from(rendered.matchAll(unresolvedPattern));
|
|
119
|
+
if (unresolvedMatches.length === 0) {
|
|
120
|
+
// No unresolved variables, check if we have any variables at all
|
|
121
|
+
try {
|
|
122
|
+
const ast = Handlebars.parse(template);
|
|
123
|
+
const variables = extractVariables(ast);
|
|
124
|
+
if (variables.size === 0) {
|
|
125
|
+
// Pure text template
|
|
126
|
+
return [{ type: 'text', value: rendered }];
|
|
127
|
+
}
|
|
128
|
+
// All variables resolved - need to parse more carefully
|
|
129
|
+
// This is complex, so for MVP we'll use a simpler heuristic:
|
|
130
|
+
// Split by variable positions in the template and match to rendered output
|
|
131
|
+
return buildSegmentsWithResolvedVariables(template, rendered, context, variables);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// If parsing fails, return as text
|
|
135
|
+
return [{ type: 'text', value: rendered }];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Build segments with unresolved variables
|
|
139
|
+
let lastIndex = 0;
|
|
140
|
+
for (const match of unresolvedMatches) {
|
|
141
|
+
const beforeText = rendered.substring(lastIndex, match.index);
|
|
142
|
+
if (beforeText) {
|
|
143
|
+
segments.push({ type: 'text', value: beforeText });
|
|
144
|
+
}
|
|
145
|
+
segments.push({
|
|
146
|
+
type: 'variable',
|
|
147
|
+
value: match[0],
|
|
148
|
+
variableName: match[1].trim(),
|
|
149
|
+
resolved: false,
|
|
150
|
+
});
|
|
151
|
+
lastIndex = match.index + match[0].length;
|
|
152
|
+
}
|
|
153
|
+
// Add remaining text
|
|
154
|
+
if (lastIndex < rendered.length) {
|
|
155
|
+
segments.push({ type: 'text', value: rendered.substring(lastIndex) });
|
|
156
|
+
}
|
|
157
|
+
return segments;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Build segments when all variables are resolved
|
|
161
|
+
* This uses template analysis to identify variable positions
|
|
162
|
+
*/
|
|
163
|
+
function buildSegmentsWithResolvedVariables(template, rendered, context, variables) {
|
|
164
|
+
const segments = [];
|
|
165
|
+
// Find all variable positions in the template
|
|
166
|
+
const varPattern = /\{\{([^}]+)\}\}/g;
|
|
167
|
+
const templateMatches = Array.from(template.matchAll(varPattern));
|
|
168
|
+
if (templateMatches.length === 0) {
|
|
169
|
+
return [{ type: 'text', value: rendered }];
|
|
170
|
+
}
|
|
171
|
+
let templateIndex = 0;
|
|
172
|
+
let renderedIndex = 0;
|
|
173
|
+
for (const match of templateMatches) {
|
|
174
|
+
const varName = match[1].trim();
|
|
175
|
+
// Check if this is a helper or a simple variable
|
|
176
|
+
const isHelper = varName.startsWith('#') ||
|
|
177
|
+
varName.startsWith('/') ||
|
|
178
|
+
varName.startsWith('^') ||
|
|
179
|
+
varName.startsWith('>') ||
|
|
180
|
+
!variables.has(varName);
|
|
181
|
+
if (isHelper) {
|
|
182
|
+
continue; // Skip helpers for now
|
|
183
|
+
}
|
|
184
|
+
// Add text before this variable
|
|
185
|
+
const textBefore = template.substring(templateIndex, match.index);
|
|
186
|
+
if (textBefore && renderedIndex < rendered.length) {
|
|
187
|
+
const textLength = textBefore.length;
|
|
188
|
+
segments.push({ type: 'text', value: rendered.substring(renderedIndex, renderedIndex + textLength) });
|
|
189
|
+
renderedIndex += textLength;
|
|
190
|
+
}
|
|
191
|
+
// Resolve the variable
|
|
192
|
+
const [value, resolved] = resolveVariable(varName, context);
|
|
193
|
+
if (resolved && value !== undefined) {
|
|
194
|
+
const valueStr = String(value);
|
|
195
|
+
segments.push({
|
|
196
|
+
type: 'variable',
|
|
197
|
+
value: valueStr,
|
|
198
|
+
variableName: varName,
|
|
199
|
+
resolved: true,
|
|
200
|
+
});
|
|
201
|
+
renderedIndex += valueStr.length;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
// Unresolved - should appear as {{varName}} in output
|
|
205
|
+
const unresolvedStr = `{{${varName}}}`;
|
|
206
|
+
segments.push({
|
|
207
|
+
type: 'variable',
|
|
208
|
+
value: unresolvedStr,
|
|
209
|
+
variableName: varName,
|
|
210
|
+
resolved: false,
|
|
211
|
+
});
|
|
212
|
+
renderedIndex += unresolvedStr.length;
|
|
213
|
+
}
|
|
214
|
+
templateIndex = match.index + match[0].length;
|
|
215
|
+
}
|
|
216
|
+
// Add remaining text
|
|
217
|
+
if (renderedIndex < rendered.length) {
|
|
218
|
+
segments.push({ type: 'text', value: rendered.substring(renderedIndex) });
|
|
219
|
+
}
|
|
220
|
+
return segments;
|
|
221
|
+
}
|
|
30
222
|
/**
|
|
31
223
|
* Parse and evaluate a template string using Handlebars
|
|
32
224
|
*
|
|
33
225
|
* @param template - Template string with {{variables}}
|
|
34
226
|
* @param context - Data context for variable lookup
|
|
35
|
-
* @returns
|
|
227
|
+
* @returns ParsedTemplate with structured segments and variable metadata
|
|
36
228
|
*/
|
|
37
229
|
export function parseTemplate(template, context) {
|
|
38
230
|
try {
|
|
39
231
|
const handlebarTemplate = Handlebars.compile(template, { noEscape: true });
|
|
40
|
-
|
|
232
|
+
const rendered = handlebarTemplate(context);
|
|
233
|
+
// Build structured segments
|
|
234
|
+
const segments = buildSegments(template, rendered, context);
|
|
235
|
+
return new ParsedTemplate(segments);
|
|
41
236
|
}
|
|
42
237
|
catch (error) {
|
|
43
|
-
|
|
238
|
+
// Return error as a single text segment
|
|
239
|
+
return new ParsedTemplate([
|
|
240
|
+
{
|
|
241
|
+
type: 'text',
|
|
242
|
+
value: `{ERROR: Template parsing failed - ${error instanceof Error ? error.message : 'unknown'}}`,
|
|
243
|
+
},
|
|
244
|
+
]);
|
|
44
245
|
}
|
|
45
246
|
}
|
|
46
247
|
//# sourceMappingURL=template-parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-parser.js","sourceRoot":"","sources":["../../src/workflow/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;
|
|
1
|
+
{"version":3,"file":"template-parser.js","sourceRoot":"","sources":["../../src/workflow/template-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,7 +79,7 @@ function renderScenario(context) {
|
|
|
79
79
|
};
|
|
80
80
|
// Introduction
|
|
81
81
|
if (scenario.template.introduction) {
|
|
82
|
-
parts.push(parseTemplate(scenario.template.introduction, evalContext));
|
|
82
|
+
parts.push(parseTemplate(scenario.template.introduction, evalContext).toString());
|
|
83
83
|
parts.push(''); // Blank line
|
|
84
84
|
}
|
|
85
85
|
// Main content based on mode
|
|
@@ -102,7 +102,7 @@ function renderScenario(context) {
|
|
|
102
102
|
if (parts.length > 0) {
|
|
103
103
|
parts.push(''); // Blank line before summary
|
|
104
104
|
}
|
|
105
|
-
parts.push(parseTemplate(scenario.template.summary, evalContext));
|
|
105
|
+
parts.push(parseTemplate(scenario.template.summary, evalContext).toString());
|
|
106
106
|
}
|
|
107
107
|
return parts.join('\n');
|
|
108
108
|
}
|
|
@@ -145,12 +145,12 @@ function renderSpanTree(tree, scenario, context, formatting) {
|
|
|
145
145
|
eventContext.span = node.span;
|
|
146
146
|
// Render span
|
|
147
147
|
if (scenario.template.span) {
|
|
148
|
-
const spanText = parseTemplate(scenario.template.span, eventContext);
|
|
148
|
+
const spanText = parseTemplate(scenario.template.span, eventContext).toString();
|
|
149
149
|
parts.push(indent + spanText);
|
|
150
150
|
}
|
|
151
151
|
else if (scenario.template.events?.[node.span.name]) {
|
|
152
152
|
const eventTemplate = scenario.template.events[node.span.name];
|
|
153
|
-
const eventText = parseTemplate(eventTemplate, eventContext);
|
|
153
|
+
const eventText = parseTemplate(eventTemplate, eventContext).toString();
|
|
154
154
|
parts.push(indent + eventText);
|
|
155
155
|
}
|
|
156
156
|
else {
|
|
@@ -220,7 +220,7 @@ function renderTimeline(events, scenario, context, formatting) {
|
|
|
220
220
|
eventText = renderLog(event, scenario, { ...eventContext, log: event }, formatting);
|
|
221
221
|
}
|
|
222
222
|
else if (scenario.template.events?.[event.name]) {
|
|
223
|
-
eventText = parseTemplate(scenario.template.events[event.name], eventContext);
|
|
223
|
+
eventText = parseTemplate(scenario.template.events[event.name], eventContext).toString();
|
|
224
224
|
}
|
|
225
225
|
if (eventText) {
|
|
226
226
|
if (formatting.showTimestamps) {
|
|
@@ -249,12 +249,12 @@ function renderLog(log, scenario, context, _formatting) {
|
|
|
249
249
|
const severity = getSeverityLevel(log.severityNumber);
|
|
250
250
|
const logTemplate = scenario.template.logs[severity] || scenario.template.logs.default;
|
|
251
251
|
if (logTemplate) {
|
|
252
|
-
return parseTemplate(logTemplate, context);
|
|
252
|
+
return parseTemplate(logTemplate, context).toString();
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
255
|
// Check for event-specific template
|
|
256
256
|
if (scenario.template.events?.[`log.${log.severityText?.toLowerCase()}`]) {
|
|
257
|
-
return parseTemplate(scenario.template.events[`log.${log.severityText?.toLowerCase()}`], context);
|
|
257
|
+
return parseTemplate(scenario.template.events[`log.${log.severityText?.toLowerCase()}`], context).toString();
|
|
258
258
|
}
|
|
259
259
|
// Default log rendering
|
|
260
260
|
return `[${log.severityText || 'LOG'}] ${log.body}`;
|
|
@@ -292,7 +292,7 @@ function renderFlow(flow, context) {
|
|
|
292
292
|
for (const item of flow) {
|
|
293
293
|
if (typeof item === 'string') {
|
|
294
294
|
// Simple string template
|
|
295
|
-
parts.push(parseTemplate(item, context));
|
|
295
|
+
parts.push(parseTemplate(item, context).toString());
|
|
296
296
|
}
|
|
297
297
|
else {
|
|
298
298
|
// Flow directive
|
|
@@ -307,21 +307,21 @@ function renderFlow(flow, context) {
|
|
|
307
307
|
...(typeof collectionItem === 'object' && collectionItem !== null ? collectionItem : {}),
|
|
308
308
|
index: i,
|
|
309
309
|
};
|
|
310
|
-
parts.push(parseTemplate(item.template, itemContext));
|
|
310
|
+
parts.push(parseTemplate(item.template, itemContext).toString());
|
|
311
311
|
}
|
|
312
312
|
}
|
|
313
313
|
}
|
|
314
314
|
else if (item.if) {
|
|
315
315
|
// Conditional
|
|
316
|
-
const condition = parseTemplate(item.if, context);
|
|
316
|
+
const condition = parseTemplate(item.if, context).toString();
|
|
317
317
|
if (condition === 'true' || condition === '1') {
|
|
318
318
|
if (item.then) {
|
|
319
|
-
parts.push(parseTemplate(item.then, context));
|
|
319
|
+
parts.push(parseTemplate(item.then, context).toString());
|
|
320
320
|
}
|
|
321
321
|
}
|
|
322
322
|
else {
|
|
323
323
|
if (item.else) {
|
|
324
|
-
parts.push(parseTemplate(item.else, context));
|
|
324
|
+
parts.push(parseTemplate(item.else, context).toString());
|
|
325
325
|
}
|
|
326
326
|
}
|
|
327
327
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/workflow/template-renderer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/workflow/template-renderer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -57,7 +57,8 @@ export type { YamlParseResult } from './utils/YamlParser';
|
|
|
57
57
|
// Export workflow template system (browser-safe)
|
|
58
58
|
// Import directly from files to avoid pulling in Node.js validator
|
|
59
59
|
export { renderWorkflow } from './workflow/template-renderer';
|
|
60
|
-
export { parseTemplate } from './workflow/template-parser';
|
|
60
|
+
export { parseTemplate, ParsedTemplate } from './workflow/template-parser';
|
|
61
|
+
export type { TemplateSegment } from './workflow/template-parser';
|
|
61
62
|
export {
|
|
62
63
|
selectScenario,
|
|
63
64
|
matchesCondition,
|
package/src/node.ts
CHANGED
|
@@ -122,6 +122,7 @@ export * from './rules';
|
|
|
122
122
|
export {
|
|
123
123
|
renderWorkflow,
|
|
124
124
|
parseTemplate,
|
|
125
|
+
ParsedTemplate,
|
|
125
126
|
selectScenario,
|
|
126
127
|
matchesCondition,
|
|
127
128
|
hasEventMatching,
|
|
@@ -133,6 +134,7 @@ export {
|
|
|
133
134
|
WorkflowValidator,
|
|
134
135
|
} from './workflow';
|
|
135
136
|
export type {
|
|
137
|
+
TemplateSegment,
|
|
136
138
|
WorkflowTemplate,
|
|
137
139
|
WorkflowScenario,
|
|
138
140
|
WorkflowMode,
|
|
@@ -13,62 +13,162 @@ describe('parseTemplate', () => {
|
|
|
13
13
|
agents: { count: 2 },
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
'Config has
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
'✅ Installed
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
16
|
+
describe('backwards compatibility (toString)', () => {
|
|
17
|
+
it('should parse simple property substitution', () => {
|
|
18
|
+
expect(parseTemplate('Found {{result.nodes.count}} nodes', context).toString()).toBe('Found 12 nodes');
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('should parse multiple substitutions', () => {
|
|
22
|
+
expect(parseTemplate('Config has {{config.nodeTypes}} node types and {{config.edgeTypes}} edge types', context).toString()).toBe(
|
|
23
|
+
'Config has 5 node types and 3 edge types'
|
|
24
|
+
);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('should parse nested properties', () => {
|
|
28
|
+
expect(parseTemplate('Total violations: {{result.violations.total}}', context).toString()).toBe('Total violations: 3');
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('should handle realistic workflow templates', () => {
|
|
32
|
+
expect(parseTemplate('✅ Installed {{skills.installed}} skill(s) to {{agents.count}} agent(s)', context).toString()).toBe(
|
|
33
|
+
'✅ Installed 2 skill(s) to 2 agent(s)'
|
|
34
|
+
);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('should leave non-expression text unchanged', () => {
|
|
38
|
+
expect(parseTemplate('This is plain text', context).toString()).toBe('This is plain text');
|
|
39
|
+
expect(parseTemplate('No substitutions here!', context).toString()).toBe('No substitutions here!');
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('should handle missing properties gracefully', () => {
|
|
43
|
+
expect(parseTemplate('Value: {{missing.property}}', context).toString()).toBe('Value: {{missing.property}}');
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('should format multiline workflow', () => {
|
|
47
|
+
const template = `✅ Conversion Complete
|
|
47
48
|
|
|
48
49
|
Processed {{config.nodeTypes}} node types
|
|
49
50
|
Generated {{result.nodes.count}} nodes in {{duration.ms}}ms
|
|
50
51
|
|
|
51
52
|
Found {{result.violations.total}} violations`;
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
const expected = `✅ Conversion Complete
|
|
54
55
|
|
|
55
56
|
Processed 5 node types
|
|
56
57
|
Generated 12 nodes in 45ms
|
|
57
58
|
|
|
58
59
|
Found 3 violations`;
|
|
59
60
|
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
expect(parseTemplate(template, context).toString()).toBe(expected);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('should handle Handlebars conditionals', () => {
|
|
65
|
+
const template = '{{#if result.violations.total}}Has violations{{else}}No violations{{/if}}';
|
|
66
|
+
expect(parseTemplate(template, context).toString()).toBe('Has violations');
|
|
67
|
+
});
|
|
62
68
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
69
|
+
it('should handle Handlebars comparison helpers', () => {
|
|
70
|
+
const contextZero = { ...context, result: { ...context.result, violations: { total: 0 } } };
|
|
71
|
+
const template = '{{#if result.violations.total}}❌ FAILED{{else}}✅ PASSED{{/if}}';
|
|
72
|
+
expect(parseTemplate(template, context).toString()).toBe('❌ FAILED');
|
|
73
|
+
expect(parseTemplate(template, contextZero).toString()).toBe('✅ PASSED');
|
|
74
|
+
});
|
|
66
75
|
});
|
|
67
76
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
77
|
+
describe('structured segments', () => {
|
|
78
|
+
it('should return ParsedTemplate with segments', () => {
|
|
79
|
+
const result = parseTemplate('Found {{result.nodes.count}} nodes', context);
|
|
80
|
+
expect(result.segments).toBeDefined();
|
|
81
|
+
expect(Array.isArray(result.segments)).toBe(true);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it('should identify text segments', () => {
|
|
85
|
+
const result = parseTemplate('This is plain text', context);
|
|
86
|
+
expect(result.segments).toHaveLength(1);
|
|
87
|
+
expect(result.segments[0]).toEqual({
|
|
88
|
+
type: 'text',
|
|
89
|
+
value: 'This is plain text',
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it('should identify resolved variable segments', () => {
|
|
94
|
+
const result = parseTemplate('Found {{result.nodes.count}} nodes', context);
|
|
95
|
+
expect(result.segments).toHaveLength(3);
|
|
96
|
+
|
|
97
|
+
expect(result.segments[0]).toEqual({
|
|
98
|
+
type: 'text',
|
|
99
|
+
value: 'Found ',
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
expect(result.segments[1]).toEqual({
|
|
103
|
+
type: 'variable',
|
|
104
|
+
value: '12',
|
|
105
|
+
variableName: 'result.nodes.count',
|
|
106
|
+
resolved: true,
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
expect(result.segments[2]).toEqual({
|
|
110
|
+
type: 'text',
|
|
111
|
+
value: ' nodes',
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('should identify unresolved variable segments', () => {
|
|
116
|
+
const result = parseTemplate('Value: {{missing.property}}', context);
|
|
117
|
+
expect(result.segments).toHaveLength(2);
|
|
118
|
+
|
|
119
|
+
expect(result.segments[0]).toEqual({
|
|
120
|
+
type: 'text',
|
|
121
|
+
value: 'Value: ',
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
expect(result.segments[1]).toEqual({
|
|
125
|
+
type: 'variable',
|
|
126
|
+
value: '{{missing.property}}',
|
|
127
|
+
variableName: 'missing.property',
|
|
128
|
+
resolved: false,
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it('should handle mixed resolved and unresolved variables', () => {
|
|
133
|
+
const result = parseTemplate('Count: {{result.nodes.count}}, Missing: {{missing.value}}', context);
|
|
134
|
+
|
|
135
|
+
expect(result.segments).toHaveLength(4);
|
|
136
|
+
expect(result.segments[0]).toMatchObject({
|
|
137
|
+
type: 'text',
|
|
138
|
+
value: 'Count: ',
|
|
139
|
+
});
|
|
140
|
+
expect(result.segments[1]).toMatchObject({
|
|
141
|
+
type: 'variable',
|
|
142
|
+
variableName: 'result.nodes.count',
|
|
143
|
+
resolved: true,
|
|
144
|
+
});
|
|
145
|
+
expect(result.segments[2]).toMatchObject({
|
|
146
|
+
type: 'text',
|
|
147
|
+
value: ', Missing: ',
|
|
148
|
+
});
|
|
149
|
+
expect(result.segments[3]).toMatchObject({
|
|
150
|
+
type: 'variable',
|
|
151
|
+
variableName: 'missing.value',
|
|
152
|
+
resolved: false,
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
it('should handle multiple resolved variables', () => {
|
|
157
|
+
const result = parseTemplate('{{config.nodeTypes}} nodes, {{config.edgeTypes}} edges', context);
|
|
158
|
+
|
|
159
|
+
expect(result.segments).toHaveLength(4);
|
|
160
|
+
expect(result.segments[0]).toMatchObject({
|
|
161
|
+
type: 'variable',
|
|
162
|
+
value: '5',
|
|
163
|
+
variableName: 'config.nodeTypes',
|
|
164
|
+
resolved: true,
|
|
165
|
+
});
|
|
166
|
+
expect(result.segments[2]).toMatchObject({
|
|
167
|
+
type: 'variable',
|
|
168
|
+
value: '3',
|
|
169
|
+
variableName: 'config.edgeTypes',
|
|
170
|
+
resolved: true,
|
|
171
|
+
});
|
|
172
|
+
});
|
|
73
173
|
});
|
|
74
174
|
});
|
package/src/workflow/index.ts
CHANGED
|
@@ -29,7 +29,8 @@ export type {
|
|
|
29
29
|
export { selectScenario, matchesCondition, hasEventMatching, computeAggregates, evaluateAssertion, getNestedValue, setNestedValue } from './scenario-matcher';
|
|
30
30
|
|
|
31
31
|
// Template Parsing
|
|
32
|
-
export { parseTemplate } from './template-parser';
|
|
32
|
+
export { parseTemplate, ParsedTemplate } from './template-parser';
|
|
33
|
+
export type { TemplateSegment } from './template-parser';
|
|
33
34
|
|
|
34
35
|
// Template Rendering
|
|
35
36
|
export { renderWorkflow } from './template-renderer';
|
|
@@ -30,19 +30,267 @@ Handlebars.registerHelper('or', (...args) => {
|
|
|
30
30
|
});
|
|
31
31
|
Handlebars.registerHelper('not', (a) => !a);
|
|
32
32
|
|
|
33
|
+
/**
|
|
34
|
+
* Represents a segment in a parsed template
|
|
35
|
+
*/
|
|
36
|
+
export interface TemplateSegment {
|
|
37
|
+
/** Segment type: text (static) or variable (dynamic) */
|
|
38
|
+
type: 'text' | 'variable';
|
|
39
|
+
/** The rendered value (interpolated for variables, raw for text) */
|
|
40
|
+
value: string;
|
|
41
|
+
/** Original template variable name (e.g., "customer.name"), only for variables */
|
|
42
|
+
variableName?: string;
|
|
43
|
+
/** Whether the variable had data in the context, only for variables */
|
|
44
|
+
resolved?: boolean;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Structured representation of a parsed template with metadata about variables
|
|
49
|
+
*/
|
|
50
|
+
export class ParsedTemplate {
|
|
51
|
+
constructor(public readonly segments: TemplateSegment[]) {}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Convert to flat string for backwards compatibility
|
|
55
|
+
*/
|
|
56
|
+
toString(): string {
|
|
57
|
+
return this.segments.map((seg) => seg.value).join('');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Extract variable references from a Handlebars AST node
|
|
63
|
+
*/
|
|
64
|
+
function extractVariables(node: hbs.AST.Node, variables: Set<string> = new Set()): Set<string> {
|
|
65
|
+
if (node.type === 'MustacheStatement' || node.type === 'SubExpression') {
|
|
66
|
+
const mustache = node as hbs.AST.MustacheStatement | hbs.AST.SubExpression;
|
|
67
|
+
if (mustache.path.type === 'PathExpression') {
|
|
68
|
+
const pathExpr = mustache.path as hbs.AST.PathExpression;
|
|
69
|
+
// Only track simple variable references, not helpers
|
|
70
|
+
if (pathExpr.data === false && !mustache.params?.length) {
|
|
71
|
+
variables.add(pathExpr.original);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Process parameters (they might contain variables)
|
|
75
|
+
if (mustache.params) {
|
|
76
|
+
mustache.params.forEach((param) => extractVariables(param, variables));
|
|
77
|
+
}
|
|
78
|
+
} else if (node.type === 'PathExpression') {
|
|
79
|
+
const pathExpr = node as hbs.AST.PathExpression;
|
|
80
|
+
if (pathExpr.data === false) {
|
|
81
|
+
variables.add(pathExpr.original);
|
|
82
|
+
}
|
|
83
|
+
} else if (node.type === 'BlockStatement') {
|
|
84
|
+
const block = node as hbs.AST.BlockStatement;
|
|
85
|
+
if (block.program) {
|
|
86
|
+
extractVariables(block.program, variables);
|
|
87
|
+
}
|
|
88
|
+
if (block.inverse) {
|
|
89
|
+
extractVariables(block.inverse, variables);
|
|
90
|
+
}
|
|
91
|
+
// Process block parameters
|
|
92
|
+
if (block.params) {
|
|
93
|
+
block.params.forEach((param) => extractVariables(param, variables));
|
|
94
|
+
}
|
|
95
|
+
} else if (node.type === 'Program') {
|
|
96
|
+
const program = node as hbs.AST.Program;
|
|
97
|
+
program.body.forEach((child) => extractVariables(child, variables));
|
|
98
|
+
} else if (node.type === 'PartialStatement') {
|
|
99
|
+
const partial = node as hbs.AST.PartialStatement;
|
|
100
|
+
if (partial.params) {
|
|
101
|
+
partial.params.forEach((param) => extractVariables(param, variables));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return variables;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Resolve a variable path in a context object
|
|
110
|
+
* Returns [value, resolved] where resolved indicates if the path exists
|
|
111
|
+
*/
|
|
112
|
+
function resolveVariable(path: string, context: Record<string, unknown>): [unknown, boolean] {
|
|
113
|
+
const parts = path.split('.');
|
|
114
|
+
let current: any = context;
|
|
115
|
+
|
|
116
|
+
for (const part of parts) {
|
|
117
|
+
if (current == null || typeof current !== 'object') {
|
|
118
|
+
return [undefined, false];
|
|
119
|
+
}
|
|
120
|
+
if (!(part in current)) {
|
|
121
|
+
return [undefined, false];
|
|
122
|
+
}
|
|
123
|
+
current = current[part];
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return [current, true];
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Build segments from rendered output by identifying variable boundaries
|
|
131
|
+
*/
|
|
132
|
+
function buildSegments(
|
|
133
|
+
template: string,
|
|
134
|
+
rendered: string,
|
|
135
|
+
context: Record<string, unknown>
|
|
136
|
+
): TemplateSegment[] {
|
|
137
|
+
const segments: TemplateSegment[] = [];
|
|
138
|
+
|
|
139
|
+
// Find all {{variable}} patterns in the rendered output (these are unresolved)
|
|
140
|
+
const unresolvedPattern = /\{\{([^}]+)\}\}/g;
|
|
141
|
+
const unresolvedMatches = Array.from(rendered.matchAll(unresolvedPattern));
|
|
142
|
+
|
|
143
|
+
if (unresolvedMatches.length === 0) {
|
|
144
|
+
// No unresolved variables, check if we have any variables at all
|
|
145
|
+
try {
|
|
146
|
+
const ast = Handlebars.parse(template);
|
|
147
|
+
const variables = extractVariables(ast);
|
|
148
|
+
|
|
149
|
+
if (variables.size === 0) {
|
|
150
|
+
// Pure text template
|
|
151
|
+
return [{ type: 'text', value: rendered }];
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// All variables resolved - need to parse more carefully
|
|
155
|
+
// This is complex, so for MVP we'll use a simpler heuristic:
|
|
156
|
+
// Split by variable positions in the template and match to rendered output
|
|
157
|
+
return buildSegmentsWithResolvedVariables(template, rendered, context, variables);
|
|
158
|
+
} catch {
|
|
159
|
+
// If parsing fails, return as text
|
|
160
|
+
return [{ type: 'text', value: rendered }];
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Build segments with unresolved variables
|
|
165
|
+
let lastIndex = 0;
|
|
166
|
+
|
|
167
|
+
for (const match of unresolvedMatches) {
|
|
168
|
+
const beforeText = rendered.substring(lastIndex, match.index);
|
|
169
|
+
if (beforeText) {
|
|
170
|
+
segments.push({ type: 'text', value: beforeText });
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
segments.push({
|
|
174
|
+
type: 'variable',
|
|
175
|
+
value: match[0],
|
|
176
|
+
variableName: match[1].trim(),
|
|
177
|
+
resolved: false,
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
lastIndex = match.index! + match[0].length;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Add remaining text
|
|
184
|
+
if (lastIndex < rendered.length) {
|
|
185
|
+
segments.push({ type: 'text', value: rendered.substring(lastIndex) });
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return segments;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Build segments when all variables are resolved
|
|
193
|
+
* This uses template analysis to identify variable positions
|
|
194
|
+
*/
|
|
195
|
+
function buildSegmentsWithResolvedVariables(
|
|
196
|
+
template: string,
|
|
197
|
+
rendered: string,
|
|
198
|
+
context: Record<string, unknown>,
|
|
199
|
+
variables: Set<string>
|
|
200
|
+
): TemplateSegment[] {
|
|
201
|
+
const segments: TemplateSegment[] = [];
|
|
202
|
+
|
|
203
|
+
// Find all variable positions in the template
|
|
204
|
+
const varPattern = /\{\{([^}]+)\}\}/g;
|
|
205
|
+
const templateMatches = Array.from(template.matchAll(varPattern));
|
|
206
|
+
|
|
207
|
+
if (templateMatches.length === 0) {
|
|
208
|
+
return [{ type: 'text', value: rendered }];
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
let templateIndex = 0;
|
|
212
|
+
let renderedIndex = 0;
|
|
213
|
+
|
|
214
|
+
for (const match of templateMatches) {
|
|
215
|
+
const varName = match[1].trim();
|
|
216
|
+
|
|
217
|
+
// Check if this is a helper or a simple variable
|
|
218
|
+
const isHelper = varName.startsWith('#') ||
|
|
219
|
+
varName.startsWith('/') ||
|
|
220
|
+
varName.startsWith('^') ||
|
|
221
|
+
varName.startsWith('>') ||
|
|
222
|
+
!variables.has(varName);
|
|
223
|
+
|
|
224
|
+
if (isHelper) {
|
|
225
|
+
continue; // Skip helpers for now
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// Add text before this variable
|
|
229
|
+
const textBefore = template.substring(templateIndex, match.index);
|
|
230
|
+
if (textBefore && renderedIndex < rendered.length) {
|
|
231
|
+
const textLength = textBefore.length;
|
|
232
|
+
segments.push({ type: 'text', value: rendered.substring(renderedIndex, renderedIndex + textLength) });
|
|
233
|
+
renderedIndex += textLength;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Resolve the variable
|
|
237
|
+
const [value, resolved] = resolveVariable(varName, context);
|
|
238
|
+
|
|
239
|
+
if (resolved && value !== undefined) {
|
|
240
|
+
const valueStr = String(value);
|
|
241
|
+
segments.push({
|
|
242
|
+
type: 'variable',
|
|
243
|
+
value: valueStr,
|
|
244
|
+
variableName: varName,
|
|
245
|
+
resolved: true,
|
|
246
|
+
});
|
|
247
|
+
renderedIndex += valueStr.length;
|
|
248
|
+
} else {
|
|
249
|
+
// Unresolved - should appear as {{varName}} in output
|
|
250
|
+
const unresolvedStr = `{{${varName}}}`;
|
|
251
|
+
segments.push({
|
|
252
|
+
type: 'variable',
|
|
253
|
+
value: unresolvedStr,
|
|
254
|
+
variableName: varName,
|
|
255
|
+
resolved: false,
|
|
256
|
+
});
|
|
257
|
+
renderedIndex += unresolvedStr.length;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
templateIndex = match.index! + match[0].length;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Add remaining text
|
|
264
|
+
if (renderedIndex < rendered.length) {
|
|
265
|
+
segments.push({ type: 'text', value: rendered.substring(renderedIndex) });
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return segments;
|
|
269
|
+
}
|
|
270
|
+
|
|
33
271
|
/**
|
|
34
272
|
* Parse and evaluate a template string using Handlebars
|
|
35
273
|
*
|
|
36
274
|
* @param template - Template string with {{variables}}
|
|
37
275
|
* @param context - Data context for variable lookup
|
|
38
|
-
* @returns
|
|
276
|
+
* @returns ParsedTemplate with structured segments and variable metadata
|
|
39
277
|
*/
|
|
40
|
-
export function parseTemplate(template: string, context: Record<string, unknown>):
|
|
278
|
+
export function parseTemplate(template: string, context: Record<string, unknown>): ParsedTemplate {
|
|
41
279
|
try {
|
|
42
280
|
const handlebarTemplate = Handlebars.compile(template, { noEscape: true });
|
|
43
|
-
|
|
281
|
+
const rendered = handlebarTemplate(context);
|
|
282
|
+
|
|
283
|
+
// Build structured segments
|
|
284
|
+
const segments = buildSegments(template, rendered, context);
|
|
285
|
+
|
|
286
|
+
return new ParsedTemplate(segments);
|
|
44
287
|
} catch (error) {
|
|
45
|
-
|
|
288
|
+
// Return error as a single text segment
|
|
289
|
+
return new ParsedTemplate([
|
|
290
|
+
{
|
|
291
|
+
type: 'text',
|
|
292
|
+
value: `{ERROR: Template parsing failed - ${error instanceof Error ? error.message : 'unknown'}}`,
|
|
293
|
+
},
|
|
294
|
+
]);
|
|
46
295
|
}
|
|
47
296
|
}
|
|
48
|
-
|
|
@@ -101,7 +101,7 @@ function renderScenario(context: WorkflowContext): string {
|
|
|
101
101
|
|
|
102
102
|
// Introduction
|
|
103
103
|
if (scenario.template.introduction) {
|
|
104
|
-
parts.push(parseTemplate(scenario.template.introduction, evalContext));
|
|
104
|
+
parts.push(parseTemplate(scenario.template.introduction, evalContext).toString());
|
|
105
105
|
parts.push(''); // Blank line
|
|
106
106
|
}
|
|
107
107
|
|
|
@@ -128,7 +128,7 @@ function renderScenario(context: WorkflowContext): string {
|
|
|
128
128
|
if (parts.length > 0) {
|
|
129
129
|
parts.push(''); // Blank line before summary
|
|
130
130
|
}
|
|
131
|
-
parts.push(parseTemplate(scenario.template.summary, evalContext));
|
|
131
|
+
parts.push(parseTemplate(scenario.template.summary, evalContext).toString());
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
return parts.join('\n');
|
|
@@ -182,11 +182,11 @@ function renderSpanTree(
|
|
|
182
182
|
|
|
183
183
|
// Render span
|
|
184
184
|
if (scenario.template.span) {
|
|
185
|
-
const spanText = parseTemplate(scenario.template.span, eventContext);
|
|
185
|
+
const spanText = parseTemplate(scenario.template.span, eventContext).toString();
|
|
186
186
|
parts.push(indent + spanText);
|
|
187
187
|
} else if (scenario.template.events?.[node.span.name]) {
|
|
188
188
|
const eventTemplate = scenario.template.events[node.span.name];
|
|
189
|
-
const eventText = parseTemplate(eventTemplate, eventContext);
|
|
189
|
+
const eventText = parseTemplate(eventTemplate, eventContext).toString();
|
|
190
190
|
parts.push(indent + eventText);
|
|
191
191
|
} else {
|
|
192
192
|
// Default span rendering
|
|
@@ -267,7 +267,7 @@ function renderTimeline(
|
|
|
267
267
|
if (event.type === 'log') {
|
|
268
268
|
eventText = renderLog(event, scenario, { ...eventContext, log: event }, formatting);
|
|
269
269
|
} else if (scenario.template.events?.[event.name]) {
|
|
270
|
-
eventText = parseTemplate(scenario.template.events[event.name], eventContext);
|
|
270
|
+
eventText = parseTemplate(scenario.template.events[event.name], eventContext).toString();
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
if (eventText) {
|
|
@@ -303,13 +303,13 @@ function renderLog(
|
|
|
303
303
|
const severity = getSeverityLevel(log.severityNumber);
|
|
304
304
|
const logTemplate = scenario.template.logs[severity] || scenario.template.logs.default;
|
|
305
305
|
if (logTemplate) {
|
|
306
|
-
return parseTemplate(logTemplate, context);
|
|
306
|
+
return parseTemplate(logTemplate, context).toString();
|
|
307
307
|
}
|
|
308
308
|
}
|
|
309
309
|
|
|
310
310
|
// Check for event-specific template
|
|
311
311
|
if (scenario.template.events?.[`log.${log.severityText?.toLowerCase()}`]) {
|
|
312
|
-
return parseTemplate(scenario.template.events[`log.${log.severityText?.toLowerCase()}`], context);
|
|
312
|
+
return parseTemplate(scenario.template.events[`log.${log.severityText?.toLowerCase()}`], context).toString();
|
|
313
313
|
}
|
|
314
314
|
|
|
315
315
|
// Default log rendering
|
|
@@ -345,7 +345,7 @@ function renderFlow(flow: Array<string | FlowDirective>, context: Record<string,
|
|
|
345
345
|
for (const item of flow) {
|
|
346
346
|
if (typeof item === 'string') {
|
|
347
347
|
// Simple string template
|
|
348
|
-
parts.push(parseTemplate(item, context));
|
|
348
|
+
parts.push(parseTemplate(item, context).toString());
|
|
349
349
|
} else {
|
|
350
350
|
// Flow directive
|
|
351
351
|
if (item.forEach && item.template) {
|
|
@@ -359,19 +359,19 @@ function renderFlow(flow: Array<string | FlowDirective>, context: Record<string,
|
|
|
359
359
|
...(typeof collectionItem === 'object' && collectionItem !== null ? (collectionItem as Record<string, unknown>) : {}),
|
|
360
360
|
index: i,
|
|
361
361
|
};
|
|
362
|
-
parts.push(parseTemplate(item.template, itemContext));
|
|
362
|
+
parts.push(parseTemplate(item.template, itemContext).toString());
|
|
363
363
|
}
|
|
364
364
|
}
|
|
365
365
|
} else if (item.if) {
|
|
366
366
|
// Conditional
|
|
367
|
-
const condition = parseTemplate(item.if, context);
|
|
367
|
+
const condition = parseTemplate(item.if, context).toString();
|
|
368
368
|
if (condition === 'true' || condition === '1') {
|
|
369
369
|
if (item.then) {
|
|
370
|
-
parts.push(parseTemplate(item.then, context));
|
|
370
|
+
parts.push(parseTemplate(item.then, context).toString());
|
|
371
371
|
}
|
|
372
372
|
} else {
|
|
373
373
|
if (item.else) {
|
|
374
|
-
parts.push(parseTemplate(item.else, context));
|
|
374
|
+
parts.push(parseTemplate(item.else, context).toString());
|
|
375
375
|
}
|
|
376
376
|
}
|
|
377
377
|
}
|