@wix/himalaya-cli 0.989.0 → 0.990.0

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.
Files changed (23) hide show
  1. package/package.json +2 -2
  2. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-analytics/index.ts +6 -1
  3. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-ask/catalog.ts +3 -4
  4. package/templates/community-club-owner/tier5-src/himi-owner-lite-analytics/index.ts +6 -1
  5. package/templates/community-club-owner/tier5-src/himi-owner-lite-ask/catalog.ts +3 -4
  6. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-analytics/index.ts +6 -1
  7. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-ask/catalog.ts +3 -4
  8. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-analytics/index.ts +6 -1
  9. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-ask/catalog.ts +3 -4
  10. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-analytics/index.ts +6 -1
  11. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-ask/catalog.ts +3 -4
  12. package/templates/owner-lite/tier5-src/himi-owner-lite-analytics/index.ts +6 -1
  13. package/templates/owner-lite/tier5-src/himi-owner-lite-ask/catalog.ts +3 -4
  14. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-analytics/index.ts +6 -1
  15. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-ask/catalog.ts +3 -4
  16. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-analytics/index.ts +6 -1
  17. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-ask/catalog.ts +3 -4
  18. package/templates/restaurant-owner/tier5-src/himi-owner-lite-analytics/index.ts +6 -1
  19. package/templates/restaurant-owner/tier5-src/himi-owner-lite-ask/catalog.ts +3 -4
  20. package/templates/retail-store-owner/tier5-src/himi-owner-lite-analytics/index.ts +6 -1
  21. package/templates/retail-store-owner/tier5-src/himi-owner-lite-ask/catalog.ts +3 -4
  22. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-analytics/index.ts +6 -1
  23. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-ask/catalog.ts +3 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.989.0",
3
+ "version": "0.990.0",
4
4
  "type": "module",
5
5
  "description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
6
6
  "keywords": [
@@ -65,5 +65,5 @@
65
65
  "artifactId": "himalaya-cli"
66
66
  }
67
67
  },
68
- "falconPackageHash": "67a573e97c057c3bf277ed30655a7855e28d5c899c59b41eac1f3c85"
68
+ "falconPackageHash": "c1544e612c2a8d6bbc008291e944d283faad2b1337d679a8e357ca69"
69
69
  }
