@itwin/core-quantity 5.10.0-dev.7 → 5.10.0-dev.8
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 +8 -1
- package/lib/cjs/BasicUnitsProvider.js.map +1 -1
- package/lib/cjs/CompositeUnitsProvider.js.map +1 -1
- package/lib/cjs/Constants.js.map +1 -1
- package/lib/cjs/Exception.js.map +1 -1
- package/lib/cjs/FormatSpecHandle.js.map +1 -1
- package/lib/cjs/Formatter/Format.js.map +1 -1
- package/lib/cjs/Formatter/FormatEnums.js.map +1 -1
- package/lib/cjs/Formatter/Formatter.js.map +1 -1
- package/lib/cjs/Formatter/FormatterSpec.js.map +1 -1
- package/lib/cjs/Formatter/FormattingReadyCollector.js.map +1 -1
- package/lib/cjs/Formatter/Interfaces.js.map +1 -1
- package/lib/cjs/Interfaces.js.map +1 -1
- package/lib/cjs/Parser.js.map +1 -1
- package/lib/cjs/ParserSpec.js.map +1 -1
- package/lib/cjs/Quantity.js.map +1 -1
- package/lib/cjs/QuantityLoggerCategory.js.map +1 -1
- package/lib/cjs/SerializedUnitSchema.js.map +1 -1
- package/lib/cjs/Unit.js.map +1 -1
- package/lib/cjs/UnitConversion/Graph.js.map +1 -1
- package/lib/cjs/UnitConversion/Parser.js.map +1 -1
- package/lib/cjs/UnitConversion/UnitConversion.js.map +1 -1
- package/lib/cjs/UnitConversion/UnitDefinitionResolver.js.map +1 -1
- package/lib/cjs/UnitConversion/nameUtils.js.map +1 -1
- package/lib/cjs/core-quantity.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/esm/BasicUnitsProvider.js.map +1 -1
- package/lib/esm/CompositeUnitsProvider.js.map +1 -1
- package/lib/esm/Constants.js.map +1 -1
- package/lib/esm/Exception.js.map +1 -1
- package/lib/esm/FormatSpecHandle.js.map +1 -1
- package/lib/esm/Formatter/Format.js.map +1 -1
- package/lib/esm/Formatter/FormatEnums.js.map +1 -1
- package/lib/esm/Formatter/Formatter.js.map +1 -1
- package/lib/esm/Formatter/FormatterSpec.js.map +1 -1
- package/lib/esm/Formatter/FormattingReadyCollector.js.map +1 -1
- package/lib/esm/Formatter/Interfaces.js.map +1 -1
- package/lib/esm/Interfaces.js.map +1 -1
- package/lib/esm/Parser.js.map +1 -1
- package/lib/esm/ParserSpec.js.map +1 -1
- package/lib/esm/Quantity.js.map +1 -1
- package/lib/esm/QuantityLoggerCategory.js.map +1 -1
- package/lib/esm/SerializedUnitSchema.js.map +1 -1
- package/lib/esm/Unit.js.map +1 -1
- package/lib/esm/UnitConversion/Graph.js.map +1 -1
- package/lib/esm/UnitConversion/Parser.js.map +1 -1
- package/lib/esm/UnitConversion/UnitConversion.js.map +1 -1
- package/lib/esm/UnitConversion/UnitDefinitionResolver.js.map +1 -1
- package/lib/esm/UnitConversion/nameUtils.js.map +1 -1
- package/lib/esm/core-quantity.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuantityLoggerCategory.js","sourceRoot":"","sources":["../../src/QuantityLoggerCategory.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH;;;GAGG;AACH,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,uDAAuD;IACvD,mDAAyB,CAAA;IACzB,0DAA0D;IAC1D,iEAAuC,CAAA;IACvC,uDAAuD;IACvD,2DAAiC,CAAA;AACnC,CAAC,EAPW,sBAAsB,sCAAtB,sBAAsB,QAOjC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"QuantityLoggerCategory.js","sourceRoot":"","sources":["../../src/QuantityLoggerCategory.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH;;;GAGG;AACH,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,uDAAuD;IACvD,mDAAyB,CAAA;IACzB,0DAA0D;IAC1D,iEAAuC,CAAA;IACvC,uDAAuD;IACvD,2DAAiC,CAAA;AACnC,CAAC,EAPW,sBAAsB,sCAAtB,sBAAsB,QAOjC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Logging\n */\n\n/** Logger categories used by the `@itwin/core-quantity` package.\n * @see [Logger]($bentley)\n * @beta\n */\nexport enum QuantityLoggerCategory {\n /** The root category for the core-quantity package. */\n Package = \"core-quantity\",\n /** Logger category for quantity formatting operations. */\n Formatting = \"core-quantity.Formatting\",\n /** Logger category for quantity parsing operations. */\n Parsing = \"core-quantity.Parsing\",\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SerializedUnitSchema.js","sourceRoot":"","sources":["../../src/SerializedUnitSchema.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;;;;;;;;;;;;;;GAeG;AACU,QAAA,8BAA8B,GAAG,UAAU,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"SerializedUnitSchema.js","sourceRoot":"","sources":["../../src/SerializedUnitSchema.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F;;;;;;;;;;;;;;;GAeG;AACU,QAAA,8BAA8B,GAAG,UAAU,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** Current version of the serialization format for `SerializedUnitSchema`.\n *\n * This value is written into `Units.json` as the `version` field and checked at\n * parse time. Two version axes exist:\n *\n * - **Format version** (`SERIALIZED_UNIT_SCHEMA_VERSION` / `Units.json.version`): bump\n * the major version when the shape of the `SerializedUnitSchema` interfaces changes\n * incompatibly (e.g. renaming fields, removing required properties). Minor bumps for\n * backward-compatible additions.\n *\n * - **Source provenance** (`sourceEcSchemaVersion` inside `Units.json`): records which\n * version of the BIS Units EC schema the data was derived from (e.g. `\"01.00.09\"`).\n * This is a traceability marker, not a runtime contract.\n *\n * @internal\n */\nexport const SERIALIZED_UNIT_SCHEMA_VERSION = \"01.00.00\";\n\n/** A serialized constant definition (e.g. `PI`, `MILLI`).\n * @internal\n */\nexport interface SerializedConstant {\n readonly schemaItemType: \"Constant\";\n readonly label?: string;\n readonly description?: string;\n /** The phenomenon this constant belongs to. */\n readonly phenomenon: string;\n /** The unit definition expression (e.g. `\"M*M\"`). */\n readonly definition: string;\n /** Numerator of the conversion factor to the SI base. */\n readonly numerator?: number;\n /** Denominator of the conversion factor to the SI base. */\n readonly denominator?: number;\n}\n\n/** A serialized unit definition (e.g. `M`, `FT`, `CELSIUS`).\n * @internal\n */\nexport interface SerializedUnit {\n readonly schemaItemType: \"Unit\";\n readonly label?: string;\n readonly description?: string;\n readonly phenomenon: string;\n readonly unitSystem: string;\n /** The unit definition expression (e.g. `\"M*M\"`). */\n readonly definition: string;\n /** Numerator of the conversion factor to the SI base. */\n readonly numerator?: number;\n /** Denominator of the conversion factor to the SI base. */\n readonly denominator?: number;\n /** Additive offset for the conversion (e.g. temperature scales). */\n readonly offset?: number;\n}\n\n/** A serialized inverted unit definition (e.g. `HORIZONTAL_PER_VERTICAL`).\n * @internal\n */\nexport interface SerializedInvertedUnit {\n readonly schemaItemType: \"InvertedUnit\";\n readonly label?: string;\n readonly description?: string;\n readonly invertsUnit: string;\n readonly unitSystem: string;\n}\n\n/** A serialized unit system definition (e.g. `SI`, `METRIC`).\n * @internal\n */\nexport interface SerializedUnitSystem {\n readonly schemaItemType: \"UnitSystem\";\n readonly label?: string;\n readonly description?: string;\n}\n\n/** A serialized phenomenon definition (e.g. `LENGTH`, `TEMPERATURE`).\n * @internal\n */\nexport interface SerializedPhenomenon {\n readonly schemaItemType: \"Phenomenon\";\n readonly label?: string;\n readonly description?: string;\n /** The phenomenon definition expression. */\n readonly definition: string;\n}\n\n/** Discriminated union of all serialized schema item types.\n * @internal\n */\nexport type SerializedUnitItem = SerializedConstant | SerializedUnit | SerializedInvertedUnit | SerializedUnitSystem | SerializedPhenomenon;\n\n/** Versioned container for a serialized BIS unit schema. The `items` map is keyed by schema-item name (unqualified).\n * @internal\n */\nexport interface SerializedUnitSchema {\n /** Serialization format version, matching `SERIALIZED_UNIT_SCHEMA_VERSION` (e.g. `\"01.00.00\"`). */\n readonly version: string;\n readonly name: string;\n readonly alias: string;\n /** EC schema version of the source BIS Units schema this data was derived from (e.g. `\"01.00.09\"`). */\n readonly sourceEcSchemaVersion: string;\n readonly items: { readonly [name: string]: SerializedUnitItem };\n}\n"]}
|
package/lib/cjs/Unit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Unit.js","sourceRoot":"","sources":["../../src/Unit.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAIH;;GAEG;AACH,MAAa,SAAS;IACb,IAAI,GAAG,EAAE,CAAC;IACV,KAAK,GAAG,EAAE,CAAC;IACX,UAAU,GAAG,EAAE,CAAC;IAChB,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,GAAW,SAAS,CAAC;IAElC,YAAY,IAAY,EAAE,KAAa,EAAE,UAAkB,EAAE,MAAe;QAC1E,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,MAAM;gBACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAjBD,8BAiBC;AAED;;GAEG;AACH,MAAa,OAAO;IACX,IAAI,GAAG,EAAE,CAAC;IACV,KAAK,GAAG,EAAE,CAAC;IACX,UAAU,GAAG,EAAE,CAAC;IAChB,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,GAAG,SAAS,CAAC;CAC3B;AAND,0BAMC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"Unit.js","sourceRoot":"","sources":["../../src/Unit.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAIH;;GAEG;AACH,MAAa,SAAS;IACb,IAAI,GAAG,EAAE,CAAC;IACV,KAAK,GAAG,EAAE,CAAC;IACX,UAAU,GAAG,EAAE,CAAC;IAChB,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,GAAW,SAAS,CAAC;IAElC,YAAY,IAAY,EAAE,KAAa,EAAE,UAAkB,EAAE,MAAe;QAC1E,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,MAAM;gBACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAjBD,8BAiBC;AAED;;GAEG;AACH,MAAa,OAAO;IACX,IAAI,GAAG,EAAE,CAAC;IACV,KAAK,GAAG,EAAE,CAAC;IACX,UAAU,GAAG,EAAE,CAAC;IAChB,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,GAAG,SAAS,CAAC;CAC3B;AAND,0BAMC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Quantity\n */\n\nimport { UnitProps } from \"./Interfaces\";\n\n/** This class provides basic implementation of UnitProps interface.\n * @beta\n */\nexport class BasicUnit implements UnitProps {\n public name = \"\";\n public label = \"\";\n public phenomenon = \"\";\n public isValid = false;\n public system: string = \"unknown\";\n\n constructor(name: string, label: string, phenomenon: string, system?: string) {\n if (name && name.length > 0 && label && label.length > 0 && phenomenon && phenomenon.length > 0) {\n this.name = name;\n this.label = label;\n this.phenomenon = phenomenon;\n this.isValid = true;\n if (system)\n this.system = system;\n }\n }\n}\n\n/** This class is a convenience class that can be returned when a valid Unit cannot be determined.\n * @beta\n */\nexport class BadUnit implements UnitProps {\n public name = \"\";\n public label = \"\";\n public phenomenon = \"\";\n public isValid = false;\n public system = \"unknown\";\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../../src/UnitConversion/Graph.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../../src/UnitConversion/Graph.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n// Following https://github.com/dagrejs/graphlib/blob/master/lib/graph.js\n\n/**\n * Using generics for nodes - T represents Unit | Constant in our use case\n * @internal\n */\ninterface NodesMap<T> {\n [node: string]: T;\n}\n\n/**\n * Describe edges based on its node endpoints (v, w)\n * @internal\n */\ninterface EdgeObjsMap {\n [edge: string]: {\n v: string;\n w: string;\n };\n}\n\n/**\n * Describe edges based on the exponent they carry\n * @internal\n */\ninterface EdgeLabelsMap {\n [edge: string]: { exponent: number };\n}\n\n/**\n * List each node with outgoing edges in outer map; describe each node's outgoing edges in inner map\n * @internal\n */\ninterface OutEdgesMap {\n [node: string]: {\n [edges: string]: {\n v: string;\n w: string;\n };\n };\n}\n\n/** @internal */\nexport class UnitConversionGraph<T> {\n private _edgeKeyDelim = \"\\x01\";\n private _label = \"\";\n private _nodeCount = 0;\n private _edgeCount = 0;\n private _nodes: NodesMap<T>;\n private _edgeObjs: EdgeObjsMap;\n private _edgeLabels: EdgeLabelsMap;\n private _outEdges: OutEdgesMap;\n\n constructor() {\n this._nodes = {};\n this._edgeObjs = {};\n this._edgeLabels = {};\n this._outEdges = {};\n }\n\n public setGraph = (label: string): UnitConversionGraph<T> => {\n this._label = label;\n return this;\n };\n\n public graph = () => {\n return this._label;\n };\n\n public nodeCount = () => {\n return this._nodeCount;\n };\n\n public nodes = () => {\n return Object.keys(this._nodes);\n };\n\n public setNode = (nodeKey: string, nodeValue: T) => {\n if (nodeKey in this._nodes) {\n this._nodes[nodeKey] = nodeValue;\n return;\n }\n this._nodes[nodeKey] = nodeValue;\n this._outEdges[nodeKey] = {};\n ++this._nodeCount;\n };\n\n public node = (nodeKey: string) => {\n return this._nodes[nodeKey];\n };\n\n public hasNode = (nodeKey: string) => {\n return nodeKey in this._nodes;\n };\n\n public edgeCount = () => {\n return this._edgeCount;\n };\n\n public edges = () => {\n return Object.values(this._edgeObjs);\n };\n\n public setEdge = (v: string, w: string, value: { exponent: number }) => {\n const edgeId = v + this._edgeKeyDelim + w + this._edgeKeyDelim;\n if (edgeId in this._edgeLabels) {\n // Update exponent, specific to this graph's use case\n this._edgeLabels[edgeId].exponent += value.exponent;\n return;\n }\n\n this._edgeLabels[edgeId] = value;\n const edgeObj = {\n v,\n w,\n };\n this._edgeObjs[edgeId] = edgeObj;\n // setNode should have ran first, so this.outEdges[v] shouldn't be undefined\n this._outEdges[v][edgeId] = edgeObj;\n this._edgeCount++;\n };\n\n public edge = (v: string, w: string) => {\n const edgeId = v + this._edgeKeyDelim + w + this._edgeKeyDelim;\n return this._edgeLabels[edgeId];\n };\n\n public outEdges = (v: string) => {\n const outV = this._outEdges[v];\n const edges = Object.values(outV);\n return edges;\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../../src/UnitConversion/Parser.ts"],"names":[],"mappings":";;AAuBA,0CAsBC;AA7CD;;;+FAG+F;AAC/F,MAAM,aAAa,GAAG,8EAA8E,CAAC;AACrG,MAAM,QAAQ,GAAG,uDAAuD,CAAC;AACzE,MAAM,EAAE,GAAG,GAAG,CAAC;AAEf,gBAAgB;AAChB,IAAK,MAIJ;AAJD,WAAK,MAAM;IACT,yCAAW,CAAA;IACX,mCAAQ,CAAA;IACR,2CAAY,CAAA;AACd,CAAC,EAJI,MAAM,KAAN,MAAM,QAIV;AASD,gBAAgB;AAChB,SAAgB,eAAe,CAAC,UAAkB;IAChD,MAAM,OAAO,GAAoC,IAAI,GAAG,EAAE,CAAC;IAE3D,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;YACtD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,iBAAiB;oBACnB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC,CAAC;YACjG,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../../src/UnitConversion/Parser.ts"],"names":[],"mappings":";;AAuBA,0CAsBC;AA7CD;;;+FAG+F;AAC/F,MAAM,aAAa,GAAG,8EAA8E,CAAC;AACrG,MAAM,QAAQ,GAAG,uDAAuD,CAAC;AACzE,MAAM,EAAE,GAAG,GAAG,CAAC;AAEf,gBAAgB;AAChB,IAAK,MAIJ;AAJD,WAAK,MAAM;IACT,yCAAW,CAAA;IACX,mCAAQ,CAAA;IACR,2CAAY,CAAA;AACd,CAAC,EAJI,MAAM,KAAN,MAAM,QAIV;AASD,gBAAgB;AAChB,SAAgB,eAAe,CAAC,UAAkB;IAChD,MAAM,OAAO,GAAoC,IAAI,GAAG,EAAE,CAAC;IAE3D,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;YACtD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,iBAAiB;oBACnB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC,CAAC;YACjG,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nconst expressionRgx = /^(([A-Z]\\w*:)?([A-Z]\\w*|\\[([A-Z]\\w*:)?[A-Z]\\w*\\])(\\(-?\\d+\\))?(\\*(?!$)|$))+$/i;\nconst tokenRgx = /(?:(\\[)?((?:[A-Z]\\w*:)?[A-Z]\\w*)\\]?)(?:\\((-?\\d+)\\))?/i;\nconst sp = \"*\";\n\n/** @internal */\nenum Tokens {\n Bracket = 1,\n Word = 2,\n Exponent = 3,\n}\n\n/** @internal */\nexport interface DefinitionFragment {\n name: string;\n exponent: number;\n constant: boolean;\n}\n\n/** @internal */\nexport function parseDefinition(definition: string): Map<string, DefinitionFragment> {\n const unitMap: Map<string, DefinitionFragment> = new Map();\n\n if (expressionRgx.test(definition)) {\n for (const unit of definition.split(sp)) {\n const tokens = unit.split(tokenRgx);\n const name = tokens[Tokens.Word];\n const exponent = tokens[Tokens.Exponent] ? Number(tokens[Tokens.Exponent]) : 1;\n const constant = tokens[Tokens.Bracket] !== undefined;\n if (unitMap.has(name)) {\n const currentDefinition = unitMap.get(name);\n if (currentDefinition)\n unitMap.set(name, { ...currentDefinition, exponent: currentDefinition.exponent + exponent });\n } else {\n unitMap.set(name, { name, exponent, constant });\n }\n }\n\n return unitMap;\n } else {\n throw new Error(\"Invalid definition expression.\");\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnitConversion.js","sourceRoot":"","sources":["../../../src/UnitConversion/UnitConversion.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,0CAA0C;AAc1C;;;GAGG;AACH,MAAa,cAAc;IACG;IAAsC;IAAlE,YAA4B,SAAiB,GAAG,EAAkB,SAAiB,GAAG;QAA1D,WAAM,GAAN,MAAM,CAAc;QAAkB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAE1F;;;;OAIG;IACI,QAAQ,CAAC,CAAS;QACvB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,OAAO;QACZ,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxC,OAAO,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;IACzE,CAAC;IAED;;;;OAIG;IACI,OAAO,CAAC,UAA0B;QACvC,OAAO,IAAI,cAAc,CACvB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAC/B,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CACpD,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,UAA0B;QACxC,IAAI,IAAA,sBAAW,EAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAA,sBAAW,EAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YACtE,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAElE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,KAAa;QACxB,IAAI,IAAA,sBAAW,EAAC,KAAK,EAAE,GAAG,CAAC;YACzB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACjD,IAAI,IAAA,sBAAW,EAAC,KAAK,EAAE,GAAG,CAAC;YAC9B,OAAO,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEtC,IAAI,IAAA,sBAAW,EAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YAC/B,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,GAAG,CAAC,CAAC;QAEvD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;IAE9C;;;;OAIG;IACI,MAAM,CAAC,IAAI,CAAC,MAA4B;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,CAAC,IAAA,sBAAW,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5C,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9F,CAAC;;AAxEH,wCAyEC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"UnitConversion.js","sourceRoot":"","sources":["../../../src/UnitConversion/UnitConversion.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,0CAA0C;AAc1C;;;GAGG;AACH,MAAa,cAAc;IACG;IAAsC;IAAlE,YAA4B,SAAiB,GAAG,EAAkB,SAAiB,GAAG;QAA1D,WAAM,GAAN,MAAM,CAAc;QAAkB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAE1F;;;;OAIG;IACI,QAAQ,CAAC,CAAS;QACvB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,OAAO;QACZ,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxC,OAAO,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;IACzE,CAAC;IAED;;;;OAIG;IACI,OAAO,CAAC,UAA0B;QACvC,OAAO,IAAI,cAAc,CACvB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAC/B,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CACpD,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,UAA0B;QACxC,IAAI,IAAA,sBAAW,EAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,IAAA,sBAAW,EAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YACtE,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAElE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,KAAa;QACxB,IAAI,IAAA,sBAAW,EAAC,KAAK,EAAE,GAAG,CAAC;YACzB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACjD,IAAI,IAAA,sBAAW,EAAC,KAAK,EAAE,GAAG,CAAC;YAC9B,OAAO,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEtC,IAAI,IAAA,sBAAW,EAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YAC/B,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,GAAG,CAAC,CAAC;QAEvD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;IAE9C;;;;OAIG;IACI,MAAM,CAAC,IAAI,CAAC,MAA4B;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,CAAC,IAAA,sBAAW,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5C,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9F,CAAC;;AAxEH,wCAyEC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { almostEqual } from \"../Quantity\";\n\n/**\n * Structural interface satisfied by any object that carries a numerator/denominator\n * factor and an optional offset — for example, the EC `Unit` and `Constant` classes in\n * `@itwin/ecschema-metadata`.\n * @internal\n */\nexport interface UnitConversionSource {\n readonly numerator: number;\n readonly denominator: number;\n readonly offset?: number;\n}\n\n/**\n * Class used for storing calculated conversion between two Units and converting values from one Unit to another.\n * @internal\n */\nexport class UnitConversion {\n constructor(public readonly factor: number = 1.0, public readonly offset: number = 0.0) {}\n\n /**\n * Converts x using UnitConversion\n * @param x Input magnitude to be converted\n * @returns Output magnitude after conversion\n */\n public evaluate(x: number): number {\n return this.factor * x + this.offset;\n }\n\n /**\n * Used to invert source's UnitConversion so that it can be composed with target's UnitConversion cleanly\n * @internal\n */\n public inverse(): UnitConversion {\n const inverseFactor = 1.0 / this.factor;\n return new UnitConversion(inverseFactor, -this.offset * inverseFactor);\n }\n\n /**\n * Combines two UnitConversions\n * Used to combine source's UnitConversion and target's UnitConversion for a final UnitConversion that can be evaluated\n * @internal\n */\n public compose(conversion: UnitConversion): UnitConversion {\n return new UnitConversion(\n this.factor * conversion.factor,\n conversion.factor * this.offset + conversion.offset,\n );\n }\n\n /**\n * Multiples two UnitConversions together to calculate factor during reducing\n * @internal\n */\n public multiply(conversion: UnitConversion): UnitConversion {\n if (almostEqual(conversion.offset, 0.0) && almostEqual(this.offset, 0.0))\n return new UnitConversion(this.factor * conversion.factor, 0.0);\n\n throw new Error(\"Cannot multiply two maps with non-zero offsets\");\n }\n\n /**\n * Raise UnitConversion's factor with power exponent to calculate factor during reducing\n * @internal\n */\n public raise(power: number): UnitConversion {\n if (almostEqual(power, 1.0))\n return new UnitConversion(this.factor, this.offset);\n else if (almostEqual(power, 0.0))\n return new UnitConversion(1.0, 0.0);\n\n if (almostEqual(this.offset, 0.0))\n return new UnitConversion(this.factor ** power, 0.0);\n\n throw new Error(\"Cannot raise map with non-zero offset\");\n }\n\n /** @internal */\n public static identity = new UnitConversion();\n\n /**\n * Returns UnitConversion with source's numerator and denominator in factor and source's offset in offset for reducing.\n * Accepts any object that structurally satisfies `UnitConversionSource` (e.g. EC `Unit` or `Constant`).\n * @internal\n */\n public static from(source: UnitConversionSource): UnitConversion {\n const offset = source.offset ?? 0;\n const hasOffset = !almostEqual(offset, 0.0);\n return new UnitConversion(source.denominator / source.numerator, hasOffset ? -offset : 0.0);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnitDefinitionResolver.js","sourceRoot":"","sources":["../../../src/UnitConversion/UnitDefinitionResolver.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"UnitDefinitionResolver.js","sourceRoot":"","sources":["../../../src/UnitConversion/UnitDefinitionResolver.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { SERIALIZED_UNIT_SCHEMA_VERSION, type SerializedConstant, type SerializedUnit, type SerializedUnitSchema } from \"../SerializedUnitSchema\";\nimport { UnitConversion } from \"./UnitConversion\";\nimport { parseDefinition } from \"./Parser\";\nimport { stripAliasPrefix } from \"./nameUtils\";\n\nconst MAX_RESOLUTION_DEPTH = 30;\n\n/** Resolved unit entry containing the unit's name and its conversion to the base of its phenomenon.\n * @internal\n */\nexport interface ResolvedUnit {\n readonly name: string;\n readonly label: string;\n readonly phenomenon: string;\n readonly unitSystem: string;\n readonly conversion: UnitConversion;\n}\n\n/** Resolves every unit in a `SerializedUnitSchema` to a `UnitConversion` relative to its phenomenon's base unit.\n * @internal\n */\nexport class UnitDefinitionResolver {\n private readonly _schema: SerializedUnitSchema;\n private readonly _cache = new Map<string, UnitConversion>();\n\n constructor(schema: SerializedUnitSchema) {\n if (schema.version !== SERIALIZED_UNIT_SCHEMA_VERSION)\n throw new Error(`Unsupported Units.json version \"${schema.version}\". Expected \"${SERIALIZED_UNIT_SCHEMA_VERSION}\".`);\n this._schema = schema;\n }\n\n /** Resolve all Unit items in the schema and return a map from item name to `ResolvedUnit`. */\n public resolveAll(): Map<string, ResolvedUnit> {\n const result = new Map<string, ResolvedUnit>();\n\n for (const [name, item] of Object.entries(this._schema.items)) {\n if (item.schemaItemType === \"Unit\") {\n const conversion = this._resolveUnit(name, 0);\n result.set(name, {\n name,\n label: item.label ?? name,\n phenomenon: item.phenomenon,\n unitSystem: item.unitSystem,\n conversion,\n });\n }\n }\n\n return result;\n }\n\n /** Resolve a single unit by unqualified name, returning its conversion to base. */\n private _resolveUnit(name: string, depth: number): UnitConversion {\n if (depth > MAX_RESOLUTION_DEPTH)\n throw new Error(`Unit resolution depth exceeded ${MAX_RESOLUTION_DEPTH} for \"${name}\"`);\n\n const cached = this._cache.get(name);\n if (cached)\n return cached;\n\n const item = this._schema.items[name];\n if (!item)\n throw new Error(`Unknown schema item: \"${name}\"`);\n\n let conversion: UnitConversion;\n\n if (item.schemaItemType === \"Constant\") {\n conversion = this._resolveConstant(name, item, depth);\n } else if (item.schemaItemType === \"Unit\") {\n conversion = this._resolveUnitItem(name, item, depth);\n } else {\n throw new Error(`Cannot resolve item of type \"${item.schemaItemType}\": \"${name}\"`);\n }\n\n this._cache.set(name, conversion);\n return conversion;\n }\n\n private _resolveConstant(name: string, item: SerializedConstant, depth: number): UnitConversion {\n // A constant is identity if its definition is its own name\n if (item.definition === name)\n return UnitConversion.identity;\n\n const selfConv = UnitConversion.from({\n numerator: item.numerator ?? 1,\n denominator: item.denominator ?? 1,\n });\n\n const defConv = this._resolveDefinition(item.definition, depth + 1);\n return defConv.compose(selfConv);\n }\n\n private _resolveUnitItem(name: string, item: SerializedUnit, depth: number): UnitConversion {\n // A unit is a base unit if its definition is its own name\n if (item.definition === name)\n return UnitConversion.identity;\n\n const selfConv = UnitConversion.from({\n numerator: item.numerator ?? 1,\n denominator: item.denominator ?? 1,\n offset: item.offset,\n });\n\n const defConv = this._resolveDefinition(item.definition, depth + 1);\n return defConv.compose(selfConv);\n }\n\n /** Parse and resolve a compound definition string like `[MILLI]*M` or `IN`. */\n private _resolveDefinition(definition: string, depth: number): UnitConversion {\n const fragments = parseDefinition(definition);\n let result: UnitConversion | undefined;\n\n for (const [, fragment] of fragments) {\n // Strip alias prefix if present (definitions in the schema use unqualified names)\n const fragName = stripAliasPrefix(fragment.name);\n const fragConv = this._resolveUnit(fragName, depth + 1);\n const raised = fragConv.raise(fragment.exponent);\n result = result ? result.multiply(raised) : raised;\n }\n\n return result ?? UnitConversion.identity;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nameUtils.js","sourceRoot":"","sources":["../../../src/UnitConversion/nameUtils.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAM/F,4CAEC;AAMD,0CAIC;AAhBD;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,GAAW,EAAE,UAAkB;IAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,OAAO,GAAG,CAAC;IACb,OAAO,GAAG,UAAU,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAClD,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"nameUtils.js","sourceRoot":"","sources":["../../../src/UnitConversion/nameUtils.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAM/F,4CAEC;AAMD,0CAIC;AAhBD;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,GAAW,EAAE,UAAkB;IAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,OAAO,GAAG,CAAC;IACb,OAAO,GAAG,UAAU,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;AAClD,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** Strips alias prefix from a schema item reference.\n * `\"u:FT\"` → `\"FT\"`, `\"FT\"` → `\"FT\"`.\n * @internal\n */\nexport function stripAliasPrefix(raw: string): string {\n return raw.includes(\":\") ? raw.split(\":\")[1] : raw;\n}\n\n/** Normalizes a schema item reference to fully-qualified `SchemaName.ItemName` format.\n * Handles: already qualified (`\"Units.FT\"`), alias-qualified (`\"u:FT\"`), unqualified (`\"FT\"`).\n * @internal\n */\nexport function qualifyItemName(raw: string, schemaName: string): string {\n if (raw.includes(\".\"))\n return raw;\n return `${schemaName}.${stripAliasPrefix(raw)}`;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-quantity.js","sourceRoot":"","sources":["../../src/core-quantity.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,8CAA4B;AAC5B,8CAA4B;AAC5B,qDAAmC;AACnC,+CAA6B;AAC7B,2CAAyB;AACzB,+CAA6B;AAC7B,6CAA2B;AAC3B,yCAAuB;AACvB,qDAAmC;AACnC,4DAA0C;AAC1C,0DAAwC;AACxC,wDAAsC;AACtC,uEAAqD;AACrD,yDAAuC;AACvC,2DAAyC;AAEzC,kEAAgD;AAChD,0EAAwD;AACxD,yDAAuC;AACvC,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,2DAAyC;AACzC,2DAAyC;AAEzC;;GAEG;AAEH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"core-quantity.js","sourceRoot":"","sources":["../../src/core-quantity.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F,8CAA4B;AAC5B,8CAA4B;AAC5B,qDAAmC;AACnC,+CAA6B;AAC7B,2CAAyB;AACzB,+CAA6B;AAC7B,6CAA2B;AAC3B,yCAAuB;AACvB,qDAAmC;AACnC,4DAA0C;AAC1C,0DAAwC;AACxC,wDAAsC;AACtC,uEAAqD;AACrD,yDAAuC;AACvC,2DAAyC;AAEzC,kEAAgD;AAChD,0EAAwD;AACxD,yDAAuC;AACvC,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,2DAAyC;AACzC,2DAAyC;AAEzC;;GAEG;AAEH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nexport * from \"./Constants\";\nexport * from \"./Exception\";\nexport * from \"./FormatSpecHandle\";\nexport * from \"./Interfaces\";\nexport * from \"./Parser\";\nexport * from \"./ParserSpec\";\nexport * from \"./Quantity\";\nexport * from \"./Unit\";\nexport * from \"./Formatter/Format\";\nexport * from \"./Formatter/FormatterSpec\";\nexport * from \"./Formatter/FormatEnums\";\nexport * from \"./Formatter/Formatter\";\nexport * from \"./Formatter/FormattingReadyCollector\";\nexport * from \"./Formatter/Interfaces\";\nexport * from \"./QuantityLoggerCategory\";\n\nexport * from \"./UnitConversion/UnitConversion\";\nexport * from \"./UnitConversion/UnitDefinitionResolver\";\nexport * from \"./SerializedUnitSchema\";\nexport { BasicUnitsProvider } from \"./BasicUnitsProvider\";\nexport * from \"./CompositeUnitsProvider\";\nexport * from \"./internal/cross-package\";\n\n/** @docs-package-description\n * The core-quantity package contains classes, interfaces, and definitions for formatting and parsing quantity values.\n */\n\n/**\n * @docs-group-description Quantity\n * Classes, Interfaces, and definitions used to format and parse quantity values.\n */\n/**\n * @docs-group-description BasicUnitsProvider\n * A UnitsProvider backed by the bundled BIS Units schema JSON asset.\n */\n/**\n * @docs-group-description CompositeUnitsProvider\n * Factory and composition utilities for layering multiple UnitsProviders.\n */\n/**\n * @docs-group-description Logging\n * Logger categories used by this package.\n */\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-package.js","sourceRoot":"","sources":["../../../src/internal/cross-package.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,0CAA0C;AAC1C,iDAA8D;AAArD,4GAAA,mBAAmB,OAAA;AAC5B,mDAA2D;AAAlD,yGAAA,eAAe,OAAA","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"cross-package.js","sourceRoot":"","sources":["../../../src/internal/cross-package.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,0CAA0C;AAC1C,iDAA8D;AAArD,4GAAA,mBAAmB,OAAA;AAC5B,mDAA2D;AAAlD,yGAAA,eAAe,OAAA","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n// Used by ecschema-metadata (UnitTree.ts)\nexport { UnitConversionGraph } from \"../UnitConversion/Graph\";\nexport { parseDefinition } from \"../UnitConversion/Parser\";\nexport type { DefinitionFragment } from \"../UnitConversion/Parser\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasicUnitsProvider.js","sourceRoot":"","sources":["../../src/BasicUnitsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { UnitConversionInvert, type UnitConversionProps, type UnitProps, type UnitsProvider } from \"./Interfaces\";\r\nimport type { SerializedInvertedUnit, SerializedUnit, SerializedUnitSchema } from \"./SerializedUnitSchema\";\r\nimport { type ResolvedUnit, UnitDefinitionResolver } from \"./UnitConversion/UnitDefinitionResolver\";\r\nimport { qualifyItemName } from \"./UnitConversion/nameUtils\";\r\nimport { BadUnit } from \"./Unit\";\r\n\r\ninterface IndexedUnit {\r\n readonly props: UnitProps;\r\n readonly resolved: ResolvedUnit;\r\n}\r\n\r\ninterface InvertedEntry {\r\n readonly props: UnitProps;\r\n readonly invertsUnitName: string;\r\n}\r\n\r\n/** Immutable lookup indexes resolved from the bundled Units.json. */\r\ninterface ResolvedState {\r\n readonly nameMap: Map<string, IndexedUnit>;\r\n readonly labelMap: Map<string, IndexedUnit[]>;\r\n readonly phenomenonMap: Map<string, IndexedUnit[]>;\r\n readonly invertedUnits: Map<string, InvertedEntry>;\r\n readonly schemaName: string;\r\n}\r\n\r\n// Module-level cache: the unit data is derived deterministically from the bundled Units.json\r\n// asset, so the resolved indexes are effectively an immutable constant. Caching at module\r\n// scope avoids redundant work when multiple BasicUnitsProvider instances are created (e.g.\r\n// in tests or when composed inside CompositeUnitsProvider).\r\n// The JSON is loaded lazily via dynamic import() on first use, keeping the module footprint\r\n// near-zero until a provider method is actually called.\r\nlet _resolvePromise: Promise<ResolvedState> | undefined;\r\nlet _permanentError: Error | undefined;\r\n\r\nasync function resolveState(): Promise<ResolvedState> {\r\n if (_permanentError !== undefined) {\r\n throw _permanentError;\r\n }\r\n if (!_resolvePromise) {\r\n _resolvePromise = _buildState().catch((err) => {\r\n _permanentError = err instanceof Error ? err : new Error(String(err));\r\n _resolvePromise = undefined;\r\n throw _permanentError;\r\n });\r\n }\r\n return _resolvePromise;\r\n}\r\n\r\n/** @internal — test use only. Resets the module-level lazy cache. */\r\nexport function _testResetUnitsCache(): void {\r\n _resolvePromise = undefined;\r\n _permanentError = undefined;\r\n}\r\n\r\nasync function _buildState(): Promise<ResolvedState> {\r\n const { default: schema } = await import(\"./assets/Units.json\");\r\n\r\n const nameMap = new Map<string, IndexedUnit>();\r\n const labelMap = new Map<string, IndexedUnit[]>();\r\n const phenomenonMap = new Map<string, IndexedUnit[]>();\r\n const invertedUnits = new Map<string, InvertedEntry>();\r\n\r\n const s = schema as SerializedUnitSchema;\r\n const resolver = new UnitDefinitionResolver(s);\r\n const resolved = resolver.resolveAll();\r\n\r\n for (const [name, entry] of resolved) {\r\n const item = s.items[name] as SerializedUnit;\r\n const phenomenon = item.phenomenon;\r\n const unitSystem = item.unitSystem;\r\n\r\n const fullName = `${s.name}.${name}`;\r\n const props: UnitProps = {\r\n name: fullName,\r\n label: entry.label,\r\n phenomenon,\r\n isValid: true,\r\n system: unitSystem,\r\n };\r\n\r\n const indexed: IndexedUnit = { props, resolved: entry };\r\n\r\n nameMap.set(fullName, indexed);\r\n const lowerLabel = entry.label.toLowerCase();\r\n const byLabel = labelMap.get(lowerLabel) ?? [];\r\n byLabel.push(indexed);\r\n labelMap.set(lowerLabel, byLabel);\r\n\r\n const byPhen = phenomenonMap.get(phenomenon) ?? [];\r\n byPhen.push(indexed);\r\n phenomenonMap.set(phenomenon, byPhen);\r\n }\r\n\r\n // Handle InvertedUnit items — must run after nameMap is fully populated above because\r\n // invertedSource lookup requires the inverted unit's target to already be in nameMap.\r\n for (const [name, item] of Object.entries(s.items)) {\r\n if (item.schemaItemType !== \"InvertedUnit\") {\r\n continue;\r\n }\r\n const inv: SerializedInvertedUnit = item;\r\n const fullName = `${s.name}.${name}`;\r\n const invertsName = qualifyItemName(inv.invertsUnit, s.name);\r\n const unitSystem = inv.unitSystem;\r\n\r\n const invertedSource = nameMap.get(invertsName);\r\n const phenomenon = invertedSource?.props.phenomenon ?? \"\";\r\n\r\n const props: UnitProps = {\r\n name: fullName,\r\n label: inv.label ?? name,\r\n phenomenon,\r\n isValid: true,\r\n system: unitSystem,\r\n };\r\n\r\n invertedUnits.set(fullName, { props, invertsUnitName: invertsName });\r\n\r\n if (invertedSource) {\r\n const indexed: IndexedUnit = {\r\n props,\r\n resolved: { ...invertedSource.resolved, name: fullName, label: props.label, unitSystem },\r\n };\r\n nameMap.set(fullName, indexed);\r\n\r\n const lowerLabel = props.label.toLowerCase();\r\n const byLabel = labelMap.get(lowerLabel) ?? [];\r\n byLabel.push(indexed);\r\n labelMap.set(lowerLabel, byLabel);\r\n\r\n const byPhen = phenomenonMap.get(phenomenon) ?? [];\r\n byPhen.push(indexed);\r\n phenomenonMap.set(phenomenon, byPhen);\r\n }\r\n }\r\n\r\n return { nameMap, labelMap, phenomenonMap, invertedUnits, schemaName: s.name };\r\n}\r\n\r\n/**\r\n * A `UnitsProvider` backed by the full BIS `Units.ecschema.json` bundled as a JSON asset.\r\n *\r\n * The ~90 KB bundled JSON is loaded lazily via dynamic `import()` on the first provider method\r\n * call and cached at module scope — construction is essentially free, and multiple instances\r\n * share the same immutable lookup indexes.\r\n *\r\n * This is the zero-dependency default for backends, tools, and any frontend that doesn't need\r\n * iModel overrides. Equivalent to calling `createUnitsProvider()` with no arguments.\r\n *\r\n * @see createUnitsProvider for layering schema-defined units on top of basic BIS units.\r\n * @beta\r\n */\r\nexport class BasicUnitsProvider implements UnitsProvider {\r\n\r\n // ── UnitsProvider implementation ─────────────────────────────────────\r\n\r\n /** Find a unit by its display label, optionally filtering by schema name, phenomenon, and unit system.\r\n * @param unitLabel - The display label to search for (case-insensitive).\r\n * @param schemaName - Optional schema name filter. Returns `BadUnit` if provided and not `\"Units\"`.\r\n * @param phenomenon - Optional phenomenon filter (e.g. `\"Units.LENGTH\"`).\r\n * @param unitSystem - Optional unit system filter (e.g. `\"Units.METRIC\"`).\r\n * @returns The matching `UnitProps`, or a `BadUnit` if no match is found.\r\n */\r\n public async findUnit(unitLabel: string, schemaName?: string, phenomenon?: string, unitSystem?: string): Promise<UnitProps> {\r\n const state = await resolveState();\r\n if (schemaName && schemaName !== state.schemaName) {\r\n return new BadUnit();\r\n }\r\n const candidates = state.labelMap.get(unitLabel.toLowerCase());\r\n if (!candidates || candidates.length === 0) {\r\n return new BadUnit();\r\n }\r\n\r\n for (const c of candidates) {\r\n if (phenomenon && c.props.phenomenon !== phenomenon) {\r\n continue;\r\n }\r\n if (unitSystem && c.props.system !== unitSystem) {\r\n continue;\r\n }\r\n return c.props;\r\n }\r\n\r\n return new BadUnit();\r\n }\r\n\r\n /** Return all units belonging to the given phenomenon (unit family).\r\n * @param phenomenon - The phenomenon full name (e.g. `\"Units.LENGTH\"`).\r\n * @returns An array of matching `UnitProps`, or an empty array if none.\r\n */\r\n public async getUnitsByFamily(phenomenon: string): Promise<UnitProps[]> {\r\n const state = await resolveState();\r\n const entries = state.phenomenonMap.get(phenomenon);\r\n return entries ? entries.map((e) => e.props) : [];\r\n }\r\n\r\n /** Find a unit by its fully-qualified name (e.g. `\"Units.M\"`).\r\n * @param unitName - The qualified unit name.\r\n * @returns The matching `UnitProps`, or a `BadUnit` if not found.\r\n */\r\n public async findUnitByName(unitName: string): Promise<UnitProps> {\r\n const state = await resolveState();\r\n const entry = state.nameMap.get(unitName);\r\n return entry ? entry.props : new BadUnit();\r\n }\r\n\r\n /** Compute the conversion factors from `fromUnit` to `toUnit`.\r\n * Handles normal units, inverted units, and mixed (inverted ↔ non-inverted) conversions.\r\n * @param fromUnit - The source unit.\r\n * @param toUnit - The target unit.\r\n * @returns A `UnitConversionProps` with `factor`, `offset`, and optionally `inversion` and `error`.\r\n */\r\n public async getConversion(fromUnit: UnitProps, toUnit: UnitProps): Promise<UnitConversionProps> {\r\n const state = await resolveState();\r\n const from = state.nameMap.get(fromUnit.name);\r\n const to = state.nameMap.get(toUnit.name);\r\n\r\n if (!from || !to) {\r\n return { factor: 1.0, offset: 0.0, error: true };\r\n }\r\n\r\n const fromInverted = state.invertedUnits.get(fromUnit.name);\r\n const toInverted = state.invertedUnits.get(toUnit.name);\r\n\r\n const fromPhenomenon = fromInverted\r\n ? state.nameMap.get(fromInverted.invertsUnitName)?.props.phenomenon\r\n : from.props.phenomenon;\r\n const toPhenomenon = toInverted\r\n ? state.nameMap.get(toInverted.invertsUnitName)?.props.phenomenon\r\n : to.props.phenomenon;\r\n if (fromPhenomenon !== toPhenomenon) {\r\n return { factor: 1.0, offset: 0.0, error: true };\r\n }\r\n\r\n if (fromInverted && toInverted) {\r\n const innerFrom = state.nameMap.get(fromInverted.invertsUnitName);\r\n const innerTo = state.nameMap.get(toInverted.invertsUnitName);\r\n if (innerFrom && innerTo) {\r\n const c = innerFrom.resolved.conversion.inverse().compose(innerTo.resolved.conversion);\r\n return { factor: c.factor, offset: c.offset };\r\n }\r\n }\r\n\r\n if (fromInverted) {\r\n const innerFrom = state.nameMap.get(fromInverted.invertsUnitName);\r\n if (innerFrom) {\r\n const c = innerFrom.resolved.conversion.inverse().compose(to.resolved.conversion);\r\n return { factor: c.factor, offset: c.offset, inversion: UnitConversionInvert.InvertPreConversion };\r\n }\r\n }\r\n\r\n if (toInverted) {\r\n const innerTo = state.nameMap.get(toInverted.invertsUnitName);\r\n if (innerTo) {\r\n const c = from.resolved.conversion.inverse().compose(innerTo.resolved.conversion);\r\n return { factor: c.factor, offset: c.offset, inversion: UnitConversionInvert.InvertPostConversion };\r\n }\r\n }\r\n\r\n const conv = from.resolved.conversion.inverse().compose(to.resolved.conversion);\r\n return { factor: conv.factor, offset: conv.offset };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BasicUnitsProvider.js","sourceRoot":"","sources":["../../src/BasicUnitsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { UnitConversionInvert, type UnitConversionProps, type UnitProps, type UnitsProvider } from \"./Interfaces\";\nimport type { SerializedInvertedUnit, SerializedUnit, SerializedUnitSchema } from \"./SerializedUnitSchema\";\nimport { type ResolvedUnit, UnitDefinitionResolver } from \"./UnitConversion/UnitDefinitionResolver\";\nimport { qualifyItemName } from \"./UnitConversion/nameUtils\";\nimport { BadUnit } from \"./Unit\";\n\ninterface IndexedUnit {\n readonly props: UnitProps;\n readonly resolved: ResolvedUnit;\n}\n\ninterface InvertedEntry {\n readonly props: UnitProps;\n readonly invertsUnitName: string;\n}\n\n/** Immutable lookup indexes resolved from the bundled Units.json. */\ninterface ResolvedState {\n readonly nameMap: Map<string, IndexedUnit>;\n readonly labelMap: Map<string, IndexedUnit[]>;\n readonly phenomenonMap: Map<string, IndexedUnit[]>;\n readonly invertedUnits: Map<string, InvertedEntry>;\n readonly schemaName: string;\n}\n\n// Module-level cache: the unit data is derived deterministically from the bundled Units.json\n// asset, so the resolved indexes are effectively an immutable constant. Caching at module\n// scope avoids redundant work when multiple BasicUnitsProvider instances are created (e.g.\n// in tests or when composed inside CompositeUnitsProvider).\n// The JSON is loaded lazily via dynamic import() on first use, keeping the module footprint\n// near-zero until a provider method is actually called.\nlet _resolvePromise: Promise<ResolvedState> | undefined;\nlet _permanentError: Error | undefined;\n\nasync function resolveState(): Promise<ResolvedState> {\n if (_permanentError !== undefined) {\n throw _permanentError;\n }\n if (!_resolvePromise) {\n _resolvePromise = _buildState().catch((err) => {\n _permanentError = err instanceof Error ? err : new Error(String(err));\n _resolvePromise = undefined;\n throw _permanentError;\n });\n }\n return _resolvePromise;\n}\n\n/** @internal — test use only. Resets the module-level lazy cache. */\nexport function _testResetUnitsCache(): void {\n _resolvePromise = undefined;\n _permanentError = undefined;\n}\n\nasync function _buildState(): Promise<ResolvedState> {\n const { default: schema } = await import(\"./assets/Units.json\");\n\n const nameMap = new Map<string, IndexedUnit>();\n const labelMap = new Map<string, IndexedUnit[]>();\n const phenomenonMap = new Map<string, IndexedUnit[]>();\n const invertedUnits = new Map<string, InvertedEntry>();\n\n const s = schema as SerializedUnitSchema;\n const resolver = new UnitDefinitionResolver(s);\n const resolved = resolver.resolveAll();\n\n for (const [name, entry] of resolved) {\n const item = s.items[name] as SerializedUnit;\n const phenomenon = item.phenomenon;\n const unitSystem = item.unitSystem;\n\n const fullName = `${s.name}.${name}`;\n const props: UnitProps = {\n name: fullName,\n label: entry.label,\n phenomenon,\n isValid: true,\n system: unitSystem,\n };\n\n const indexed: IndexedUnit = { props, resolved: entry };\n\n nameMap.set(fullName, indexed);\n const lowerLabel = entry.label.toLowerCase();\n const byLabel = labelMap.get(lowerLabel) ?? [];\n byLabel.push(indexed);\n labelMap.set(lowerLabel, byLabel);\n\n const byPhen = phenomenonMap.get(phenomenon) ?? [];\n byPhen.push(indexed);\n phenomenonMap.set(phenomenon, byPhen);\n }\n\n // Handle InvertedUnit items — must run after nameMap is fully populated above because\n // invertedSource lookup requires the inverted unit's target to already be in nameMap.\n for (const [name, item] of Object.entries(s.items)) {\n if (item.schemaItemType !== \"InvertedUnit\") {\n continue;\n }\n const inv: SerializedInvertedUnit = item;\n const fullName = `${s.name}.${name}`;\n const invertsName = qualifyItemName(inv.invertsUnit, s.name);\n const unitSystem = inv.unitSystem;\n\n const invertedSource = nameMap.get(invertsName);\n const phenomenon = invertedSource?.props.phenomenon ?? \"\";\n\n const props: UnitProps = {\n name: fullName,\n label: inv.label ?? name,\n phenomenon,\n isValid: true,\n system: unitSystem,\n };\n\n invertedUnits.set(fullName, { props, invertsUnitName: invertsName });\n\n if (invertedSource) {\n const indexed: IndexedUnit = {\n props,\n resolved: { ...invertedSource.resolved, name: fullName, label: props.label, unitSystem },\n };\n nameMap.set(fullName, indexed);\n\n const lowerLabel = props.label.toLowerCase();\n const byLabel = labelMap.get(lowerLabel) ?? [];\n byLabel.push(indexed);\n labelMap.set(lowerLabel, byLabel);\n\n const byPhen = phenomenonMap.get(phenomenon) ?? [];\n byPhen.push(indexed);\n phenomenonMap.set(phenomenon, byPhen);\n }\n }\n\n return { nameMap, labelMap, phenomenonMap, invertedUnits, schemaName: s.name };\n}\n\n/**\n * A `UnitsProvider` backed by the full BIS `Units.ecschema.json` bundled as a JSON asset.\n *\n * The ~90 KB bundled JSON is loaded lazily via dynamic `import()` on the first provider method\n * call and cached at module scope — construction is essentially free, and multiple instances\n * share the same immutable lookup indexes.\n *\n * This is the zero-dependency default for backends, tools, and any frontend that doesn't need\n * iModel overrides. Equivalent to calling `createUnitsProvider()` with no arguments.\n *\n * @see createUnitsProvider for layering schema-defined units on top of basic BIS units.\n * @beta\n */\nexport class BasicUnitsProvider implements UnitsProvider {\n\n // ── UnitsProvider implementation ─────────────────────────────────────\n\n /** Find a unit by its display label, optionally filtering by schema name, phenomenon, and unit system.\n * @param unitLabel - The display label to search for (case-insensitive).\n * @param schemaName - Optional schema name filter. Returns `BadUnit` if provided and not `\"Units\"`.\n * @param phenomenon - Optional phenomenon filter (e.g. `\"Units.LENGTH\"`).\n * @param unitSystem - Optional unit system filter (e.g. `\"Units.METRIC\"`).\n * @returns The matching `UnitProps`, or a `BadUnit` if no match is found.\n */\n public async findUnit(unitLabel: string, schemaName?: string, phenomenon?: string, unitSystem?: string): Promise<UnitProps> {\n const state = await resolveState();\n if (schemaName && schemaName !== state.schemaName) {\n return new BadUnit();\n }\n const candidates = state.labelMap.get(unitLabel.toLowerCase());\n if (!candidates || candidates.length === 0) {\n return new BadUnit();\n }\n\n for (const c of candidates) {\n if (phenomenon && c.props.phenomenon !== phenomenon) {\n continue;\n }\n if (unitSystem && c.props.system !== unitSystem) {\n continue;\n }\n return c.props;\n }\n\n return new BadUnit();\n }\n\n /** Return all units belonging to the given phenomenon (unit family).\n * @param phenomenon - The phenomenon full name (e.g. `\"Units.LENGTH\"`).\n * @returns An array of matching `UnitProps`, or an empty array if none.\n */\n public async getUnitsByFamily(phenomenon: string): Promise<UnitProps[]> {\n const state = await resolveState();\n const entries = state.phenomenonMap.get(phenomenon);\n return entries ? entries.map((e) => e.props) : [];\n }\n\n /** Find a unit by its fully-qualified name (e.g. `\"Units.M\"`).\n * @param unitName - The qualified unit name.\n * @returns The matching `UnitProps`, or a `BadUnit` if not found.\n */\n public async findUnitByName(unitName: string): Promise<UnitProps> {\n const state = await resolveState();\n const entry = state.nameMap.get(unitName);\n return entry ? entry.props : new BadUnit();\n }\n\n /** Compute the conversion factors from `fromUnit` to `toUnit`.\n * Handles normal units, inverted units, and mixed (inverted ↔ non-inverted) conversions.\n * @param fromUnit - The source unit.\n * @param toUnit - The target unit.\n * @returns A `UnitConversionProps` with `factor`, `offset`, and optionally `inversion` and `error`.\n */\n public async getConversion(fromUnit: UnitProps, toUnit: UnitProps): Promise<UnitConversionProps> {\n const state = await resolveState();\n const from = state.nameMap.get(fromUnit.name);\n const to = state.nameMap.get(toUnit.name);\n\n if (!from || !to) {\n return { factor: 1.0, offset: 0.0, error: true };\n }\n\n const fromInverted = state.invertedUnits.get(fromUnit.name);\n const toInverted = state.invertedUnits.get(toUnit.name);\n\n const fromPhenomenon = fromInverted\n ? state.nameMap.get(fromInverted.invertsUnitName)?.props.phenomenon\n : from.props.phenomenon;\n const toPhenomenon = toInverted\n ? state.nameMap.get(toInverted.invertsUnitName)?.props.phenomenon\n : to.props.phenomenon;\n if (fromPhenomenon !== toPhenomenon) {\n return { factor: 1.0, offset: 0.0, error: true };\n }\n\n if (fromInverted && toInverted) {\n const innerFrom = state.nameMap.get(fromInverted.invertsUnitName);\n const innerTo = state.nameMap.get(toInverted.invertsUnitName);\n if (innerFrom && innerTo) {\n const c = innerFrom.resolved.conversion.inverse().compose(innerTo.resolved.conversion);\n return { factor: c.factor, offset: c.offset };\n }\n }\n\n if (fromInverted) {\n const innerFrom = state.nameMap.get(fromInverted.invertsUnitName);\n if (innerFrom) {\n const c = innerFrom.resolved.conversion.inverse().compose(to.resolved.conversion);\n return { factor: c.factor, offset: c.offset, inversion: UnitConversionInvert.InvertPreConversion };\n }\n }\n\n if (toInverted) {\n const innerTo = state.nameMap.get(toInverted.invertsUnitName);\n if (innerTo) {\n const c = from.resolved.conversion.inverse().compose(innerTo.resolved.conversion);\n return { factor: c.factor, offset: c.offset, inversion: UnitConversionInvert.InvertPostConversion };\n }\n }\n\n const conv = from.resolved.conversion.inverse().compose(to.resolved.conversion);\n return { factor: conv.factor, offset: conv.offset };\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompositeUnitsProvider.js","sourceRoot":"","sources":["../../src/CompositeUnitsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"CompositeUnitsProvider.js","sourceRoot":"","sources":["../../src/CompositeUnitsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { BasicUnitsProvider } from \"./BasicUnitsProvider\";\nimport type { UnitConversionProps, UnitProps, UnitsProvider } from \"./Interfaces\";\nimport { BadUnit } from \"./Unit\";\n\n/**\n * Options for [[createUnitsProvider]].\n * @beta\n */\nexport interface CreateUnitsProviderOptions {\n /**\n * A `UnitsProvider` consulted before the basic BIS units (e.g. a `SchemaUnitProvider`\n * for an open iModel's `SchemaContext`). When omitted, the returned provider behaves\n * exactly like `new BasicUnitsProvider()`.\n */\n primary?: UnitsProvider;\n\n /**\n * Controls which provider is consulted first and wins ties.\n * - `\"preferSchema\"` (default): `primary` is authoritative; bundled BIS units are fallback.\n * - `\"preferBundled\"`: bundled BIS units win; `primary` is consulted only for units not in\n * the bundled set. Use when the iModel's schema may be stale.\n *\n * Affects `findUnit`, `findUnitByName`, and `getConversion` (first-consulted wins or\n * falls through). `getUnitsByFamily` always merges both providers — the first-consulted\n * provider wins name collisions.\n *\n * Has no effect when `primary` is omitted — the returned provider is a plain `BasicUnitsProvider`.\n */\n bisUnitsPolicy?: \"preferSchema\" | \"preferBundled\";\n}\n\n/**\n * Returns a `UnitsProvider` that layers the basic BIS units under (or over) an optional\n * `primary` provider. Typical use: layer an iModel's schema units on top of the bundled\n * defaults from `@itwin/core-quantity`.\n *\n * Precedence rules:\n * - When `primary` is supplied and `bisUnitsPolicy` is `\"preferSchema\"` (the default): `primary` wins;\n * basic BIS units fill any gaps where `primary` returns an invalid unit or throws.\n * - When `bisUnitsPolicy` is `\"preferBundled\"`: basic BIS units win; `primary` is consulted only when the\n * basic provider can't answer.\n * - `getUnitsByFamily` always merges results from both providers, deduplicated by\n * `UnitProps.name` (fully-qualified). The first-consulted provider wins ties.\n * - When no `primary` is supplied, the returned provider is exactly `new BasicUnitsProvider()`\n * (no wrapper), preserving `instanceof` checks and keeping the hot path fast.\n *\n * @beta\n */\nexport function createUnitsProvider(options: CreateUnitsProviderOptions = {}): UnitsProvider {\n const basic = new BasicUnitsProvider();\n const primary = options.primary;\n // NOTE: returns BasicUnitsProvider directly when no primary is provided.\n // QuantityFormatter.resetToUseInternalUnitsProvider uses instanceof BasicUnitsProvider to detect this.\n // If this fast-path is ever wrapped (e.g. for telemetry), that guard must be updated.\n if (!primary) {\n return basic;\n }\n\n const providers = options.bisUnitsPolicy === \"preferBundled\" ? [basic, primary] : [primary, basic];\n return new CompositeUnitsProvider(providers);\n}\n\nclass CompositeUnitsProvider implements UnitsProvider {\n constructor(private readonly _providers: UnitsProvider[]) {}\n\n public async findUnit(label: string, schemaName?: string, phenomenon?: string, unitSystem?: string): Promise<UnitProps> {\n for (let i = 0; i < this._providers.length - 1; i++) {\n const hit = await tryFind(async () => this._providers[i].findUnit(label, schemaName, phenomenon, unitSystem));\n if (hit?.isValid) {\n return hit;\n }\n }\n return tryFind(async () => this._providers[this._providers.length - 1].findUnit(label, schemaName, phenomenon, unitSystem)).then((hit) => hit ?? new BadUnit());\n }\n\n public async findUnitByName(name: string): Promise<UnitProps> {\n for (let i = 0; i < this._providers.length - 1; i++) {\n const hit = await tryFind(async () => this._providers[i].findUnitByName(name));\n if (hit?.isValid) {\n return hit;\n }\n }\n return tryFind(async () => this._providers[this._providers.length - 1].findUnitByName(name)).then((hit) => hit ?? new BadUnit());\n }\n\n public async getUnitsByFamily(phenomenon: string): Promise<UnitProps[]> {\n const seen = new Set<string>();\n const out: UnitProps[] = [];\n // Query all providers in parallel; process results in declaration order to honour precedence.\n const results = await Promise.all(this._providers.map(async (p) => tryList(async () => p.getUnitsByFamily(phenomenon))));\n for (const units of results) {\n for (const u of units) {\n if (!seen.has(u.name)) {\n seen.add(u.name);\n out.push(u);\n }\n }\n }\n return out;\n }\n\n public async getConversion(from: UnitProps, to: UnitProps): Promise<UnitConversionProps> {\n for (let i = 0; i < this._providers.length - 1; i++) {\n try {\n const result = await this._providers[i].getConversion(from, to);\n if (!result.error) {\n return result;\n }\n } catch { /* fall through to next provider */ }\n }\n try {\n return await this._providers[this._providers.length - 1].getConversion(from, to);\n } catch {\n return { factor: 1.0, offset: 0.0, error: true };\n }\n }\n}\n\nasync function tryFind(fn: () => Promise<UnitProps>): Promise<UnitProps | undefined> {\n try { return await fn(); } catch { return undefined; }\n}\n\nasync function tryList(fn: () => Promise<UnitProps[]>): Promise<UnitProps[]> {\n try { return await fn(); } catch { return []; }\n}\n"]}
|
package/lib/esm/Constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../src/Constants.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,yDAAyD;AAEzD;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACrB,MAAM,CAAU,UAAU,GAAG,EAAE,CAAC;IAChC,MAAM,CAAU,UAAU,GAAG,EAAE,CAAC;IAChC,MAAM,CAAU,WAAW,GAAG,EAAE,CAAC;IACjC,MAAM,CAAU,SAAS,GAAG,EAAE,CAAC;IAC/B,MAAM,CAAU,UAAU,GAAG,EAAE,CAAC;IAChC,MAAM,CAAU,WAAW,GAAG,EAAE,CAAC;IACjC,MAAM,CAAU,UAAU,GAAG,EAAE,CAAC;IAChC,MAAM,CAAU,mBAAmB,GAAG,IAAI,CAAC;IAC3C,MAAM,CAAU,mBAAmB,GAAG,IAAI,CAAC;IAC3C,MAAM,CAAU,gBAAgB,GAAG,GAAG,CAAC;IACvC,MAAM,CAAU,aAAa,GAAG,GAAG,CAAC;IACpC,MAAM,CAAU,kBAAkB,GAAG,GAAG,CAAC;IACzC,MAAM,CAAU,eAAe,GAAG,EAAE,CAAC;IACrC,MAAM,CAAU,eAAe,GAAG,EAAE,CAAC;IACrC,MAAM,CAAU,YAAY,GAAG,EAAE,CAAC;IAClC,MAAM,CAAU,YAAY,GAAG,GAAG,CAAC;IAClC,MAAM,CAAC,yBAAyB,GAAG,EAAE,CAAC;IACtC,MAAM,CAAC,0BAA0B,GAAG,EAAE,CAAC;IAE/C,2DAA2D;IACpD,MAAM,KAAK,8BAA8B;QAC9C,IAAI,iBAAiB,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC;YACxD,OAAO,iBAAiB,CAAC,yBAAyB,CAAC;QAErD,iBAAiB,CAAC,yBAAyB,GAAG,GAAG,CAAC;QAClD,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAC/B,iBAAiB,CAAC,yBAAyB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE3D,OAAO,iBAAiB,CAAC,yBAAyB,CAAC;IACrD,CAAC;IAED,4DAA4D;IACrD,MAAM,KAAK,+BAA+B;QAC/C,IAAI,iBAAiB,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC;YACzD,OAAO,iBAAiB,CAAC,0BAA0B,CAAC;QAEtD,iBAAiB,CAAC,0BAA0B,GAAG,GAAG,CAAC;QACnD,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE;YACpD,iBAAiB,CAAC,0BAA0B,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE5D,OAAO,iBAAiB,CAAC,0BAA0B,CAAC;IACtD,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../src/Constants.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,yDAAyD;AAEzD;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACrB,MAAM,CAAU,UAAU,GAAG,EAAE,CAAC;IAChC,MAAM,CAAU,UAAU,GAAG,EAAE,CAAC;IAChC,MAAM,CAAU,WAAW,GAAG,EAAE,CAAC;IACjC,MAAM,CAAU,SAAS,GAAG,EAAE,CAAC;IAC/B,MAAM,CAAU,UAAU,GAAG,EAAE,CAAC;IAChC,MAAM,CAAU,WAAW,GAAG,EAAE,CAAC;IACjC,MAAM,CAAU,UAAU,GAAG,EAAE,CAAC;IAChC,MAAM,CAAU,mBAAmB,GAAG,IAAI,CAAC;IAC3C,MAAM,CAAU,mBAAmB,GAAG,IAAI,CAAC;IAC3C,MAAM,CAAU,gBAAgB,GAAG,GAAG,CAAC;IACvC,MAAM,CAAU,aAAa,GAAG,GAAG,CAAC;IACpC,MAAM,CAAU,kBAAkB,GAAG,GAAG,CAAC;IACzC,MAAM,CAAU,eAAe,GAAG,EAAE,CAAC;IACrC,MAAM,CAAU,eAAe,GAAG,EAAE,CAAC;IACrC,MAAM,CAAU,YAAY,GAAG,EAAE,CAAC;IAClC,MAAM,CAAU,YAAY,GAAG,GAAG,CAAC;IAClC,MAAM,CAAC,yBAAyB,GAAG,EAAE,CAAC;IACtC,MAAM,CAAC,0BAA0B,GAAG,EAAE,CAAC;IAE/C,2DAA2D;IACpD,MAAM,KAAK,8BAA8B;QAC9C,IAAI,iBAAiB,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC;YACxD,OAAO,iBAAiB,CAAC,yBAAyB,CAAC;QAErD,iBAAiB,CAAC,yBAAyB,GAAG,GAAG,CAAC;QAClD,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAC/B,iBAAiB,CAAC,yBAAyB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE3D,OAAO,iBAAiB,CAAC,yBAAyB,CAAC;IACrD,CAAC;IAED,4DAA4D;IACrD,MAAM,KAAK,+BAA+B;QAC/C,IAAI,iBAAiB,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC;YACzD,OAAO,iBAAiB,CAAC,0BAA0B,CAAC;QAEtD,iBAAiB,CAAC,0BAA0B,GAAG,GAAG,CAAC;QACnD,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE;YACpD,iBAAiB,CAAC,0BAA0B,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAE5D,OAAO,iBAAiB,CAAC,0BAA0B,CAAC;IACtD,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/* eslint-disable @typescript-eslint/naming-convention */\n\n/** Constants used internally for both formatting and parsing.\n * @internal\n */\nexport class QuantityConstants {\n public static readonly CHAR_COMMA = 44;\n public static readonly CHAR_SPACE = 32;\n public static readonly CHAR_NUMBER = 35;\n public static readonly CHAR_PLUS = 43;\n public static readonly CHAR_MINUS = 45;\n public static readonly CHAR_PERIOD = 46;\n public static readonly CHAR_SLASH = 47;\n public static readonly CHAR_DIVISION_SLASH = 8725;\n public static readonly CHAR_FRACTION_SLASH = 8260;\n public static readonly CHAR_ONE_QUARTER = 188;\n public static readonly CHAR_ONE_HALF = 189;\n public static readonly CHAR_THREE_QUARTER = 190;\n public static readonly CHAR_DIGIT_ZERO = 48;\n public static readonly CHAR_DIGIT_NINE = 57;\n public static readonly CHAR_UPPER_E = 69;\n public static readonly CHAR_LOWER_E = 101;\n private static _LOCALE_DECIMAL_SEPARATOR = \"\";\n private static _LOCALE_THOUSAND_SEPARATOR = \"\";\n\n /** Return the decimal separator for the current locale. */\n public static get LocaleSpecificDecimalSeparator(): string {\n if (QuantityConstants._LOCALE_DECIMAL_SEPARATOR.length > 0)\n return QuantityConstants._LOCALE_DECIMAL_SEPARATOR;\n\n QuantityConstants._LOCALE_DECIMAL_SEPARATOR = \".\";\n const matches = (12345.6789).toLocaleString().match(/345(.*)67/);\n if (matches && matches.length > 1)\n QuantityConstants._LOCALE_DECIMAL_SEPARATOR = matches[1];\n\n return QuantityConstants._LOCALE_DECIMAL_SEPARATOR;\n }\n\n /** Return the thousand separator for the current locale. */\n public static get LocaleSpecificThousandSeparator(): string {\n if (QuantityConstants._LOCALE_THOUSAND_SEPARATOR.length > 0)\n return QuantityConstants._LOCALE_THOUSAND_SEPARATOR;\n\n QuantityConstants._LOCALE_THOUSAND_SEPARATOR = \",\";\n const matches = (12345.6789).toLocaleString().match(/12(.*)345/);\n if (matches && matches.length > 1 && matches[1] !== \"\")\n QuantityConstants._LOCALE_THOUSAND_SEPARATOR = matches[1];\n\n return QuantityConstants._LOCALE_THOUSAND_SEPARATOR;\n }\n}\n"]}
|
package/lib/esm/Exception.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Exception.js","sourceRoot":"","sources":["../../src/Exception.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAN,IAAY,cAaX;AAbD,WAAY,cAAc;IACxB,qFAA4B,CAAA;IAC5B,yDAAW,CAAA;IACX,qEAAqC,CAAA;IACrC,2FAAgD,CAAA;IAChD,qGAAqD,CAAA;IACrD,mGAAoD,CAAA;IACpD,2GAAwD,CAAA;IACxD,qEAAqC,CAAA;IACrC,uHAA8D,CAAA;IAC9D,6EAAyC,CAAA;IACzC,6FAAiD,CAAA;IACjD,yEAAwC,CAAA;AAC1C,CAAC,EAbW,cAAc,KAAd,cAAc,QAazB;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;IACD;IAA5C,YAA4C,WAAmB,EAAE,OAAgB;QAC/E,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QADc,gBAAW,GAAX,WAAW,CAAQ;QAE7D,MAAM,CAAC,WAAW,KAAK,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"Exception.js","sourceRoot":"","sources":["../../src/Exception.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAN,IAAY,cAaX;AAbD,WAAY,cAAc;IACxB,qFAA4B,CAAA;IAC5B,yDAAW,CAAA;IACX,qEAAqC,CAAA;IACrC,2FAAgD,CAAA;IAChD,qGAAqD,CAAA;IACrD,mGAAoD,CAAA;IACpD,2GAAwD,CAAA;IACxD,qEAAqC,CAAA;IACrC,uHAA8D,CAAA;IAC9D,6EAAyC,CAAA;IACzC,6FAAiD,CAAA;IACjD,yEAAwC,CAAA;AAC1C,CAAC,EAbW,cAAc,KAAd,cAAc,QAazB;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;IACD;IAA5C,YAA4C,WAAmB,EAAE,OAAgB;QAC/E,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QADc,gBAAW,GAAX,WAAW,CAAQ;QAE7D,MAAM,CAAC,WAAW,KAAK,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Quantity\n */\n\nimport { assert, BentleyError } from \"@itwin/core-bentley\";\n\n/**\n * Status codes used during Quantity parsing and formatting processing.\n * @beta\n */\nexport enum QuantityStatus {\n QUANTITY_ERROR_BASE = 0x88DF,\n Success = 0,\n InvalidJson = QUANTITY_ERROR_BASE + 1,\n InvalidCompositeFormat = QUANTITY_ERROR_BASE + 2,\n UnableToGenerateParseTokens = QUANTITY_ERROR_BASE + 3,\n NoValueOrUnitFoundInString = QUANTITY_ERROR_BASE + 4,\n UnitLabelSuppliedButNotMatched = QUANTITY_ERROR_BASE + 5,\n UnknownUnit = QUANTITY_ERROR_BASE + 6,\n UnableToConvertParseTokensToQuantity = QUANTITY_ERROR_BASE + 7,\n UnsupportedUnit = QUANTITY_ERROR_BASE + 8,\n MissingRequiredProperty = QUANTITY_ERROR_BASE + 9,\n InvertingZero = QUANTITY_ERROR_BASE + 10,\n}\n\n/** The error type thrown by this module. See [[QuantityStatus]] for `errorNumber` values.\n * @beta\n */\nexport class QuantityError extends BentleyError {\n public constructor(public override readonly errorNumber: number, message?: string) {\n super(errorNumber, message);\n assert(errorNumber !== QuantityStatus.Success, message);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormatSpecHandle.js","sourceRoot":"","sources":["../../src/FormatSpecHandle.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAmB/F;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAgB;IACnB,SAAS,GAAG,KAAK,CAAC;IACT,SAAS,CAAyB;IAClC,QAAQ,CAAS;IACjB,gBAAgB,CAAS;IACzB,OAAO,CAA4B;IAEpD,gBAAgB;IAChB,YAAY,IAA0B;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACjD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,4CAA4C;IAC5C,IAAW,OAAO,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtD,oDAAoD;IACpD,IAAW,eAAe,KAAa,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEtE,sFAAsF;IACtF,IAAW,MAAM,KAAgC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEvE,iEAAiE;IACjE,IAAW,aAAa,KAAgC,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IAEjG,8DAA8D;IAC9D,IAAW,UAAU,KAA6B,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAExF;;;;OAIG;IACI,MAAM,CAAC,KAAa;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,aAAa;YAChB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACI,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAEO,SAAS;QACf,IAAI,IAAI,CAAC,SAAS;YAChB,OAAO,SAAS,CAAC;QAEnB,OAAO,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC;YAC1C,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,mBAAmB,EAAE,IAAI,CAAC,gBAAgB;YAC1C,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"FormatSpecHandle.js","sourceRoot":"","sources":["../../src/FormatSpecHandle.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAmB/F;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAgB;IACnB,SAAS,GAAG,KAAK,CAAC;IACT,SAAS,CAAyB;IAClC,QAAQ,CAAS;IACjB,gBAAgB,CAAS;IACzB,OAAO,CAA4B;IAEpD,gBAAgB;IAChB,YAAY,IAA0B;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACjD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,4CAA4C;IAC5C,IAAW,OAAO,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtD,oDAAoD;IACpD,IAAW,eAAe,KAAa,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEtE,sFAAsF;IACtF,IAAW,MAAM,KAAgC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEvE,iEAAiE;IACjE,IAAW,aAAa,KAAgC,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IAEjG,8DAA8D;IAC9D,IAAW,UAAU,KAA6B,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IAExF;;;;OAIG;IACI,MAAM,CAAC,KAAa;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,aAAa;YAChB,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACI,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAEO,SAAS;QACf,IAAI,IAAI,CAAC,SAAS;YAChB,OAAO,SAAS,CAAC;QAEnB,OAAO,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC;YAC1C,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,mBAAmB,EAAE,IAAI,CAAC,gBAAgB;YAC1C,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Quantity\n */\n\nimport type { FormatterSpec } from \"./Formatter/FormatterSpec\";\nimport type { FormattingSpecArgs, FormattingSpecEntry, FormattingSpecProvider } from \"./Formatter/Interfaces\";\nimport type { ParserSpec } from \"./ParserSpec\";\nimport type { UnitSystemKey } from \"./Interfaces\";\n\n/** Arguments for constructing a [[FormatSpecHandle]].\n * @internal\n */\nexport interface FormatSpecHandleArgs extends FormattingSpecArgs {\n /** The provider that supplies current formatting spec lookups. */\n provider: FormattingSpecProvider;\n}\n\n/** A handle to formatting and parsing specs for a specific KoQ and persistence unit.\n * Reads the current specs from the provider on access. Use [[QuantityFormatter.getFormatSpecHandle]]\n * to create instances.\n *\n * When formatting is not yet ready, [[format]] returns a `value.toString()` fallback.\n * Dispose the handle when it is no longer needed to invalidate it.\n *\n * @beta\n */\nexport class FormatSpecHandle implements Disposable {\n private _disposed = false;\n private readonly _provider: FormattingSpecProvider;\n private readonly _koqName: string;\n private readonly _persistenceUnit: string;\n private readonly _system: UnitSystemKey | undefined;\n\n /** @internal */\n constructor(args: FormatSpecHandleArgs) {\n this._provider = args.provider;\n this._koqName = args.name;\n this._persistenceUnit = args.persistenceUnitName;\n this._system = args.system;\n }\n\n /** The KoQ name this handle is keyed to. */\n public get koqName(): string { return this._koqName; }\n\n /** The persistence unit this handle is keyed to. */\n public get persistenceUnit(): string { return this._persistenceUnit; }\n\n /** The unit system this handle is pinned to, or `undefined` for the active system. */\n public get system(): UnitSystemKey | undefined { return this._system; }\n\n /** The current FormatterSpec, or undefined if not yet loaded. */\n public get formatterSpec(): FormatterSpec | undefined { return this._getEntry()?.formatterSpec; }\n\n /** The current ParserSpec, or undefined if not yet loaded. */\n public get parserSpec(): ParserSpec | undefined { return this._getEntry()?.parserSpec; }\n\n /** Format a quantity value using the current spec.\n * If the formatter is not yet ready, returns `value.toString()` as a fallback.\n * @param value - The numeric value to format.\n * @returns The formatted string.\n */\n public format(value: number): string {\n const formatterSpec = this.formatterSpec;\n if (!formatterSpec)\n return value.toString();\n return this._provider.formatQuantity(value, formatterSpec);\n }\n\n /** Invalidate this handle.\n * Idempotent and safe to call multiple times.\n * No additional teardown is required because the handle owns no external resources.\n */\n public [Symbol.dispose](): void {\n this._disposed = true;\n }\n\n private _getEntry(): FormattingSpecEntry | undefined {\n if (this._disposed)\n return undefined;\n\n return this._provider.getSpecsByNameAndUnit({\n name: this._koqName,\n persistenceUnitName: this._persistenceUnit,\n system: this._system,\n });\n }\n}\n"]}
|