@utiliread/primitives 1.0.0-74 → 1.0.0-76

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 (152) hide show
  1. package/locales/da/aggregates.json +7 -7
  2. package/locales/da/consumption-types.json +6 -6
  3. package/locales/da/measures.json +15 -15
  4. package/locales/da/registers.json +362 -221
  5. package/locales/da/units.json +92 -92
  6. package/locales/en/aggregates.json +7 -7
  7. package/locales/en/consumption-types.json +6 -6
  8. package/locales/en/measures.json +15 -15
  9. package/locales/en/registers.json +371 -221
  10. package/locales/en/units.json +92 -92
  11. package/package.json +7 -11
  12. package/src/aggregate-id.ts +8 -8
  13. package/src/consumption-type-id.ts +7 -7
  14. package/src/index.ts +39 -35
  15. package/src/measure-id.ts +14 -14
  16. package/src/number-formatter.spec.ts +509 -65
  17. package/src/number-formatter.ts +43 -20
  18. package/src/optional.ts +1 -1
  19. package/src/precision-number.spec.ts +28 -28
  20. package/src/precision-number.ts +44 -36
  21. package/src/register-convention.spec.ts +14 -5
  22. package/src/register-convention.ts +14 -5
  23. package/src/register-definition.ts +23 -23
  24. package/src/register-id.ts +266 -327
  25. package/src/register-library.spec.ts +5 -5
  26. package/src/register-library.ts +13 -7
  27. package/src/register-pack.ts +1 -1
  28. package/src/register-utils.ts +1 -1
  29. package/src/repository.spec.ts +20 -20
  30. package/src/repository.ts +24 -24
  31. package/src/step.spec.ts +13 -6
  32. package/src/step.ts +45 -37
  33. package/src/time-or-rule.ts +17 -17
  34. package/src/unit-id.ts +98 -119
  35. package/tsconfig.json +1 -0
  36. package/web-test-runner.config.mjs +7 -0
  37. package/dist/cjs/aggregate-id.js +0 -3
  38. package/dist/cjs/aggregate-id.js.map +0 -1
  39. package/dist/cjs/consumption-type-id.js +0 -3
  40. package/dist/cjs/consumption-type-id.js.map +0 -1
  41. package/dist/cjs/index.js +0 -22
  42. package/dist/cjs/index.js.map +0 -1
  43. package/dist/cjs/measure-id.js +0 -3
  44. package/dist/cjs/measure-id.js.map +0 -1
  45. package/dist/cjs/number-formatter.js +0 -82
  46. package/dist/cjs/number-formatter.js.map +0 -1
  47. package/dist/cjs/number-formatter.spec.js +0 -98
  48. package/dist/cjs/number-formatter.spec.js.map +0 -1
  49. package/dist/cjs/optional.js +0 -3
  50. package/dist/cjs/optional.js.map +0 -1
  51. package/dist/cjs/precision-number.js +0 -36
  52. package/dist/cjs/precision-number.js.map +0 -1
  53. package/dist/cjs/precision-number.spec.js +0 -27
  54. package/dist/cjs/precision-number.spec.js.map +0 -1
  55. package/dist/cjs/register-convention.js +0 -56
  56. package/dist/cjs/register-convention.js.map +0 -1
  57. package/dist/cjs/register-convention.spec.js +0 -39
  58. package/dist/cjs/register-convention.spec.js.map +0 -1
  59. package/dist/cjs/register-definition.js +0 -3
  60. package/dist/cjs/register-definition.js.map +0 -1
  61. package/dist/cjs/register-id.js +0 -3
  62. package/dist/cjs/register-id.js.map +0 -1
  63. package/dist/cjs/register-library.js +0 -51
  64. package/dist/cjs/register-library.js.map +0 -1
  65. package/dist/cjs/register-library.spec.js +0 -37
  66. package/dist/cjs/register-library.spec.js.map +0 -1
  67. package/dist/cjs/register-pack.js +0 -3
  68. package/dist/cjs/register-pack.js.map +0 -1
  69. package/dist/cjs/register-utils.js +0 -8
  70. package/dist/cjs/register-utils.js.map +0 -1
  71. package/dist/cjs/repository.js +0 -26
  72. package/dist/cjs/repository.js.map +0 -1
  73. package/dist/cjs/repository.spec.js +0 -21
  74. package/dist/cjs/repository.spec.js.map +0 -1
  75. package/dist/cjs/step.js +0 -41
  76. package/dist/cjs/step.js.map +0 -1
  77. package/dist/cjs/step.spec.js +0 -29
  78. package/dist/cjs/step.spec.js.map +0 -1
  79. package/dist/cjs/time-or-rule.js +0 -19
  80. package/dist/cjs/time-or-rule.js.map +0 -1
  81. package/dist/cjs/unit-id.js +0 -14
  82. package/dist/cjs/unit-id.js.map +0 -1
  83. package/dist/esm/aggregate-id.d.ts +0 -1
  84. package/dist/esm/aggregate-id.js +0 -2
  85. package/dist/esm/aggregate-id.js.map +0 -1
  86. package/dist/esm/consumption-type-id.d.ts +0 -1
  87. package/dist/esm/consumption-type-id.js +0 -2
  88. package/dist/esm/consumption-type-id.js.map +0 -1
  89. package/dist/esm/index.d.ts +0 -16
  90. package/dist/esm/index.js +0 -10
  91. package/dist/esm/index.js.map +0 -1
  92. package/dist/esm/measure-id.d.ts +0 -1
  93. package/dist/esm/measure-id.js +0 -2
  94. package/dist/esm/measure-id.js.map +0 -1
  95. package/dist/esm/number-formatter.d.ts +0 -17
  96. package/dist/esm/number-formatter.js +0 -79
  97. package/dist/esm/number-formatter.js.map +0 -1
  98. package/dist/esm/number-formatter.spec.d.ts +0 -1
  99. package/dist/esm/number-formatter.spec.js +0 -96
  100. package/dist/esm/number-formatter.spec.js.map +0 -1
  101. package/dist/esm/optional.d.ts +0 -1
  102. package/dist/esm/optional.js +0 -2
  103. package/dist/esm/optional.js.map +0 -1
  104. package/dist/esm/precision-number.d.ts +0 -11
  105. package/dist/esm/precision-number.js +0 -32
  106. package/dist/esm/precision-number.js.map +0 -1
  107. package/dist/esm/precision-number.spec.d.ts +0 -1
  108. package/dist/esm/precision-number.spec.js +0 -25
  109. package/dist/esm/precision-number.spec.js.map +0 -1
  110. package/dist/esm/register-convention.d.ts +0 -14
  111. package/dist/esm/register-convention.js +0 -52
  112. package/dist/esm/register-convention.js.map +0 -1
  113. package/dist/esm/register-convention.spec.d.ts +0 -1
  114. package/dist/esm/register-convention.spec.js +0 -37
  115. package/dist/esm/register-convention.spec.js.map +0 -1
  116. package/dist/esm/register-definition.d.ts +0 -13
  117. package/dist/esm/register-definition.js +0 -2
  118. package/dist/esm/register-definition.js.map +0 -1
  119. package/dist/esm/register-id.d.ts +0 -1
  120. package/dist/esm/register-id.js +0 -2
  121. package/dist/esm/register-id.js.map +0 -1
  122. package/dist/esm/register-library.d.ts +0 -15
  123. package/dist/esm/register-library.js +0 -48
  124. package/dist/esm/register-library.js.map +0 -1
  125. package/dist/esm/register-library.spec.d.ts +0 -1
  126. package/dist/esm/register-library.spec.js +0 -35
  127. package/dist/esm/register-library.spec.js.map +0 -1
  128. package/dist/esm/register-pack.d.ts +0 -4
  129. package/dist/esm/register-pack.js +0 -2
  130. package/dist/esm/register-pack.js.map +0 -1
  131. package/dist/esm/register-utils.d.ts +0 -3
  132. package/dist/esm/register-utils.js +0 -4
  133. package/dist/esm/register-utils.js.map +0 -1
  134. package/dist/esm/repository.d.ts +0 -9
  135. package/dist/esm/repository.js +0 -22
  136. package/dist/esm/repository.js.map +0 -1
  137. package/dist/esm/repository.spec.d.ts +0 -1
  138. package/dist/esm/repository.spec.js +0 -19
  139. package/dist/esm/repository.spec.js.map +0 -1
  140. package/dist/esm/step.d.ts +0 -15
  141. package/dist/esm/step.js +0 -38
  142. package/dist/esm/step.js.map +0 -1
  143. package/dist/esm/step.spec.d.ts +0 -1
  144. package/dist/esm/step.spec.js +0 -27
  145. package/dist/esm/step.spec.js.map +0 -1
  146. package/dist/esm/time-or-rule.d.ts +0 -7
  147. package/dist/esm/time-or-rule.js +0 -16
  148. package/dist/esm/time-or-rule.js.map +0 -1
  149. package/dist/esm/unit-id.d.ts +0 -2
  150. package/dist/esm/unit-id.js +0 -11
  151. package/dist/esm/unit-id.js.map +0 -1
  152. package/karma.config.js +0 -32
