@utiliread/primitives 1.0.0-12 → 1.0.0-121

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 (326) hide show
  1. package/dist/index.d.ts +394 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +3080 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/index.mjs +3067 -0
  6. package/dist/index.mjs.map +1 -0
  7. package/dist/types/aggregate-id.d.ts +1 -0
  8. package/dist/types/breakdown-rule.d.ts +18 -0
  9. package/dist/{esm/register-converter.spec.d.ts → types/breakdown-rule.spec.d.ts} +1 -1
  10. package/dist/types/index.d.ts +298 -0
  11. package/dist/types/luxon-local.d.ts +2 -0
  12. package/dist/types/measure-id.d.ts +1 -0
  13. package/dist/types/measures/duration.d.ts +2 -0
  14. package/dist/types/measures/energy.d.ts +2 -0
  15. package/dist/types/measures/humidity.d.ts +2 -0
  16. package/dist/types/measures/infocode.d.ts +2 -0
  17. package/dist/types/measures/mass-flow.d.ts +3 -0
  18. package/dist/types/measures/mass.d.ts +2 -0
  19. package/dist/types/measures/noise.d.ts +3 -0
  20. package/dist/types/measures/power.d.ts +3 -0
  21. package/dist/types/measures/pressure.d.ts +3 -0
  22. package/dist/types/measures/reactive-energy.d.ts +2 -0
  23. package/dist/types/measures/reactive-power.d.ts +2 -0
  24. package/dist/types/measures/temperature.d.ts +3 -0
  25. package/dist/types/measures/time.d.ts +2 -0
  26. package/dist/types/measures/volume-flow.d.ts +3 -0
  27. package/dist/types/measures/volume.d.ts +2 -0
  28. package/dist/types/medium.d.ts +1 -0
  29. package/dist/types/number-formatter.d.ts +17 -0
  30. package/dist/{esm → types}/number-formatter.spec.d.ts +1 -1
  31. package/dist/types/optional.d.ts +1 -0
  32. package/dist/types/precision-number.d.ts +15 -0
  33. package/dist/types/precision-number.spec.d.ts +1 -0
  34. package/dist/{esm → types}/register-convention.d.ts +14 -12
  35. package/dist/{esm → types}/register-convention.spec.d.ts +1 -1
  36. package/dist/{esm → types}/register-definition.d.ts +13 -9
  37. package/dist/types/register-id.d.ts +1 -0
  38. package/dist/{esm → types}/register-library.d.ts +15 -12
  39. package/dist/{esm → types}/register-library.spec.d.ts +1 -1
  40. package/dist/{esm → types}/register-pack.d.ts +4 -4
  41. package/dist/{esm → types}/register-utils.d.ts +3 -3
  42. package/dist/types/registers/acoustic-noise.d.ts +8 -0
  43. package/dist/types/registers/ambient-temperature.d.ts +8 -0
  44. package/dist/types/registers/consumer.d.ts +9 -0
  45. package/dist/types/registers/cooling-energy-inlet.d.ts +4 -0
  46. package/dist/types/registers/cooling-energy-outlet.d.ts +4 -0
  47. package/dist/types/registers/cooling-energy.d.ts +4 -0
  48. package/dist/types/registers/cooling.d.ts +8 -0
  49. package/dist/types/registers/device-addresses-kamdraft.d.ts +6 -0
  50. package/dist/types/registers/device-addresses-msisdn.d.ts +6 -0
  51. package/dist/types/registers/device-addresses-tchlr.d.ts +6 -0
  52. package/dist/types/registers/device-addresses-wmbus.d.ts +9 -0
  53. package/dist/types/registers/device-date-time.d.ts +2 -0
  54. package/dist/types/registers/device-date.d.ts +2 -0
  55. package/dist/types/registers/device-nominal-diameter.d.ts +2 -0
  56. package/dist/types/registers/device-permanent-volume-flow.d.ts +2 -0
  57. package/dist/types/registers/device-registers.d.ts +2 -0
  58. package/dist/types/registers/device-samples.d.ts +14 -0
  59. package/dist/types/registers/device-software-version.d.ts +2 -0
  60. package/dist/types/registers/device-time.d.ts +2 -0
  61. package/dist/types/registers/device.d.ts +8 -0
  62. package/dist/types/registers/diehl-infocode.d.ts +6 -0
  63. package/dist/types/registers/electrical-energy.d.ts +4 -0
  64. package/dist/types/registers/energy-inlet.d.ts +4 -0
  65. package/dist/types/registers/energy-outlet.d.ts +4 -0
  66. package/dist/types/registers/error-operating-time.d.ts +4 -0
  67. package/dist/types/registers/flow-temperature-aux.d.ts +8 -0
  68. package/dist/types/registers/flow-temperature-inlet.d.ts +8 -0
  69. package/dist/types/registers/flow-temperature-outlet.d.ts +8 -0
  70. package/dist/types/registers/flow-temperature.d.ts +8 -0
  71. package/dist/types/registers/heat-energy-inlet.d.ts +10 -0
  72. package/dist/types/registers/heat-energy-outlet.d.ts +10 -0
  73. package/dist/types/registers/heat-energy.d.ts +10 -0
  74. package/dist/types/registers/index.d.ts +70 -0
  75. package/dist/types/registers/infocode.d.ts +2 -0
  76. package/dist/types/registers/kamstrup-module-type.d.ts +2 -0
  77. package/dist/types/registers/kamstrup-multical-infocode.d.ts +9 -0
  78. package/dist/types/registers/landis-gyr-infocode.d.ts +4 -0
  79. package/dist/types/registers/landis-gyr-mbus-status.d.ts +4 -0
  80. package/dist/types/registers/mass-flow-inlet.d.ts +8 -0
  81. package/dist/types/registers/mass-flow-outlet.d.ts +8 -0
  82. package/dist/types/registers/mass-flow.d.ts +8 -0
  83. package/dist/types/registers/mass-inlet.d.ts +4 -0
  84. package/dist/types/registers/mass-outlet.d.ts +4 -0
  85. package/dist/types/registers/mass.d.ts +4 -0
  86. package/dist/types/registers/mbus-format-string-signature.d.ts +2 -0
  87. package/dist/types/registers/none.d.ts +2 -0
  88. package/dist/types/registers/operating-time.d.ts +4 -0
  89. package/dist/types/registers/place.d.ts +16 -0
  90. package/dist/types/registers/power-inlet.d.ts +8 -0
  91. package/dist/types/registers/power-outlet.d.ts +8 -0
  92. package/dist/types/registers/power.d.ts +8 -0
  93. package/dist/types/registers/pressure-inlet.d.ts +8 -0
  94. package/dist/types/registers/pressure-outlet.d.ts +8 -0
  95. package/dist/types/registers/pressure.d.ts +8 -0
  96. package/dist/types/registers/radiator-temperature.d.ts +8 -0
  97. package/dist/types/registers/reactive-energy.d.ts +4 -0
  98. package/dist/types/registers/relative-humidity.d.ts +2 -0
  99. package/dist/types/registers/remaining-battery-time.d.ts +4 -0
  100. package/dist/types/registers/time-last-exact-overhearing-arrived.d.ts +3 -0
  101. package/dist/types/registers/time-last-installation-mounted.d.ts +3 -0
  102. package/dist/types/registers/time-last-possible-candidate-overhearing-arrived.d.ts +3 -0
  103. package/dist/types/registers/time-last-sampled.d.ts +3 -0
  104. package/dist/types/registers/time.d.ts +7 -0
  105. package/dist/types/registers/volume-flow-inlet.d.ts +8 -0
  106. package/dist/types/registers/volume-flow-outlet.d.ts +8 -0
  107. package/dist/types/registers/volume-flow.d.ts +8 -0
  108. package/dist/types/registers/volume-inlet.d.ts +4 -0
  109. package/dist/types/registers/volume-outlet.d.ts +4 -0
  110. package/dist/types/registers/volume-pulse-input-a.d.ts +4 -0
  111. package/dist/types/registers/volume-pulse-input-b.d.ts +4 -0
  112. package/dist/types/registers/volume.d.ts +4 -0
  113. package/dist/types/repository.d.ts +9 -0
  114. package/dist/types/repository.spec.d.ts +1 -0
  115. package/dist/types/step.d.ts +16 -0
  116. package/dist/types/step.spec.d.ts +1 -0
  117. package/dist/types/time-or-rule.d.ts +10 -0
  118. package/dist/types/unit-id.d.ts +1 -0
  119. package/locales/da/aggregates.json +42 -0
  120. package/locales/da/measures.json +50 -0
  121. package/locales/da/mediums.json +17 -0
  122. package/locales/da/registers.json +1034 -0
  123. package/locales/da/units.json +327 -0
  124. package/locales/en/aggregates.json +42 -0
  125. package/locales/en/measures.json +50 -0
  126. package/locales/en/mediums.json +17 -0
  127. package/locales/en/registers.json +1034 -0
  128. package/locales/en/units.json +327 -0
  129. package/package.json +36 -19
  130. package/src/aggregate-id.ts +9 -9
  131. package/src/breakdown-rule.spec.ts +61 -0
  132. package/src/breakdown-rule.ts +58 -0
  133. package/src/index.ts +37 -21
  134. package/src/luxon-local.ts +3 -0
  135. package/src/measure-id.ts +17 -0
  136. package/src/measures/duration.ts +11 -0
  137. package/{dist/esm/unit-id.js → src/measures/energy.ts} +13 -11
  138. package/src/measures/humidity.ts +3 -0
  139. package/src/measures/infocode.ts +3 -0
  140. package/src/measures/mass-flow.ts +19 -0
  141. package/src/measures/mass.ts +10 -0
  142. package/src/measures/noise.ts +5 -0
  143. package/src/measures/power.ts +23 -0
  144. package/src/measures/pressure.ts +9 -0
  145. package/src/measures/reactive-energy.ts +7 -0
  146. package/src/measures/reactive-power.ts +3 -0
  147. package/src/measures/temperature.ts +9 -0
  148. package/src/measures/time.ts +3 -0
  149. package/src/measures/volume-flow.ts +25 -0
  150. package/src/measures/volume.ts +3 -0
  151. package/src/medium.ts +8 -0
  152. package/src/number-formatter.spec.ts +549 -77
  153. package/src/number-formatter.ts +118 -50
  154. package/src/optional.ts +1 -0
  155. package/src/precision-number.spec.ts +179 -0
  156. package/src/precision-number.ts +117 -0
  157. package/src/register-convention.spec.ts +52 -14
  158. package/src/register-convention.ts +70 -41
  159. package/src/register-definition.ts +23 -14
  160. package/src/register-id.ts +286 -191
  161. package/src/register-library.spec.ts +41 -33
  162. package/src/register-library.ts +64 -41
  163. package/src/register-pack.ts +5 -5
  164. package/src/register-utils.ts +6 -6
  165. package/src/registers/acoustic-noise.ts +52 -0
  166. package/src/registers/ambient-temperature.ts +52 -0
  167. package/src/registers/consumer.ts +17 -0
  168. package/src/registers/cooling-energy-inlet.ts +23 -0
  169. package/src/registers/cooling-energy-outlet.ts +23 -0
  170. package/src/registers/cooling-energy.ts +23 -0
  171. package/src/registers/cooling.ts +58 -0
  172. package/src/registers/device-addresses-kamdraft.ts +14 -0
  173. package/src/registers/device-addresses-msisdn.ts +14 -0
  174. package/src/registers/device-addresses-tchlr.ts +14 -0
  175. package/src/registers/device-addresses-wmbus.ts +17 -0
  176. package/src/registers/device-date-time.ts +9 -0
  177. package/src/registers/device-date.ts +9 -0
  178. package/src/registers/device-nominal-diameter.ts +9 -0
  179. package/src/registers/device-permanent-volume-flow.ts +9 -0
  180. package/src/registers/device-registers.ts +9 -0
  181. package/src/registers/device-samples.ts +37 -0
  182. package/src/registers/device-software-version.ts +8 -0
  183. package/src/registers/device-time.ts +9 -0
  184. package/src/registers/device.ts +16 -0
  185. package/src/registers/diehl-infocode.ts +37 -0
  186. package/src/registers/electrical-energy.ts +23 -0
  187. package/src/registers/energy-inlet.ts +23 -0
  188. package/src/registers/energy-outlet.ts +23 -0
  189. package/src/registers/error-operating-time.ts +23 -0
  190. package/src/registers/flow-temperature-aux.ts +52 -0
  191. package/src/registers/flow-temperature-inlet.ts +52 -0
  192. package/src/registers/flow-temperature-outlet.ts +52 -0
  193. package/src/registers/flow-temperature.ts +52 -0
  194. package/src/registers/heat-energy-inlet.ts +65 -0
  195. package/src/registers/heat-energy-outlet.ts +65 -0
  196. package/src/registers/heat-energy.ts +65 -0
  197. package/src/registers/index.ts +70 -0
  198. package/src/registers/infocode.ts +9 -0
  199. package/src/registers/kamstrup-module-type.ts +8 -0
  200. package/src/registers/kamstrup-multical-infocode.ts +58 -0
  201. package/src/registers/landis-gyr-infocode.ts +23 -0
  202. package/src/registers/landis-gyr-mbus-status.ts +23 -0
  203. package/src/registers/mass-flow-inlet.ts +52 -0
  204. package/src/registers/mass-flow-outlet.ts +52 -0
  205. package/src/registers/mass-flow.ts +52 -0
  206. package/src/registers/mass-inlet.ts +23 -0
  207. package/src/registers/mass-outlet.ts +23 -0
  208. package/src/registers/mass.ts +23 -0
  209. package/src/registers/mbus-format-string-signature.ts +8 -0
  210. package/src/registers/none.ts +8 -0
  211. package/src/registers/operating-time.ts +23 -0
  212. package/src/registers/place.ts +31 -0
  213. package/src/registers/power-inlet.ts +52 -0
  214. package/src/registers/power-outlet.ts +52 -0
  215. package/src/registers/power.ts +52 -0
  216. package/src/registers/pressure-inlet.ts +52 -0
  217. package/src/registers/pressure-outlet.ts +52 -0
  218. package/src/registers/pressure.ts +52 -0
  219. package/src/registers/radiator-temperature.ts +52 -0
  220. package/src/registers/reactive-energy.ts +23 -0
  221. package/src/registers/relative-humidity.ts +8 -0
  222. package/src/registers/remaining-battery-time.ts +23 -0
  223. package/src/registers/time-last-exact-overhearing-arrived.ts +19 -0
  224. package/src/registers/time-last-installation-mounted.ts +19 -0
  225. package/src/registers/time-last-possible-candidate-overhearing-arrived.ts +21 -0
  226. package/src/registers/time-last-sampled.ts +19 -0
  227. package/src/registers/time.ts +45 -0
  228. package/src/registers/volume-flow-inlet.ts +52 -0
  229. package/src/registers/volume-flow-outlet.ts +52 -0
  230. package/src/registers/volume-flow.ts +52 -0
  231. package/src/registers/volume-inlet.ts +23 -0
  232. package/src/registers/volume-outlet.ts +23 -0
  233. package/src/registers/volume-pulse-input-a.ts +23 -0
  234. package/src/registers/volume-pulse-input-b.ts +23 -0
  235. package/src/registers/volume.ts +23 -0
  236. package/src/repository.spec.ts +20 -0
  237. package/src/repository.ts +24 -0
  238. package/src/step.spec.ts +37 -0
  239. package/src/step.ts +46 -0
  240. package/src/time-or-rule.ts +42 -0
  241. package/src/unit-id.ts +108 -100
  242. package/tsconfig.json +14 -14
  243. package/web-test-runner.config.mjs +7 -0
  244. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/base.css +0 -224
  245. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/block-navigation.js +0 -79
  246. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/favicon.png +0 -0
  247. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/index.html +0 -96
  248. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/prettify.css +0 -1
  249. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/prettify.js +0 -2
  250. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/sort-arrow-sprite.png +0 -0
  251. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/sorter.js +0 -170
  252. package/dist/cjs/aggregate-id.js +0 -3
  253. package/dist/cjs/aggregate-id.js.map +0 -1
  254. package/dist/cjs/consumption-type-id.js +0 -3
  255. package/dist/cjs/consumption-type-id.js.map +0 -1
  256. package/dist/cjs/index.js +0 -12
  257. package/dist/cjs/index.js.map +0 -1
  258. package/dist/cjs/number-formatter.js +0 -51
  259. package/dist/cjs/number-formatter.js.map +0 -1
  260. package/dist/cjs/number-formatter.spec.js +0 -77
  261. package/dist/cjs/number-formatter.spec.js.map +0 -1
  262. package/dist/cjs/register-convention.js +0 -42
  263. package/dist/cjs/register-convention.js.map +0 -1
  264. package/dist/cjs/register-convention.spec.js +0 -15
  265. package/dist/cjs/register-convention.spec.js.map +0 -1
  266. package/dist/cjs/register-converter.js +0 -31
  267. package/dist/cjs/register-converter.js.map +0 -1
  268. package/dist/cjs/register-converter.spec.js +0 -29
  269. package/dist/cjs/register-converter.spec.js.map +0 -1
  270. package/dist/cjs/register-definition.js +0 -3
  271. package/dist/cjs/register-definition.js.map +0 -1
  272. package/dist/cjs/register-id.js +0 -3
  273. package/dist/cjs/register-id.js.map +0 -1
  274. package/dist/cjs/register-library.js +0 -45
  275. package/dist/cjs/register-library.js.map +0 -1
  276. package/dist/cjs/register-library.spec.js +0 -30
  277. package/dist/cjs/register-library.spec.js.map +0 -1
  278. package/dist/cjs/register-pack.js +0 -3
  279. package/dist/cjs/register-pack.js.map +0 -1
  280. package/dist/cjs/register-utils.js +0 -8
  281. package/dist/cjs/register-utils.js.map +0 -1
  282. package/dist/cjs/unit-id.js +0 -14
  283. package/dist/cjs/unit-id.js.map +0 -1
  284. package/dist/esm/aggregate-id.d.ts +0 -1
  285. package/dist/esm/aggregate-id.js +0 -2
  286. package/dist/esm/aggregate-id.js.map +0 -1
  287. package/dist/esm/consumption-type-id.d.ts +0 -1
  288. package/dist/esm/consumption-type-id.js +0 -2
  289. package/dist/esm/consumption-type-id.js.map +0 -1
  290. package/dist/esm/index.d.ts +0 -10
  291. package/dist/esm/index.js +0 -6
  292. package/dist/esm/index.js.map +0 -1
  293. package/dist/esm/number-formatter.d.ts +0 -6
  294. package/dist/esm/number-formatter.js +0 -48
  295. package/dist/esm/number-formatter.js.map +0 -1
  296. package/dist/esm/number-formatter.spec.js +0 -75
  297. package/dist/esm/number-formatter.spec.js.map +0 -1
  298. package/dist/esm/register-convention.js +0 -38
  299. package/dist/esm/register-convention.js.map +0 -1
  300. package/dist/esm/register-convention.spec.js +0 -13
  301. package/dist/esm/register-convention.spec.js.map +0 -1
  302. package/dist/esm/register-converter.d.ts +0 -9
  303. package/dist/esm/register-converter.js +0 -28
  304. package/dist/esm/register-converter.js.map +0 -1
  305. package/dist/esm/register-converter.spec.js +0 -27
  306. package/dist/esm/register-converter.spec.js.map +0 -1
  307. package/dist/esm/register-definition.js +0 -2
  308. package/dist/esm/register-definition.js.map +0 -1
  309. package/dist/esm/register-id.d.ts +0 -1
  310. package/dist/esm/register-id.js +0 -2
  311. package/dist/esm/register-id.js.map +0 -1
  312. package/dist/esm/register-library.js +0 -42
  313. package/dist/esm/register-library.js.map +0 -1
  314. package/dist/esm/register-library.spec.js +0 -28
  315. package/dist/esm/register-library.spec.js.map +0 -1
  316. package/dist/esm/register-pack.js +0 -2
  317. package/dist/esm/register-pack.js.map +0 -1
  318. package/dist/esm/register-utils.js +0 -4
  319. package/dist/esm/register-utils.js.map +0 -1
  320. package/dist/esm/unit-id.d.ts +0 -2
  321. package/dist/esm/unit-id.js.map +0 -1
  322. package/karma.config.js +0 -32
  323. package/src/consumption-type-id.ts +0 -8
  324. package/src/register-converter.spec.ts +0 -31
  325. package/src/register-converter.ts +0 -29
  326. package/tsconfig.cjs.json +0 -9
