tabletcommand-backend-models 7.4.124 → 7.4.125

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.
@@ -4,11 +4,19 @@
4
4
  // on the incident at create time and sent in the event opts; every service
5
5
  // that renders a checklist event message should build it with these helpers.
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.nerisBenchmarkLabel = nerisBenchmarkLabel;
7
8
  exports.buildChecklistMessage = buildChecklistMessage;
8
9
  exports.buildIncidentChecklistMessage = buildIncidentChecklistMessage;
9
10
  function eventString(value) {
10
11
  return typeof value === "string" ? value : "";
11
12
  }
13
+ function nerisBenchmarkLabel(nerisKey) {
14
+ return nerisKey
15
+ .split(/[_\s]+/)
16
+ .filter((word) => word !== "")
17
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
18
+ .join(" ");
19
+ }
12
20
  // checklistItemChange: "Checked"/"Unchecked", with the item name and an
13
21
  // optional NERIS suffix when the event carries them.
14
22
  function buildChecklistMessage(checked, checklistItemEvent) {
@@ -19,7 +27,7 @@ function buildChecklistMessage(checked, checklistItemEvent) {
19
27
  return prefix;
20
28
  }
21
29
  if (nerisKey !== "") {
22
- return `${prefix}: ${name} (NERIS: ${nerisKey})`;
30
+ return `${prefix}: ${name} (NERIS: ${nerisBenchmarkLabel(nerisKey)})`;
23
31
  }
24
32
  return `${prefix}: ${name}`;
25
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"checklist-item-event-message.js","sourceRoot":"","sources":["../src/checklist-item-event-message.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;;AAa7E,sDAWC;AAID,sEAOC;AA5BD,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,wEAAwE;AACxE,qDAAqD;AACrD,SAAgB,qBAAqB,CAAC,OAAgB,EAAE,kBAA8C;IACpG,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IACjD,MAAM,IAAI,GAAG,WAAW,CAAC,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,WAAW,CAAC,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,eAAe,CAAC,CAAC;IAClE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QACpB,OAAO,GAAG,MAAM,KAAK,IAAI,YAAY,QAAQ,GAAG,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,2EAA2E;AAC3E,gDAAgD;AAChD,SAAgB,6BAA6B,CAAC,aAAsB,EAAE,kBAA8C;IAClH,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACvE,MAAM,IAAI,GAAG,WAAW,CAAC,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,CAAC,CAAC;IACnD,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"checklist-item-event-message.js","sourceRoot":"","sources":["../src/checklist-item-event-message.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;;AAW7E,kDAMC;AAID,sDAWC;AAID,sEAOC;AApCD,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAgB,mBAAmB,CAAC,QAAgB;IAClD,OAAO,QAAQ;SACZ,KAAK,CAAC,QAAQ,CAAC;SACf,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;SAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACzE,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,wEAAwE;AACxE,qDAAqD;AACrD,SAAgB,qBAAqB,CAAC,OAAgB,EAAE,kBAA8C;IACpG,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IACjD,MAAM,IAAI,GAAG,WAAW,CAAC,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,WAAW,CAAC,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,eAAe,CAAC,CAAC;IAClE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QACpB,OAAO,GAAG,MAAM,KAAK,IAAI,YAAY,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC;IACxE,CAAC;IACD,OAAO,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED,2EAA2E;AAC3E,gDAAgD;AAChD,SAAgB,6BAA6B,CAAC,aAAsB,EAAE,kBAA8C;IAClH,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACvE,MAAM,IAAI,GAAG,WAAW,CAAC,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,CAAC,CAAC;IACnD,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC;AAC9B,CAAC"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const chai_1 = require("chai");
4
4
  const node_test_1 = require("node:test");
5
5
  const m = require("../checklist-item-event-message");
6
+ const constants_1 = require("../constants");
6
7
  (0, node_test_1.describe)("checklist-item-event-message", function () {
7
8
  (0, node_test_1.describe)("buildChecklistMessage", function () {
8
9
  (0, node_test_1.it)("formats Checked with name and NERIS suffix", function () {
@@ -10,14 +11,18 @@ const m = require("../checklist-item-event-message");
10
11
  name: "Water On Fire",
11
12
  neris_benchmark: "time_water_on_fire",
12
13
  });
13
- chai_1.assert.equal(message, "Checked: Water On Fire (NERIS: time_water_on_fire)");
14
+ chai_1.assert.equal(message, "Checked: Water On Fire (NERIS: Time Water On Fire)");
14
15
  });
15
16
  (0, node_test_1.it)("formats Unchecked with name and NERIS suffix", function () {
16
17
  const message = m.buildChecklistMessage(false, {
17
18
  name: "Water On Fire",
18
19
  neris_benchmark: "time_water_on_fire",
19
20
  });
20
- chai_1.assert.equal(message, "Unchecked: Water On Fire (NERIS: time_water_on_fire)");
21
+ chai_1.assert.equal(message, "Unchecked: Water On Fire (NERIS: Time Water On Fire)");
22
+ });
23
+ (0, node_test_1.it)("title-cases every NerisBenchmarkType key", function () {
24
+ chai_1.assert.equal(m.buildChecklistMessage(true, { name: "Fire Under Control", neris_benchmark: "time_fire_under_control" }), "Checked: Fire Under Control (NERIS: Time Fire Under Control)");
25
+ chai_1.assert.equal(m.buildChecklistMessage(true, { name: "360", neris_benchmark: "time_360_completed" }), "Checked: 360 (NERIS: Time 360 Completed)");
21
26
  });
22
27
  (0, node_test_1.it)("omits the NERIS suffix when neris_benchmark is absent or empty", function () {
23
28
  chai_1.assert.equal(m.buildChecklistMessage(true, { name: "Basic Item" }), "Checked: Basic Item");
@@ -34,6 +39,33 @@ const m = require("../checklist-item-event-message");
34
39
  chai_1.assert.equal(m.buildChecklistMessage(true, { name: 42, neris_benchmark: true }), "Checked");
35
40
  });
36
41
  });
42
+ (0, node_test_1.describe)("nerisBenchmarkLabel", function () {
43
+ (0, node_test_1.it)("maps every NerisBenchmarkType value to a title-case label", function () {
44
+ const expected = {
45
+ [constants_1.NerisBenchmarkType.TimeCommandEstablished]: "Time Command Established",
46
+ [constants_1.NerisBenchmarkType.Time360Completed]: "Time 360 Completed",
47
+ [constants_1.NerisBenchmarkType.TimeWaterOnFire]: "Time Water On Fire",
48
+ [constants_1.NerisBenchmarkType.TimeFireUnderControl]: "Time Fire Under Control",
49
+ [constants_1.NerisBenchmarkType.TimeFireKnockedDown]: "Time Fire Knocked Down",
50
+ [constants_1.NerisBenchmarkType.TimeSuppressionComplete]: "Time Suppression Complete",
51
+ [constants_1.NerisBenchmarkType.TimePrimarySearchBegin]: "Time Primary Search Begin",
52
+ [constants_1.NerisBenchmarkType.TimePrimarySearchComplete]: "Time Primary Search Complete",
53
+ };
54
+ for (const key of Object.values(constants_1.NerisBenchmarkType)) {
55
+ chai_1.assert.equal(m.nerisBenchmarkLabel(key), expected[key]);
56
+ }
57
+ });
58
+ (0, node_test_1.it)("normalizes uppercase and mixed-case input to title case", function () {
59
+ chai_1.assert.equal(m.nerisBenchmarkLabel("TIME_WATER_ON_FIRE"), "Time Water On Fire");
60
+ chai_1.assert.equal(m.nerisBenchmarkLabel("Time_fIRE_Under_CONTROL"), "Time Fire Under Control");
61
+ });
62
+ (0, node_test_1.it)("passes through values that are not snake_case keys", function () {
63
+ chai_1.assert.equal(m.nerisBenchmarkLabel("100"), "100");
64
+ chai_1.assert.equal(m.nerisBenchmarkLabel("Already Titled"), "Already Titled");
65
+ chai_1.assert.equal(m.nerisBenchmarkLabel("__leading_and_trailing__"), "Leading And Trailing");
66
+ chai_1.assert.equal(m.nerisBenchmarkLabel(""), "");
67
+ });
68
+ });
37
69
  (0, node_test_1.describe)("buildIncidentChecklistMessage", function () {
38
70
  (0, node_test_1.it)("formats Added/Removed with the checklist name", function () {
39
71
  chai_1.assert.equal(m.buildIncidentChecklistMessage(true, { name: "Truck Pre-Trip" }), "Added checklist: Truck Pre-Trip");
@@ -1 +1 @@
1
- {"version":3,"file":"checklist-item-event-message.js","sourceRoot":"","sources":["../../src/test/checklist-item-event-message.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checklist-item-event-message.js","sourceRoot":"","sources":["../../src/test/checklist-item-event-message.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export interface ChecklistItemEvent {
2
2
  name?: unknown;
3
3
  neris_benchmark?: unknown;
4
4
  }
5
+ export declare function nerisBenchmarkLabel(nerisKey: string): string;
5
6
  export declare function buildChecklistMessage(checked: boolean, checklistItemEvent?: ChecklistItemEvent | null): string;
6
7
  export declare function buildIncidentChecklistMessage(addToIncident: boolean, checklistItemEvent?: ChecklistItemEvent | null): string;
7
8
  //# sourceMappingURL=checklist-item-event-message.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checklist-item-event-message.d.ts","sourceRoot":"","sources":["../src/checklist-item-event-message.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAQD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,MAAM,CAW9G;AAID,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,MAAM,CAO5H"}
1
+ {"version":3,"file":"checklist-item-event-message.d.ts","sourceRoot":"","sources":["../src/checklist-item-event-message.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM5D;AAID,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,MAAM,CAW9G;AAID,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,MAAM,CAO5H"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tabletcommand-backend-models",
3
- "version": "7.4.124",
3
+ "version": "7.4.125",
4
4
  "description": "Tablet Command Backend Models",
5
5
  "scripts": {
6
6
  "lint": "eslint src",
@@ -12,6 +12,14 @@ function eventString(value: unknown): string {
12
12
  return typeof value === "string" ? value : "";
13
13
  }
14
14
 
15
+ export function nerisBenchmarkLabel(nerisKey: string): string {
16
+ return nerisKey
17
+ .split(/[_\s]+/)
18
+ .filter((word) => word !== "")
19
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
20
+ .join(" ");
21
+ }
22
+
15
23
  // checklistItemChange: "Checked"/"Unchecked", with the item name and an
16
24
  // optional NERIS suffix when the event carries them.
17
25
  export function buildChecklistMessage(checked: boolean, checklistItemEvent?: ChecklistItemEvent | null): string {
@@ -22,7 +30,7 @@ export function buildChecklistMessage(checked: boolean, checklistItemEvent?: Che
22
30
  return prefix;
23
31
  }
24
32
  if (nerisKey !== "") {
25
- return `${prefix}: ${name} (NERIS: ${nerisKey})`;
33
+ return `${prefix}: ${name} (NERIS: ${nerisBenchmarkLabel(nerisKey)})`;
26
34
  }
27
35
  return `${prefix}: ${name}`;
28
36
  }
@@ -1,6 +1,7 @@
1
1
  import { assert } from "chai";
2
2
  import { describe, it } from "node:test";
3
3
  import * as m from "../checklist-item-event-message";
4
+ import { NerisBenchmarkType } from "../constants";
4
5
 
5
6
  describe("checklist-item-event-message", function() {
6
7
  describe("buildChecklistMessage", function() {
@@ -9,7 +10,7 @@ describe("checklist-item-event-message", function() {
9
10
  name: "Water On Fire",
10
11
  neris_benchmark: "time_water_on_fire",
11
12
  });
12
- assert.equal(message, "Checked: Water On Fire (NERIS: time_water_on_fire)");
13
+ assert.equal(message, "Checked: Water On Fire (NERIS: Time Water On Fire)");
13
14
  });
14
15
 
15
16
  it("formats Unchecked with name and NERIS suffix", function() {
@@ -17,7 +18,18 @@ describe("checklist-item-event-message", function() {
17
18
  name: "Water On Fire",
18
19
  neris_benchmark: "time_water_on_fire",
19
20
  });
20
- assert.equal(message, "Unchecked: Water On Fire (NERIS: time_water_on_fire)");
21
+ assert.equal(message, "Unchecked: Water On Fire (NERIS: Time Water On Fire)");
22
+ });
23
+
24
+ it("title-cases every NerisBenchmarkType key", function() {
25
+ assert.equal(
26
+ m.buildChecklistMessage(true, { name: "Fire Under Control", neris_benchmark: "time_fire_under_control" }),
27
+ "Checked: Fire Under Control (NERIS: Time Fire Under Control)"
28
+ );
29
+ assert.equal(
30
+ m.buildChecklistMessage(true, { name: "360", neris_benchmark: "time_360_completed" }),
31
+ "Checked: 360 (NERIS: Time 360 Completed)"
32
+ );
21
33
  });
22
34
 
23
35
  it("omits the NERIS suffix when neris_benchmark is absent or empty", function() {
@@ -38,6 +50,36 @@ describe("checklist-item-event-message", function() {
38
50
  });
39
51
  });
40
52
 
53
+ describe("nerisBenchmarkLabel", function() {
54
+ it("maps every NerisBenchmarkType value to a title-case label", function() {
55
+ const expected: Record<NerisBenchmarkType, string> = {
56
+ [NerisBenchmarkType.TimeCommandEstablished]: "Time Command Established",
57
+ [NerisBenchmarkType.Time360Completed]: "Time 360 Completed",
58
+ [NerisBenchmarkType.TimeWaterOnFire]: "Time Water On Fire",
59
+ [NerisBenchmarkType.TimeFireUnderControl]: "Time Fire Under Control",
60
+ [NerisBenchmarkType.TimeFireKnockedDown]: "Time Fire Knocked Down",
61
+ [NerisBenchmarkType.TimeSuppressionComplete]: "Time Suppression Complete",
62
+ [NerisBenchmarkType.TimePrimarySearchBegin]: "Time Primary Search Begin",
63
+ [NerisBenchmarkType.TimePrimarySearchComplete]: "Time Primary Search Complete",
64
+ };
65
+ for (const key of Object.values(NerisBenchmarkType)) {
66
+ assert.equal(m.nerisBenchmarkLabel(key), expected[key]);
67
+ }
68
+ });
69
+
70
+ it("normalizes uppercase and mixed-case input to title case", function() {
71
+ assert.equal(m.nerisBenchmarkLabel("TIME_WATER_ON_FIRE"), "Time Water On Fire");
72
+ assert.equal(m.nerisBenchmarkLabel("Time_fIRE_Under_CONTROL"), "Time Fire Under Control");
73
+ });
74
+
75
+ it("passes through values that are not snake_case keys", function() {
76
+ assert.equal(m.nerisBenchmarkLabel("100"), "100");
77
+ assert.equal(m.nerisBenchmarkLabel("Already Titled"), "Already Titled");
78
+ assert.equal(m.nerisBenchmarkLabel("__leading_and_trailing__"), "Leading And Trailing");
79
+ assert.equal(m.nerisBenchmarkLabel(""), "");
80
+ });
81
+ });
82
+
41
83
  describe("buildIncidentChecklistMessage", function() {
42
84
  it("formats Added/Removed with the checklist name", function() {
43
85
  assert.equal(m.buildIncidentChecklistMessage(true, { name: "Truck Pre-Trip" }), "Added checklist: Truck Pre-Trip");