@@ -229,8 +229,13 @@ function total(m: WixAnalyticsMeasurement | undefined): number {
229
229
  function seriesOf(m: WixAnalyticsMeasurement | undefined): number[] {
230
230
  return (m?.values ?? []).map((v) => v.value || 0);
231
231
  }
232
+ /**
233
+ * Counts go through the same grouped formatter as money, so "1,544" sits beside
234
+ * "7,290.53" rather than "1544". The note on `fmtMoney` explains why it
235
+ * is `formatNumber` and never `toLocaleString`.
236
+ */
232
237
  function fmtInt(n: number): string {
233
- return String(Math.round(n));
238
+ return formatNumber(Math.round(n));
234
239
  }
235
240
  /**
236
241
  * NOT `toLocaleString`. That is ECMA-402, which QuickJS-ng — watchOS and Wear OS —
@@ -165,15 +165,14 @@ export function metricRowsFrom(
165
165
  // screens cannot disagree in the last digit about the same measure.
166
166
  // NO currency symbol, and that is not an omission. The Analytics
167
167
  // screen's fmtMoney is `formatNumber(round(n*100)/100)` with no symbol
168
- // (himi-owner-lite-analytics/index.ts:241). Adding one here would make
168
+ // (`fmtMoney` in himi-owner-lite-analytics/index.ts). Adding one here would make
169
169
  // the two screens render the SAME number differently — breaking the
170
170
  // reconciliation this endpoint choice exists to guarantee — and would
171
171
  // show a euro sign to a USD, GBP or ILS site. Every other money value
172
172
  // in this bundle comes from the API's own formattedAmount for that
173
173
  // same reason.
174
- value: m.money
175
- ? formatNumber(Math.round(total * 100) / 100)
176
- : String(Math.round(total)),
174
+ // Counts are grouped too, as the Analytics screen's fmtInt groups them.
175
+ value: formatNumber(m.money ? Math.round(total * 100) / 100 : Math.round(total)),
177
176
  // The same number unformatted, so orderBy:amount sorts numerically
178
177
  // rather than lexically ("9" > "1,240" as text).
179
178
  amount: String(total),
@@ -229,8 +229,13 @@ function total(m: WixAnalyticsMeasurement | undefined): number {
229
229
  function seriesOf(m: WixAnalyticsMeasurement | undefined): number[] {
230
230
  return (m?.values ?? []).map((v) => v.value || 0);
231
231
  }
232
+ /**
233
+ * Counts go through the same grouped formatter as money, so "1,544" sits beside
234
+ * "7,290.53" rather than "1544". The note on `fmtMoney` explains why it
235
+ * is `formatNumber` and never `toLocaleString`.
236
+ */
232
237
  function fmtInt(n: number): string {
233
- return String(Math.round(n));
238
+ return formatNumber(Math.round(n));
234
239
  }
235
240
  /**
236
241
  * NOT `toLocaleString`. That is ECMA-402, which QuickJS-ng — watchOS and Wear OS —
@@ -165,15 +165,14 @@ export function metricRowsFrom(
165
165
  // screens cannot disagree in the last digit about the same measure.
166
166
  // NO currency symbol, and that is not an omission. The Analytics
167
167
  // screen's fmtMoney is `formatNumber(round(n*100)/100)` with no symbol
168
- // (himi-owner-lite-analytics/index.ts:241). Adding one here would make
168
+ // (`fmtMoney` in himi-owner-lite-analytics/index.ts). Adding one here would make
169
169
  // the two screens render the SAME number differently — breaking the
170
170
  // reconciliation this endpoint choice exists to guarantee — and would
171
171
  // show a euro sign to a USD, GBP or ILS site. Every other money value
172
172
  // in this bundle comes from the API's own formattedAmount for that
173
173
  // same reason.
174
- value: m.money
175
- ? formatNumber(Math.round(total * 100) / 100)
176
- : String(Math.round(total)),
174
+ // Counts are grouped too, as the Analytics screen's fmtInt groups them.
175
+ value: formatNumber(m.money ? Math.round(total * 100) / 100 : Math.round(total)),
177
176
  // The same number unformatted, so orderBy:amount sorts numerically
178
177
  // rather than lexically ("9" > "1,240" as text).
179
178
  amount: String(total),
@@ -229,8 +229,13 @@ function total(m: WixAnalyticsMeasurement | undefined): number {
229
229
  function seriesOf(m: WixAnalyticsMeasurement | undefined): number[] {
230
230
  return (m?.values ?? []).map((v) => v.value || 0);
231
231
  }
232
+ /**
233
+ * Counts go through the same grouped formatter as money, so "1,544" sits beside
234
+ * "7,290.53" rather than "1544". The note on `fmtMoney` explains why it
235
+ * is `formatNumber` and never `toLocaleString`.
236
+ */
232
237
  function fmtInt(n: number): string {
233
- return String(Math.round(n));
238
+ return formatNumber(Math.round(n));
234
239
  }
235
240
  /**
236
241
  * NOT `toLocaleString`. That is ECMA-402, which QuickJS-ng — watchOS and Wear OS —
@@ -165,15 +165,14 @@ export function metricRowsFrom(
165
165
  // screens cannot disagree in the last digit about the same measure.
166
166
  // NO currency symbol, and that is not an omission. The Analytics
167
167
  // screen's fmtMoney is `formatNumber(round(n*100)/100)` with no symbol
168
- // (himi-owner-lite-analytics/index.ts:241). Adding one here would make
168
+ // (`fmtMoney` in himi-owner-lite-analytics/index.ts). Adding one here would make
169
169
  // the two screens render the SAME number differently — breaking the
170
170
  // reconciliation this endpoint choice exists to guarantee — and would
171
171
  // show a euro sign to a USD, GBP or ILS site. Every other money value
172
172
  // in this bundle comes from the API's own formattedAmount for that
173
173
  // same reason.
174
- value: m.money
175
- ? formatNumber(Math.round(total * 100) / 100)
176
- : String(Math.round(total)),
174
+ // Counts are grouped too, as the Analytics screen's fmtInt groups them.
175
+ value: formatNumber(m.money ? Math.round(total * 100) / 100 : Math.round(total)),
177
176
  // The same number unformatted, so orderBy:amount sorts numerically
178
177
  // rather than lexically ("9" > "1,240" as text).
179
178
  amount: String(total),
@@ -229,8 +229,13 @@ function total(m: WixAnalyticsMeasurement | undefined): number {
229
229
  function seriesOf(m: WixAnalyticsMeasurement | undefined): number[] {
230
230
  return (m?.values ?? []).map((v) => v.value || 0);
231
231
  }
232
+ /**
233
+ * Counts go through the same grouped formatter as money, so "1,544" sits beside
234
+ * "7,290.53" rather than "1544". The note on `fmtMoney` explains why it
235
+ * is `formatNumber` and never `toLocaleString`.
236
+ */
232
237
  function fmtInt(n: number): string {
233
- return String(Math.round(n));
238
+ return formatNumber(Math.round(n));
234
239
  }
235
240
  /**
236
241
  * NOT `toLocaleString`. That is ECMA-402, which QuickJS-ng — watchOS and Wear OS —
@@ -165,15 +165,14 @@ export function metricRowsFrom(
165
165
  // screens cannot disagree in the last digit about the same measure.
166
166
  // NO currency symbol, and that is not an omission. The Analytics
167
167
  // screen's fmtMoney is `formatNumber(round(n*100)/100)` with no symbol
168
- // (himi-owner-lite-analytics/index.ts:241). Adding one here would make
168
+ // (`fmtMoney` in himi-owner-lite-analytics/index.ts). Adding one here would make
169
169
  // the two screens render the SAME number differently — breaking the
170
170
  // reconciliation this endpoint choice exists to guarantee — and would
171
171
  // show a euro sign to a USD, GBP or ILS site. Every other money value
172
172
  // in this bundle comes from the API's own formattedAmount for that
173
173
  // same reason.
174
- value: m.money
175
- ? formatNumber(Math.round(total * 100) / 100)
176
- : String(Math.round(total)),
174
+ // Counts are grouped too, as the Analytics screen's fmtInt groups them.
175
+ value: formatNumber(m.money ? Math.round(total * 100) / 100 : Math.round(total)),
177
176
  // The same number unformatted, so orderBy:amount sorts numerically
178
177
  // rather than lexically ("9" > "1,240" as text).
179
178
  amount: String(total),
@@ -229,8 +229,13 @@ function total(m: WixAnalyticsMeasurement | undefined): number {
229
229
  function seriesOf(m: WixAnalyticsMeasurement | undefined): number[] {
230
230
  return (m?.values ?? []).map((v) => v.value || 0);
231
231
  }
232
+ /**
233
+ * Counts go through the same grouped formatter as money, so "1,544" sits beside
234
+ * "7,290.53" rather than "1544". The note on `fmtMoney` explains why it
235
+ * is `formatNumber` and never `toLocaleString`.
236
+ */
232
237
  function fmtInt(n: number): string {
233
- return String(Math.round(n));
238
+ return formatNumber(Math.round(n));
234
239
  }
235
240
  /**
236
241
  * NOT `toLocaleString`. That is ECMA-402, which QuickJS-ng — watchOS and Wear OS —
@@ -165,15 +165,14 @@ export function metricRowsFrom(
165
165
  // screens cannot disagree in the last digit about the same measure.
166
166
  // NO currency symbol, and that is not an omission. The Analytics
167
167
  // screen's fmtMoney is `formatNumber(round(n*100)/100)` with no symbol
168
- // (himi-owner-lite-analytics/index.ts:241). Adding one here would make
168
+ // (`fmtMoney` in himi-owner-lite-analytics/index.ts). Adding one here would make
169
169
  // the two screens render the SAME number differently — breaking the
170
170
  // reconciliation this endpoint choice exists to guarantee — and would
171
171
  // show a euro sign to a USD, GBP or ILS site. Every other money value
172
172
  // in this bundle comes from the API's own formattedAmount for that
173
173
  // same reason.
174
- value: m.money
175
- ? formatNumber(Math.round(total * 100) / 100)
176
- : String(Math.round(total)),
174
+ // Counts are grouped too, as the Analytics screen's fmtInt groups them.
175
+ value: formatNumber(m.money ? Math.round(total * 100) / 100 : Math.round(total)),
177
176
  // The same number unformatted, so orderBy:amount sorts numerically
178
177
  // rather than lexically ("9" > "1,240" as text).
179
178
  amount: String(total),
@@ -229,8 +229,13 @@ function total(m: WixAnalyticsMeasurement | undefined): number {
229
229
  function seriesOf(m: WixAnalyticsMeasurement | undefined): number[] {
230
230
  return (m?.values ?? []).map((v) => v.value || 0);
231
231
  }
232
+ /**
233
+ * Counts go through the same grouped formatter as money, so "1,544" sits beside
234
+ * "7,290.53" rather than "1544". The note on `fmtMoney` explains why it
235
+ * is `formatNumber` and never `toLocaleString`.
236
+ */
232
237
  function fmtInt(n: number): string {
233
- return String(Math.round(n));
238
+ return formatNumber(Math.round(n));
234
239
  }
235
240
  /**
236
241
  * NOT `toLocaleString`. That is ECMA-402, which QuickJS-ng — watchOS and Wear OS —
@@ -165,15 +165,14 @@ export function metricRowsFrom(
165
165
  // screens cannot disagree in the last digit about the same measure.
166
166
  // NO currency symbol, and that is not an omission. The Analytics
167
167
  // screen's fmtMoney is `formatNumber(round(n*100)/100)` with no symbol
168
- // (himi-owner-lite-analytics/index.ts:241). Adding one here would make
168
+ // (`fmtMoney` in himi-owner-lite-analytics/index.ts). Adding one here would make
169
169
  // the two screens render the SAME number differently — breaking the
170
170
  // reconciliation this endpoint choice exists to guarantee — and would
171
171
  // show a euro sign to a USD, GBP or ILS site. Every other money value
172
172
  // in this bundle comes from the API's own formattedAmount for that
173
173
  // same reason.
174
- value: m.money
175
- ? formatNumber(Math.round(total * 100) / 100)
176
- : String(Math.round(total)),
174
+ // Counts are grouped too, as the Analytics screen's fmtInt groups them.
175
+ value: formatNumber(m.money ? Math.round(total * 100) / 100 : Math.round(total)),
177
176
  // The same number unformatted, so orderBy:amount sorts numerically
178
177
  // rather than lexically ("9" > "1,240" as text).
179
178
  amount: String(total),
@@ -229,8 +229,13 @@ function total(m: WixAnalyticsMeasurement | undefined): number {
229
229
  function seriesOf(m: WixAnalyticsMeasurement | undefined): number[] {
230
230
  return (m?.values ?? []).map((v) => v.value || 0);
231
231
  }
232
+ /**
233
+ * Counts go through the same grouped formatter as money, so "1,544" sits beside
234
+ * "7,290.53" rather than "1544". The note on `fmtMoney` explains why it
235
+ * is `formatNumber` and never `toLocaleString`.
236
+ */
232
237
  function fmtInt(n: number): string {
233
- return String(Math.round(n));
238
+ return formatNumber(Math.round(n));
234
239
  }
235
240
  /**
236
241
  * NOT `toLocaleString`. That is ECMA-402, which QuickJS-ng — watchOS and Wear OS —
@@ -165,15 +165,14 @@ export function metricRowsFrom(
165
165
  // screens cannot disagree in the last digit about the same measure.
166
166
  // NO currency symbol, and that is not an omission. The Analytics
167
167
  // screen's fmtMoney is `formatNumber(round(n*100)/100)` with no symbol
168
- // (himi-owner-lite-analytics/index.ts:241). Adding one here would make
168
+ // (`fmtMoney` in himi-owner-lite-analytics/index.ts). Adding one here would make
169
169
  // the two screens render the SAME number differently — breaking the
170
170
  // reconciliation this endpoint choice exists to guarantee — and would
171
171
  // show a euro sign to a USD, GBP or ILS site. Every other money value
172
172
  // in this bundle comes from the API's own formattedAmount for that
173
173
  // same reason.
174
- value: m.money
175
- ? formatNumber(Math.round(total * 100) / 100)
176
- : String(Math.round(total)),
174
+ // Counts are grouped too, as the Analytics screen's fmtInt groups them.
175
+ value: formatNumber(m.money ? Math.round(total * 100) / 100 : Math.round(total)),
177
176
  // The same number unformatted, so orderBy:amount sorts numerically
178
177
  // rather than lexically ("9" > "1,240" as text).
179
178
  amount: String(total),
@@ -229,8 +229,13 @@ function total(m: WixAnalyticsMeasurement | undefined): number {
229
229
  function seriesOf(m: WixAnalyticsMeasurement | undefined): number[] {
230
230
  return (m?.values ?? []).map((v) => v.value || 0);
231
231
  }
232
+ /**
233
+ * Counts go through the same grouped formatter as money, so "1,544" sits beside
234
+ * "7,290.53" rather than "1544". The note on `fmtMoney` explains why it
235
+ * is `formatNumber` and never `toLocaleString`.
236
+ */
232
237
  function fmtInt(n: number): string {
233
- return String(Math.round(n));
238
+ return formatNumber(Math.round(n));
234
239
  }
235
240
  /**
236
241
  * NOT `toLocaleString`. That is ECMA-402, which QuickJS-ng — watchOS and Wear OS —
@@ -165,15 +165,14 @@ export function metricRowsFrom(
165
165
  // screens cannot disagree in the last digit about the same measure.
166
166
  // NO currency symbol, and that is not an omission. The Analytics
167
167
  // screen's fmtMoney is `formatNumber(round(n*100)/100)` with no symbol
168
- // (himi-owner-lite-analytics/index.ts:241). Adding one here would make
168
+ // (`fmtMoney` in himi-owner-lite-analytics/index.ts). Adding one here would make
169
169
  // the two screens render the SAME number differently — breaking the
170
170
  // reconciliation this endpoint choice exists to guarantee — and would
171
171
  // show a euro sign to a USD, GBP or ILS site. Every other money value
172
172
  // in this bundle comes from the API's own formattedAmount for that
173
173
  // same reason.
174
- value: m.money
175
- ? formatNumber(Math.round(total * 100) / 100)
176
- : String(Math.round(total)),
174
+ // Counts are grouped too, as the Analytics screen's fmtInt groups them.
175
+ value: formatNumber(m.money ? Math.round(total * 100) / 100 : Math.round(total)),
177
176
  // The same number unformatted, so orderBy:amount sorts numerically
178
177
  // rather than lexically ("9" > "1,240" as text).
179
178
  amount: String(total),
@@ -229,8 +229,13 @@ function total(m: WixAnalyticsMeasurement | undefined): number {
229
229
  function seriesOf(m: WixAnalyticsMeasurement | undefined): number[] {
230
230
  return (m?.values ?? []).map((v) => v.value || 0);
231
231
  }
232
+ /**
233
+ * Counts go through the same grouped formatter as money, so "1,544" sits beside
234
+ * "7,290.53" rather than "1544". The note on `fmtMoney` explains why it
235
+ * is `formatNumber` and never `toLocaleString`.
236
+ */
232
237
  function fmtInt(n: number): string {
233
- return String(Math.round(n));
238
+ return formatNumber(Math.round(n));
234
239
  }
235
240
  /**
236
241
  * NOT `toLocaleString`. That is ECMA-402, which QuickJS-ng — watchOS and Wear OS —
@@ -165,15 +165,14 @@ export function metricRowsFrom(
165
165
  // screens cannot disagree in the last digit about the same measure.
166
166
  // NO currency symbol, and that is not an omission. The Analytics
167
167
  // screen's fmtMoney is `formatNumber(round(n*100)/100)` with no symbol
168
- // (himi-owner-lite-analytics/index.ts:241). Adding one here would make
168
+ // (`fmtMoney` in himi-owner-lite-analytics/index.ts). Adding one here would make
169
169
  // the two screens render the SAME number differently — breaking the
170
170
  // reconciliation this endpoint choice exists to guarantee — and would
171
171
  // show a euro sign to a USD, GBP or ILS site. Every other money value
172
172
  // in this bundle comes from the API's own formattedAmount for that
173
173
  // same reason.
174
- value: m.money
175
- ? formatNumber(Math.round(total * 100) / 100)
176
- : String(Math.round(total)),
174
+ // Counts are grouped too, as the Analytics screen's fmtInt groups them.
175
+ value: formatNumber(m.money ? Math.round(total * 100) / 100 : Math.round(total)),
177
176
  // The same number unformatted, so orderBy:amount sorts numerically
178
177
  // rather than lexically ("9" > "1,240" as text).
179
178
  amount: String(total),
@@ -229,8 +229,13 @@ function total(m: WixAnalyticsMeasurement | undefined): number {
229
229
  function seriesOf(m: WixAnalyticsMeasurement | undefined): number[] {
230
230
  return (m?.values ?? []).map((v) => v.value || 0);
231
231
  }
232
+ /**
233
+ * Counts go through the same grouped formatter as money, so "1,544" sits beside
234
+ * "7,290.53" rather than "1544". The note on `fmtMoney` explains why it
235
+ * is `formatNumber` and never `toLocaleString`.
236
+ */
232
237
  function fmtInt(n: number): string {
233
- return String(Math.round(n));
238
+ return formatNumber(Math.round(n));
234
239
  }
235
240
  /**
236
241
  * NOT `toLocaleString`. That is ECMA-402, which QuickJS-ng — watchOS and Wear OS —
@@ -165,15 +165,14 @@ export function metricRowsFrom(
165
165
  // screens cannot disagree in the last digit about the same measure.
166
166
  // NO currency symbol, and that is not an omission. The Analytics
167
167
  // screen's fmtMoney is `formatNumber(round(n*100)/100)` with no symbol
168
- // (himi-owner-lite-analytics/index.ts:241). Adding one here would make
168
+ // (`fmtMoney` in himi-owner-lite-analytics/index.ts). Adding one here would make
169
169
  // the two screens render the SAME number differently — breaking the
170
170
  // reconciliation this endpoint choice exists to guarantee — and would
171
171
  // show a euro sign to a USD, GBP or ILS site. Every other money value
172
172
  // in this bundle comes from the API's own formattedAmount for that
173
173
  // same reason.
174
- value: m.money
175
- ? formatNumber(Math.round(total * 100) / 100)
176
- : String(Math.round(total)),
174
+ // Counts are grouped too, as the Analytics screen's fmtInt groups them.
175
+ value: formatNumber(m.money ? Math.round(total * 100) / 100 : Math.round(total)),
177
176
  // The same number unformatted, so orderBy:amount sorts numerically
178
177
  // rather than lexically ("9" > "1,240" as text).
179
178
  amount: String(total),
@@ -229,8 +229,13 @@ function total(m: WixAnalyticsMeasurement | undefined): number {
229
229
  function seriesOf(m: WixAnalyticsMeasurement | undefined): number[] {
230
230
  return (m?.values ?? []).map((v) => v.value || 0);
231
231
  }
232
+ /**
233
+ * Counts go through the same grouped formatter as money, so "1,544" sits beside
234
+ * "7,290.53" rather than "1544". The note on `fmtMoney` explains why it
235
+ * is `formatNumber` and never `toLocaleString`.
236
+ */
232
237
  function fmtInt(n: number): string {
233
- return String(Math.round(n));
238
+ return formatNumber(Math.round(n));
234
239
  }
235
240
  /**
236
241
  * NOT `toLocaleString`. That is ECMA-402, which QuickJS-ng — watchOS and Wear OS —
@@ -165,15 +165,14 @@ export function metricRowsFrom(
165
165
  // screens cannot disagree in the last digit about the same measure.
166
166
  // NO currency symbol, and that is not an omission. The Analytics
167
167
  // screen's fmtMoney is `formatNumber(round(n*100)/100)` with no symbol
168
- // (himi-owner-lite-analytics/index.ts:241). Adding one here would make
168
+ // (`fmtMoney` in himi-owner-lite-analytics/index.ts). Adding one here would make
169
169
  // the two screens render the SAME number differently — breaking the
170
170
  // reconciliation this endpoint choice exists to guarantee — and would
171
171
  // show a euro sign to a USD, GBP or ILS site. Every other money value
172
172
  // in this bundle comes from the API's own formattedAmount for that
173
173
  // same reason.
174
- value: m.money
175
- ? formatNumber(Math.round(total * 100) / 100)
176
- : String(Math.round(total)),
174
+ // Counts are grouped too, as the Analytics screen's fmtInt groups them.
175
+ value: formatNumber(m.money ? Math.round(total * 100) / 100 : Math.round(total)),
177
176
  // The same number unformatted, so orderBy:amount sorts numerically
178
177
  // rather than lexically ("9" > "1,240" as text).
179
178
  amount: String(total),