@@ -38,50 +38,73 @@ class Formatter {
38
38
  : value.toPrecision(precision);
39
39
  }
40
40
 
41
- public toLocalePrecision(value: number, precision: number, maxDecimals?: number) {
42
- return this.toPrecision(value, precision, maxDecimals)
43
- .replace(invariantDecimalSeparator, localeDecimalSeparator);
41
+ public toLocalePrecision(
42
+ value: number,
43
+ precision: number,
44
+ maxDecimals?: number,
45
+ ) {
46
+ return this.toPrecision(value, precision, maxDecimals).replace(
47
+ invariantDecimalSeparator,
48
+ localeDecimalSeparator,
49
+ );
44
50
  }
45
51
 
46
52
  public toFixed(value: number, precision: number, maxDecimals?: number) {
47
53
  const parts = this.getParts(value, precision, maxDecimals);
48
54
  if (parts.noOfCoefficientDecimals < parts.exponent) {
49
- const number = parts.invariantCoefficientString.replace(invariantDecimalSeparator, "");
55
+ const number = parts.invariantCoefficientString.replace(
56
+ invariantDecimalSeparator,
57
+ "",
58
+ );
50
59
  const zeros = parts.exponent - parts.noOfCoefficientDecimals;
51
60
  return `${number}${"0".repeat(zeros)}`;
52
- }
53
- else {
61
+ } else {
54
62
  return parts.invariantPrecisionString;
55
63
  }
56
64
  }
57
65
 
58
- public toLocaleFixed(value: number, precision: number, maxDecimals?: number) {
59
- return this.toFixed(value, precision, maxDecimals)
60
- .replace(invariantDecimalSeparator, localeDecimalSeparator);
66
+ public toLocaleFixed(
67
+ value: number,
68
+ precision: number,
69
+ maxDecimals?: number,
70
+ ) {
71
+ return this.toFixed(value, precision, maxDecimals).replace(
72
+ invariantDecimalSeparator,
73
+ localeDecimalSeparator,
74
+ );
61
75
  }
62
76
 
63
- public getParts(value: number, precision: number, maxDecimals?: number): Parts {
77
+ public getParts(
78
+ value: number,
79
+ precision: number,
80
+ maxDecimals?: number,
81
+ ): Parts {
64
82
  const precisionString = this.toPrecision(value, precision, maxDecimals);
65
83
  if (precisionString.indexOf("e") >= 0) {
66
84
  const match = /(.*)e([\+-]\d+)$/.exec(precisionString)!;
67
85
  const coefficientString = match[1];
68
86
  const exponent = parseInt(match[2]);
69
- const decimalSeparatorIndex = coefficientString.indexOf(invariantDecimalSeparator);
70
- const noOfCoefficientDecimals = decimalSeparatorIndex >= 0
71
- ? coefficientString.length - decimalSeparatorIndex - 1
72
- : 0;
87
+ const decimalSeparatorIndex = coefficientString.indexOf(
88
+ invariantDecimalSeparator,
89
+ );
90
+ const noOfCoefficientDecimals =
91
+ decimalSeparatorIndex >= 0
92
+ ? coefficientString.length - decimalSeparatorIndex - 1
93
+ : 0;
73
94
  return {
74
95
  invariantPrecisionString: precisionString,
75
96
  invariantCoefficientString: coefficientString,
76
97
  exponent,
77
98
  noOfCoefficientDecimals,
78
99
  };
79
- }
80
- else {
81
- const decimalSeparatorIndex = precisionString.indexOf(invariantDecimalSeparator);
82
- const noOfCoefficientDecimals = decimalSeparatorIndex >= 0
83
- ? precisionString.length - decimalSeparatorIndex - 1
84
- : 0;
100
+ } else {
101
+ const decimalSeparatorIndex = precisionString.indexOf(
102
+ invariantDecimalSeparator,
103
+ );
104
+ const noOfCoefficientDecimals =
105
+ decimalSeparatorIndex >= 0
106
+ ? precisionString.length - decimalSeparatorIndex - 1
107
+ : 0;
85
108
  return {
86
109
  invariantPrecisionString: precisionString,
87
110
  invariantCoefficientString: precisionString,
package/src/optional.ts CHANGED
@@ -1 +1 @@
1
- export type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
1
+ export type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
@@ -1,28 +1,28 @@
1
- import { expect } from "chai";
2
- import { PrecisionNumber } from "./precision-number";
3
-
4
- describe("precision-number", () => {
5
- it("should not parse ''", () => {
6
- const number = PrecisionNumber.parse("");
7
- expect(Number.isNaN(number.value)).to.equal(true);
8
- expect(number.precision).to.equal(0);
9
- });
10
-
11
- it("should parse '1'", () => {
12
- const number = PrecisionNumber.parse("1");
13
- expect(number.value).to.equal(1);
14
- expect(number.precision).to.equal(1);
15
- });
16
-
17
- it("should parse '1.'", () => {
18
- const number = PrecisionNumber.parse("1.");
19
- expect(number.value).to.equal(1);
20
- expect(number.precision).to.equal(2);
21
- });
22
-
23
- it("should parse '1.0'", () => {
24
- const number = PrecisionNumber.parse("1.0");
25
- expect(number.value).to.equal(1);
26
- expect(number.precision).to.equal(2);
27
- });
28
- });
1
+ import { PrecisionNumber } from "./precision-number";
2
+ import { expect } from "@esm-bundle/chai";
3
+
4
+ describe("precision-number", () => {
5
+ it("should not parse ''", () => {
6
+ const number = PrecisionNumber.parse("");
7
+ expect(Number.isNaN(number.value)).to.equal(true);
8
+ expect(number.precision).to.equal(0);
9
+ });
10
+
11
+ it("should parse '1'", () => {
12
+ const number = PrecisionNumber.parse("1");
13
+ expect(number.value).to.equal(1);
14
+ expect(number.precision).to.equal(1);
15
+ });
16
+
17
+ it("should parse '1.'", () => {
18
+ const number = PrecisionNumber.parse("1.");
19
+ expect(number.value).to.equal(1);
20
+ expect(number.precision).to.equal(2);
21
+ });
22
+
23
+ it("should parse '1.0'", () => {
24
+ const number = PrecisionNumber.parse("1.0");
25
+ expect(number.value).to.equal(1);
26
+ expect(number.precision).to.equal(2);
27
+ });
28
+ });
@@ -1,36 +1,44 @@
1
- import { invariantDecimalSeparator } from ".";
2
- import { localeDecimalSeparator, NumberFormatter } from "./number-formatter";
3
-
4
- export class PrecisionNumber {
5
- constructor(public value: number, public precision: number) {
6
- }
7
-
8
- static parse(input: string) {
9
- let normalized = input.trim().replace(",", ".").replace(localeDecimalSeparator, invariantDecimalSeparator);
10
- if (normalized.endsWith(invariantDecimalSeparator)) {
11
- normalized += "0";
12
- }
13
- const precision = normalized.replace(".", "").replace("+", "").replace("-", "").length;
14
- return new PrecisionNumber(parseFloat(normalized), precision);
15
- }
16
-
17
- toString() {
18
- return this.value.toString();
19
- }
20
-
21
- toFixed() {
22
- return NumberFormatter.toFixed(this.value, this.precision);
23
- }
24
-
25
- toPrecision() {
26
- return NumberFormatter.toPrecision(this.value, this.precision);
27
- }
28
-
29
- toLocaleFixed() {
30
- return NumberFormatter.toLocaleFixed(this.value, this.precision);
31
- }
32
-
33
- toLocalePrecision() {
34
- return NumberFormatter.toLocalePrecision(this.value, this.precision);
35
- }
36
- }
1
+ import { invariantDecimalSeparator } from ".";
2
+ import { localeDecimalSeparator, NumberFormatter } from "./number-formatter";
3
+
4
+ export class PrecisionNumber {
5
+ constructor(
6
+ public value: number,
7
+ public precision: number,
8
+ ) {}
9
+
10
+ static parse(input: string) {
11
+ let normalized = input
12
+ .trim()
13
+ .replace(",", ".")
14
+ .replace(localeDecimalSeparator, invariantDecimalSeparator);
15
+ if (normalized.endsWith(invariantDecimalSeparator)) {
16
+ normalized += "0";
17
+ }
18
+ const precision = normalized
19
+ .replace(".", "")
20
+ .replace("+", "")
21
+ .replace("-", "").length;
22
+ return new PrecisionNumber(parseFloat(normalized), precision);
23
+ }
24
+
25
+ toString() {
26
+ return this.value.toString();
27
+ }
28
+
29
+ toFixed() {
30
+ return NumberFormatter.toFixed(this.value, this.precision);
31
+ }
32
+
33
+ toPrecision() {
34
+ return NumberFormatter.toPrecision(this.value, this.precision);
35
+ }
36
+
37
+ toLocaleFixed() {
38
+ return NumberFormatter.toLocaleFixed(this.value, this.precision);
39
+ }
40
+
41
+ toLocalePrecision() {
42
+ return NumberFormatter.toLocalePrecision(this.value, this.precision);
43
+ }
44
+ }
@@ -1,5 +1,5 @@
1
- import { expect } from "chai";
2
1
  import { RegisterConvention } from "./register-convention";
2
+ import { expect } from "@esm-bundle/chai";
3
3
 
4
4
  describe("getAggregate", () => {
5
5
  it("instant register is instant", () => {
@@ -27,17 +27,26 @@ describe("toInstant", () => {
27
27
 
28
28
  describe("toAggregate", () => {
29
29
  it("should convert instant to aggregate", () => {
30
- const registerId = RegisterConvention.toAggregate("flowTemperature", "avg");
30
+ const registerId = RegisterConvention.toAggregate(
31
+ "flowTemperature",
32
+ "avg",
33
+ );
31
34
  expect(registerId).to.equal("avgFlowTemperature");
32
35
  });
33
36
 
34
37
  it("should convert aggregate to same aggregate", () => {
35
- const registerId = RegisterConvention.toAggregate("avgFlowTemperature", "avg");
38
+ const registerId = RegisterConvention.toAggregate(
39
+ "avgFlowTemperature",
40
+ "avg",
41
+ );
36
42
  expect(registerId).to.equal("avgFlowTemperature");
37
43
  });
38
44
 
39
45
  it("should convert aggregate to other aggregate", () => {
40
- const registerId = RegisterConvention.toAggregate("avgFlowTemperature", "min");
46
+ const registerId = RegisterConvention.toAggregate(
47
+ "avgFlowTemperature",
48
+ "min",
49
+ );
41
50
  expect(registerId).to.equal("minFlowTemperature");
42
51
  });
43
- });
52
+ });
@@ -1,4 +1,4 @@
1
- import { RegisterDefinition } from ".";
1
+ import { RegisterDefinition } from "./register-definition";
2
2
  import { AggregateId } from "./aggregate-id";
3
3
  import { RegisterId } from "./register-id";
4
4
  import { getRegisterId } from "./register-utils";
@@ -40,22 +40,31 @@ class Convention {
40
40
  return registerId;
41
41
  }
42
42
 
43
- toAggregate(register: RegisterId | RegisterDefinition, aggregate: AggregateId) {
43
+ toAggregate(
44
+ register: RegisterId | RegisterDefinition,
45
+ aggregate: AggregateId,
46
+ ) {
44
47
  const instantRegisterId = this.toInstant(register);
45
48
  if (aggregate === "instant") {
46
49
  return instantRegisterId;
47
50
  }
48
51
  const prefix = aggregatePrefixes[aggregate];
49
- return <RegisterId>(prefix + instantRegisterId[0].toUpperCase() + instantRegisterId.substr(1));
52
+ return <RegisterId>(
53
+ (prefix +
54
+ instantRegisterId[0].toUpperCase() +
55
+ instantRegisterId.substr(1))
56
+ );
50
57
  }
51
58
  }
52
59
 
53
60
  export function isPrefix(registerId: RegisterId, prefix: string) {
54
- return registerId.startsWith(prefix) && isUppercase(registerId[prefix.length]);
61
+ return (
62
+ registerId.startsWith(prefix) && isUppercase(registerId[prefix.length])
63
+ );
55
64
  }
56
65
 
57
66
  function isUppercase(input: string) {
58
67
  return input.toUpperCase() === input;
59
68
  }
60
69
 
61
- export const RegisterConvention = new Convention();
70
+ export const RegisterConvention = new Convention();
@@ -1,23 +1,23 @@
1
- import { UnitId } from ".";
2
- import { AggregateId } from "./aggregate-id";
3
- import { MeasureId } from "./measure-id";
4
- import { RegisterId } from "./register-id";
5
-
6
- export interface RegisterDefinition {
7
- /// The id of the register
8
- id: RegisterId;
9
- /// The register measure
10
- measure: MeasureId;
11
- /// The aggregate of the register
12
- aggregate: AggregateId;
13
- /// The possible register units
14
- units: ReadonlyArray<UnitId>;
15
- /// Whether the register can only be resolved by "present value".
16
- immediate?: true;
17
- /// An optional concise register name.
18
- /// Only used for custom registers as locales exist for standard registers.
19
- name?: string;
20
- /// An optional register description.
21
- /// Only used for custom registers as locales exist for standard registers.
22
- description?: string;
23
- }
1
+ import { AggregateId } from "./aggregate-id";
2
+ import { MeasureId } from "./measure-id";
3
+ import { RegisterId } from "./register-id";
4
+ import { UnitId } from "./unit-id";
5
+
6
+ export interface RegisterDefinition {
7
+ /// The id of the register
8
+ id: RegisterId;
9
+ /// The register measure
10
+ measure: MeasureId;
11
+ /// The aggregate of the register
12
+ aggregate: AggregateId;
13
+ /// The possible register units
14
+ units: ReadonlyArray<UnitId>;
15
+ /// Whether the register can only be resolved by "present value".
16
+ immediate?: true;
17
+ /// An optional concise register name.
18
+ /// Only used for custom registers as locales exist for standard registers.
19
+ name?: string;
20
+ /// An optional register description.
21
+ /// Only used for custom registers as locales exist for standard registers.
22
+ description?: string;
23
+ }