Skip to content

Conversation

@Shubh-Raj
Copy link

Description

Add compile-time type checking for optional properties in TemplateMark templates. When an optional property is used without a guard ({{#optional}}, {{#if}}, or {{#with}}), the type-checker now throws an error at compile time instead of causing a runtime failure.

Before: Runtime error - "No values found for path '$['last']'"
After: Compile-time error - "Optional properties used without guards: last"

Changes

  • Added validation in checkTypes() to detect unguarded optional property access
  • Uses path-based scoping so guards only apply to descendant nodes
  • Throws proper Error object with .errors property for structured access
  • Added test case test/templates/bad/optional-noguard/

Testing

All 26 TemplateMarkInterpreter tests pass. All 33 snapshots pass.

Related Issues

Fixes accordproject/template-playground#11

@Shubh-Raj Shubh-Raj force-pushed the shubh-raj/fix/optional-property-typechecking branch from cb71565 to dd49484 Compare January 2, 2026 06:09
@mttrbrts mttrbrts requested review from Copilot and dselman and removed request for Copilot January 8, 2026 11:14
if (OPTIONAL_DEFINITION_RE.test(node.$class) ||
CONDITIONAL_DEFINITION_RE.test(node.$class) ||
WITH_DEFINITION_RE.test(node.$class)) {
if (node.name) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Under what scenario does a node not have a name property? If there is no scenario, and we have checks elsewhere, let's remove this condition.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right — there's no such scenario. name is a required field on IElementDefinition, which IOptionalDefinition, IConditionalDefinition, and IWithDefinition all extend. Removed the unnecessary check in 3f9a552.

Signed-off-by: Shubh-Raj <shubhraj625@gmail.com>
@Shubh-Raj Shubh-Raj force-pushed the shubh-raj/fix/optional-property-typechecking branch from dd49484 to 3f9a552 Compare January 8, 2026 13:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Type checker doesn't detect usage of optional properties

2 participants