@utiliread/primitives 1.0.0-14 → 1.0.0-141

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 (332) hide show
  1. package/dist/aggregate-id.d.ts +1 -0
  2. package/dist/breakdown-rule.d.ts +18 -0
  3. package/dist/{esm/register-converter.spec.d.ts → breakdown-rule.spec.d.ts} +1 -1
  4. package/dist/index.d.ts +23 -0
  5. package/dist/index.js +2713 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/index.mjs +2702 -0
  8. package/dist/index.mjs.map +1 -0
  9. package/dist/measure-id.d.ts +1 -0
  10. package/dist/measures/duration.d.ts +2 -0
  11. package/dist/measures/energy.d.ts +2 -0
  12. package/dist/measures/humidity.d.ts +2 -0
  13. package/dist/measures/infocode.d.ts +2 -0
  14. package/dist/measures/mass-flow.d.ts +3 -0
  15. package/dist/measures/mass.d.ts +2 -0
  16. package/dist/measures/noise.d.ts +3 -0
  17. package/dist/measures/power.d.ts +3 -0
  18. package/dist/measures/pressure.d.ts +3 -0
  19. package/dist/measures/reactive-energy.d.ts +2 -0
  20. package/dist/measures/reactive-power.d.ts +2 -0
  21. package/dist/measures/temperature.d.ts +3 -0
  22. package/dist/measures/time.d.ts +2 -0
  23. package/dist/measures/volume-flow.d.ts +3 -0
  24. package/dist/measures/volume.d.ts +2 -0
  25. package/dist/medium.d.ts +7 -0
  26. package/dist/medium.spec.d.ts +1 -0
  27. package/dist/number-formatter.d.ts +17 -0
  28. package/dist/{esm/number-formatter.spec.d.ts → number-formatter.spec.d.ts} +1 -1
  29. package/dist/optional.d.ts +1 -0
  30. package/dist/precision-number.d.ts +15 -0
  31. package/dist/precision-number.spec.d.ts +1 -0
  32. package/dist/{esm/register-convention.d.ts → register-convention.d.ts} +14 -14
  33. package/dist/{esm/register-convention.spec.d.ts → register-convention.spec.d.ts} +1 -1
  34. package/dist/register-definition.d.ts +13 -0
  35. package/dist/register-id.d.ts +1 -0
  36. package/dist/{esm/register-library.d.ts → register-library.d.ts} +15 -12
  37. package/dist/{esm/register-library.spec.d.ts → register-library.spec.d.ts} +1 -1
  38. package/dist/{esm/register-pack.d.ts → register-pack.d.ts} +4 -4
  39. package/dist/register-utils.d.ts +3 -0
  40. package/dist/registers/acoustic-noise.d.ts +8 -0
  41. package/dist/registers/ambient-temperature.d.ts +8 -0
  42. package/dist/registers/axioma-infocode.d.ts +3 -0
  43. package/dist/registers/consumer.d.ts +9 -0
  44. package/dist/registers/cooling-energy-inlet.d.ts +4 -0
  45. package/dist/registers/cooling-energy-outlet.d.ts +4 -0
  46. package/dist/registers/cooling-energy.d.ts +4 -0
  47. package/dist/registers/cooling.d.ts +15 -0
  48. package/dist/registers/device-addresses-kamdraft.d.ts +6 -0
  49. package/dist/registers/device-addresses-msisdn.d.ts +6 -0
  50. package/dist/registers/device-addresses-tchlr.d.ts +6 -0
  51. package/dist/registers/device-addresses-wmbus.d.ts +9 -0
  52. package/dist/registers/device-date-time.d.ts +2 -0
  53. package/dist/registers/device-date.d.ts +2 -0
  54. package/dist/registers/device-nominal-diameter.d.ts +2 -0
  55. package/dist/registers/device-permanent-volume-flow.d.ts +2 -0
  56. package/dist/registers/device-registers.d.ts +2 -0
  57. package/dist/registers/device-samples.d.ts +14 -0
  58. package/dist/registers/device-software-version.d.ts +2 -0
  59. package/dist/registers/device-time.d.ts +2 -0
  60. package/dist/registers/device.d.ts +8 -0
  61. package/dist/registers/diehl-infocode.d.ts +7 -0
  62. package/dist/registers/electrical-energy.d.ts +4 -0
  63. package/dist/registers/energy-inlet.d.ts +4 -0
  64. package/dist/registers/energy-outlet.d.ts +4 -0
  65. package/dist/registers/error-operating-time.d.ts +4 -0
  66. package/dist/registers/flow-temperature-aux.d.ts +8 -0
  67. package/dist/registers/flow-temperature-inlet.d.ts +8 -0
  68. package/dist/registers/flow-temperature-outlet.d.ts +8 -0
  69. package/dist/registers/flow-temperature.d.ts +8 -0
  70. package/dist/registers/heat-energy-inlet.d.ts +10 -0
  71. package/dist/registers/heat-energy-outlet.d.ts +10 -0
  72. package/dist/registers/heat-energy.d.ts +10 -0
  73. package/dist/registers/index.d.ts +71 -0
  74. package/dist/registers/infocode.d.ts +17 -0
  75. package/dist/registers/kamstrup-module-type.d.ts +2 -0
  76. package/dist/registers/kamstrup-multical-infocode.d.ts +9 -0
  77. package/dist/registers/landis-gyr-infocode.d.ts +4 -0
  78. package/dist/registers/landis-gyr-mbus-status.d.ts +4 -0
  79. package/dist/registers/mass-flow-inlet.d.ts +8 -0
  80. package/dist/registers/mass-flow-outlet.d.ts +8 -0
  81. package/dist/registers/mass-flow.d.ts +8 -0
  82. package/dist/registers/mass-inlet.d.ts +4 -0
  83. package/dist/registers/mass-outlet.d.ts +4 -0
  84. package/dist/registers/mass.d.ts +4 -0
  85. package/dist/registers/mbus-format-string-signature.d.ts +2 -0
  86. package/dist/registers/none.d.ts +2 -0
  87. package/dist/registers/operating-time.d.ts +4 -0
  88. package/dist/registers/place.d.ts +16 -0
  89. package/dist/registers/power-inlet.d.ts +8 -0
  90. package/dist/registers/power-outlet.d.ts +8 -0
  91. package/dist/registers/power.d.ts +8 -0
  92. package/dist/registers/pressure-inlet.d.ts +8 -0
  93. package/dist/registers/pressure-outlet.d.ts +8 -0
  94. package/dist/registers/pressure.d.ts +8 -0
  95. package/dist/registers/radiator-temperature.d.ts +8 -0
  96. package/dist/registers/reactive-energy.d.ts +4 -0
  97. package/dist/registers/relative-humidity.d.ts +2 -0
  98. package/dist/registers/remaining-battery-time.d.ts +4 -0
  99. package/dist/registers/time-last-exact-overhearing-arrived.d.ts +3 -0
  100. package/dist/registers/time-last-installation-mounted.d.ts +3 -0
  101. package/dist/registers/time-last-possible-candidate-overhearing-arrived.d.ts +3 -0
  102. package/dist/registers/time-last-sampled.d.ts +3 -0
  103. package/dist/registers/time.d.ts +7 -0
  104. package/dist/registers/volume-flow-inlet.d.ts +8 -0
  105. package/dist/registers/volume-flow-outlet.d.ts +8 -0
  106. package/dist/registers/volume-flow.d.ts +8 -0
  107. package/dist/registers/volume-inlet.d.ts +4 -0
  108. package/dist/registers/volume-outlet.d.ts +4 -0
  109. package/dist/registers/volume-pulse-input-a.d.ts +4 -0
  110. package/dist/registers/volume-pulse-input-b.d.ts +4 -0
  111. package/dist/registers/volume.d.ts +4 -0
  112. package/dist/repository.d.ts +10 -0
  113. package/dist/repository.spec.d.ts +1 -0
  114. package/dist/step.d.ts +15 -0
  115. package/dist/step.spec.d.ts +1 -0
  116. package/dist/time-or-rule.d.ts +10 -0
  117. package/dist/unit-id.d.ts +1 -0
  118. package/locales/da/aggregates.json +42 -0
  119. package/locales/da/measures.json +50 -0
  120. package/locales/da/mediums.json +17 -0
  121. package/locales/da/registers.json +1150 -0
  122. package/locales/da/units.json +327 -0
  123. package/locales/en/aggregates.json +42 -0
  124. package/locales/en/measures.json +50 -0
  125. package/locales/en/mediums.json +17 -0
  126. package/locales/en/registers.json +1150 -0
  127. package/locales/en/units.json +327 -0
  128. package/package.json +35 -18
  129. package/rollup.config.mjs +31 -0
  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 +58 -19
  134. package/src/measure-id.ts +17 -12
  135. package/src/measures/duration.ts +11 -0
  136. package/{dist/esm/unit-id.js → src/measures/energy.ts} +13 -11
  137. package/src/measures/humidity.ts +3 -0
  138. package/src/measures/infocode.ts +3 -0
  139. package/src/measures/mass-flow.ts +19 -0
  140. package/src/measures/mass.ts +10 -0
  141. package/src/measures/noise.ts +5 -0
  142. package/src/measures/power.ts +23 -0
  143. package/src/measures/pressure.ts +9 -0
  144. package/src/measures/reactive-energy.ts +7 -0
  145. package/src/measures/reactive-power.ts +3 -0
  146. package/src/measures/temperature.ts +9 -0
  147. package/src/measures/time.ts +3 -0
  148. package/src/measures/volume-flow.ts +25 -0
  149. package/src/measures/volume.ts +3 -0
  150. package/src/medium.spec.ts +12 -0
  151. package/src/medium.ts +47 -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 +251 -0
  156. package/src/precision-number.ts +129 -0
  157. package/src/register-convention.spec.ts +52 -43
  158. package/src/register-convention.ts +70 -61
  159. package/src/register-definition.ts +23 -17
  160. package/src/register-id.ts +288 -191
  161. package/src/register-library.spec.ts +41 -34
  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/axioma-infocode.ts +16 -0
  168. package/src/registers/consumer.ts +17 -0
  169. package/src/registers/cooling-energy-inlet.ts +23 -0
  170. package/src/registers/cooling-energy-outlet.ts +23 -0
  171. package/src/registers/cooling-energy.ts +23 -0
  172. package/src/registers/cooling.ts +113 -0
  173. package/src/registers/device-addresses-kamdraft.ts +14 -0
  174. package/src/registers/device-addresses-msisdn.ts +14 -0
  175. package/src/registers/device-addresses-tchlr.ts +14 -0
  176. package/src/registers/device-addresses-wmbus.ts +17 -0
  177. package/src/registers/device-date-time.ts +9 -0
  178. package/src/registers/device-date.ts +9 -0
  179. package/src/registers/device-nominal-diameter.ts +9 -0
  180. package/src/registers/device-permanent-volume-flow.ts +9 -0
  181. package/src/registers/device-registers.ts +9 -0
  182. package/src/registers/device-samples.ts +37 -0
  183. package/src/registers/device-software-version.ts +8 -0
  184. package/src/registers/device-time.ts +9 -0
  185. package/src/registers/device.ts +16 -0
  186. package/src/registers/diehl-infocode.ts +44 -0
  187. package/src/registers/electrical-energy.ts +23 -0
  188. package/src/registers/energy-inlet.ts +23 -0
  189. package/src/registers/energy-outlet.ts +23 -0
  190. package/src/registers/error-operating-time.ts +23 -0
  191. package/src/registers/flow-temperature-aux.ts +52 -0
  192. package/src/registers/flow-temperature-inlet.ts +52 -0
  193. package/src/registers/flow-temperature-outlet.ts +52 -0
  194. package/src/registers/flow-temperature.ts +52 -0
  195. package/src/registers/heat-energy-inlet.ts +65 -0
  196. package/src/registers/heat-energy-outlet.ts +65 -0
  197. package/src/registers/heat-energy.ts +65 -0
  198. package/src/registers/index.ts +71 -0
  199. package/src/registers/infocode.ts +70 -0
  200. package/src/registers/kamstrup-module-type.ts +8 -0
  201. package/src/registers/kamstrup-multical-infocode.ts +58 -0
  202. package/src/registers/landis-gyr-infocode.ts +23 -0
  203. package/src/registers/landis-gyr-mbus-status.ts +23 -0
  204. package/src/registers/mass-flow-inlet.ts +52 -0
  205. package/src/registers/mass-flow-outlet.ts +52 -0
  206. package/src/registers/mass-flow.ts +52 -0
  207. package/src/registers/mass-inlet.ts +23 -0
  208. package/src/registers/mass-outlet.ts +23 -0
  209. package/src/registers/mass.ts +23 -0
  210. package/src/registers/mbus-format-string-signature.ts +8 -0
  211. package/src/registers/none.ts +8 -0
  212. package/src/registers/operating-time.ts +23 -0
  213. package/src/registers/place.ts +31 -0
  214. package/src/registers/power-inlet.ts +52 -0
  215. package/src/registers/power-outlet.ts +52 -0
  216. package/src/registers/power.ts +52 -0
  217. package/src/registers/pressure-inlet.ts +52 -0
  218. package/src/registers/pressure-outlet.ts +52 -0
  219. package/src/registers/pressure.ts +52 -0
  220. package/src/registers/radiator-temperature.ts +52 -0
  221. package/src/registers/reactive-energy.ts +23 -0
  222. package/src/registers/relative-humidity.ts +8 -0
  223. package/src/registers/remaining-battery-time.ts +23 -0
  224. package/src/registers/time-last-exact-overhearing-arrived.ts +19 -0
  225. package/src/registers/time-last-installation-mounted.ts +19 -0
  226. package/src/registers/time-last-possible-candidate-overhearing-arrived.ts +21 -0
  227. package/src/registers/time-last-sampled.ts +19 -0
  228. package/src/registers/time.ts +45 -0
  229. package/src/registers/volume-flow-inlet.ts +52 -0
  230. package/src/registers/volume-flow-outlet.ts +52 -0
  231. package/src/registers/volume-flow.ts +52 -0
  232. package/src/registers/volume-inlet.ts +23 -0
  233. package/src/registers/volume-outlet.ts +23 -0
  234. package/src/registers/volume-pulse-input-a.ts +23 -0
  235. package/src/registers/volume-pulse-input-b.ts +23 -0
  236. package/src/registers/volume.ts +23 -0
  237. package/src/repository.spec.ts +30 -0
  238. package/src/repository.ts +26 -0
  239. package/src/step.spec.ts +37 -0
  240. package/src/step.ts +45 -0
  241. package/src/time-or-rule.ts +42 -0
  242. package/src/unit-id.ts +108 -100
  243. package/tsconfig.json +14 -14
  244. package/web-test-runner.config.mjs +7 -0
  245. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/base.css +0 -224
  246. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/block-navigation.js +0 -79
  247. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/favicon.png +0 -0
  248. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/index.html +0 -96
  249. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/prettify.css +0 -1
  250. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/prettify.js +0 -2
  251. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/sort-arrow-sprite.png +0 -0
  252. package/coverage/Chrome Headless 90.0.4430.85 (Windows 10)/html/sorter.js +0 -170
  253. package/dist/cjs/aggregate-id.js +0 -3
  254. package/dist/cjs/aggregate-id.js.map +0 -1
  255. package/dist/cjs/consumption-type-id.js +0 -3
  256. package/dist/cjs/consumption-type-id.js.map +0 -1
  257. package/dist/cjs/index.js +0 -10
  258. package/dist/cjs/index.js.map +0 -1
  259. package/dist/cjs/measure-id.js +0 -3
  260. package/dist/cjs/measure-id.js.map +0 -1
  261. package/dist/cjs/number-formatter.js +0 -51
  262. package/dist/cjs/number-formatter.js.map +0 -1
  263. package/dist/cjs/number-formatter.spec.js +0 -77
  264. package/dist/cjs/number-formatter.spec.js.map +0 -1
  265. package/dist/cjs/register-convention.js +0 -61
  266. package/dist/cjs/register-convention.js.map +0 -1
  267. package/dist/cjs/register-convention.spec.js +0 -39
  268. package/dist/cjs/register-convention.spec.js.map +0 -1
  269. package/dist/cjs/register-converter.js +0 -31
  270. package/dist/cjs/register-converter.js.map +0 -1
  271. package/dist/cjs/register-converter.spec.js +0 -29
  272. package/dist/cjs/register-converter.spec.js.map +0 -1
  273. package/dist/cjs/register-definition.js +0 -3
  274. package/dist/cjs/register-definition.js.map +0 -1
  275. package/dist/cjs/register-id.js +0 -3
  276. package/dist/cjs/register-id.js.map +0 -1
  277. package/dist/cjs/register-library.js +0 -45
  278. package/dist/cjs/register-library.js.map +0 -1
  279. package/dist/cjs/register-library.spec.js +0 -31
  280. package/dist/cjs/register-library.spec.js.map +0 -1
  281. package/dist/cjs/register-pack.js +0 -3
  282. package/dist/cjs/register-pack.js.map +0 -1
  283. package/dist/cjs/register-utils.js +0 -8
  284. package/dist/cjs/register-utils.js.map +0 -1
  285. package/dist/cjs/unit-id.js +0 -14
  286. package/dist/cjs/unit-id.js.map +0 -1
  287. package/dist/esm/aggregate-id.d.ts +0 -1
  288. package/dist/esm/aggregate-id.js +0 -2
  289. package/dist/esm/aggregate-id.js.map +0 -1
  290. package/dist/esm/consumption-type-id.d.ts +0 -1
  291. package/dist/esm/consumption-type-id.js +0 -2
  292. package/dist/esm/consumption-type-id.js.map +0 -1
  293. package/dist/esm/index.d.ts +0 -9
  294. package/dist/esm/index.js +0 -5
  295. package/dist/esm/index.js.map +0 -1
  296. package/dist/esm/measure-id.d.ts +0 -1
  297. package/dist/esm/measure-id.js +0 -2
  298. package/dist/esm/measure-id.js.map +0 -1
  299. package/dist/esm/number-formatter.d.ts +0 -6
  300. package/dist/esm/number-formatter.js +0 -48
  301. package/dist/esm/number-formatter.js.map +0 -1
  302. package/dist/esm/number-formatter.spec.js +0 -75
  303. package/dist/esm/number-formatter.spec.js.map +0 -1
  304. package/dist/esm/register-convention.js +0 -57
  305. package/dist/esm/register-convention.js.map +0 -1
  306. package/dist/esm/register-convention.spec.js +0 -37
  307. package/dist/esm/register-convention.spec.js.map +0 -1
  308. package/dist/esm/register-converter.d.ts +0 -9
  309. package/dist/esm/register-converter.js +0 -28
  310. package/dist/esm/register-converter.js.map +0 -1
  311. package/dist/esm/register-converter.spec.js +0 -27
  312. package/dist/esm/register-converter.spec.js.map +0 -1
  313. package/dist/esm/register-definition.d.ts +0 -11
  314. package/dist/esm/register-definition.js +0 -2
  315. package/dist/esm/register-definition.js.map +0 -1
  316. package/dist/esm/register-id.d.ts +0 -1
  317. package/dist/esm/register-id.js +0 -2
  318. package/dist/esm/register-id.js.map +0 -1
  319. package/dist/esm/register-library.js +0 -42
  320. package/dist/esm/register-library.js.map +0 -1
  321. package/dist/esm/register-library.spec.js +0 -29
  322. package/dist/esm/register-library.spec.js.map +0 -1
  323. package/dist/esm/register-pack.js +0 -2
  324. package/dist/esm/register-pack.js.map +0 -1
  325. package/dist/esm/register-utils.d.ts +0 -3
  326. package/dist/esm/register-utils.js +0 -4
  327. package/dist/esm/register-utils.js.map +0 -1
  328. package/dist/esm/unit-id.d.ts +0 -2
  329. package/dist/esm/unit-id.js.map +0 -1
  330. package/karma.config.js +0 -32
  331. package/src/consumption-type-id.ts +0 -8
  332. package/tsconfig.cjs.json +0 -9
