@fairfox/polly 0.15.4 → 0.15.5

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.
@@ -370,6 +370,7 @@ class TLAGenerator {
370
370
  extractedInvariants = [];
371
371
  temporalProperties = [];
372
372
  symmetrySets = [];
373
+ resolvedActionNames = new Map;
373
374
  constructor(options) {
374
375
  this.options = options;
375
376
  }
@@ -1024,8 +1025,9 @@ class TLAGenerator {
1024
1025
  this.generateNoValidHandlersStub();
1025
1026
  return;
1026
1027
  }
1028
+ this.resolveActionNamesForHandlers(validHandlers);
1027
1029
  const handlersByType = this.groupHandlersByType(validHandlers);
1028
- this.generateHandlerActions(handlersByType, config, analysis.stateConstraints);
1030
+ this.generateHandlerActions(handlersByType, config, analysis.stateConstraints ?? []);
1029
1031
  this.generateStateTransitionDispatcher(handlersByType);
1030
1032
  }
1031
1033
  generateNoHandlersStub() {
@@ -1093,7 +1095,7 @@ class TLAGenerator {
1093
1095
  const msgType = messageTypes[i];
1094
1096
  if (!msgType)
1095
1097
  continue;
1096
- const actionName = this.messageTypeToActionName(msgType);
1098
+ const actionName = this.getResolvedActionName(msgType);
1097
1099
  if (i === 0) {
1098
1100
  this.line(`IF msgType = "${msgType}" THEN ${actionName}(ctx)`);
1099
1101
  if (messageTypes.length === 1) {
@@ -1110,7 +1112,7 @@ class TLAGenerator {
1110
1112
  this.line("");
1111
1113
  }
1112
1114
  generateHandlerAction(messageType, handlers, config, stateConstraints) {
1113
- const actionName = this.messageTypeToActionName(messageType);
1115
+ const actionName = this.getResolvedActionName(messageType);
1114
1116
  this.line(`\\* Handler for ${messageType}`);
1115
1117
  this.line(`${actionName}(ctx) ==`);
1116
1118
  this.indent++;
@@ -1551,6 +1553,47 @@ class TLAGenerator {
1551
1553
  }
1552
1554
  return `Handle${messageType.split("_").map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join("")}`;
1553
1555
  }
1556
+ resolveActionNamesForHandlers(handlers) {
1557
+ this.resolvedActionNames.clear();
1558
+ const actionNameToMessageTypes = this.groupHandlersByActionName(handlers);
1559
+ this.resolveCollisions(actionNameToMessageTypes);
1560
+ }
1561
+ groupHandlersByActionName(handlers) {
1562
+ const actionNameToMessageTypes = new Map;
1563
+ for (const handler of handlers) {
1564
+ const baseActionName = this.messageTypeToActionName(handler.messageType);
1565
+ if (!actionNameToMessageTypes.has(baseActionName)) {
1566
+ actionNameToMessageTypes.set(baseActionName, []);
1567
+ }
1568
+ const existing = actionNameToMessageTypes.get(baseActionName);
1569
+ if (existing && !existing.some((e) => e.messageType === handler.messageType)) {
1570
+ existing.push({ messageType: handler.messageType, origin: handler.origin });
1571
+ }
1572
+ }
1573
+ return actionNameToMessageTypes;
1574
+ }
1575
+ resolveCollisions(actionNameToMessageTypes) {
1576
+ for (const [baseActionName, messageTypes] of actionNameToMessageTypes.entries()) {
1577
+ if (messageTypes.length === 1) {
1578
+ const entry = messageTypes[0];
1579
+ if (entry) {
1580
+ this.resolvedActionNames.set(entry.messageType, baseActionName);
1581
+ }
1582
+ continue;
1583
+ }
1584
+ for (const entry of messageTypes) {
1585
+ const resolvedName = entry.origin === "stateHandler" ? baseActionName.replace(/^Handle/, "HandleFn") : baseActionName;
1586
+ this.resolvedActionNames.set(entry.messageType, resolvedName);
1587
+ }
1588
+ }
1589
+ }
1590
+ getResolvedActionName(messageType) {
1591
+ const resolved = this.resolvedActionNames.get(messageType);
1592
+ if (resolved) {
1593
+ return resolved;
1594
+ }
1595
+ return this.messageTypeToActionName(messageType);
1596
+ }
1554
1597
  assignmentValueToTLA(value) {
1555
1598
  if (typeof value === "boolean") {
1556
1599
  return value ? "TRUE" : "FALSE";
@@ -3777,7 +3820,8 @@ class HandlerExtractor {
3777
3820
  file: filePath,
3778
3821
  line
3779
3822
  },
3780
- relationships
3823
+ relationships,
3824
+ origin: "event"
3781
3825
  };
3782
3826
  }
3783
3827
  extractAssignments(funcNode, assignments) {
@@ -4444,7 +4488,8 @@ class HandlerExtractor {
4444
4488
  assignments: [],
4445
4489
  preconditions: [],
4446
4490
  postconditions: [],
4447
- location: { file: filePath, line }
4491
+ location: { file: filePath, line },
4492
+ origin: "event"
4448
4493
  });
4449
4494
  }
4450
4495
  }
@@ -5132,7 +5177,8 @@ class HandlerExtractor {
5132
5177
  location: {
5133
5178
  file: filePath,
5134
5179
  line: func.getStartLineNumber()
5135
- }
5180
+ },
5181
+ origin: "stateHandler"
5136
5182
  });
5137
5183
  }
5138
5184
  for (const varStmt of sourceFile.getVariableStatements()) {
@@ -5166,7 +5212,8 @@ class HandlerExtractor {
5166
5212
  location: {
5167
5213
  file: filePath,
5168
5214
  line: decl.getStartLineNumber()
5169
- }
5215
+ },
5216
+ origin: "stateHandler"
5170
5217
  });
5171
5218
  }
5172
5219
  }
@@ -6111,4 +6158,4 @@ main().catch((error) => {
6111
6158
  process.exit(1);
6112
6159
  });
6113
6160
 
6114
- //# debugId=143C5A4485F127EB64756E2164756E21
6161
+ //# debugId=940EA504112DF08B64756E2164756E21