@@ -0,0 +1,8 @@
1
+ import { RegisterDefinition } from "../register-definition";
2
+
3
+ export const relativeHumidity: RegisterDefinition = {
4
+ id: "relativeHumidity",
5
+ measure: "humidity",
6
+ aggregate: "instant",
7
+ units: ["percentage"],
8
+ };
@@ -0,0 +1,23 @@
1
+ import { RegisterDefinition } from "../register-definition";
2
+ import { units } from "../measures/duration";
3
+
4
+ export const remainingBatteryTime: RegisterDefinition = {
5
+ id: "remainingBatteryTime",
6
+ measure: "duration",
7
+ aggregate: "instant",
8
+ units,
9
+ };
10
+
11
+ export const diffRemainingBatteryTime: RegisterDefinition = {
12
+ id: "diffRemainingBatteryTime",
13
+ measure: "duration",
14
+ aggregate: "diff",
15
+ units,
16
+ };
17
+
18
+ export const cntRemainingBatteryTime: RegisterDefinition = {
19
+ id: "cntRemainingBatteryTime",
20
+ measure: "duration",
21
+ aggregate: "cnt",
22
+ units: ["unitless"],
23
+ };
@@ -0,0 +1,19 @@
1
+ import { RegisterDefinition } from "../register-definition";
2
+ import { units as durationUnits } from "../measures/duration";
3
+ import { units as timeUnits } from "../measures/time";
4
+
5
+ export const timeAtLastExactOverhearingArrived: RegisterDefinition = {
6
+ id: "timeAtLastExactOverhearingArrived",
7
+ measure: "time",
8
+ aggregate: "instant",
9
+ units: timeUnits,
10
+ immediate: true,
11
+ };
12
+
13
+ export const timeSinceLastExactOverhearingArrived: RegisterDefinition = {
14
+ id: "timeSinceLastExactOverhearingArrived",
15
+ measure: "duration",
16
+ aggregate: "instant",
17
+ units: durationUnits,
18
+ immediate: true,
19
+ };
@@ -0,0 +1,19 @@
1
+ import { RegisterDefinition } from "../register-definition";
2
+ import { units as durationUnits } from "../measures/duration";
3
+ import { units as timeUnits } from "../measures/time";
4
+
5
+ export const timeAtLastInstallationMounted: RegisterDefinition = {
6
+ id: "timeAtLastInstallationMounted",
7
+ measure: "time",
8
+ aggregate: "instant",
9
+ units: timeUnits,
10
+ immediate: true,
11
+ };
12
+
13
+ export const timeSinceLastInstallationMounted: RegisterDefinition = {
14
+ id: "timeSinceLastInstallationMounted",
15
+ measure: "duration",
16
+ aggregate: "instant",
17
+ units: durationUnits,
18
+ immediate: true,
19
+ };
@@ -0,0 +1,21 @@
1
+ import { RegisterDefinition } from "../register-definition";
2
+ import { units as durationUnits } from "../measures/duration";
3
+ import { units as timeUnits } from "../measures/time";
4
+
5
+ export const timeAtLastPossibleCandidateOverhearingArrived: RegisterDefinition =
6
+ {
7
+ id: "timeAtLastPossibleCandidateOverhearingArrived",
8
+ measure: "time",
9
+ aggregate: "instant",
10
+ units: timeUnits,
11
+ immediate: true,
12
+ };
13
+
14
+ export const timeSinceLastPossibleCandidateOverhearingArrived: RegisterDefinition =
15
+ {
16
+ id: "timeSinceLastPossibleCandidateOverhearingArrived",
17
+ measure: "duration",
18
+ aggregate: "instant",
19
+ units: durationUnits,
20
+ immediate: true,
21
+ };
@@ -0,0 +1,19 @@
1
+ import { RegisterDefinition } from "../register-definition";
2
+ import { units as durationUnits } from "../measures/duration";
3
+ import { units as timeUnits } from "../measures/time";
4
+
5
+ export const timeAtLastSampled: RegisterDefinition = {
6
+ id: "timeAtLastSampled",
7
+ measure: "time",
8
+ aggregate: "instant",
9
+ units: timeUnits,
10
+ immediate: true,
11
+ };
12
+
13
+ export const timeSinceLastSampled: RegisterDefinition = {
14
+ id: "timeSinceLastSampled",
15
+ measure: "duration",
16
+ aggregate: "instant",
17
+ units: durationUnits,
18
+ immediate: true,
19
+ };
@@ -0,0 +1,45 @@
1
+ import { RegisterDefinition } from "../register-definition";
2
+ import { units } from "../measures/time";
3
+
4
+ export const basetime: RegisterDefinition = {
5
+ id: "basetime",
6
+ measure: "time",
7
+ aggregate: "instant",
8
+ units,
9
+ immediate: true,
10
+ };
11
+
12
+ export const instantTime: RegisterDefinition = {
13
+ id: "instantTime",
14
+ measure: "time",
15
+ aggregate: "instant",
16
+ units,
17
+ };
18
+
19
+ export const periodStartTime: RegisterDefinition = {
20
+ id: "periodStartTime",
21
+ measure: "time",
22
+ aggregate: "instant",
23
+ units,
24
+ };
25
+
26
+ export const periodEndTime: RegisterDefinition = {
27
+ id: "periodEndTime",
28
+ measure: "time",
29
+ aggregate: "instant",
30
+ units,
31
+ };
32
+
33
+ export const instantOrPeriodStartTime: RegisterDefinition = {
34
+ id: "instantOrPeriodStartTime",
35
+ measure: "time",
36
+ aggregate: "instant",
37
+ units,
38
+ };
39
+
40
+ export const instantOrPeriodEndTime: RegisterDefinition = {
41
+ id: "instantOrPeriodEndTime",
42
+ measure: "time",
43
+ aggregate: "instant",
44
+ units,
45
+ };
@@ -0,0 +1,52 @@
1
+ import { sqUnits, units } from "../measures/volume-flow";
2
+
3
+ import { RegisterDefinition } from "../register-definition";
4
+
5
+ export const inletVolumeFlow: RegisterDefinition = {
6
+ id: "inletVolumeFlow",
7
+ measure: "volumeFlow",
8
+ aggregate: "instant",
9
+ units,
10
+ };
11
+
12
+ export const minInletVolumeFlow: RegisterDefinition = {
13
+ id: "minInletVolumeFlow",
14
+ measure: "volumeFlow",
15
+ aggregate: "min",
16
+ units,
17
+ };
18
+
19
+ export const maxInletVolumeFlow: RegisterDefinition = {
20
+ id: "maxInletVolumeFlow",
21
+ measure: "volumeFlow",
22
+ aggregate: "max",
23
+ units,
24
+ };
25
+
26
+ export const avgInletVolumeFlow: RegisterDefinition = {
27
+ id: "avgInletVolumeFlow",
28
+ measure: "volumeFlow",
29
+ aggregate: "avg",
30
+ units,
31
+ };
32
+
33
+ export const sumInletVolumeFlow: RegisterDefinition = {
34
+ id: "sumInletVolumeFlow",
35
+ measure: "volumeFlow",
36
+ aggregate: "sum",
37
+ units,
38
+ };
39
+
40
+ export const cntInletVolumeFlow: RegisterDefinition = {
41
+ id: "cntInletVolumeFlow",
42
+ measure: "volumeFlow",
43
+ aggregate: "cnt",
44
+ units: ["unitless"],
45
+ };
46
+
47
+ export const ssqInletVolumeFlow: RegisterDefinition = {
48
+ id: "ssqInletVolumeFlow",
49
+ measure: "volumeFlow",
50
+ aggregate: "ssq",
51
+ units: sqUnits,
52
+ };
@@ -0,0 +1,52 @@
1
+ import { sqUnits, units } from "../measures/volume-flow";
2
+
3
+ import { RegisterDefinition } from "../register-definition";
4
+
5
+ export const outletVolumeFlow: RegisterDefinition = {
6
+ id: "outletVolumeFlow",
7
+ measure: "volumeFlow",
8
+ aggregate: "instant",
9
+ units,
10
+ };
11
+
12
+ export const minOutletVolumeFlow: RegisterDefinition = {
13
+ id: "minOutletVolumeFlow",
14
+ measure: "volumeFlow",
15
+ aggregate: "min",
16
+ units,
17
+ };
18
+
19
+ export const maxOutletVolumeFlow: RegisterDefinition = {
20
+ id: "maxOutletVolumeFlow",
21
+ measure: "volumeFlow",
22
+ aggregate: "max",
23
+ units,
24
+ };
25
+
26
+ export const avgOutletVolumeFlow: RegisterDefinition = {
27
+ id: "avgOutletVolumeFlow",
28
+ measure: "volumeFlow",
29
+ aggregate: "avg",
30
+ units,
31
+ };
32
+
33
+ export const sumOutletVolumeFlow: RegisterDefinition = {
34
+ id: "sumOutletVolumeFlow",
35
+ measure: "volumeFlow",
36
+ aggregate: "sum",
37
+ units,
38
+ };
39
+
40
+ export const cntOutletVolumeFlow: RegisterDefinition = {
41
+ id: "cntOutletVolumeFlow",
42
+ measure: "volumeFlow",
43
+ aggregate: "cnt",
44
+ units: ["unitless"],
45
+ };
46
+
47
+ export const ssqOutletVolumeFlow: RegisterDefinition = {
48
+ id: "ssqOutletVolumeFlow",
49
+ measure: "volumeFlow",
50
+ aggregate: "ssq",
51
+ units: sqUnits,
52
+ };
@@ -0,0 +1,52 @@
1
+ import { sqUnits, units } from "../measures/volume-flow";
2
+
3
+ import { RegisterDefinition } from "../register-definition";
4
+
5
+ export const volumeFlow: RegisterDefinition = {
6
+ id: "volumeFlow",
7
+ measure: "volumeFlow",
8
+ aggregate: "instant",
9
+ units,
10
+ };
11
+
12
+ export const minVolumeFlow: RegisterDefinition = {
13
+ id: "minVolumeFlow",
14
+ measure: "volumeFlow",
15
+ aggregate: "min",
16
+ units,
17
+ };
18
+
19
+ export const maxVolumeFlow: RegisterDefinition = {
20
+ id: "maxVolumeFlow",
21
+ measure: "volumeFlow",
22
+ aggregate: "max",
23
+ units,
24
+ };
25
+
26
+ export const avgVolumeFlow: RegisterDefinition = {
27
+ id: "avgVolumeFlow",
28
+ measure: "volumeFlow",
29
+ aggregate: "avg",
30
+ units,
31
+ };
32
+
33
+ export const sumVolumeFlow: RegisterDefinition = {
34
+ id: "sumVolumeFlow",
35
+ measure: "volumeFlow",
36
+ aggregate: "sum",
37
+ units,
38
+ };
39
+
40
+ export const cntVolumeFlow: RegisterDefinition = {
41
+ id: "cntVolumeFlow",
42
+ measure: "volumeFlow",
43
+ aggregate: "cnt",
44
+ units: ["unitless"],
45
+ };
46
+
47
+ export const ssqVolumeFlow: RegisterDefinition = {
48
+ id: "ssqVolumeFlow",
49
+ measure: "volumeFlow",
50
+ aggregate: "ssq",
51
+ units: sqUnits,
52
+ };
@@ -0,0 +1,23 @@
1
+ import { RegisterDefinition } from "../register-definition";
2
+ import { units } from "../measures/volume";
3
+
4
+ export const inletVolume: RegisterDefinition = {
5
+ id: "inletVolume",
6
+ measure: "volume",
7
+ aggregate: "instant",
8
+ units,
9
+ };
10
+
11
+ export const diffInletVolume: RegisterDefinition = {
12
+ id: "diffInletVolume",
13
+ measure: "volume",
14
+ aggregate: "diff",
15
+ units,
16
+ };
17
+
18
+ export const cntInletVolume: RegisterDefinition = {
19
+ id: "cntInletVolume",
20
+ measure: "volume",
21
+ aggregate: "cnt",
22
+ units: ["unitless"],
23
+ };
@@ -0,0 +1,23 @@
1
+ import { RegisterDefinition } from "../register-definition";
2
+ import { units } from "../measures/volume";
3
+
4
+ export const outletVolume: RegisterDefinition = {
5
+ id: "outletVolume",
6
+ measure: "volume",
7
+ aggregate: "instant",
8
+ units,
9
+ };
10
+
11
+ export const diffOutletVolume: RegisterDefinition = {
12
+ id: "diffOutletVolume",
13
+ measure: "volume",
14
+ aggregate: "diff",
15
+ units,
16
+ };
17
+
18
+ export const cntOutletVolume: RegisterDefinition = {
19
+ id: "cntOutletVolume",
20
+ measure: "volume",
21
+ aggregate: "cnt",
22
+ units: ["unitless"],
23
+ };
@@ -0,0 +1,23 @@
1
+ import { RegisterDefinition } from "../register-definition";
2
+ import { units } from "../measures/volume";
3
+
4
+ export const pulseInputAVolume: RegisterDefinition = {
5
+ id: "pulseInputAVolume",
6
+ measure: "volume",
7
+ aggregate: "instant",
8
+ units,
9
+ };
10
+
11
+ export const diffPulseInputAVolume: RegisterDefinition = {
12
+ id: "diffPulseInputAVolume",
13
+ measure: "volume",
14
+ aggregate: "diff",
15
+ units,
16
+ };
17
+
18
+ export const cntPulseInputAVolume: RegisterDefinition = {
19
+ id: "cntPulseInputAVolume",
20
+ measure: "volume",
21
+ aggregate: "cnt",
22
+ units: ["unitless"],
23
+ };
@@ -0,0 +1,23 @@
1
+ import { RegisterDefinition } from "../register-definition";
2
+ import { units } from "../measures/volume";
3
+
4
+ export const pulseInputBVolume: RegisterDefinition = {
5
+ id: "pulseInputBVolume",
6
+ measure: "volume",
7
+ aggregate: "instant",
8
+ units,
9
+ };
10
+
11
+ export const diffPulseInputBVolume: RegisterDefinition = {
12
+ id: "diffPulseInputBVolume",
13
+ measure: "volume",
14
+ aggregate: "diff",
15
+ units,
16
+ };
17
+
18
+ export const cntPulseInputBVolume: RegisterDefinition = {
19
+ id: "cntPulseInputBVolume",
20
+ measure: "volume",
21
+ aggregate: "cnt",
22
+ units: ["unitless"],
23
+ };
@@ -0,0 +1,23 @@
1
+ import { RegisterDefinition } from "../register-definition";
2
+ import { units } from "../measures/volume";
3
+
4
+ export const volume: RegisterDefinition = {
5
+ id: "volume",
6
+ measure: "volume",
7
+ aggregate: "instant",
8
+ units,
9
+ };
10
+
11
+ export const diffVolume: RegisterDefinition = {
12
+ id: "diffVolume",
13
+ measure: "volume",
14
+ aggregate: "diff",
15
+ units,
16
+ };
17
+
18
+ export const cntVolume: RegisterDefinition = {
19
+ id: "cntVolume",
20
+ measure: "volume",
21
+ aggregate: "cnt",
22
+ units: ["unitless"],
23
+ };
@@ -0,0 +1,20 @@
1
+ import { Repository } from "./repository";
2
+ import { expect } from "chai";
3
+
4
+ describe("ctor", () => {
5
+ it("creates", () => {
6
+ expect(Repository("gpkv", "gjoel")).to.equal("gpkv/gjoel");
7
+ expect(Repository("gpkv/gjoel")).to.equal("gpkv/gjoel");
8
+ });
9
+ it("throws if wrong format", () => {
10
+ expect(() => Repository("invalid")).to.throw();
11
+ });
12
+ });
13
+
14
+ describe("split", () => {
15
+ it("splits into correct parts", () => {
16
+ const { team, name } = Repository.split(Repository("gpkv", "gjoel"));
17
+ expect(team).to.equal("gpkv");
18
+ expect(name).to.equal("gjoel");
19
+ });
20
+ });
@@ -0,0 +1,24 @@
1
+ // This is clearly not correct but it provides some amazing type safety
2
+ export type Repository = "some/repo";
3
+
4
+ export function Repository(repo: string): Repository;
5
+ export function Repository(team: string, name: string): Repository;
6
+ export function Repository(repoOrTeam: string, name?: string): Repository {
7
+ if (name) {
8
+ return <Repository>`${repoOrTeam}/${name}`;
9
+ } else if (repoOrTeam.indexOf("/") > 0) {
10
+ return <Repository>repoOrTeam;
11
+ } else {
12
+ throw new TypeError("Invalid repository format");
13
+ }
14
+ }
15
+
16
+ export namespace Repository {
17
+ export function split(repo: Repository) {
18
+ const parts = repo.split("/");
19
+ return {
20
+ team: parts[0],
21
+ name: parts[1],
22
+ };
23
+ }
24
+ }
@@ -0,0 +1,37 @@
1
+ import { DayOfWeek, Step } from "./step";
2
+
3
+ import { DateTime } from "luxon";
4
+ import { expect } from "chai";
5
+
6
+ describe("startOf", () => {
7
+ it("returns start of day", () => {
8
+ const dt = DateTime.fromISO("2020-01-11T05:00:00+01:00");
9
+ const result = Step.startOf(dt, "day");
10
+ expect(+result).to.equal(
11
+ +DateTime.fromISO("2020-01-11T00:00:00+01:00"),
12
+ );
13
+ });
14
+
15
+ it("returns previous monday from saturday", () => {
16
+ const dt = DateTime.fromISO("2020-01-11T05:00:00+01:00");
17
+ const result = Step.startOf(dt, "week", DayOfWeek.Monday);
18
+ expect(+result).to.equal(
19
+ +DateTime.fromISO("2020-01-06T00:00:00+01:00"),
20
+ );
21
+ });
22
+
23
+ it("returns same monday from monday with hour", () => {
24
+ const dt = DateTime.fromISO("2020-01-13T05:00:00+01:00");
25
+ const result = Step.startOf(dt, "week", DayOfWeek.Monday);
26
+ expect(+result).to.equal(
27
+ +DateTime.fromISO("2020-01-13T00:00:00+01:00"),
28
+ );
29
+ });
30
+ });
31
+
32
+ describe("asDuration", () => {
33
+ it("should return equivalent duration", () => {
34
+ const duration = Step.asDuration("week");
35
+ expect(duration.days).to.equal(7);
36
+ });
37
+ });
package/src/step.ts ADDED
@@ -0,0 +1,46 @@
1
+ import { DateTime } from "luxon";
2
+ import { Duration } from "./luxon-local";
3
+
4
+ export type Step = "hour" | "day" | "week" | "month" | "year";
5
+
6
+ export enum DayOfWeek {
7
+ Monday = 1,
8
+ Tuesday = 2,
9
+ Wednesday = 3,
10
+ Thursday = 4,
11
+ Friday = 5,
12
+ Saturday = 6,
13
+ Sunday = 7,
14
+ }
15
+
16
+ export namespace Step {
17
+ export function startOf(
18
+ dateTime: DateTime,
19
+ step: Step,
20
+ firstDayOfWeek?: DayOfWeek,
21
+ ): DateTime {
22
+ if (step === "week") {
23
+ const value = dateTime
24
+ .startOf("day")
25
+ .set({ weekday: firstDayOfWeek ?? DayOfWeek.Monday });
26
+ return value > dateTime ? value.minus({ days: 7 }) : value;
27
+ } else {
28
+ return dateTime.startOf(step);
29
+ }
30
+ }
31
+
32
+ export function asDuration(step: Step, amount = 1): Duration {
33
+ switch (step) {
34
+ case "hour":
35
+ return Duration.fromObject({ hours: amount });
36
+ case "day":
37
+ return Duration.fromObject({ days: amount });
38
+ case "week":
39
+ return Duration.fromObject({ days: 7 * amount });
40
+ case "month":
41
+ return Duration.fromObject({ months: amount });
42
+ case "year":
43
+ return Duration.fromObject({ years: amount });
44
+ }
45
+ }
46
+ }
@@ -0,0 +1,42 @@
1
+ import { DateTime } from "luxon";
2
+
3
+ export type TimeOrRule = Date | DateTime<true> | string;
4
+
5
+ export function TimeOrRule(
6
+ timeOrRule: Date | DateTime<true> | string,
7
+ ): TimeOrRule {
8
+ return timeOrRule;
9
+ }
10
+
11
+ export namespace TimeOrRule {
12
+ export function parse(input: string): TimeOrRule {
13
+ const time = DateTime.fromISO(input, { setZone: true });
14
+ return time.isValid ? time : input;
15
+ }
16
+
17
+ export function isTime(input: TimeOrRule): input is Date | DateTime<true> {
18
+ return typeof input !== "string";
19
+ }
20
+
21
+ export function isRule(input: TimeOrRule): input is string {
22
+ return typeof input === "string";
23
+ }
24
+
25
+ export function asDateTime(input: TimeOrRule): DateTime<true> | undefined {
26
+ if (isRule(input)) {
27
+ return;
28
+ } else if (DateTime.isDateTime(input)) {
29
+ return input;
30
+ } else {
31
+ const dateTime = DateTime.fromJSDate(input);
32
+ if (!dateTime.isValid) {
33
+ throw new Error("Unable to convert from Date to DateTime");
34
+ }
35
+ return dateTime;
36
+ }
37
+ }
38
+
39
+ export function toJSON(input: TimeOrRule) {
40
+ return isRule(input) ? input : input.toJSON();
41
+ }
42
+ }