Skip to content

Add support for all RWZ rule element types from the spec#2

Closed
YatinAdityaT wants to merge 1 commit into
asklar:mainfrom
YatinAdityaT:add-missing-rule-elements
Closed

Add support for all RWZ rule element types from the spec#2
YatinAdityaT wants to merge 1 commit into
asklar:mainfrom
YatinAdityaT:add-missing-rule-elements

Conversation

@YatinAdityaT
Copy link
Copy Markdown

Summary

  • Add support for ~60 rule element types (up from ~15), covering all conditions, actions, and exceptions from the OutlookRulesReader spec. The original parser would crash on most real-world .rwz files due to unrecognized element IDs.
  • Add 8 new data parser classes for element payloads: ImportanceRuleElementData, SensitivityRuleElementData, CategoriesListRuleElementData, PathRuleElementData, OnThisComputerOnlyRuleElementData, SizeInSpecificRangeRuleElementData, DisplayMessageRuleElementData, DeferDeliveryRuleElementData.
  • Accept input/output file paths as CLI arguments (node index.js <input.rwz> [output.json]) instead of hardcoded C:/Temp/Untitled.rwz.
  • Improve error messages for unknown element types to display the hex ID.

Motivation

Tested against a real-world Outlook 2019 .rwz export with 86 rules. The original parser failed immediately on element 0x14C (mark as read). After this change, all 86 rules parse successfully.

Test plan

  • Verified parsing of an Outlook 2019 .rwz file with 86 rules containing diverse conditions, actions, and exceptions
  • Confirmed output JSON contains all rules with correct structure
  • Could benefit from unit tests with sample .rwz fixtures in the future

The original parser only handled ~15 rule element IDs and would crash
on most real-world .rwz files. This adds support for ~60 element types
covering all conditions, actions, and exceptions documented in the
OutlookRulesReader spec by @hughbe.

Changes:
- Add 8 new data parser classes: ImportanceRuleElementData,
  SensitivityRuleElementData, CategoriesListRuleElementData,
  PathRuleElementData, OnThisComputerOnlyRuleElementData,
  SizeInSpecificRangeRuleElementData, DisplayMessageRuleElementData,
  DeferDeliveryRuleElementData
- Expand the RuleElement switch from 15 to 60+ element IDs
- Accept input/output paths as CLI arguments instead of hardcoded paths
- Improve error message for unknown element types to show hex ID
@asklar
Copy link
Copy Markdown
Owner

asklar commented May 12, 2026

Closing this PR as its changes are subsumed by PR #1 which has been merged. PR #1 covers all element types from this PR plus ~20 additional ones, with bug fixes (softAssert, separator logic, FlaggedForAction fix). The CLI improvements from this PR (output path arg, usage message) will be applied separately on top of main.

@asklar asklar closed this May 12, 2026
asklar added a commit that referenced this pull request May 12, 2026
- Agentify: add copilot-setup-steps.yml and copilot-instructions.md
- CLI: accept input/output file paths as arguments (not hardcoded)
- Port PR #2's unique element IDs (0xee, 0xef, 0xf1, 0xf5) into merged PR #1
- Security: remove fs.writeFileSync side effect from RulesFile.parse()
- Security: throw on unknown element IDs instead of guessing
- Security: add bounds check to readBytes()
- Modernize: clean tsconfig.json (ES2022, nodenext module)
- Modernize: update typescript and @types/node to latest
- Modernize: remove tsc shim package, remove yarn.lock
- Modernize: update CI workflows to actions/checkout@v4 and setup-node@v4
- Modernize: add bin entry, engines, files, types to package.json
- Remove test-push.txt junk file

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

2 participants