@@ -0,0 +1,23 @@
1
+ import type { 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 type { 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,30 @@
1
+ import { Repository } from "./repository";
2
+ import { expect } from "chai";
3
+
4
+ describe("ctor", () => {
5
+ it.only("creates", () => {
6
+ expect(Repository("gpkv", "gjoel")).to.equal("gpkv/gjoel");
7
+ expect(Repository("gpkv/gjoel")).to.equal("gpkv/gjoel");
8
+ });
9
+ it.only("throws if wrong format", () => {
10
+ expect(() => Repository("invalid")).to.throw();
11
+ expect(() => Repository("[object%20Object]", "dashboard")).to.throw();
12
+ });
13
+ });
14
+
15
+ describe("isRepository", () => {
16
+ it("should correctly determine if input is a Repository", () => {
17
+ expect(Repository.isRepository("some/test")).to.equal(true);
18
+ expect(Repository.isRepository("so-me/te-st")).to.equal(true);
19
+ expect(Repository.isRepository("NOT/REPO")).to.equal(false);
20
+ expect(Repository.isRepository("notarepo")).to.equal(false);
21
+ });
22
+ });
23
+
24
+ describe("split", () => {
25
+ it("splits into correct parts", () => {
26
+ const { team, name } = Repository.split(Repository("gpkv", "gjoel"));
27
+ expect(team).to.equal("gpkv");
28
+ expect(name).to.equal("gjoel");
29
+ });
30
+ });
@@ -0,0 +1,26 @@
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
+ const repo = name ? `${repoOrTeam}/${name}` : repoOrTeam;
8
+ if (!Repository.isRepository(repo)) {
9
+ throw new TypeError("Invalid repository format");
10
+ }
11
+ return repo;
12
+ }
13
+
14
+ export namespace Repository {
15
+ export function isRepository(input: string): input is Repository {
16
+ return /^[a-z][a-z0-9-]*\/[a-z][a-z0-9-]*$/.test(input);
17
+ }
18
+
19
+ export function split(repo: Repository) {
20
+ const parts = repo.split("/");
21
+ return {
22
+ team: parts[0],
23
+ name: parts[1],
24
+ };
25
+ }
26
+ }
@@ -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,45 @@
1
+ import { DateTime, Duration } from "luxon";
2
+
3
+ export type Step = "hour" | "day" | "week" | "month" | "year";
4
+
5
+ export enum DayOfWeek {
6
+ Monday = 1,
7
+ Tuesday = 2,
8
+ Wednesday = 3,
9
+ Thursday = 4,
10
+ Friday = 5,
11
+ Saturday = 6,
12
+ Sunday = 7,
13
+ }
14
+
15
+ export namespace Step {
16
+ export function startOf(
17
+ dateTime: DateTime,
18
+ step: Step,
19
+ firstDayOfWeek?: DayOfWeek,
20
+ ): DateTime {
21
+ if (step === "week") {
22
+ const value = dateTime
23
+ .startOf("day")
24
+ .set({ weekday: firstDayOfWeek ?? DayOfWeek.Monday });
25
+ return value > dateTime ? value.minus({ days: 7 }) : value;
26
+ } else {
27
+ return dateTime.startOf(step);
28
+ }
29
+ }
30
+
31
+ export function asDuration(step: Step, amount = 1): Duration {
32
+ switch (step) {
33
+ case "hour":
34
+ return Duration.fromObject({ hours: amount });
35
+ case "day":
36
+ return Duration.fromObject({ days: amount });
37
+ case "week":
38
+ return Duration.fromObject({ days: 7 * amount });
39
+ case "month":
40
+ return Duration.fromObject({ months: amount });
41
+ case "year":
42
+ return Duration.fromObject({ years: amount });
43
+ }
44
+ }
45
+ }
@@ -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
+ }
package/src/unit-id.ts CHANGED
@@ -1,100 +1,108 @@
1
- export type UnitId =
2
- "unitless" |
3
-
4
- "milliWattHour" |
5
- "wattHour" |
6
- "kiloWattHour" |
7
- "megaWattHour" |
8
- "gigaWattHour" |
9
- "calorie" |
10
- "kiloCalorie" |
11
- "megaCalorie" |
12
-
13
- "joule" |
14
- "kiloJoule" |
15
- "megaJoule" |
16
- "gigaJoule" |
17
-
18
- "liter" |
19
- "cubicMeter" |
20
-
21
- "fluidOunce" |
22
- "gallon" |
23
-
24
- "gram" |
25
- "kiloGram" |
26
- "tonne" |
27
-
28
- "ounce" |
29
- "pound" |
30
- "ton" |
31
-
32
- "second" |
33
- "minute" |
34
- "hour" |
35
- "day" |
36
- "week" |
37
- "month" |
38
- "year" |
39
-
40
- "milliWatt" |
41
- "watt" |
42
- "kiloWatt" |
43
- "megaWatt" |
44
- "gigaWatt" |
45
-
46
- "joulesPerSecond" |
47
- "joulesPerMinute" |
48
- "joulesPerHour" |
49
-
50
- "litersPerSecond" |
51
- "litersPerMinute" |
52
- "litersPerHour" |
53
-
54
- "cubicMetersPerSecond" |
55
- "cubicMetersPerMinute" |
56
- "cubicMetersPerHour" |
57
-
58
- "fluidOuncesPerSecond" |
59
- "fluidOuncesPerMinute" |
60
- "fluidOuncesPerHour" |
61
-
62
- "gallonsPerSecond" |
63
- "gallonsPerMinute" |
64
- "gallonsPerHour" |
65
-
66
- "gramsPerSecond" |
67
- "gramsPerMinute" |
68
- "gramsPerHour" |
69
-
70
- "kiloGramsPerSecond" |
71
- "kiloGramsPerMinute" |
72
- "kiloGramsPerHour" |
73
-
74
- "celcius" |
75
- "kelvin" |
76
- "fahrenheit" |
77
-
78
- "var" |
79
- "kiloVar" |
80
- "megaVar" |
81
-
82
- "varHour" |
83
- "kiloVarHour" |
84
- "megaVarHour" |
85
-
86
- "percentage" |
87
-
88
- "literCelcius" |
89
- "cubicMeterCelcius";
90
-
91
- export const energyUnits: UnitId[] = [
92
- "milliWattHour",
93
- "wattHour",
94
- "kiloWattHour",
95
- "megaWattHour",
96
- "gigaWattHour",
97
- "calorie",
98
- "kiloCalorie",
99
- "megaCalorie",
100
- ];
1
+ export type UnitId =
2
+ | "unitless"
3
+ | "milliWattHour"
4
+ | "wattHour"
5
+ | "kiloWattHour"
6
+ | "megaWattHour"
7
+ | "gigaWattHour"
8
+ | "calorie"
9
+ | "kiloCalorie"
10
+ | "megaCalorie"
11
+ | "gigaCalorie"
12
+ | "joule"
13
+ | "kiloJoule"
14
+ | "megaJoule"
15
+ | "gigaJoule"
16
+ | "liter"
17
+ | "cubicMeter"
18
+ | "fluidOunce"
19
+ | "gallon"
20
+ | "gram"
21
+ | "kiloGram"
22
+ | "tonne"
23
+ | "ounce"
24
+ | "pound"
25
+ | "ton"
26
+ | "second"
27
+ | "minute"
28
+ | "hour"
29
+ | "day"
30
+ | "week"
31
+ | "month"
32
+ | "year"
33
+ | "milliWatt"
34
+ | "milliWatt2"
35
+ | "watt"
36
+ | "watt2"
37
+ | "kiloWatt"
38
+ | "kiloWatt2"
39
+ | "megaWatt"
40
+ | "megaWatt2"
41
+ | "gigaWatt"
42
+ | "gigaWatt2"
43
+ | "joulesPerSecond"
44
+ | "joulesPerSecond2"
45
+ | "joulesPerMinute"
46
+ | "joulesPerMinute2"
47
+ | "joulesPerHour"
48
+ | "joulesPerHour2"
49
+ | "litersPerSecond"
50
+ | "litersPerSecond2"
51
+ | "litersPerMinute"
52
+ | "litersPerMinute2"
53
+ | "litersPerHour"
54
+ | "litersPerHour2"
55
+ | "cubicMetersPerSecond"
56
+ | "cubicMetersPerSecond2"
57
+ | "cubicMetersPerMinute"
58
+ | "cubicMetersPerMinute2"
59
+ | "cubicMetersPerHour"
60
+ | "cubicMetersPerHour2"
61
+ | "fluidOuncesPerSecond"
62
+ | "fluidOuncesPerSecond2"
63
+ | "fluidOuncesPerMinute"
64
+ | "fluidOuncesPerMinute2"
65
+ | "fluidOuncesPerHour"
66
+ | "fluidOuncesPerHour2"
67
+ | "gallonsPerSecond"
68
+ | "gallonsPerSecond2"
69
+ | "gallonsPerMinute"
70
+ | "gallonsPerMinute2"
71
+ | "gallonsPerHour"
72
+ | "gallonsPerHour2"
73
+ | "gramsPerSecond"
74
+ | "gramsPerSecond2"
75
+ | "gramsPerMinute"
76
+ | "gramsPerMinute2"
77
+ | "gramsPerHour"
78
+ | "gramsPerHour2"
79
+ | "kiloGramsPerSecond"
80
+ | "kiloGramsPerSecond2"
81
+ | "kiloGramsPerMinute"
82
+ | "kiloGramsPerMinute2"
83
+ | "kiloGramsPerHour"
84
+ | "kiloGramsPerHour2"
85
+ | "celcius"
86
+ | "celcius2"
87
+ | "kelvin"
88
+ | "kelvin2"
89
+ | "fahrenheit"
90
+ | "fahrenheit2"
91
+ | "bar"
92
+ | "bar2"
93
+ | "pascal"
94
+ | "pascal2"
95
+ | "kiloPascal"
96
+ | "kiloPascal2"
97
+ | "decibel"
98
+ | "decibel2"
99
+ | "var"
100
+ | "kiloVar"
101
+ | "megaVar"
102
+ | "varHour"
103
+ | "kiloVarHour"
104
+ | "megaVarHour"
105
+ | "percentage"
106
+ | "literCelcius"
107
+ | "cubicMeterCelcius"
108
+ | "json";
package/tsconfig.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
- "compilerOptions": {
3
- "target": "es5",
4
- "module": "esnext",
5
- "moduleResolution": "node",
6
- "declaration": true,
7
- "sourceMap": true,
8
- "experimentalDecorators": true,
9
- "emitDecoratorMetadata": true,
10
- "strict": true,
11
- "rootDir": "src",
12
- "outDir": "dist/esm",
13
- "lib": [ "ES2018", "DOM" ]
14
- }
15
- }
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Bundler",
6
+ "declaration": true,
7
+ "sourceMap": true,
8
+ "strict": true,
9
+ "stripInternal": true,
10
+ "rootDir": "src",
11
+ "outDir": "dist",
12
+ "lib": ["ES2020"],
13
+ "types": ["mocha"]
14
+ }
15
+ }
@@ -0,0 +1,7 @@
1
+ import { esbuildPlugin } from "@web/dev-server-esbuild";
2
+
3
+ export default {
4
+ nodeResolve: true,
5
+ files: ["src/**/*.spec.ts"],
6
+ plugins: [esbuildPlugin({ ts: true })],
7
+ };