@itwin/core-quantity 5.15.0-dev.2 → 5.15.0-dev.20
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.
- package/CHANGELOG.md +41 -1
- package/README.md +0 -1
- package/lib/cjs/Parser.d.ts +4 -0
- package/lib/cjs/Parser.d.ts.map +1 -1
- package/lib/cjs/Parser.js +20 -4
- package/lib/cjs/Parser.js.map +1 -1
- package/lib/cjs/UnitConversions.d.ts +2 -3
- package/lib/cjs/UnitConversions.d.ts.map +1 -1
- package/lib/cjs/UnitConversions.js +0 -1
- package/lib/cjs/UnitConversions.js.map +1 -1
- package/lib/cjs/assets/Units.json +25 -1
- package/lib/cjs/generated/Units.generated.d.ts +5 -0
- package/lib/cjs/generated/Units.generated.d.ts.map +1 -1
- package/lib/cjs/generated/Units.generated.js +5 -0
- package/lib/cjs/generated/Units.generated.js.map +1 -1
- package/lib/cjs/internal/BasicUnitConversions.generated.d.ts +3 -0
- package/lib/cjs/internal/BasicUnitConversions.generated.d.ts.map +1 -1
- package/lib/cjs/internal/BasicUnitConversions.generated.js +3 -0
- package/lib/cjs/internal/BasicUnitConversions.generated.js.map +1 -1
- package/lib/cjs/internal/DefaultPersistenceUnits.generated.d.ts +1 -0
- package/lib/cjs/internal/DefaultPersistenceUnits.generated.d.ts.map +1 -1
- package/lib/cjs/internal/DefaultPersistenceUnits.generated.js +1 -1
- package/lib/cjs/internal/DefaultPersistenceUnits.generated.js.map +1 -1
- package/lib/esm/Parser.d.ts +4 -0
- package/lib/esm/Parser.d.ts.map +1 -1
- package/lib/esm/Parser.js +20 -4
- package/lib/esm/Parser.js.map +1 -1
- package/lib/esm/UnitConversions.d.ts +2 -3
- package/lib/esm/UnitConversions.d.ts.map +1 -1
- package/lib/esm/UnitConversions.js +0 -1
- package/lib/esm/UnitConversions.js.map +1 -1
- package/lib/esm/assets/Units.json +25 -1
- package/lib/esm/generated/Units.generated.d.ts +5 -0
- package/lib/esm/generated/Units.generated.d.ts.map +1 -1
- package/lib/esm/generated/Units.generated.js +5 -0
- package/lib/esm/generated/Units.generated.js.map +1 -1
- package/lib/esm/internal/BasicUnitConversions.generated.d.ts +3 -0
- package/lib/esm/internal/BasicUnitConversions.generated.d.ts.map +1 -1
- package/lib/esm/internal/BasicUnitConversions.generated.js +3 -0
- package/lib/esm/internal/BasicUnitConversions.generated.js.map +1 -1
- package/lib/esm/internal/DefaultPersistenceUnits.generated.d.ts +1 -0
- package/lib/esm/internal/DefaultPersistenceUnits.generated.d.ts.map +1 -1
- package/lib/esm/internal/DefaultPersistenceUnits.generated.js +1 -1
- package/lib/esm/internal/DefaultPersistenceUnits.generated.js.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,46 @@
|
|
|
1
1
|
# Change Log - @itwin/core-quantity
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 04 Nov 2026 17:35:57 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 5.14.6
|
|
6
|
+
Wed, 04 Nov 2026 17:35:14 GMT
|
|
7
|
+
|
|
8
|
+
### Updates
|
|
9
|
+
|
|
10
|
+
- Fix parsing of compound unit labels containing a slash, such as "km/h", which were previously split into separate tokens.
|
|
11
|
+
|
|
12
|
+
## 5.14.5
|
|
13
|
+
Tue, 27 Oct 2026 12:19:48 GMT
|
|
14
|
+
|
|
15
|
+
_Version update only_
|
|
16
|
+
|
|
17
|
+
## 5.14.4
|
|
18
|
+
Fri, 23 Oct 2026 19:58:24 GMT
|
|
19
|
+
|
|
20
|
+
_Version update only_
|
|
21
|
+
|
|
22
|
+
## 5.14.3
|
|
23
|
+
Mon, 12 Oct 2026 17:37:54 GMT
|
|
24
|
+
|
|
25
|
+
_Version update only_
|
|
26
|
+
|
|
27
|
+
## 5.14.2
|
|
28
|
+
Tue, 06 Oct 2026 19:48:29 GMT
|
|
29
|
+
|
|
30
|
+
_Version update only_
|
|
31
|
+
|
|
32
|
+
## 5.14.1
|
|
33
|
+
Tue, 06 Oct 2026 14:00:55 GMT
|
|
34
|
+
|
|
35
|
+
_Version update only_
|
|
36
|
+
|
|
37
|
+
## 5.14.0
|
|
38
|
+
Fri, 02 Oct 2026 14:55:04 GMT
|
|
39
|
+
|
|
40
|
+
### Updates
|
|
41
|
+
|
|
42
|
+
- Allow ratio separators to be a string with one non-whitespace character
|
|
43
|
+
- Add synchronous unit and format APIs to @itwin/core-quantity.
|
|
4
44
|
|
|
5
45
|
## 5.13.7
|
|
6
46
|
Thu, 01 Oct 2026 15:15:30 GMT
|
package/README.md
CHANGED
|
@@ -19,7 +19,6 @@ const feet = UnitConversions.convert(
|
|
|
19
19
|
|
|
20
20
|
UnitConversions provides synchronous conversion helpers for the canonical unit set generated from `@bentley/units-schema`.
|
|
21
21
|
`getDefaultPersistenceUnit(...)` returns the package default persistence unit for a supported phenomenon.
|
|
22
|
-
`Phenomena.LENGTH_RATIO` is intentionally not supported by that helper yet because the bundled built-in unit set does not currently provide an agreed default for that phenomenon.
|
|
23
22
|
|
|
24
23
|
## Contributing
|
|
25
24
|
|
package/lib/cjs/Parser.d.ts
CHANGED
|
@@ -92,6 +92,10 @@ export declare class Parser {
|
|
|
92
92
|
static parseIntoQuantity(inString: string, format: Format, unitsProvider: UnitsProvider, altUnitLabelsProvider?: AlternateUnitLabelsProvider): Promise<QuantityProps>;
|
|
93
93
|
/** method to get the Unit Conversion given a unit label */
|
|
94
94
|
private static tryFindUnitConversion;
|
|
95
|
+
/** Get the Unit Conversion for a known unit. Matches by unit name first because labels can differ between units providers
|
|
96
|
+
* (e.g. an unlabeled schema unit may have an empty label in one provider and a name-derived label in another). Falls back to label lookup.
|
|
97
|
+
*/
|
|
98
|
+
private static tryFindUnitConversionForUnit;
|
|
95
99
|
/**
|
|
96
100
|
* Get what the unit conversion is for a unitless value.
|
|
97
101
|
*/
|
package/lib/cjs/Parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Parser.d.ts","sourceRoot":"","sources":["../../src/Parser.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,OAAO,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,aAAa,EAAuB,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEjK,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C;;GAEG;AACH,oBAAY,UAAU;IACpB,2BAA2B,IAAI;IAC/B,0BAA0B,IAAA;IAC1B,8BAA8B,IAAA;IAC9B,WAAW,IAAA;IACX,oCAAoC,IAAA;IACpC,iBAAiB,IAAA;IACjB,4BAA4B,IAAA;IAC5B,uCAAuC,IAAA;IACvC,sBAAsB,IAAA;IACtB,iBAAiB,KAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,EAAE,EAAE,KAAK,CAAC;IACV,uDAAuD;IACvD,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,EAAE,EAAE,IAAI,CAAC;IACT,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,aAAK,QAAQ;IACX,QAAQ,MAAM;IACd,WAAW,MAAM;IACjB,cAAc,MAAM,CAAE,iDAAiD;IACvE,QAAQ,MAAM;CACf;AAUD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAEtE;;GAEG;AACH,cAAM,UAAU;IACP,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAClC,UAAU,EAAE,OAAO,CAAS;gBAEvB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ;IAS7C,IAAW,QAAQ,IAAI,OAAO,CAA+D;IAC7F,IAAW,QAAQ,IAAI,OAAO,CAA2C;IACzE,IAAW,kBAAkB,IAAI,OAAO,CAGvC;CACF;AA+BD;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAS;WAEd,gBAAgB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,IAAI,cAAc;WAInE,YAAY,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,IAAI,kBAAkB;IAIjF,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAoBzC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAyChC,OAAO,CAAC,MAAM,CAAC,OAAO;IAItB,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAIxC;;OAEG;WACW,0BAA0B,CAAC,qBAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"Parser.d.ts","sourceRoot":"","sources":["../../src/Parser.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/Parser.js
CHANGED
|
@@ -306,7 +306,16 @@ class Parser {
|
|
|
306
306
|
// Don't add space when the wip token is empty.
|
|
307
307
|
continue;
|
|
308
308
|
}
|
|
309
|
-
|
|
309
|
+
// A slash directly between two label characters (e.g. "km/h") is part of the label, not a division.
|
|
310
|
+
const nextCharCode = str.charCodeAt(i + 1);
|
|
311
|
+
const isUnitLabelSlash = charCode === Constants_1.QuantityConstants.CHAR_SLASH &&
|
|
312
|
+
wipToken.length > 0 &&
|
|
313
|
+
i + 1 < str.length &&
|
|
314
|
+
!/\s/.test(str[i - 1]) &&
|
|
315
|
+
!/\s/.test(str[i + 1]) &&
|
|
316
|
+
!Parser.isDigitOrDecimalSeparator(nextCharCode, format) &&
|
|
317
|
+
!isOperator(nextCharCode);
|
|
318
|
+
if (isCharOperator && !isUnitLabelSlash) {
|
|
310
319
|
if (wipToken.length > 0) {
|
|
311
320
|
// There is a token is progress, process it now, before adding the new operator token.
|
|
312
321
|
tokens.push(new ParseToken(wipToken));
|
|
@@ -476,11 +485,18 @@ class Parser {
|
|
|
476
485
|
}
|
|
477
486
|
return undefined;
|
|
478
487
|
}
|
|
488
|
+
/** Get the Unit Conversion for a known unit. Matches by unit name first because labels can differ between units providers
|
|
489
|
+
* (e.g. an unlabeled schema unit may have an empty label in one provider and a name-derived label in another). Falls back to label lookup.
|
|
490
|
+
*/
|
|
491
|
+
static tryFindUnitConversionForUnit(unit, unitsConversions) {
|
|
492
|
+
const byName = unitsConversions.find((conversion) => conversion.name === unit.name);
|
|
493
|
+
return byName ? byName.conversion : Parser.tryFindUnitConversion(unit.label, unitsConversions, unit);
|
|
494
|
+
}
|
|
479
495
|
/**
|
|
480
496
|
* Get what the unit conversion is for a unitless value.
|
|
481
497
|
*/
|
|
482
498
|
static getDefaultUnitConversion(tokens, unitsConversions, defaultUnit) {
|
|
483
|
-
let unitConversion = defaultUnit ? Parser.
|
|
499
|
+
let unitConversion = defaultUnit ? Parser.tryFindUnitConversionForUnit(defaultUnit, unitsConversions) : undefined;
|
|
484
500
|
if (!unitConversion) {
|
|
485
501
|
// No default unit conversion, take the first valid unit.
|
|
486
502
|
const uniqueUnitLabels = [...new Set(tokens.filter((token) => token.isString).map((token) => token.value))];
|
|
@@ -600,7 +616,7 @@ class Parser {
|
|
|
600
616
|
if (compositeUnitIndex > 0 && format.units && format.units.length > compositeUnitIndex) {
|
|
601
617
|
// if this is not the first token, and we have a composite spec, look up the unit from the current index
|
|
602
618
|
const presUnitAtIndex = format.units[compositeUnitIndex][0];
|
|
603
|
-
conversion = Parser.
|
|
619
|
+
conversion = Parser.tryFindUnitConversionForUnit(presUnitAtIndex, unitsConversions);
|
|
604
620
|
}
|
|
605
621
|
else if (defaultUnitConversion) {
|
|
606
622
|
conversion = defaultUnitConversion;
|
|
@@ -893,7 +909,7 @@ class Parser {
|
|
|
893
909
|
}
|
|
894
910
|
// Original flow for 1-unit composite - use Quantity.convertTo for proper unit conversion
|
|
895
911
|
const defaultUnit = spec.format.units && spec.format.units.length > 0 ? spec.format.units[0][0] : undefined;
|
|
896
|
-
const unitConversion = defaultUnit ? Parser.
|
|
912
|
+
const unitConversion = defaultUnit ? Parser.tryFindUnitConversionForUnit(defaultUnit, spec.unitConversions) : undefined;
|
|
897
913
|
if (!unitConversion) {
|
|
898
914
|
throw new Exception_1.QuantityError(Exception_1.QuantityStatus.MissingRequiredProperty, `Missing input unit or unit conversion for interpreting ${spec.format.name}.`);
|
|
899
915
|
}
|