@itwin/ecschema-rpcinterface-tests 5.14.0-dev.9 → 5.15.0-dev.2

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.
@@ -26343,7 +26343,7 @@ __webpack_require__.r(__webpack_exports__);
26343
26343
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
26344
26344
  /* harmony export */ Base64EncodedString: () => (/* binding */ Base64EncodedString)
26345
26345
  /* harmony export */ });
26346
- /* harmony import */ var js_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! js-base64 */ "../../common/temp/node_modules/.pnpm/js-base64@3.9.3/node_modules/js-base64/base64.mjs");
26346
+ /* harmony import */ var js_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! js-base64 */ "../../common/temp/node_modules/.pnpm/js-base64@3.9.4/node_modules/js-base64/base64.mjs");
26347
26347
  /*---------------------------------------------------------------------------------------------
26348
26348
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
26349
26349
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -28139,7 +28139,7 @@ __webpack_require__.r(__webpack_exports__);
28139
28139
  /* harmony export */ });
28140
28140
  /* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
28141
28141
  /* harmony import */ var _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @itwin/core-geometry */ "../../core/geometry/lib/esm/core-geometry.js");
28142
- /* harmony import */ var js_base64__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! js-base64 */ "../../common/temp/node_modules/.pnpm/js-base64@3.9.3/node_modules/js-base64/base64.mjs");
28142
+ /* harmony import */ var js_base64__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! js-base64 */ "../../common/temp/node_modules/.pnpm/js-base64@3.9.4/node_modules/js-base64/base64.mjs");
28143
28143
  /*---------------------------------------------------------------------------------------------
28144
28144
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
28145
28145
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -28396,7 +28396,7 @@ var QueryParamType;
28396
28396
  * @see
28397
28397
  * - [ECSQL Parameters]($docs/learning/ECSQL.md#ecsql-parameters)
28398
28398
  * - [ECSQL Parameter Types]($docs/learning/ECSQLParameterTypes)
28399
- * - [ECSQL Code Examples]($docs/learning/backend/ECSQLCodeExamples#parameter-bindings)
28399
+ * - [ECSQL Code Examples]($docs/learning/ECSQLCodeExamples#parameter-bindings)
28400
28400
  *
28401
28401
  * @public
28402
28402
  */
@@ -30756,7 +30756,7 @@ __webpack_require__.r(__webpack_exports__);
30756
30756
  * There are three primary ways to interact with and read the results:
30757
30757
  * - Stream them using ECSqlReader as an asynchronous iterator.
30758
30758
  * - Iterator over them manually using [[ECSqlReader.step]].
30759
- * - Capture all of the results at once in an array using [[QueryRowProxy.toArray]].
30759
+ * - Capture all of the results at once in an array using [[ECSqlReader.toArray]].
30760
30760
  *
30761
30761
  * @see
30762
30762
  * - [ECSQL Overview]($docs/learning/backend/ExecutingECSQL)
@@ -30798,7 +30798,7 @@ class ECSqlReader extends _ECSqlReaderBase__WEBPACK_IMPORTED_MODULE_1__.ECSqlRea
30798
30798
  this.reset(options);
30799
30799
  }
30800
30800
  /**
30801
- * @deprecated in 5.6 - will not be removed until after 2027-04-02. Will not be removed until 2027-02-18. Should not be used. Will be made private in a future release.
30801
+ * @deprecated in 5.6 - will not be removed until after 2027-04-02. Should not be used. Will be made private in a future release.
30802
30802
  */
30803
30803
  setParams(param) {
30804
30804
  if (this._lockArgs) {
@@ -30807,7 +30807,7 @@ class ECSqlReader extends _ECSqlReaderBase__WEBPACK_IMPORTED_MODULE_1__.ECSqlRea
30807
30807
  this._param = param.serialize();
30808
30808
  }
30809
30809
  /**
30810
- * @deprecated in 5.6 - will not be removed until after 2027-04-02. Will not be removed until 2027-02-18. Should not be used. Will be made private in a future release.
30810
+ * @deprecated in 5.6 - will not be removed until after 2027-04-02. Should not be used. Will be made private in a future release.
30811
30811
  */
30812
30812
  reset(options) {
30813
30813
  if (options) {
@@ -30831,7 +30831,7 @@ class ECSqlReader extends _ECSqlReaderBase__WEBPACK_IMPORTED_MODULE_1__.ECSqlRea
30831
30831
  }
30832
30832
  /**
30833
30833
  * Clear all bindings.
30834
- * @deprecated in 5.6 - will not be removed until after 2027-04-02. Will not be removed until 2027-02-18. Should not be used. Will be made private in a future release.
30834
+ * @deprecated in 5.6 - will not be removed until after 2027-04-02. Should not be used. Will be made private in a future release.
30835
30835
  */
30836
30836
  resetBindings() {
30837
30837
  this._param = new _ConcurrentQuery__WEBPACK_IMPORTED_MODULE_0__.QueryBinder().serialize();
@@ -44632,6 +44632,11 @@ class TabRun extends TextBlockComponent {
44632
44632
  return other instanceof TabRun && super.equals(other);
44633
44633
  }
44634
44634
  }
44635
+ function accessorsEqual(a, b) {
44636
+ const lhs = a ?? [];
44637
+ const rhs = b ?? [];
44638
+ return lhs.length === rhs.length && lhs.every((value, index) => value === rhs[index]);
44639
+ }
44635
44640
  /** A [[Run]] that displays the formatted value of a property of some [Element]($backend).
44636
44641
  * When a [[TextBlock]] containing a [[FieldRun]] is written into the iModel as an [ITextAnnotation]($backend) element,
44637
44642
  * a dependency is established between the two elements via the [ElementDrivesTextAnnotation]($backend) relationship such that
@@ -44721,12 +44726,10 @@ class FieldRun extends TextBlockComponent {
44721
44726
  if (this.propertyPath.propertyName !== other.propertyPath.propertyName) {
44722
44727
  return false;
44723
44728
  }
44724
- const thisAccessors = this.propertyPath.accessors ?? [];
44725
- const otherAccessors = other.propertyPath.accessors ?? [];
44726
- if (thisAccessors.length !== otherAccessors.length) {
44729
+ if (!accessorsEqual(this.propertyPath.accessors, other.propertyPath.accessors)) {
44727
44730
  return false;
44728
44731
  }
44729
- if (!thisAccessors.every((value, index) => value === otherAccessors[index])) {
44732
+ if (!accessorsEqual(this.propertyPath.jsonAccessors, other.propertyPath.jsonAccessors)) {
44730
44733
  return false;
44731
44734
  }
44732
44735
  if (this.formatOptions && other.formatOptions) {
@@ -55872,9 +55875,8 @@ const formatters = {
55872
55875
  // eslint-disable-next-line @typescript-eslint/no-base-to-string
55873
55876
  "string": (v, o) => formatString(v.toString(), o),
55874
55877
  "datetime": (v, o) => formatString(formatDateTime(v, o?.dateTime), o),
55875
- // eslint-disable-next-line @typescript-eslint/no-base-to-string
55876
- "quantity": (v, o) => formatString(v.toString(), o),
55877
- "coordinate": (v, o) => formatString(formatPointBasic(v), o),
55878
+ "quantity": (v, o, fm) => formatString(formatMagnitudeValue(v, fm), o),
55879
+ "coordinate": (v, o, fm) => formatString(formatPoint(v, fm), o),
55878
55880
  // eslint-disable-next-line @typescript-eslint/no-base-to-string
55879
55881
  "boolean": (v, o) => formatString(v.toString(), o),
55880
55882
  // eslint-disable-next-line @typescript-eslint/no-base-to-string
@@ -55915,27 +55917,58 @@ function formatDateTime(v, o) {
55915
55917
  }
55916
55918
  return undefined;
55917
55919
  }
55918
- // ###TODO replace this with actual quantity coordinate formatting.
55919
- function formatPointBasic(v) {
55920
- if (typeof v === "object" && "x" in v && "y" in v) {
55921
- const parts = [v.x, v.y];
55922
- const z = v.z;
55923
- if (undefined !== z) {
55924
- parts.push(z);
55925
- }
55926
- return `(${parts.join(", ")})`;
55920
+ /** A `"quantity"` magnitude rendered through `formatMagnitude`, or its raw string
55921
+ * representation when no callback was supplied or the value is not a number.
55922
+ */
55923
+ function formatMagnitudeValue(v, formatMagnitude) {
55924
+ if (formatMagnitude && typeof v === "number") {
55925
+ return formatMagnitude(v);
55927
55926
  }
55928
- return undefined;
55927
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
55928
+ return v.toString();
55929
55929
  }
55930
- /** @internal */
55931
- function formatFieldValue(value, options) {
55930
+ /** A coordinate rendered as `(x, y[, z])`, each component passed through `formatMagnitude` when
55931
+ * one is supplied. Without a callback the components render bare, with no unit labels — Core
55932
+ * carries no built-in coordinate format.
55933
+ */
55934
+ function formatPoint(v, formatMagnitude) {
55935
+ const magnitudes = getCoordinateMagnitudes(v);
55936
+ if (!magnitudes) {
55937
+ return undefined;
55938
+ }
55939
+ return `(${magnitudes.map((m) => formatMagnitude ? formatMagnitude(m) : `${m}`).join(", ")})`;
55940
+ }
55941
+ /** Formats `value` through the per-type entry in [[formatters]], wrapping the result with
55942
+ * prefix/suffix/case.
55943
+ *
55944
+ * `formatMagnitude` is consulted only by the `"quantity"` and `"coordinate"` branches. Omitting
55945
+ * it falls those values back to `value.toString()`.
55946
+ * @internal
55947
+ */
55948
+ function formatFieldValue({ value, options, formatMagnitude }) {
55932
55949
  const formatter = formatters[value.type];
55933
- return formatter ? formatter(value.value, options) : undefined;
55950
+ return formatter ? formatter(value.value, options, formatMagnitude) : undefined;
55934
55951
  }
55935
- /** @internal */
55952
+ /** Type guard for [[FieldPropertyType]] strings that have a built-in per-type formatter.
55953
+ * @internal
55954
+ */
55936
55955
  function isKnownFieldPropertyType(type) {
55937
55956
  return type in formatters;
55938
55957
  }
55958
+ /** The `x`, `y` and (when present) `z` components of a coordinate value, or `undefined` if `v` is
55959
+ * not one.
55960
+ */
55961
+ function getCoordinateMagnitudes(v) {
55962
+ if (typeof v !== "object" || !("x" in v) || !("y" in v)) {
55963
+ return undefined;
55964
+ }
55965
+ const parts = [v.x, v.y];
55966
+ const z = "z" in v ? v.z : undefined;
55967
+ if (undefined !== z) {
55968
+ parts.push(z);
55969
+ }
55970
+ return parts;
55971
+ }
55939
55972
 
55940
55973
 
55941
55974
  /***/ },
@@ -57426,7 +57459,7 @@ __webpack_require__.r(__webpack_exports__);
57426
57459
  /* harmony export */ RpcNotFoundResponse: () => (/* binding */ RpcNotFoundResponse),
57427
57460
  /* harmony export */ RpcPendingResponse: () => (/* binding */ RpcPendingResponse)
57428
57461
  /* harmony export */ });
57429
- /* harmony import */ var js_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! js-base64 */ "../../common/temp/node_modules/.pnpm/js-base64@3.9.3/node_modules/js-base64/base64.mjs");
57462
+ /* harmony import */ var js_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! js-base64 */ "../../common/temp/node_modules/.pnpm/js-base64@3.9.4/node_modules/js-base64/base64.mjs");
57430
57463
  /* harmony import */ var _RpcInterface__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../RpcInterface */ "../../core/common/lib/esm/RpcInterface.js");
57431
57464
  /* harmony import */ var _RpcManager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../RpcManager */ "../../core/common/lib/esm/RpcManager.js");
57432
57465
  /* harmony import */ var _RpcConfiguration__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./RpcConfiguration */ "../../core/common/lib/esm/rpc/core/RpcConfiguration.js");
@@ -65976,9 +66009,17 @@ class ECName {
65976
66009
  }
65977
66010
  return new ECName(output);
65978
66011
  }
66012
+ /** Decode EC name escape sequences without requiring a valid EC identifier.
66013
+ * @internal
66014
+ */
66015
+ static decode(name) {
66016
+ if (!name.includes("__x"))
66017
+ return name;
66018
+ return name.replace(ecNameReplacerRegex, (_match, hex) => String.fromCharCode(Number.parseInt(hex, 16)));
66019
+ }
65979
66020
  /** Decode this ECName, replacing encoded special characters with the characters they encode. */
65980
66021
  decode() {
65981
- return this.name.replace(ecNameReplacerRegex, (_match, hex) => String.fromCharCode(Number.parseInt(hex, 16)));
66022
+ return ECName.decode(this.name);
65982
66023
  }
65983
66024
  }
65984
66025
 
@@ -66667,48 +66708,79 @@ class FormatSetFormatsProvider {
66667
66708
  this._fallbackProvider = undefined;
66668
66709
  }
66669
66710
  /**
66670
- * Retrieves a format definition by its name from the format set. If not found, it checks the fallback provider to find the format, else returns undefined.
66671
- * If the format is a string reference to another format, it resolves the reference and returns the FormatDefinition.
66711
+ * Retrieves a format definition from the format set, resolving string references and consulting the fallback provider when needed.
66672
66712
  */
66673
- async getFormat(input, system) {
66674
- // Normalizes any schemaItem names coming from node addon 'schemaName:schemaItemName' -> 'schemaName.schemaItemName'
66675
- const [schemaName, itemName] = _Metadata_SchemaItem__WEBPACK_IMPORTED_MODULE_1__.SchemaItem.parseFullName(input);
66676
- const name = (schemaName === "") ? itemName : `${schemaName}.${itemName}`;
66713
+ async getFormat(input, system, context) {
66714
+ const lookupContext = extendProviderContext(context, this);
66715
+ if (!lookupContext)
66716
+ return undefined;
66717
+ const name = normalizeFormatName(input);
66677
66718
  const format = this._formatSet.formats[name];
66678
66719
  if (format !== undefined) {
66679
- // If format is a string reference, resolve it
66680
- if (typeof format === "string") {
66681
- return this.resolveReference(format, undefined, system);
66682
- }
66720
+ if (typeof format === "string")
66721
+ return this.resolveReference(format, new Set(), system, lookupContext);
66683
66722
  return format;
66684
66723
  }
66685
- if (this._fallbackProvider)
66686
- return this._fallbackProvider.getFormat(name, system);
66687
- return undefined;
66724
+ return this.getFormatFromFallback(name, system, lookupContext);
66725
+ }
66726
+ async getFormatFromFallback(name, system, context) {
66727
+ const fallbackProvider = this._fallbackProvider;
66728
+ if (!fallbackProvider)
66729
+ return undefined;
66730
+ return fallbackProvider.getFormat(name, system, context);
66731
+ }
66732
+ /**
66733
+ * Retrieves a format definition from the format set without awaiting a provider. String references are resolved
66734
+ * locally; a fallback is used only when it implements `SyncFormatsProvider`.
66735
+ */
66736
+ getFormatSync(input, system, context) {
66737
+ const lookupContext = extendProviderContext(context, this);
66738
+ if (!lookupContext)
66739
+ return undefined;
66740
+ const name = normalizeFormatName(input);
66741
+ const format = this._formatSet.formats[name];
66742
+ if (format !== undefined) {
66743
+ if (typeof format === "string")
66744
+ return this.resolveReferenceSync(format, new Set(), system, lookupContext);
66745
+ return format;
66746
+ }
66747
+ return this.getFormatSyncFromFallback(name, system, lookupContext);
66748
+ }
66749
+ getFormatSyncFromFallback(name, system, context) {
66750
+ const fallbackProvider = this._fallbackProvider;
66751
+ return typeof fallbackProvider?.getFormatSync === "function" ? fallbackProvider.getFormatSync(name, system, context) : undefined;
66688
66752
  }
66689
66753
  /**
66690
66754
  * Resolves a string reference to its FormatDefinition, following chains of references.
66691
66755
  * @param reference The string reference to resolve
66692
66756
  * @param visited Set of visited references to detect circular references
66693
66757
  * @param system Optional unit system override
66758
+ * @param context Lookup context to forward to the fallback provider
66694
66759
  */
66695
- async resolveReference(reference, visited = new Set(), system) {
66760
+ async resolveReference(reference, visited, system, context) {
66696
66761
  // Prevent infinite loops from circular references
66697
66762
  if (visited.has(reference)) {
66698
66763
  return undefined;
66699
66764
  }
66700
66765
  visited.add(reference);
66701
66766
  const format = this._formatSet.formats[reference];
66702
- if (format === undefined) {
66703
- if (this._fallbackProvider) {
66704
- return this._fallbackProvider.getFormat(reference, system);
66705
- }
66767
+ if (format === undefined)
66768
+ return this.getFormatFromFallback(reference, system, context);
66769
+ if (typeof format === "string")
66770
+ return this.resolveReference(format, visited, system, context);
66771
+ return format;
66772
+ }
66773
+ resolveReferenceSync(reference, visited, system, context) {
66774
+ // Prevent infinite loops from circular references
66775
+ if (visited.has(reference)) {
66706
66776
  return undefined;
66707
66777
  }
66708
- // If we found another string reference, resolve it recursively
66709
- if (typeof format === "string") {
66710
- return this.resolveReference(format, visited, system);
66711
- }
66778
+ visited.add(reference);
66779
+ const format = this._formatSet.formats[reference];
66780
+ if (format === undefined)
66781
+ return this.getFormatSyncFromFallback(reference, system, context);
66782
+ if (typeof format === "string")
66783
+ return this.resolveReferenceSync(format, visited, system, context);
66712
66784
  return format;
66713
66785
  }
66714
66786
  /**
@@ -66744,6 +66816,18 @@ class FormatSetFormatsProvider {
66744
66816
  return referencingFormats;
66745
66817
  }
66746
66818
  }
66819
+ function extendProviderContext(context, provider) {
66820
+ const providerChain = new Set(context?.providerChain);
66821
+ if (providerChain.has(provider))
66822
+ return undefined;
66823
+ providerChain.add(provider);
66824
+ return { providerChain };
66825
+ }
66826
+ function normalizeFormatName(input) {
66827
+ // Convert node-addon names from `schemaName:schemaItemName` to the dot-separated key used by FormatSet.
66828
+ const [schemaName, itemName] = _Metadata_SchemaItem__WEBPACK_IMPORTED_MODULE_1__.SchemaItem.parseFullName(input);
66829
+ return schemaName === "" ? itemName : `${schemaName}.${itemName}`;
66830
+ }
66747
66831
 
66748
66832
 
66749
66833
  /***/ },
@@ -66761,11 +66845,16 @@ __webpack_require__.r(__webpack_exports__);
66761
66845
  /* harmony export */ });
66762
66846
  /* harmony import */ var _Context__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Context */ "../../core/ecschema-metadata/lib/esm/Context.js");
66763
66847
  /* harmony import */ var _SchemaKey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../SchemaKey */ "../../core/ecschema-metadata/lib/esm/SchemaKey.js");
66764
- /* harmony import */ var _Metadata_SchemaItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../Metadata/SchemaItem */ "../../core/ecschema-metadata/lib/esm/Metadata/SchemaItem.js");
66765
- /* harmony import */ var _Metadata_Format__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Metadata/Format */ "../../core/ecschema-metadata/lib/esm/Metadata/Format.js");
66766
- /* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
66767
- /* harmony import */ var _Metadata_KindOfQuantity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Metadata/KindOfQuantity */ "../../core/ecschema-metadata/lib/esm/Metadata/KindOfQuantity.js");
66848
+ /* harmony import */ var _ECObjects__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ECObjects */ "../../core/ecschema-metadata/lib/esm/ECObjects.js");
66849
+ /* harmony import */ var _Exception__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Exception */ "../../core/ecschema-metadata/lib/esm/Exception.js");
66850
+ /* harmony import */ var _Metadata_SchemaItem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Metadata/SchemaItem */ "../../core/ecschema-metadata/lib/esm/Metadata/SchemaItem.js");
66851
+ /* harmony import */ var _Metadata_Format__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Metadata/Format */ "../../core/ecschema-metadata/lib/esm/Metadata/Format.js");
66768
66852
  /* harmony import */ var _Metadata_OverrideFormat__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../Metadata/OverrideFormat */ "../../core/ecschema-metadata/lib/esm/Metadata/OverrideFormat.js");
66853
+ /* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
66854
+ /* harmony import */ var _Metadata_KindOfQuantity__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Metadata/KindOfQuantity */ "../../core/ecschema-metadata/lib/esm/Metadata/KindOfQuantity.js");
66855
+ /* harmony import */ var _Metadata_Unit__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../Metadata/Unit */ "../../core/ecschema-metadata/lib/esm/Metadata/Unit.js");
66856
+ /* harmony import */ var _Metadata_InvertedUnit__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../Metadata/InvertedUnit */ "../../core/ecschema-metadata/lib/esm/Metadata/InvertedUnit.js");
66857
+ /* harmony import */ var _Metadata_UnitSystem__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../Metadata/UnitSystem */ "../../core/ecschema-metadata/lib/esm/Metadata/UnitSystem.js");
66769
66858
  /*---------------------------------------------------------------------------------------------
66770
66859
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
66771
66860
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -66780,6 +66869,11 @@ __webpack_require__.r(__webpack_exports__);
66780
66869
 
66781
66870
 
66782
66871
 
66872
+
66873
+
66874
+
66875
+
66876
+
66783
66877
  const loggerCategory = "SchemaFormatsProvider";
66784
66878
  /**
66785
66879
  * Provides default formats and kind of quantities from a given SchemaContext or SchemaLocater.
@@ -66789,7 +66883,7 @@ class SchemaFormatsProvider {
66789
66883
  _context;
66790
66884
  _unitSystem;
66791
66885
  _formatsRetrieved = new Set();
66792
- onFormatsChanged = new _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_4__.BeEvent();
66886
+ onFormatsChanged = new _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_7__.BeEvent();
66793
66887
  /**
66794
66888
  *
66795
66889
  * @param contextOrLocater The SchemaContext or a different ISchemaLocater implementation used to retrieve the schema. The SchemaContext
@@ -66836,71 +66930,58 @@ class SchemaFormatsProvider {
66836
66930
  async getKindOfQuantityFormatFromSchema(itemKey, systemOverride) {
66837
66931
  let kindOfQuantity;
66838
66932
  try {
66839
- kindOfQuantity = await this._context.getSchemaItem(itemKey, _Metadata_KindOfQuantity__WEBPACK_IMPORTED_MODULE_5__.KindOfQuantity);
66933
+ kindOfQuantity = await this._context.getSchemaItem(itemKey, _Metadata_KindOfQuantity__WEBPACK_IMPORTED_MODULE_8__.KindOfQuantity);
66840
66934
  }
66841
66935
  catch {
66842
- _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_4__.Logger.logError(loggerCategory, `Failed to find KindOfQuantity ${itemKey.fullName}`);
66936
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_7__.Logger.logError(loggerCategory, `Failed to find KindOfQuantity ${itemKey.fullName}`);
66843
66937
  return undefined;
66844
66938
  }
66845
- if (!kindOfQuantity) {
66939
+ if (!kindOfQuantity)
66846
66940
  return undefined;
66847
- }
66848
- // If a unit system is provided, find the first presentation format that matches it.
66849
- const effectiveSystem = systemOverride ?? this._unitSystem;
66850
- if (effectiveSystem) {
66851
- const unitSystemMatchers = getUnitSystemGroupMatchers(effectiveSystem);
66852
- const presentationFormats = kindOfQuantity.presentationFormats;
66853
- for (const matcher of unitSystemMatchers) {
66854
- for (const lazyFormat of presentationFormats) {
66855
- const format = await lazyFormat;
66856
- const unit = await (format.units && format.units[0][0]);
66857
- if (!unit) {
66858
- continue;
66859
- }
66860
- const currentUnitSystem = await unit.unitSystem;
66861
- if (currentUnitSystem && matcher(currentUnitSystem)) {
66862
- this._formatsRetrieved.add(itemKey.fullName);
66863
- const props = (0,_Metadata_OverrideFormat__WEBPACK_IMPORTED_MODULE_6__.getFormatProps)(format);
66864
- return this.convertToFormatDefinition(props, kindOfQuantity);
66865
- }
66866
- }
66867
- }
66868
- // If no matching presentation format was found, fall back to persistence unit format
66869
- // only if it matches the requested unit system.
66870
- const persistenceUnit = await kindOfQuantity.persistenceUnit;
66871
- const persistenceUnitSystem = await persistenceUnit?.unitSystem;
66872
- if (persistenceUnit && persistenceUnitSystem && unitSystemMatchers.some((matcher) => matcher(persistenceUnitSystem))) {
66873
- this._formatsRetrieved.add(itemKey.fullName);
66874
- const props = getPersistenceUnitFormatProps(persistenceUnit);
66875
- return this.convertToFormatDefinition(props, kindOfQuantity);
66941
+ const props = await this.getKindOfQuantityFormatProps(kindOfQuantity, systemOverride);
66942
+ if (!props)
66943
+ return undefined;
66944
+ this._formatsRetrieved.add(itemKey.fullName);
66945
+ return this.convertToFormatDefinition(props, kindOfQuantity);
66946
+ }
66947
+ async getKindOfQuantityFormatProps(kindOfQuantity, systemOverride) {
66948
+ // Cache each unit once per lookup because matchers may revisit it. Lazy formats already resolve only once.
66949
+ const unitCache = new Map();
66950
+ const getUnit = (unit) => {
66951
+ if (!unit)
66952
+ return undefined;
66953
+ let resolved = unitCache.get(unit);
66954
+ if (!resolved) {
66955
+ resolved = resolveUnitAsync(unit);
66956
+ unitCache.set(unit, resolved);
66876
66957
  }
66877
- }
66878
- // If no unit system was provided, or no matching format was found, use the default presentation format.
66879
- // Unit conversion from persistence unit to presentation unit will be handled by FormatterSpec.
66880
- const defaultFormat = kindOfQuantity.defaultPresentationFormat;
66881
- if (defaultFormat) {
66882
- this._formatsRetrieved.add(itemKey.fullName);
66883
- const defaultProps = (0,_Metadata_OverrideFormat__WEBPACK_IMPORTED_MODULE_6__.getFormatProps)(await defaultFormat);
66884
- return this.convertToFormatDefinition(defaultProps, kindOfQuantity);
66958
+ return resolved;
66959
+ };
66960
+ for (const candidate of getFormatSelectionCandidates(kindOfQuantity, systemOverride ?? this._unitSystem)) {
66961
+ const format = candidate.type === "persistence" ? undefined : await candidate.format;
66962
+ const unit = candidate.type === "default" ? undefined : await getUnit(candidate.type === "persistence" ? candidate.unit : format?.units?.[0]?.[0]);
66963
+ const props = getFormatPropsForCandidate(candidate, format, unit);
66964
+ if (props)
66965
+ return props;
66885
66966
  }
66886
66967
  return undefined;
66887
66968
  }
66888
66969
  /**
66889
- * Retrieves a Format from a SchemaContext. If the format is part of a KindOfQuantity, the first presentation format in the KindOfQuantity that matches the current unit system will be retrieved.
66890
- * If no presentation format matches the current unit system, the persistence unit format will be retrieved if it matches the current unit system.
66891
- * Else, the default presentation format will be retrieved.
66970
+ * Retrieves a format definition from the schema context.
66971
+ *
66972
+ * For a KindOfQuantity with a unit system, matching presentation formats are checked first, followed by the persistence unit and then the default presentation format. Without a unit system, the default presentation format is used.
66892
66973
  * @param name The full name of the Format or KindOfQuantity.
66893
- * @returns
66974
+ * @param system Optional unit system used to select a KindOfQuantity format.
66894
66975
  */
66895
66976
  async getFormat(name, system) {
66896
- const [schemaName, schemaItemName] = _Metadata_SchemaItem__WEBPACK_IMPORTED_MODULE_2__.SchemaItem.parseFullName(name);
66977
+ const [schemaName, schemaItemName] = _Metadata_SchemaItem__WEBPACK_IMPORTED_MODULE_4__.SchemaItem.parseFullName(name);
66897
66978
  const schemaKey = new _SchemaKey__WEBPACK_IMPORTED_MODULE_1__.SchemaKey(schemaName);
66898
66979
  let schema;
66899
66980
  try {
66900
66981
  schema = await this._context.getSchema(schemaKey);
66901
66982
  }
66902
66983
  catch {
66903
- _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_4__.Logger.logError(loggerCategory, `Failed to find schema ${schemaName}`);
66984
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_7__.Logger.logError(loggerCategory, `Failed to find schema ${schemaName}`);
66904
66985
  return undefined;
66905
66986
  }
66906
66987
  if (!schema) {
@@ -66910,10 +66991,10 @@ class SchemaFormatsProvider {
66910
66991
  if (schema.name === "Formats") {
66911
66992
  let format;
66912
66993
  try {
66913
- format = await this._context.getSchemaItem(itemKey, _Metadata_Format__WEBPACK_IMPORTED_MODULE_3__.Format);
66994
+ format = await this._context.getSchemaItem(itemKey, _Metadata_Format__WEBPACK_IMPORTED_MODULE_5__.Format);
66914
66995
  }
66915
66996
  catch {
66916
- _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_4__.Logger.logError(loggerCategory, `Failed to find Format ${itemKey.fullName}`);
66997
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_7__.Logger.logError(loggerCategory, `Failed to find Format ${itemKey.fullName}`);
66917
66998
  return undefined;
66918
66999
  }
66919
67000
  if (!format) {
@@ -66923,11 +67004,138 @@ class SchemaFormatsProvider {
66923
67004
  }
66924
67005
  return this.getKindOfQuantityFormatFromSchema(itemKey, system);
66925
67006
  }
67007
+ /**
67008
+ * Retrieves a format definition using only schema metadata already loaded in the context.
67009
+ * It follows the same selection order as `getFormat` but never asks a locater to load a schema. Returns `undefined` when required metadata is not cached.
67010
+ * Unlike `getFormat`, which logs lookup errors and returns `undefined`, this method treats only a schema that is still loading as a cache miss and rethrows other errors.
67011
+ */
67012
+ getFormatSync(name, system) {
67013
+ const [schemaName, schemaItemName] = _Metadata_SchemaItem__WEBPACK_IMPORTED_MODULE_4__.SchemaItem.parseFullName(name);
67014
+ const schemaKey = new _SchemaKey__WEBPACK_IMPORTED_MODULE_1__.SchemaKey(schemaName);
67015
+ const schema = getCachedSchemaSync(this._context, schemaKey, _ECObjects__WEBPACK_IMPORTED_MODULE_2__.SchemaMatchType.Latest);
67016
+ if (!schema)
67017
+ return undefined;
67018
+ const itemKey = new _SchemaKey__WEBPACK_IMPORTED_MODULE_1__.SchemaItemKey(schemaItemName, schema.schemaKey);
67019
+ if (schema.name === "Formats") {
67020
+ const format = schema.getItemSync(itemKey.name, _Metadata_Format__WEBPACK_IMPORTED_MODULE_5__.Format);
67021
+ return format?.toJSON(true);
67022
+ }
67023
+ return this.getKindOfQuantityFormatFromSchemaSync(itemKey, system);
67024
+ }
67025
+ getKindOfQuantityFormatFromSchemaSync(itemKey, systemOverride) {
67026
+ const schema = getCachedSchemaSync(this._context, itemKey.schemaKey, _ECObjects__WEBPACK_IMPORTED_MODULE_2__.SchemaMatchType.Latest);
67027
+ const kindOfQuantity = schema?.getItemSync(itemKey.name, _Metadata_KindOfQuantity__WEBPACK_IMPORTED_MODULE_8__.KindOfQuantity);
67028
+ if (!kindOfQuantity)
67029
+ return undefined;
67030
+ const props = this.getKindOfQuantityFormatPropsSync(kindOfQuantity, systemOverride);
67031
+ if (!props)
67032
+ return undefined;
67033
+ this._formatsRetrieved.add(itemKey.fullName);
67034
+ return this.convertToFormatDefinition(props, kindOfQuantity);
67035
+ }
67036
+ getKindOfQuantityFormatPropsSync(kindOfQuantity, systemOverride) {
67037
+ const formatCache = new Map();
67038
+ const unitCache = new Map();
67039
+ const getFormat = (format) => {
67040
+ if (!formatCache.has(format))
67041
+ formatCache.set(format, resolveFormatSync(this._context, format));
67042
+ return formatCache.get(format);
67043
+ };
67044
+ const getUnit = (unit) => {
67045
+ if (!unit)
67046
+ return undefined;
67047
+ if (!unitCache.has(unit))
67048
+ unitCache.set(unit, resolveUnitSync(this._context, unit));
67049
+ return unitCache.get(unit);
67050
+ };
67051
+ // A reference that cannot be resolved means metadata is not cached. Stop there: async lookup would resolve it and never reach a later candidate.
67052
+ for (const candidate of getFormatSelectionCandidates(kindOfQuantity, systemOverride ?? this._unitSystem)) {
67053
+ const format = candidate.type === "persistence" ? undefined : getFormat(candidate.format);
67054
+ if (candidate.type !== "persistence" && !format)
67055
+ return undefined;
67056
+ const unitReference = candidate.type === "presentation" ? format?.units?.[0]?.[0] : candidate.type === "persistence" ? candidate.unit : undefined;
67057
+ const unit = getUnit(unitReference);
67058
+ if (unitReference && !unit)
67059
+ return undefined;
67060
+ const props = getFormatPropsForCandidate(candidate, format, unit);
67061
+ if (props)
67062
+ return props;
67063
+ }
67064
+ return undefined;
67065
+ }
67066
+ }
67067
+ /**
67068
+ * Produces candidates in lookup order: presentation formats by unit-system priority, then the persistence unit,
67069
+ * then the default presentation format. The generator defers each candidate until the lookup reaches it.
67070
+ */
67071
+ function* getFormatSelectionCandidates(kindOfQuantity, effectiveSystem) {
67072
+ if (effectiveSystem) {
67073
+ const matchers = getUnitSystemGroupMatchers(effectiveSystem);
67074
+ for (const matcher of matchers) {
67075
+ for (const format of kindOfQuantity.presentationFormats)
67076
+ yield { type: "presentation", format, matcher };
67077
+ }
67078
+ yield { type: "persistence", unit: kindOfQuantity.persistenceUnit, matchers };
67079
+ }
67080
+ const defaultFormat = kindOfQuantity.defaultPresentationFormat;
67081
+ if (defaultFormat)
67082
+ yield { type: "default", format: defaultFormat };
67083
+ }
67084
+ function getFormatPropsForCandidate(candidate, format, unit) {
67085
+ const unitSystemName = unit?.unitSystemName;
67086
+ switch (candidate.type) {
67087
+ case "presentation":
67088
+ return format && unitSystemName && candidate.matcher(unitSystemName) ? (0,_Metadata_OverrideFormat__WEBPACK_IMPORTED_MODULE_6__.getFormatProps)(format) : undefined;
67089
+ case "persistence":
67090
+ return unit && unitSystemName && candidate.matchers.some((matcher) => matcher(unitSystemName)) ? getPersistenceUnitFormatProps(unit.unit) : undefined;
67091
+ case "default":
67092
+ return format ? (0,_Metadata_OverrideFormat__WEBPACK_IMPORTED_MODULE_6__.getFormatProps)(format) : undefined;
67093
+ }
67094
+ }
67095
+ function resolveFormatSync(context, format) {
67096
+ if (_Metadata_OverrideFormat__WEBPACK_IMPORTED_MODULE_6__.OverrideFormat.isOverrideFormat(format))
67097
+ return format;
67098
+ const schema = getCachedSchemaSync(context, format.schemaKey, _ECObjects__WEBPACK_IMPORTED_MODULE_2__.SchemaMatchType.Exact);
67099
+ return schema?.getItemSync(format.name, _Metadata_Format__WEBPACK_IMPORTED_MODULE_5__.Format);
67100
+ }
67101
+ async function resolveUnitAsync(unit) {
67102
+ const resolvedUnit = await unit;
67103
+ const unitSystem = await resolvedUnit.unitSystem;
67104
+ return { unit: resolvedUnit, unitSystemName: unitSystem?.name };
67105
+ }
67106
+ function resolveUnitSync(context, unit) {
67107
+ const resolvedUnit = getLoadedUnitSync(context, unit);
67108
+ if (!resolvedUnit)
67109
+ return undefined;
67110
+ const unitSystem = resolvedUnit.unitSystem;
67111
+ if (!unitSystem)
67112
+ return { unit: resolvedUnit };
67113
+ const unitSystemName = getCachedSchemaSync(context, unitSystem.schemaKey, _ECObjects__WEBPACK_IMPORTED_MODULE_2__.SchemaMatchType.Exact)?.getItemSync(unitSystem.name, _Metadata_UnitSystem__WEBPACK_IMPORTED_MODULE_11__.UnitSystem)?.name;
67114
+ return unitSystemName ? { unit: resolvedUnit, unitSystemName } : undefined;
67115
+ }
67116
+ /**
67117
+ * Name-only lookups use `SchemaMatchType.Latest`. References use `SchemaMatchType.Exact` because they carry the version
67118
+ * the loaded item resolved; matching by name alone could return an item from a different cached version.
67119
+ */
67120
+ function getCachedSchemaSync(context, schemaKey, matchType) {
67121
+ try {
67122
+ return context.getCachedSchemaSync(schemaKey, matchType);
67123
+ }
67124
+ catch (error) {
67125
+ if (error instanceof _Exception__WEBPACK_IMPORTED_MODULE_3__.ECSchemaError && error.errorNumber === _Exception__WEBPACK_IMPORTED_MODULE_3__.ECSchemaStatus.UnableToLoadSchema)
67126
+ return undefined;
67127
+ throw error;
67128
+ }
67129
+ }
67130
+ function getLoadedUnitSync(context, unit) {
67131
+ const schema = getCachedSchemaSync(context, unit.schemaKey, _ECObjects__WEBPACK_IMPORTED_MODULE_2__.SchemaMatchType.Exact);
67132
+ const item = schema?.getItemSync(unit.name);
67133
+ return _Metadata_Unit__WEBPACK_IMPORTED_MODULE_9__.Unit.isUnit(item) || _Metadata_InvertedUnit__WEBPACK_IMPORTED_MODULE_10__.InvertedUnit.isInvertedUnit(item) ? item : undefined;
66926
67134
  }
66927
67135
  function getUnitSystemGroupMatchers(groupKey) {
66928
67136
  function createMatcher(name) {
66929
67137
  const names = Array.isArray(name) ? name : [name];
66930
- return (unitSystem) => names.some((n) => n === unitSystem.name.toUpperCase());
67138
+ return (unitSystemName) => names.some((n) => n === unitSystemName.toUpperCase());
66931
67139
  }
66932
67140
  switch (groupKey) {
66933
67141
  case "imperial":
@@ -75859,15 +76067,13 @@ __webpack_require__.r(__webpack_exports__);
75859
76067
  * @module Schema
75860
76068
  */
75861
76069
  /** The reference graph of every schema in one iModel - names, versions and reference edges, without
75862
- * any schema data. A {@link (SchemaView:class)} husk loads it up front to answer which schemas exist
75863
- * and which dependency-ordered set it must load to satisfy a request.
76070
+ * schema items. A {@link SchemaViewDataProvider} builds it from ECDbMeta rows via
76071
+ * {@link SchemaManifest.fromRows}. It includes schemas excluded from SchemaView's binary data.
75864
76072
  *
75865
- * A `SchemaViewDataProvider` builds the manifest from ECDbMeta rows via {@link SchemaManifest.fromRows}.
75866
- * The entries are a flat array with no iModel or platform dependency; even the largest iModels hold
75867
- * on the order of a hundred schemas, so the closure and topological walks are plain recursion.
75868
- * @note The manifest does not track which schemas are already loaded. `SchemaViewManager` does that
75869
- * and filters the result of {@link SchemaManifest.getSchemaClosure} itself.
75870
- * @internal
76073
+ * {@link SchemaViewManager} uses this graph to determine which schemas a filtered request needs.
76074
+ * The manifest does not track which schemas are already loaded; the manager filters the result of
76075
+ * {@link SchemaManifest.getSchemaClosure} itself.
76076
+ * @beta
75871
76077
  */
75872
76078
  class SchemaManifest {
75873
76079
  _entries;
@@ -75883,7 +76089,7 @@ class SchemaManifest {
75883
76089
  /** Build a manifest from raw ECDbMeta query rows, so a `SchemaViewDataProvider` only has to run
75884
76090
  * the two queries and hand the rows over. Reference rows whose endpoints are unknown or
75885
76091
  * self-referential are skipped; that cannot happen for a well-formed iModel.
75886
- * @internal
76092
+ * @beta
75887
76093
  */
75888
76094
  static fromRows(schemaRows, referenceRows) {
75889
76095
  const entries = [];
@@ -75922,8 +76128,7 @@ class SchemaManifest {
75922
76128
  return this._byLowerName.get(name.toLowerCase());
75923
76129
  }
75924
76130
  /** The transitive reference closure of the requested schemas, as a flat, duplicate-free list of
75925
- * names: the full set that must be present to use them. The order is unspecified - run
75926
- * {@link SchemaManifest.sortInDependencyOrder} on the result when a load order is needed.
76131
+ * names: the full set to request in a standalone fragment. The order is unspecified.
75927
76132
  * @note Requested names the iModel does not contain are ignored; check
75928
76133
  * {@link SchemaManifest.findByName} first to detect them.
75929
76134
  */
@@ -75994,6 +76199,7 @@ __webpack_require__.r(__webpack_exports__);
75994
76199
  /* harmony export */ });
75995
76200
  /* harmony import */ var _SchemaViewInterfaces__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SchemaViewInterfaces */ "../../core/ecschema-metadata/lib/esm/SchemaView/SchemaViewInterfaces.js");
75996
76201
  /* harmony import */ var _SchemaViewBinaryReader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SchemaViewBinaryReader */ "../../core/ecschema-metadata/lib/esm/SchemaView/SchemaViewBinaryReader.js");
76202
+ /* harmony import */ var _ECName__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ECName */ "../../core/ecschema-metadata/lib/esm/ECName.js");
75997
76203
  /*---------------------------------------------------------------------------------------------
75998
76204
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
75999
76205
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -76003,6 +76209,7 @@ __webpack_require__.r(__webpack_exports__);
76003
76209
  */
76004
76210
 
76005
76211
 
76212
+
76006
76213
  // Module-local symbol used as the storage key on SchemaView instances. Mirrors the pattern in
76007
76214
  // core-backend/src/internal/Symbols.ts (e.g. `_nativeDb` on IModelDb): the data is reachable
76008
76215
  // only by code in this module, since the symbol is not exported and not registered globally.
@@ -76015,8 +76222,9 @@ const _storage = Symbol("SchemaView.storage");
76015
76222
  * stateless wrappers that hold a reference to this view plus an index. They allocate nothing
76016
76223
  * and cache nothing.
76017
76224
  *
76018
- * The view is immutable after construction. Build it via `SchemaViewBuilder` or parse
76019
- * from a binary blob via `fromBinary`.
76225
+ * Use {@link SchemaViewManager} to load schemas incrementally into one view, or parse a standalone
76226
+ * binary blob via {@link (SchemaView:class).fromBinary}. Consumers cannot modify the metadata; a manager
76227
+ * can extend its view with additional schemas while previously obtained view objects remain valid.
76020
76228
  * @beta
76021
76229
  */
76022
76230
  class SchemaView {
@@ -76101,7 +76309,8 @@ class SchemaView {
76101
76309
  return idx !== undefined ? new SchemaView.PropertyCategory(this, idx) : undefined;
76102
76310
  }
76103
76311
  /** Parse a binary blob into a SchemaView. Synchronous.
76104
- * @param blob - The binary blob from `PRAGMA schema_view`.
76312
+ * @param blob - The binary blob from `PRAGMA schema_view`, or a standalone `PRAGMA schema_view_fragment`
76313
+ * containing the requested schemas and their references.
76105
76314
  * @param schemaToken - Optional cache-invalidation token (schema name+version hash; see `PRAGMA checksum(schema_token)`).
76106
76315
  * @beta
76107
76316
  */
@@ -76306,9 +76515,10 @@ class SchemaView {
76306
76515
  get ecInstanceId() { return this._data.ecInstanceId; }
76307
76516
  get name() { return this._ctx[_storage].strings[this._data.nameStringIdx]; }
76308
76517
  get alias() { return this._ctx[_storage].strings[this._data.aliasStringIdx]; }
76518
+ /** Display label, or the decoded name when the label is absent or empty. */
76309
76519
  get label() {
76310
76520
  const sid = this._data.labelStringIdx;
76311
- return sid !== 0 ? this._ctx[_storage].strings[sid] : this.name;
76521
+ return sid !== 0 ? this._ctx[_storage].strings[sid] : _ECName__WEBPACK_IMPORTED_MODULE_2__.ECName.decode(this.name);
76312
76522
  }
76313
76523
  get description() {
76314
76524
  const sid = this._data.descriptionStringIdx;
@@ -76402,9 +76612,10 @@ class SchemaView {
76402
76612
  */
76403
76613
  get ecInstanceId() { return this._data.ecInstanceId; }
76404
76614
  get name() { return this._ctx[_storage].strings[this._data.nameStringIdx]; }
76615
+ /** Display label, or the decoded name when the label is absent or empty. */
76405
76616
  get label() {
76406
76617
  const sid = this._data.labelStringIdx;
76407
- return sid !== 0 ? this._ctx[_storage].strings[sid] : this.name;
76618
+ return sid !== 0 ? this._ctx[_storage].strings[sid] : _ECName__WEBPACK_IMPORTED_MODULE_2__.ECName.decode(this.name);
76408
76619
  }
76409
76620
  get description() {
76410
76621
  const sid = this._data.descriptionStringIdx;
@@ -76513,7 +76724,8 @@ class SchemaView {
76513
76724
  return true;
76514
76725
  return this._ctx.getTransitiveBases(this.idx).has(targetIdx);
76515
76726
  }
76516
- /** Direct derived classes. Expensive on first call (builds reverse map across all classes). */
76727
+ /** Direct derived classes among the currently loaded schemas. A partial view may omit derived
76728
+ * classes from other schemas. Expensive on first call (builds reverse map across all loaded classes). */
76517
76729
  get derivedClasses() {
76518
76730
  const map = this._ctx.buildDerivedClassMap();
76519
76731
  const indices = map.get(this.idx);
@@ -76608,11 +76820,11 @@ class SchemaView {
76608
76820
  */
76609
76821
  get ecInstanceId() { return this._ref.ecInstanceId; }
76610
76822
  get name() { return this._ctx[_storage].strings[this._def.nameStringIdx]; }
76611
- /** Display label. Falls back to the property name if no explicit label is set.
76823
+ /** Display label, or the decoded property name when the label is absent or empty.
76612
76824
  * Labels are stored per-reference (not per-definition) because EC allows class overrides. */
76613
76825
  get label() {
76614
76826
  const labelStringIdx = this._ref.labelStringIdx;
76615
- return labelStringIdx !== 0 ? this._ctx[_storage].strings[labelStringIdx] : this.name;
76827
+ return labelStringIdx !== 0 ? this._ctx[_storage].strings[labelStringIdx] : _ECName__WEBPACK_IMPORTED_MODULE_2__.ECName.decode(this.name);
76616
76828
  }
76617
76829
  get description() {
76618
76830
  const sid = this._def.descriptionStringIdx;
@@ -76791,9 +77003,10 @@ class SchemaView {
76791
77003
  */
76792
77004
  get ecInstanceId() { return this._data.ecInstanceId; }
76793
77005
  get name() { return this._ctx[_storage].strings[this._data.nameStringIdx]; }
77006
+ /** Display label, or the decoded name when the label is absent or empty. */
76794
77007
  get label() {
76795
77008
  const sid = this._data.labelStringIdx;
76796
- return sid !== 0 ? this._ctx[_storage].strings[sid] : this.name;
77009
+ return sid !== 0 ? this._ctx[_storage].strings[sid] : _ECName__WEBPACK_IMPORTED_MODULE_2__.ECName.decode(this.name);
76797
77010
  }
76798
77011
  get description() {
76799
77012
  const sid = this._data.descriptionStringIdx;
@@ -76848,9 +77061,10 @@ class SchemaView {
76848
77061
  }
76849
77062
  get _data() { return this._ctx[_storage].enumerators[this.idx]; }
76850
77063
  get name() { return this._ctx[_storage].strings[this._data.nameStringIdx]; }
77064
+ /** Display label, or the decoded name when the label is absent or empty. */
76851
77065
  get label() {
76852
77066
  const sid = this._data.labelStringIdx;
76853
- return sid !== 0 ? this._ctx[_storage].strings[sid] : this.name;
77067
+ return sid !== 0 ? this._ctx[_storage].strings[sid] : _ECName__WEBPACK_IMPORTED_MODULE_2__.ECName.decode(this.name);
76854
77068
  }
76855
77069
  get description() {
76856
77070
  const sid = this._data.descriptionStringIdx;
@@ -76897,9 +77111,10 @@ class SchemaView {
76897
77111
  */
76898
77112
  get ecInstanceId() { return this._data.ecInstanceId; }
76899
77113
  get name() { return this._ctx[_storage].strings[this._data.nameStringIdx]; }
77114
+ /** Display label, or the decoded name when the label is absent or empty. */
76900
77115
  get label() {
76901
77116
  const sid = this._data.labelStringIdx;
76902
- return sid !== 0 ? this._ctx[_storage].strings[sid] : this.name;
77117
+ return sid !== 0 ? this._ctx[_storage].strings[sid] : _ECName__WEBPACK_IMPORTED_MODULE_2__.ECName.decode(this.name);
76903
77118
  }
76904
77119
  get description() {
76905
77120
  const sid = this._data.descriptionStringIdx;
@@ -76974,9 +77189,10 @@ class SchemaView {
76974
77189
  */
76975
77190
  get ecInstanceId() { return this._data.ecInstanceId; }
76976
77191
  get name() { return this._ctx[_storage].strings[this._data.nameStringIdx]; }
77192
+ /** Display label, or the decoded name when the label is absent or empty. */
76977
77193
  get label() {
76978
77194
  const sid = this._data.labelStringIdx;
76979
- return sid !== 0 ? this._ctx[_storage].strings[sid] : this.name;
77195
+ return sid !== 0 ? this._ctx[_storage].strings[sid] : _ECName__WEBPACK_IMPORTED_MODULE_2__.ECName.decode(this.name);
76980
77196
  }
76981
77197
  get description() {
76982
77198
  const sid = this._data.descriptionStringIdx;
@@ -78042,10 +78258,14 @@ __webpack_require__.r(__webpack_exports__);
78042
78258
  */
78043
78259
 
78044
78260
  /** Owns the lifetime of one iModel's {@link (SchemaView:class)}: lazy loading, incremental (filtered)
78045
- * hydration, serialization of concurrent requests, and invalidation. Hosts (`IModelDb`,
78046
- * `IModelConnection`) hold one instance and delegate to it; all data access goes through the
78047
- * host-implemented {@link SchemaViewDataProvider}.
78048
- * @internal
78261
+ * loading, serialization of concurrent requests, and invalidation. All data access goes through the
78262
+ * supplied {@link SchemaViewDataProvider}.
78263
+ *
78264
+ * Keep one manager per iModel connection. Calls to {@link SchemaViewManager.getSchemaView} reuse
78265
+ * one accumulating view until it is invalidated. The manager does not monitor schema changes;
78266
+ * call {@link SchemaViewManager.reset} after a known change, or await
78267
+ * {@link SchemaViewManager.invalidateIfChanged} after an operation that may have changed schemas.
78268
+ * @beta
78049
78269
  */
78050
78270
  class SchemaViewManager {
78051
78271
  _dataProvider;
@@ -78061,9 +78281,9 @@ class SchemaViewManager {
78061
78281
  constructor(dataProvider) {
78062
78282
  this._dataProvider = dataProvider;
78063
78283
  }
78064
- /** Get the schema view, loading whatever the request needs that is not present yet. See
78065
- * {@link GetSchemaViewArgs} for filtering and reload semantics; hosts document the full
78066
- * user-facing contract on their `getSchemaView` methods.
78284
+ /** Get the schema view, loading the requested schemas and their references that are not present
78285
+ * yet. Omitting the schema filter loads every schema. Calls accumulate into the same view until
78286
+ * it is invalidated. See {@link GetSchemaViewArgs} for filtering semantics.
78067
78287
  */
78068
78288
  async getSchemaView(args) {
78069
78289
  const previous = this._viewPromise;
@@ -78111,10 +78331,6 @@ class SchemaViewManager {
78111
78331
  }
78112
78332
  if (existing === undefined)
78113
78333
  return undefined;
78114
- // A view without a token (e.g. built directly from a SchemaViewBuilder) cannot be verified by
78115
- // token; views loaded through this manager always carry one.
78116
- if (existing.schemaToken === "")
78117
- return existing;
78118
78334
  try {
78119
78335
  if (await this._dataProvider.fetchSchemaToken() === existing.schemaToken)
78120
78336
  return existing;
@@ -90292,6 +90508,7 @@ class CoordinateConverter {
90292
90508
  _maxPointsPerRequest;
90293
90509
  _isIModelClosed;
90294
90510
  _requestPoints;
90511
+ _direction;
90295
90512
  // If true, [[dispatch]] will schedule another dispatch after it receives a response.
90296
90513
  // This is needed when all the points requested after the most recent dispatch were included in the currently-in-flight request -
90297
90514
  // _pending will be empty but new callers will be awaiting the results of the in-flight request.
@@ -90316,6 +90533,7 @@ class CoordinateConverter {
90316
90533
  this._maxPointsPerRequest = Math.max(1, opts.maxPointsPerRequest ?? 300);
90317
90534
  this._isIModelClosed = opts.isIModelClosed;
90318
90535
  this._requestPoints = opts.requestPoints;
90536
+ this._direction = opts.direction;
90319
90537
  this._cache = new _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Dictionary(compareXYAndZ, cloneXYAndZ);
90320
90538
  this._pending = new _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.SortedArray(compareXYAndZ, false, cloneXYAndZ);
90321
90539
  this._inflight = new _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.SortedArray(compareXYAndZ, false, cloneXYAndZ);
@@ -90350,7 +90568,10 @@ class CoordinateConverter {
90350
90568
  this._cache.set(requests[j], results[j]);
90351
90569
  }
90352
90570
  }).catch((err) => {
90353
- _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logError(`${_common_FrontendLoggerCategory__WEBPACK_IMPORTED_MODULE_2__.FrontendLoggerCategory.Package}.geoservices`, err);
90571
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logError(`${_common_FrontendLoggerCategory__WEBPACK_IMPORTED_MODULE_2__.FrontendLoggerCategory.Package}.geoservices`, err, () => ({
90572
+ direction: this._direction,
90573
+ pointCount: requests.length,
90574
+ }));
90354
90575
  });
90355
90576
  promises.push(promise);
90356
90577
  }
@@ -90446,10 +90667,12 @@ class GeoConverter {
90446
90667
  constructor(opts) {
90447
90668
  const isIModelClosed = opts.isIModelClosed;
90448
90669
  this._geoToIModel = new CoordinateConverter({
90670
+ direction: "geoToIModel",
90449
90671
  isIModelClosed,
90450
90672
  requestPoints: async (geoCoords) => opts.toIModelCoords({ source: opts.datum, geoCoords }),
90451
90673
  });
90452
90674
  this._iModelToGeo = new CoordinateConverter({
90675
+ direction: "iModelToGeo",
90453
90676
  isIModelClosed,
90454
90677
  requestPoints: async (iModelCoords) => opts.fromIModelCoords({ target: opts.datum, iModelCoords }),
90455
90678
  });
@@ -92249,6 +92472,7 @@ class IModelApp {
92249
92472
  });
92250
92473
  }
92251
92474
  /** Format the tooltip strings returned by [[IModelConnection.getToolTipMessage]].
92475
+ * @note Each string is interpreted as HTML. Any untrusted content must be HTML-escaped or sanitized before calling this method.
92252
92476
  * @alpha
92253
92477
  */
92254
92478
  static formatElementToolTip(msg) {
@@ -92936,7 +93160,10 @@ class IModelConnection extends _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.I
92936
93160
  const result = await reader.next();
92937
93161
  if (result.done)
92938
93162
  throw new _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.IModelError(_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.IModelStatus.BadRequest, "PRAGMA checksum(schema_token) returned no rows");
92939
- return result.value.sha3_256;
93163
+ const token = result.value.sha3_256;
93164
+ if (typeof token !== "string")
93165
+ throw new _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.IModelError(_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.IModelStatus.BadRequest, "PRAGMA checksum(schema_token) returned an invalid sha3_256 column");
93166
+ return token;
92940
93167
  },
92941
93168
  };
92942
93169
  }
@@ -92955,7 +93182,9 @@ class IModelConnection extends _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.I
92955
93182
  const token = result.value.schemaToken;
92956
93183
  if (data === undefined || data === null)
92957
93184
  throw new _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.IModelError(_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.IModelStatus.BadRequest, `${pragma} returned null data column`);
92958
- return { data, schemaToken: token ?? "" };
93185
+ if (typeof token !== "string")
93186
+ throw new _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.IModelError(_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.IModelStatus.BadRequest, `${pragma} returned an invalid schemaToken column`);
93187
+ return { data, schemaToken: token };
92959
93188
  }
92960
93189
  }
92961
93190
  /** A connection that exists without an iModel. Useful for connecting to Reality Data services.
@@ -116193,6 +116422,45 @@ __webpack_require__.r(__webpack_exports__);
116193
116422
  */
116194
116423
 
116195
116424
 
116425
+ /** The Extensions loading system has the following goals:
116426
+ * 1. Only fetch what is needed when it is required
116427
+ * 1. Load a manifest file
116428
+ * 2. Load the the main module when necessary (usually at an activation event)
116429
+ * 2. Download the extension's files
116430
+ *
116431
+ * 3 ways to load an Extension into the system:
116432
+ *
116433
+ * 1. Load both the Extension Manifest and import the main module of the extension from a local file/package.
116434
+ * 2. A minimum set of properties to get the manifest and javascript from a remote server.
116435
+ * 3. A minimum set of properties to get the manifest and javascript from Bentley's Extension Service.
116436
+ *
116437
+ * An Extension must be added to ExtensionAdmin before it can be executed during activation events.
116438
+ */
116439
+ /**
116440
+ * Normalizes hostnames for comparison.
116441
+ * @returns The normalized hostname of a URL or bare hostname.
116442
+ * @throws Error if the input cannot be parsed, or does not contain a hostname.
116443
+ */
116444
+ function normalizeHostname(input) {
116445
+ const invalid = () => new Error(`"${input}" is not a valid URL or hostname (i.e. http://localhost:3000, yourdomain.com, etc.).`);
116446
+ // inputs without a scheme (e.g., https://) will throw an error in the URL constructor
116447
+ const inputWithScheme = /^[a-z][a-z0-9+\-.]*:\/\//i.test(input) ? input : `https://${input}`;
116448
+ let hostname;
116449
+ try {
116450
+ hostname = new URL(inputWithScheme).hostname.toLowerCase();
116451
+ }
116452
+ catch {
116453
+ throw invalid();
116454
+ }
116455
+ // strip only a leading "www." label - removing "www" anywhere would make unrelated
116456
+ // hosts like "wwwexample.com" compare equal to "example.com"
116457
+ const normalized = hostname.startsWith("www.") ? hostname.substring("www.".length) : hostname;
116458
+ // schemes with an optional or opaque host (e.g. file:///, data:) parse successfully but carry no
116459
+ // hostname, and an input of just "www." normalizes to nothing. Neither can identify a host.
116460
+ if (normalized.length === 0)
116461
+ throw invalid();
116462
+ return normalized;
116463
+ }
116196
116464
  /** The Extension Admin controls the list of currently loaded Extensions.
116197
116465
  *
116198
116466
  * @alpha
@@ -116217,10 +116485,10 @@ class ExtensionAdmin {
116217
116485
  * @alpha
116218
116486
  */
116219
116487
  async addExtension(provider) {
116220
- if (provider.hostname) {
116221
- const hostName = provider.hostname;
116222
- if (this._hosts.length > 0 && this._hosts.indexOf(hostName) < 0) {
116223
- throw new Error(`Error loading extension: ${hostName} was not registered.`);
116488
+ if (provider.hostname !== undefined && this._hosts.length > 0) {
116489
+ const hostname = normalizeHostname(provider.hostname);
116490
+ if (this._hosts.indexOf(hostname) < 0) {
116491
+ throw new Error(`Error loading extension: ${provider.hostname} was not registered.`);
116224
116492
  }
116225
116493
  }
116226
116494
  try {
@@ -116251,28 +116519,11 @@ class ExtensionAdmin {
116251
116519
  * @param hostUrl (string) Accepts both URLs and hostnames (e.g., http://localhost:3000, yourdomain.com, https://www.yourdomain.com, etc.).
116252
116520
  */
116253
116521
  registerHost(hostUrl) {
116254
- const hostname = this.getHostName(hostUrl);
116522
+ const hostname = normalizeHostname(hostUrl);
116255
116523
  if (this._hosts.indexOf(hostname) < 0) {
116256
116524
  this._hosts.push(hostname);
116257
116525
  }
116258
116526
  }
116259
- /** Returns the hostname of an input string. Throws an error if input is not a valid hostname (or URL). */
116260
- getHostName(inputUrl) {
116261
- // inputs without a protocol (e.g., http://) will throw an error in URL constructor
116262
- const inputWithProtocol = /(http|https):\/\//.test(inputUrl) ?
116263
- inputUrl :
116264
- `https://${inputUrl}`;
116265
- try {
116266
- const hostname = new URL(inputWithProtocol).hostname.replace("www.", "");
116267
- return hostname;
116268
- }
116269
- catch (e) {
116270
- if (e instanceof TypeError) {
116271
- throw new Error("Argument hostUrl should be a valid URL or hostname (i.e. http://localhost:3000, yourdomain.com, etc.).");
116272
- }
116273
- throw e;
116274
- }
116275
- }
116276
116527
  /** Loops over all enabled Extensions and triggers each one if the provided event is defined. */
116277
116528
  async activateExtensionEvents(event) {
116278
116529
  for (const extension of this._extensions.values()) {
@@ -116357,6 +116608,7 @@ __webpack_require__.r(__webpack_exports__);
116357
116608
  /* eslint-disable @typescript-eslint/naming-convention */
116358
116609
  /* eslint-disable @itwin/no-internal-barrel-imports */
116359
116610
  /* eslint-disable sort-imports */
116611
+ /* eslint-disable @typescript-eslint/no-deprecated -- the extension runtime must keep exposing deprecated public APIs until they are removed */
116360
116612
 
116361
116613
  const globalSymbol = Symbol.for("itwin.core.frontend.globals");
116362
116614
  if (globalThis[globalSymbol]) {
@@ -116750,11 +117002,11 @@ __webpack_require__.r(__webpack_exports__);
116750
117002
  */
116751
117003
  class RemoteExtensionProvider {
116752
117004
  _props;
116753
- /** The name of the server where the extension is hosted. */
117005
+ /** The hostname of the server where the extension is hosted. */
116754
117006
  hostname;
116755
117007
  constructor(_props) {
116756
117008
  this._props = _props;
116757
- this.hostname = new URL(this._props.jsUrl).hostname.replace("www", "");
117009
+ this.hostname = new URL(this._props.jsUrl).hostname;
116758
117010
  }
116759
117011
  /**
116760
117012
  * Attempts to execute an extension.
@@ -131643,8 +131895,8 @@ class FrameBuffers {
131643
131895
  idsAndZComposite;
131644
131896
  idsAndAltZComposite;
131645
131897
  edlDrawCol;
131646
- init(textures, depth, depthMS) {
131647
- if (!this.initPotentialMSFbos(textures, depth, depthMS))
131898
+ init(textures, depth, depthMS, boundColor) {
131899
+ if (!this.initPotentialMSFbos(textures, depth, depthMS, boundColor))
131648
131900
  return false;
131649
131901
  this.depthAndOrder = _FrameBuffer__WEBPACK_IMPORTED_MODULE_9__.FrameBuffer.create([(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.expectDefined)(textures.depthAndOrder)], depth);
131650
131902
  this.hilite = _FrameBuffer__WEBPACK_IMPORTED_MODULE_9__.FrameBuffer.create([(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.expectDefined)(textures.hilite)], depth);
@@ -131652,7 +131904,7 @@ class FrameBuffers {
131652
131904
  if (!this.depthAndOrder || !this.hilite || !this.hiliteUsingStencil)
131653
131905
  return false;
131654
131906
  (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(undefined === this.opaqueAll);
131655
- if (!this.initPotentialMSMRTFbos(textures, depth, depthMS))
131907
+ if (!this.initPotentialMSMRTFbos(textures, depth, depthMS, boundColor))
131656
131908
  return false;
131657
131909
  (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(undefined !== textures.accumulation && undefined !== textures.revealage);
131658
131910
  const colors = [textures.accumulation, textures.revealage];
@@ -131669,9 +131921,8 @@ class FrameBuffers {
131669
131921
  && undefined !== this.clearTranslucent
131670
131922
  && undefined !== this.pingPong;
131671
131923
  }
131672
- initPotentialMSFbos(textures, depth, depthMS) {
131673
- const boundColor = _System__WEBPACK_IMPORTED_MODULE_17__.System.instance.frameBufferStack.currentColorBuffer;
131674
- (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(undefined !== boundColor && undefined !== textures.color);
131924
+ initPotentialMSFbos(textures, depth, depthMS, boundColor) {
131925
+ ;(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(undefined !== textures.color);
131675
131926
  if (undefined === depthMS) {
131676
131927
  this.opaqueColor = _FrameBuffer__WEBPACK_IMPORTED_MODULE_9__.FrameBuffer.create([boundColor], depth);
131677
131928
  this.opaqueAndCompositeColor = _FrameBuffer__WEBPACK_IMPORTED_MODULE_9__.FrameBuffer.create([textures.color], depth);
@@ -131684,10 +131935,8 @@ class FrameBuffers {
131684
131935
  return undefined !== this.opaqueColor
131685
131936
  && undefined !== this.opaqueAndCompositeColor;
131686
131937
  }
131687
- initPotentialMSMRTFbos(textures, depth, depthMs) {
131688
- const boundColor = _System__WEBPACK_IMPORTED_MODULE_17__.System.instance.frameBufferStack.currentColorBuffer;
131689
- (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(undefined !== boundColor &&
131690
- undefined !== textures.color &&
131938
+ initPotentialMSMRTFbos(textures, depth, depthMs, boundColor) {
131939
+ ;(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(undefined !== textures.color &&
131691
131940
  undefined !== textures.featureId &&
131692
131941
  undefined !== textures.depthAndOrder &&
131693
131942
  undefined !== textures.accumulation &&
@@ -131801,23 +132050,23 @@ class FrameBuffers {
131801
132050
  this.idsAndAltZComposite = (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.dispose)(this.idsAndAltZComposite);
131802
132051
  }
131803
132052
  }
131804
- enableMultiSampling(textures, depth, depthMS) {
132053
+ enableMultiSampling(textures, depth, depthMS, boundColor) {
131805
132054
  this.opaqueColor = (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.dispose)(this.opaqueColor);
131806
132055
  this.opaqueAndCompositeColor = (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.dispose)(this.opaqueAndCompositeColor);
131807
- let rVal = this.initPotentialMSFbos(textures, depth, depthMS);
132056
+ let rVal = this.initPotentialMSFbos(textures, depth, depthMS, boundColor);
131808
132057
  this.opaqueAll = (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.dispose)(this.opaqueAll);
131809
132058
  this.opaqueAndCompositeAll = (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.dispose)(this.opaqueAndCompositeAll);
131810
- rVal = this.initPotentialMSMRTFbos(textures, depth, depthMS);
132059
+ rVal = this.initPotentialMSMRTFbos(textures, depth, depthMS, boundColor);
131811
132060
  return rVal;
131812
132061
  }
131813
- disableMultiSampling(textures, depth) {
132062
+ disableMultiSampling(textures, depth, boundColor) {
131814
132063
  this.opaqueAll = (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.dispose)(this.opaqueAll);
131815
132064
  this.opaqueAndCompositeAll = (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.dispose)(this.opaqueAndCompositeAll);
131816
- if (!this.initPotentialMSMRTFbos(textures, depth, undefined))
132065
+ if (!this.initPotentialMSMRTFbos(textures, depth, undefined, boundColor))
131817
132066
  return false;
131818
132067
  this.opaqueColor = (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.dispose)(this.opaqueColor);
131819
132068
  this.opaqueAndCompositeColor = (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.dispose)(this.opaqueAndCompositeColor);
131820
- return this.initPotentialMSFbos(textures, depth, undefined);
132069
+ return this.initPotentialMSFbos(textures, depth, undefined, boundColor);
131821
132070
  }
131822
132071
  get isDisposed() {
131823
132072
  return undefined === this.opaqueColor && undefined === this.opaqueAndCompositeColor && undefined === this.depthAndOrder
@@ -132860,7 +133109,7 @@ class Compositor extends SceneCompositor {
132860
133109
  this._depthMS = undefined;
132861
133110
  if (this._depth !== undefined) {
132862
133111
  return this._textures.init(this._width, this._height, this._antialiasSamples)
132863
- && this._fbos.init(this._textures, this._depth, this._depthMS)
133112
+ && this._fbos.init(this._textures, this._depth, this._depthMS, (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.expectDefined)(this.target.outputColorTexture))
132864
133113
  && this._geom.init(this._textures)
132865
133114
  && this.eyeDomeLighting.init(this._width, this._height, this._depth);
132866
133115
  }
@@ -132875,11 +133124,11 @@ class Compositor extends SceneCompositor {
132875
133124
  if (!this._textures.enableMultiSampling(this._width, this._height, this._antialiasSamples))
132876
133125
  return false;
132877
133126
  (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(undefined !== this._depth && undefined !== this._depthMS);
132878
- return this._fbos.enableMultiSampling(this._textures, this._depth, this._depthMS);
133127
+ return this._fbos.enableMultiSampling(this._textures, this._depth, this._depthMS, (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.expectDefined)(this.target.outputColorTexture));
132879
133128
  }
132880
133129
  disableMultiSampling() {
132881
133130
  ;(0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.assert)(undefined !== this._depth);
132882
- if (!this._fbos.disableMultiSampling(this._textures, this._depth))
133131
+ if (!this._fbos.disableMultiSampling(this._textures, this._depth, (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.expectDefined)(this.target.outputColorTexture)))
132883
133132
  return false;
132884
133133
  // Want to disable multisampling without deleting & reallocating other stuff.
132885
133134
  this._depthMS = (0,_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.dispose)(this._depthMS);
@@ -137411,6 +137660,7 @@ class Target extends _render_RenderTarget__WEBPACK_IMPORTED_MODULE_7__.RenderTar
137411
137660
  this._antialiasSamples = (undefined !== _System__WEBPACK_IMPORTED_MODULE_24__.System.instance.options.antialiasSamples ? _System__WEBPACK_IMPORTED_MODULE_24__.System.instance.options.antialiasSamples : 1);
137412
137661
  }
137413
137662
  get compositor() { return this._compositor; }
137663
+ get outputColorTexture() { return this._fbo?.getColor(0); }
137414
137664
  get isReadPixelsInProgress() { return this._isReadPixelsInProgress; }
137415
137665
  get readPixelsSelector() { return this._readPixelsSelector; }
137416
137666
  get drawNonLocatable() { return this._drawNonLocatable; }
@@ -153735,7 +153985,7 @@ __webpack_require__.r(__webpack_exports__);
153735
153985
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
153736
153986
  /* harmony export */ OrbitGtTileTree: () => (/* binding */ OrbitGtTileTree),
153737
153987
  /* harmony export */ OrbitGtTreeReference: () => (/* binding */ OrbitGtTreeReference),
153738
- /* harmony export */ computeOrthometricVerticalShift: () => (/* binding */ computeOrthometricVerticalShift),
153988
+ /* harmony export */ computeVerticalDatumShift: () => (/* binding */ computeVerticalDatumShift),
153739
153989
  /* harmony export */ createOrbitGtTileTreeReference: () => (/* binding */ createOrbitGtTileTreeReference)
153740
153990
  /* harmony export */ });
153741
153991
  /* harmony import */ var _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @itwin/core-bentley */ "../../core/bentley/lib/esm/core-bentley.js");
@@ -154042,20 +154292,44 @@ class OrbitGtTileTree extends _tile_internal__WEBPACK_IMPORTED_MODULE_10__.TileT
154042
154292
  }
154043
154293
  }
154044
154294
  /** Computes the vertical shift, in meters along geodetic up, to correctly place a point cloud whose CRS does not
154045
- * define a vertical datum, assuming its heights are orthometric (relative to the geoid).
154295
+ * say whether its heights are ellipsoidal or orthometric. We assume they use the same vertical datum as the iModel.
154046
154296
  *
154047
- * The shift is the difference between converting the point cloud's origin with its height treated as orthometric
154048
- * versus ellipsoidal (`heightAsEllipsoidalDbZ`, already computed by the caller). Returns zero if the shift cannot
154049
- * be computed or the iModel's converter makes no distinction between the two.
154297
+ * The caller already placed the point cloud assuming its heights are ellipsoidal
154298
+ * (`heightAsEllipsoidalDbZ`). This function checks whether that assumption needs correcting:
154299
+ *
154300
+ * - If the iModel uses a geoid-based vertical datum (GEOID, NAVD88, or NGVD29), the cloud's
154301
+ * heights are assumed to be geoid-based too, so we compute how far off the ellipsoidal
154302
+ * placement is from the correct (geoid-based) one, and return that difference as a shift.
154303
+ * - If the iModel is ellipsoidal (or the datum is unknown), no correction is needed -
154304
+ * the original ellipsoidal placement was already right, so this returns zero.
154305
+ * - If the shift can't be computed (e.g. conversion fails), also returns zero.
154050
154306
  * Exported strictly for tests.
154051
154307
  * @internal
154052
154308
  */
154053
- async function computeOrthometricVerticalShift(geoOrigin, heightAsEllipsoidalDbZ, iModel) {
154054
- const geoidConverter = iModel.noGcsDefined ? undefined : iModel.geoServices.getConverter({ horizontalCRS: { epsg: 4326 }, verticalCRS: { id: "GEOID" } });
154055
- if (undefined === geoidConverter)
154309
+ async function computeVerticalDatumShift(geoOrigin, heightAsEllipsoidalDbZ, iModel) {
154310
+ if (iModel.noGcsDefined)
154311
+ return 0;
154312
+ // The backend always resolves the vertical datum id. Convert against the iModel's own datum.
154313
+ let source;
154314
+ const verticalDatum = iModel.geographicCoordinateSystem?.verticalCRS?.id;
154315
+ switch (verticalDatum) {
154316
+ // Pair GEOID with a WGS84 horizontal CRS (EPSG:4326).
154317
+ case "GEOID":
154318
+ source = { horizontalCRS: { epsg: 4326 }, verticalCRS: { id: "GEOID" } };
154319
+ break;
154320
+ // Native rejects NAVD88 and NGVD29 with WGS84; pair them with NAD83 (EPSG:4269).
154321
+ case "NAVD88":
154322
+ case "NGVD29":
154323
+ source = { horizontalCRS: { epsg: 4269 }, verticalCRS: { id: verticalDatum } };
154324
+ break;
154325
+ default:
154326
+ return 0;
154327
+ }
154328
+ const converter = iModel.geoServices.getConverter(source);
154329
+ if (undefined === converter)
154056
154330
  return 0;
154057
154331
  try {
154058
- const response = await geoidConverter.getIModelCoordinatesFromGeoCoordinates([geoOrigin]);
154332
+ const response = await converter.getIModelCoordinatesFromGeoCoordinates([geoOrigin]);
154059
154333
  if (response.iModelCoords[0].s !== _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.GeoCoordStatus.Success) {
154060
154334
  _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logWarning(_common_FrontendLoggerCategory__WEBPACK_IMPORTED_MODULE_5__.FrontendLoggerCategory.RealityData, `Failed to compute orthometric height correction for point cloud (status ${response.iModelCoords[0].s}); heights will be treated as ellipsoidal`);
154061
154335
  return 0;
@@ -154165,11 +154439,11 @@ async function computeOrthometricVerticalShift(geoOrigin, heightAsEllipsoidalDbZ
154165
154439
  const response = await geoConverter.getIModelCoordinatesFromGeoCoordinates([geoOrigin]);
154166
154440
  if (response.iModelCoords[0].s === _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.GeoCoordStatus.Success) {
154167
154441
  const dbOriginFromGcs = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.Point3d.fromJSON(response.iModelCoords[0].p);
154168
- // A projected CRS defines no vertical datum, so the point cloud's heights are conventionally orthometric -
154169
- // but pointCloudToEcef above treated them as ellipsoidal. Correct the placement by the difference.
154170
- // (A compound CRS also takes this path; that stays correct unless orbitgt gains a geoid model.)
154442
+ // A projected CRS doesn't say whether heights are ellipsoidal or orthometric, so assume they match the iModel.
154443
+ // pointCloudToEcef above treated them as ellipsoidal; shift by the difference if the iModel is geoid-based.
154444
+ // Compound CRSs can't currently be loaded, so they don't get here. If that changes, their heights are orthometric and need separate handling.
154171
154445
  if (_itwin_core_orbitgt__WEBPACK_IMPORTED_MODULE_3__.CRSManager.ENGINE.isProjectedCRS(pointCloudCRS)) {
154172
- const verticalShift = await computeOrthometricVerticalShift(geoOrigin, dbOriginFromGcs.z, iModel);
154446
+ const verticalShift = await computeVerticalDatumShift(geoOrigin, dbOriginFromGcs.z, iModel);
154173
154447
  if (0 !== verticalShift) {
154174
154448
  const upVector = _itwin_core_geometry__WEBPACK_IMPORTED_MODULE_2__.Vector3d.createStartEnd(cartographicOrigin.toEcef(), _itwin_core_common__WEBPACK_IMPORTED_MODULE_1__.Cartographic.fromRadians({ longitude: cartographicOrigin.longitude, latitude: cartographicOrigin.latitude, height: cartographicOrigin.height + 1 }).toEcef()).normalize();
154175
154449
  if (undefined !== upVector) {
@@ -154333,7 +154607,7 @@ function readPnts(stream, dataOffset, pnts) {
154333
154607
  }
154334
154608
  async function decodeDracoPointCloud(buf) {
154335
154609
  try {
154336
- const dracoLoader = (await __webpack_require__.e(/*! import() */ "vendors-common_temp_node_modules_pnpm_loaders_gl_draco_4_4_5__loaders_gl_core_4_4_5_node_modu-5e3596").then(() => (__webpack_require__(/*! @loaders.gl/draco */ "../../common/temp/node_modules/.pnpm/@loaders.gl+draco@4.4.5_@loaders.gl+core@4.4.5/node_modules/@loaders.gl/draco/dist/index.js")))).DracoLoader;
154610
+ const dracoLoader = (await __webpack_require__.e(/*! import() */ "vendors-common_temp_node_modules_pnpm_loaders_gl_draco_4_5_2__loaders_gl_core_4_5_2_node_modu-bbc95a").then(() => (__webpack_require__(/*! @loaders.gl/draco */ "../../common/temp/node_modules/.pnpm/@loaders.gl+draco@4.5.2_@loaders.gl+core@4.5.2/node_modules/@loaders.gl/draco/dist/index.js")))).DracoLoader;
154337
154611
  const mesh = await dracoLoader.parse(buf, {});
154338
154612
  if (mesh.topology !== "point-list")
154339
154613
  return undefined;
@@ -161197,8 +161471,13 @@ class FormatsProviderManager {
161197
161471
  this.onFormatsChanged.raiseEvent(args);
161198
161472
  });
161199
161473
  }
161200
- async getFormat(name, system) {
161201
- return this._formatsProvider.getFormat(name, system);
161474
+ async getFormat(name, system, context) {
161475
+ return this._formatsProvider.getFormat(name, system, context);
161476
+ }
161477
+ /** Returns `undefined` when the current provider cannot look up formats synchronously. */
161478
+ getFormatSync(name, system, context) {
161479
+ const provider = this._formatsProvider;
161480
+ return typeof provider.getFormatSync === "function" ? provider.getFormatSync(name, system, context) : undefined;
161202
161481
  }
161203
161482
  get formatsProvider() { return this; }
161204
161483
  set formatsProvider(formatsProvider) {
@@ -166344,7 +166623,7 @@ class GltfReader {
166344
166623
  }
166345
166624
  readMeshPrimitive(primitive, featureTable, pseudoRtcBias) {
166346
166625
  const meshMode = _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.JsonUtils.asInt(primitive.mode, _common_gltf_GltfSchema__WEBPACK_IMPORTED_MODULE_12__.GltfMeshMode.Triangles);
166347
- if (meshMode === _common_gltf_GltfSchema__WEBPACK_IMPORTED_MODULE_12__.GltfMeshMode.Points && !this._vertexTableRequired) {
166626
+ if (meshMode === _common_gltf_GltfSchema__WEBPACK_IMPORTED_MODULE_12__.GltfMeshMode.Points && primitive.indices === undefined) {
166348
166627
  const pointCloud = this.readPointCloud2(primitive, undefined !== featureTable);
166349
166628
  if (pointCloud)
166350
166629
  return pointCloud;
@@ -166823,6 +167102,8 @@ class GltfReader {
166823
167102
  vertexCount = bufferData.count ?? 0;
166824
167103
  featureIdBuffers.set(featureIdDesc.attribute, { buffer, stride: bufferView.stride });
166825
167104
  }
167105
+ if (featureIdBuffers.size === 0)
167106
+ return undefined;
166826
167107
  const itwinFeatureIndices = [];
166827
167108
  const vertexPropsMap = new Map();
166828
167109
  for (let vertexId = 0; vertexId < vertexCount; vertexId++) {
@@ -167114,7 +167395,7 @@ class GltfReader {
167114
167395
  if (_itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.ProcessDetector.isIEBrowser) {
167115
167396
  throw new Error("Unsupported browser for Draco decoding");
167116
167397
  }
167117
- const dracoLoader = (await __webpack_require__.e(/*! import() */ "vendors-common_temp_node_modules_pnpm_loaders_gl_draco_4_4_5__loaders_gl_core_4_4_5_node_modu-5e3596").then(() => (__webpack_require__(/*! @loaders.gl/draco */ "../../common/temp/node_modules/.pnpm/@loaders.gl+draco@4.4.5_@loaders.gl+core@4.4.5/node_modules/@loaders.gl/draco/dist/index.js")))).DracoLoader;
167398
+ const dracoLoader = (await __webpack_require__.e(/*! import() */ "vendors-common_temp_node_modules_pnpm_loaders_gl_draco_4_5_2__loaders_gl_core_4_5_2_node_modu-bbc95a").then(() => (__webpack_require__(/*! @loaders.gl/draco */ "../../common/temp/node_modules/.pnpm/@loaders.gl+draco@4.5.2_@loaders.gl+core@4.5.2/node_modules/@loaders.gl/draco/dist/index.js")))).DracoLoader;
167118
167399
  await Promise.all(dracoMeshes.map(async (x) => this.decodeDracoMesh(x, dracoLoader)));
167119
167400
  }
167120
167401
  catch (err) {
@@ -172420,7 +172701,7 @@ __webpack_require__.r(__webpack_exports__);
172420
172701
  /* harmony export */ collectMaskRefs: () => (/* reexport safe */ _internal_tile_PrimaryTileTree__WEBPACK_IMPORTED_MODULE_82__.collectMaskRefs),
172421
172702
  /* harmony export */ compareMapLayer: () => (/* reexport safe */ _internal_render_webgl_MapLayerParams__WEBPACK_IMPORTED_MODULE_94__.compareMapLayer),
172422
172703
  /* harmony export */ computeCesiumTokenTimeoutInterval: () => (/* reexport safe */ _map_CesiumTerrainProvider__WEBPACK_IMPORTED_MODULE_68__.computeCesiumTokenTimeoutInterval),
172423
- /* harmony export */ computeOrthometricVerticalShift: () => (/* reexport safe */ _internal_tile_OrbitGtTileTree__WEBPACK_IMPORTED_MODULE_84__.computeOrthometricVerticalShift),
172704
+ /* harmony export */ computeVerticalDatumShift: () => (/* reexport safe */ _internal_tile_OrbitGtTileTree__WEBPACK_IMPORTED_MODULE_84__.computeVerticalDatumShift),
172424
172705
  /* harmony export */ createClassifierTileTreeReference: () => (/* reexport safe */ _internal_tile_ClassifierTileTree__WEBPACK_IMPORTED_MODULE_83__.createClassifierTileTreeReference),
172425
172706
  /* harmony export */ createDefaultViewFlagOverrides: () => (/* reexport safe */ _internal_tile_ViewFlagOverrides__WEBPACK_IMPORTED_MODULE_0__.createDefaultViewFlagOverrides),
172426
172707
  /* harmony export */ createGraphicFromDescription: () => (/* reexport safe */ _internal_tile_ImdlGraphicsCreator__WEBPACK_IMPORTED_MODULE_37__.createGraphicFromDescription),
@@ -313779,16 +314060,17 @@ __webpack_require__.r(__webpack_exports__);
313779
314060
  /* harmony import */ var _Unit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Unit */ "../../core/quantity/lib/esm/Unit.js");
313780
314061
  /* harmony import */ var _internal_BasicUnitConversionData__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./internal/BasicUnitConversionData */ "../../core/quantity/lib/esm/internal/BasicUnitConversionData.js");
313781
314062
  /* harmony import */ var _internal_BasicUnitsResolvedStateCache__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./internal/BasicUnitsResolvedStateCache */ "../../core/quantity/lib/esm/internal/BasicUnitsResolvedStateCache.js");
314063
+ /* harmony import */ var _assets_Units_json__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./assets/Units.json */ "../../core/quantity/lib/esm/assets/Units.json");
313782
314064
 
313783
314065
 
313784
314066
 
314067
+
314068
+ const bundledSchema = _assets_Units_json__WEBPACK_IMPORTED_MODULE_3__;
313785
314069
  async function resolveState() {
313786
- return (0,_internal_BasicUnitsResolvedStateCache__WEBPACK_IMPORTED_MODULE_2__.resolveBasicUnitsData)(async () => {
313787
- // First caller pays the dynamic-import + schema-index build cost.
313788
- // Concurrent callers await the same promise, and later callers reuse the resolved state.
313789
- const { default: schema } = await __webpack_require__.e(/*! import() */ "core_quantity_lib_esm_assets_Units_json").then(() => (__webpack_require__.t(/*! ./assets/Units.json */ "../../core/quantity/lib/esm/assets/Units.json", 19)));
313790
- return schema;
313791
- });
314070
+ return (0,_internal_BasicUnitsResolvedStateCache__WEBPACK_IMPORTED_MODULE_2__.resolveBasicUnitsData)(async () => bundledSchema);
314071
+ }
314072
+ function resolveStateSync() {
314073
+ return (0,_internal_BasicUnitsResolvedStateCache__WEBPACK_IMPORTED_MODULE_2__.resolveBasicUnitsDataSync)(bundledSchema);
313792
314074
  }
313793
314075
  /** @internal — test use only. Resets the shared module-level lazy cache. */
313794
314076
  function _testResetUnitsCache() {
@@ -313797,12 +314079,11 @@ function _testResetUnitsCache() {
313797
314079
  /**
313798
314080
  * A `UnitsProvider` backed by the full BIS `Units.ecschema.json` bundled as a JSON asset.
313799
314081
  *
313800
- * The bundled JSON is loaded lazily via dynamic `import()` on the first provider call and cached
313801
- * at module scope — construction is essentially free, and multiple instances
313802
- * share the same immutable lookup indexes.
314082
+ * The bundled data is available locally. The provider builds its immutable lookup indexes on the
314083
+ * first call and caches them at module scope, so multiple instances share the same indexes.
313803
314084
  *
313804
- * If an initial schema load fails, later provider calls will retry the load instead of pinning the
313805
- * provider into a permanently failed module-level state.
314085
+ * If resolving the bundled data fails, the next provider call retries instead of retaining a failed
314086
+ * module-level state.
313806
314087
  *
313807
314088
  * This is the zero-dependency default for backends, tools, and any frontend that doesn't need
313808
314089
  * iModel overrides. Equivalent to calling `createUnitsProvider()` with no arguments.
@@ -313811,6 +314092,16 @@ function _testResetUnitsCache() {
313811
314092
  * @beta
313812
314093
  */
313813
314094
  class BasicUnitsProvider {
314095
+ /** Find a built-in unit by fully qualified name using local data. */
314096
+ findUnitByNameSync(unitName) {
314097
+ const state = resolveStateSync();
314098
+ const entry = state.nameMap.get(unitName);
314099
+ return entry ? entry.props : new _Unit__WEBPACK_IMPORTED_MODULE_0__.BadUnit();
314100
+ }
314101
+ /** Compute a conversion between built-in units using the same bundled data as [[getConversion]]. */
314102
+ getConversionSync(fromUnit, toUnit) {
314103
+ return (0,_internal_BasicUnitConversionData__WEBPACK_IMPORTED_MODULE_1__.getBasicUnitConversion)(resolveStateSync(), fromUnit, toUnit);
314104
+ }
313814
314105
  // ── UnitsProvider implementation ─────────────────────────────────────
313815
314106
  /** Find a unit by its display label, optionally filtering by schema name, phenomenon, and unit system.
313816
314107
  * @param unitLabel - The display label to search for (case-insensitive).
@@ -314242,7 +314533,7 @@ class BaseFormat {
314242
314533
  _stationBaseFactor; // optional positive integer base factor for station formatting; default is 1
314243
314534
  _ratioType; // required if type is ratio; options: oneToN, NToOne, ValueBased, useGreatestCommonDivisor
314244
314535
  _ratioFormatType; // defaults to Decimal if not specified
314245
- _ratioSeparator; // default is ":"; separator character used in ratio formatting
314536
+ _ratioSeparator; // default is ":"; separator string used in ratio formatting
314246
314537
  _azimuthBase; // value always clockwise from north
314247
314538
  _azimuthBaseUnit; // unit for azimuthBase value
314248
314539
  _azimuthCounterClockwise; // if set to true, azimuth values are returned counter-clockwise from base
@@ -314344,11 +314635,12 @@ class BaseFormat {
314344
314635
  if (undefined === formatProps.ratioType)
314345
314636
  throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `The Format ${this.name} is 'Ratio' type therefore the attribute 'ratioType' is required.`);
314346
314637
  this._ratioType = (0,_FormatEnums__WEBPACK_IMPORTED_MODULE_2__.parseRatioType)(formatProps.ratioType, this.name);
314347
- if (undefined !== formatProps.ratioSeparator) { // optional; default is 0.0
314638
+ if (undefined !== formatProps.ratioSeparator) { // optional; default is ":"
314348
314639
  if (typeof (formatProps.ratioSeparator) !== "string")
314349
314640
  throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'ratioSeparator' attribute. It should be of type 'string'.`);
314350
- if (formatProps.ratioSeparator.length !== 1)
314351
- throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'ratioSeparator' attribute. It should be a one character string.`);
314641
+ const nonSpaceCharacters = [...formatProps.ratioSeparator].filter((character) => character !== " ");
314642
+ if (nonSpaceCharacters.length !== 1 || nonSpaceCharacters[0].trim().length === 0)
314643
+ throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `The Format ${this.name} has an invalid 'ratioSeparator' attribute. It should contain exactly one non-space character, optionally surrounded by spaces.`);
314352
314644
  this._ratioSeparator = formatProps.ratioSeparator;
314353
314645
  }
314354
314646
  else {
@@ -314582,6 +314874,12 @@ class Format extends BaseFormat {
314582
314874
  await actualFormat.fromJSON(unitsProvider, formatProps);
314583
314875
  return actualFormat;
314584
314876
  }
314877
+ /** Create a `Format` from `FormatProps` using a synchronous unit provider. */
314878
+ static createFromJSONSync(name, unitsProvider, formatProps) {
314879
+ const actualFormat = new Format(name);
314880
+ actualFormat.fromFullyResolvedJSON(resolveFormatPropsSync(name, unitsProvider, formatProps));
314881
+ return actualFormat;
314882
+ }
314585
314883
  static createFromFullyResolvedJSON(name, formatProps) {
314586
314884
  const actualFormat = new Format(name);
314587
314885
  actualFormat.fromFullyResolvedJSON(formatProps);
@@ -314648,52 +314946,50 @@ class Format extends BaseFormat {
314648
314946
  return baseFormatProps;
314649
314947
  }
314650
314948
  }
314651
- async function resolveCompositeUnit(provider, name, label) {
314949
+ function validateCompositeUnitInput(name, label) {
314652
314950
  if (typeof name !== "string" || (undefined !== label && typeof label !== "string")) {
314653
314951
  throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `This Composite has a unit with an invalid 'name' or 'label' attribute.`);
314654
314952
  }
314655
- const unit = await provider.findUnitByName(name);
314953
+ }
314954
+ function validateResolvedUnit(unit, errorMessage) {
314656
314955
  if (!unit || !unit.isValid) {
314657
- throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `Invalid unit name '${name}'.`);
314956
+ throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, errorMessage);
314658
314957
  }
314659
314958
  return unit;
314660
314959
  }
314661
- async function resolveAzimuthBearingUnit(formatName, jsonObj, key, provider) {
314960
+ function getAzimuthBearingUnitName(formatName, jsonObj, key) {
314662
314961
  const unitName = jsonObj[key];
314663
- if (undefined !== unitName) {
314664
- if (typeof unitName !== "string") {
314665
- throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid '${key}' attribute. It should be of type 'string'.`);
314666
- }
314667
- const unit = await provider.findUnitByName(unitName);
314668
- if (!unit || !unit.isValid) {
314669
- throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `Invalid unit name '${unitName}' for ${key} in Format '${formatName}'.`);
314670
- }
314671
- return unit;
314962
+ if (undefined !== unitName && typeof unitName !== "string") {
314963
+ throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `The Format ${formatName} has an invalid '${key}' attribute. It should be of type 'string'.`);
314672
314964
  }
314673
- return undefined;
314965
+ return unitName;
314674
314966
  }
314675
- async function resolveFormatProps(formatName, unitsProvider, jsonObj) {
314676
- let units;
314677
- if (undefined !== jsonObj.composite?.units) {
314678
- units = await Promise.all(jsonObj.composite.units.map(async (entry) => {
314679
- const unit = await resolveCompositeUnit(unitsProvider, entry.name);
314680
- return { unit, label: entry.label };
314681
- }));
314682
- // For Ratio formats with 2 units: validate both units have the same phenomenon
314683
- const formatType = (0,_FormatEnums__WEBPACK_IMPORTED_MODULE_2__.parseFormatType)(jsonObj.type, formatName);
314684
- if (formatType === _FormatEnums__WEBPACK_IMPORTED_MODULE_2__.FormatType.Ratio && units.length === 2) {
314685
- const phenomenon1 = units[0].unit.phenomenon;
314686
- const phenomenon2 = units[1].unit.phenomenon;
314687
- if (phenomenon1 !== phenomenon2) {
314688
- throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `The Format ${formatName} has 2-unit composite with different phenomena. Both units must have the same phenomenon. Found '${phenomenon1}' and '${phenomenon2}'.`);
314689
- }
314967
+ async function resolveCompositeUnit(provider, name, label) {
314968
+ validateCompositeUnitInput(name, label);
314969
+ return validateResolvedUnit(await provider.findUnitByName(name), `Invalid unit name '${name}'.`);
314970
+ }
314971
+ function resolveCompositeUnitSync(provider, name, label) {
314972
+ validateCompositeUnitInput(name, label);
314973
+ return validateResolvedUnit(provider.findUnitByNameSync(name), `Invalid unit name '${name}'.`);
314974
+ }
314975
+ async function resolveAzimuthBearingUnit(formatName, jsonObj, key, provider) {
314976
+ const unitName = getAzimuthBearingUnitName(formatName, jsonObj, key);
314977
+ return undefined === unitName ? undefined : validateResolvedUnit(await provider.findUnitByName(unitName), `Invalid unit name '${unitName}' for ${key} in Format '${formatName}'.`);
314978
+ }
314979
+ function resolveAzimuthBearingUnitSync(formatName, jsonObj, key, provider) {
314980
+ const unitName = getAzimuthBearingUnitName(formatName, jsonObj, key);
314981
+ return undefined === unitName ? undefined : validateResolvedUnit(provider.findUnitByNameSync(unitName), `Invalid unit name '${unitName}' for ${key} in Format '${formatName}'.`);
314982
+ }
314983
+ function validateResolvedFormatProps(formatName, jsonObj, units, azimuthBaseUnit, revolutionUnit) {
314984
+ const formatType = (0,_FormatEnums__WEBPACK_IMPORTED_MODULE_2__.parseFormatType)(jsonObj.type, formatName);
314985
+ if (formatType === _FormatEnums__WEBPACK_IMPORTED_MODULE_2__.FormatType.Ratio && units?.length === 2) {
314986
+ const phenomenon1 = units[0].unit.phenomenon;
314987
+ const phenomenon2 = units[1].unit.phenomenon;
314988
+ if (phenomenon1 !== phenomenon2) {
314989
+ throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `The Format ${formatName} has 2-unit composite with different phenomena. Both units must have the same phenomenon. Found '${phenomenon1}' and '${phenomenon2}'.`);
314690
314990
  }
314691
314991
  }
314692
- let azimuthBaseUnit, revolutionUnit;
314693
- const type = (0,_FormatEnums__WEBPACK_IMPORTED_MODULE_2__.parseFormatType)(jsonObj.type, formatName);
314694
- if (type === _FormatEnums__WEBPACK_IMPORTED_MODULE_2__.FormatType.Azimuth || type === _FormatEnums__WEBPACK_IMPORTED_MODULE_2__.FormatType.Bearing) {
314695
- azimuthBaseUnit = await resolveAzimuthBearingUnit(formatName, jsonObj, "azimuthBaseUnit", unitsProvider);
314696
- revolutionUnit = await resolveAzimuthBearingUnit(formatName, jsonObj, "revolutionUnit", unitsProvider);
314992
+ if (formatType === _FormatEnums__WEBPACK_IMPORTED_MODULE_2__.FormatType.Azimuth || formatType === _FormatEnums__WEBPACK_IMPORTED_MODULE_2__.FormatType.Bearing) {
314697
314993
  if (!revolutionUnit) {
314698
314994
  throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `The Format ${formatName} is 'Azimuth' or 'Bearing' type therefore the attribute 'revolutionUnit' is required.`);
314699
314995
  }
@@ -314701,6 +314997,8 @@ async function resolveFormatProps(formatName, unitsProvider, jsonObj) {
314701
314997
  throw new _Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityError(_Exception__WEBPACK_IMPORTED_MODULE_1__.QuantityStatus.InvalidJson, `The Format ${formatName} has an 'azimuthBase' attribute therefore the attribute 'azimuthBaseUnit' is required.`);
314702
314998
  }
314703
314999
  }
315000
+ }
315001
+ function createResolvedFormatProps(jsonObj, units, azimuthBaseUnit, revolutionUnit) {
314704
315002
  return {
314705
315003
  ...jsonObj,
314706
315004
  azimuthBaseUnit,
@@ -314711,6 +315009,38 @@ async function resolveFormatProps(formatName, unitsProvider, jsonObj) {
314711
315009
  } : undefined,
314712
315010
  };
314713
315011
  }
315012
+ async function resolveFormatProps(formatName, unitsProvider, jsonObj) {
315013
+ const units = undefined === jsonObj.composite?.units ? undefined : await Promise.all(jsonObj.composite.units.map(async (entry) => ({
315014
+ // Label is intentionally not validated, matching master: existing JSON may carry a non-string label (e.g. null).
315015
+ unit: await resolveCompositeUnit(unitsProvider, entry.name),
315016
+ label: entry.label,
315017
+ })));
315018
+ let azimuthBaseUnit;
315019
+ let revolutionUnit;
315020
+ const formatType = (0,_FormatEnums__WEBPACK_IMPORTED_MODULE_2__.parseFormatType)(jsonObj.type, formatName);
315021
+ if (formatType === _FormatEnums__WEBPACK_IMPORTED_MODULE_2__.FormatType.Azimuth || formatType === _FormatEnums__WEBPACK_IMPORTED_MODULE_2__.FormatType.Bearing) {
315022
+ azimuthBaseUnit = await resolveAzimuthBearingUnit(formatName, jsonObj, "azimuthBaseUnit", unitsProvider);
315023
+ revolutionUnit = await resolveAzimuthBearingUnit(formatName, jsonObj, "revolutionUnit", unitsProvider);
315024
+ }
315025
+ validateResolvedFormatProps(formatName, jsonObj, units, azimuthBaseUnit, revolutionUnit);
315026
+ return createResolvedFormatProps(jsonObj, units, azimuthBaseUnit, revolutionUnit);
315027
+ }
315028
+ function resolveFormatPropsSync(formatName, unitsProvider, jsonObj) {
315029
+ const units = undefined === jsonObj.composite?.units ? undefined : jsonObj.composite.units.map((entry) => ({
315030
+ // Keep in sync with resolveFormatProps: label is intentionally not validated.
315031
+ unit: resolveCompositeUnitSync(unitsProvider, entry.name),
315032
+ label: entry.label,
315033
+ }));
315034
+ let azimuthBaseUnit;
315035
+ let revolutionUnit;
315036
+ const formatType = (0,_FormatEnums__WEBPACK_IMPORTED_MODULE_2__.parseFormatType)(jsonObj.type, formatName);
315037
+ if (formatType === _FormatEnums__WEBPACK_IMPORTED_MODULE_2__.FormatType.Azimuth || formatType === _FormatEnums__WEBPACK_IMPORTED_MODULE_2__.FormatType.Bearing) {
315038
+ azimuthBaseUnit = resolveAzimuthBearingUnitSync(formatName, jsonObj, "azimuthBaseUnit", unitsProvider);
315039
+ revolutionUnit = resolveAzimuthBearingUnitSync(formatName, jsonObj, "revolutionUnit", unitsProvider);
315040
+ }
315041
+ validateResolvedFormatProps(formatName, jsonObj, units, azimuthBaseUnit, revolutionUnit);
315042
+ return createResolvedFormatProps(jsonObj, units, azimuthBaseUnit, revolutionUnit);
315043
+ }
314714
315044
 
314715
315045
 
314716
315046
  /***/ },
@@ -315855,15 +316185,12 @@ class FormatterSpec {
315855
316185
  get azimuthBaseConversion() { return this._azimuthBaseConversion; }
315856
316186
  get revolutionConversion() { return this._revolutionConversion; }
315857
316187
  /** Build conversion specs for ratio format with 2 composite units (numerator/denominator). */
315858
- static async getRatioUnitConversions(units, unitsProvider, persistenceUnit) {
316188
+ static *buildRatioUnitConversions(units, persistenceUnit) {
315859
316189
  const conversions = [];
315860
316190
  const [numeratorUnit, numeratorLabel] = units[0];
315861
316191
  const [denominatorUnit, denominatorLabel] = units[1];
315862
316192
  // Compute ratio scale: how many numerator units per denominator unit (e.g., IN:FT = 12)
315863
- const denominatorToNumerator = await unitsProvider.getConversion(denominatorUnit, numeratorUnit);
315864
- if (denominatorToNumerator.error) {
315865
- _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logWarning(_QuantityLoggerCategory__WEBPACK_IMPORTED_MODULE_1__.QuantityLoggerCategory.Formatting, `Unit conversion from "${denominatorUnit.name}" to "${numeratorUnit.name}" could not be resolved.`);
315866
- }
316193
+ const denominatorToNumerator = yield* requestConversion(denominatorUnit, numeratorUnit);
315867
316194
  const displayRatioScale = denominatorToNumerator.factor;
315868
316195
  // Avoid double-scaling: if persistence unit already encodes the display ratio, use factor 1.
315869
316196
  // Check by name heuristic (e.g., IN_PER_FT with ratioUnits [IN, FT] → no scaling needed)
@@ -315879,7 +316206,7 @@ class FormatterSpec {
315879
316206
  name: `${numeratorUnit.name}_per_${denominatorUnit.name}`,
315880
316207
  label: "",
315881
316208
  system: numeratorUnit.system,
315882
- conversion: { factor: ratioScaleFactor, offset: 0.0 },
316209
+ conversion: createRatioConversionProps(ratioScaleFactor, denominatorToNumerator),
315883
316210
  };
315884
316211
  conversions.push(ratioConversionSpec);
315885
316212
  // Numerator unit for label lookup
@@ -315902,6 +316229,9 @@ class FormatterSpec {
315902
316229
  }
315903
316230
  /** Get an array of UnitConversionSpecs, one for each unit that is to be shown in the formatted quantity string. */
315904
316231
  static async getUnitConversions(format, unitsProvider, inputUnit) {
316232
+ return runAsync(FormatterSpec.buildUnitConversions(format, inputUnit), unitsProvider);
316233
+ }
316234
+ static *buildUnitConversions(format, inputUnit) {
315905
316235
  const conversions = [];
315906
316236
  let persistenceUnit = inputUnit;
315907
316237
  if (!persistenceUnit) {
@@ -315915,17 +316245,14 @@ class FormatterSpec {
315915
316245
  }
315916
316246
  // Handle 2-unit composite for ratio formats (scale factors)
315917
316247
  if (format.type === _FormatEnums__WEBPACK_IMPORTED_MODULE_2__.FormatType.Ratio && format.units && format.units.length === 2) {
315918
- return FormatterSpec.getRatioUnitConversions(format.units, unitsProvider, persistenceUnit);
316248
+ return yield* FormatterSpec.buildRatioUnitConversions(format.units, persistenceUnit);
315919
316249
  }
315920
316250
  if (format.units) {
315921
316251
  let convertFromUnit = inputUnit;
315922
316252
  for (const unit of format.units) {
315923
316253
  let unitConversion;
315924
316254
  if (convertFromUnit) {
315925
- unitConversion = await unitsProvider.getConversion(convertFromUnit, unit[0]);
315926
- if (unitConversion.error) {
315927
- _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logWarning(_QuantityLoggerCategory__WEBPACK_IMPORTED_MODULE_1__.QuantityLoggerCategory.Formatting, `Unit conversion from "${convertFromUnit.name}" to "${unit[0].name}" could not be resolved.`);
315928
- }
316255
+ unitConversion = yield* requestConversion(convertFromUnit, unit[0]);
315929
316256
  }
315930
316257
  else {
315931
316258
  unitConversion = { factor: 1.0, offset: 0.0 };
@@ -315956,14 +316283,18 @@ class FormatterSpec {
315956
316283
  * @see BaseFormat.revolutionUnit
315957
316284
  */
315958
316285
  static async create(name, format, unitsProvider, inputUnit) {
315959
- const conversions = await FormatterSpec.getUnitConversions(format, unitsProvider, inputUnit);
316286
+ return runAsync(FormatterSpec.buildFormatterSpec(name, format, inputUnit), unitsProvider);
316287
+ }
316288
+ /** Create a `FormatterSpec` using a synchronous unit provider. */
316289
+ static createSync(name, format, unitsProvider, inputUnit) {
316290
+ return runSync(FormatterSpec.buildFormatterSpec(name, format, inputUnit), unitsProvider);
316291
+ }
316292
+ static *buildFormatterSpec(name, format, inputUnit) {
316293
+ const conversions = yield* FormatterSpec.buildUnitConversions(format, inputUnit);
315960
316294
  let azimuthBaseConversion;
315961
316295
  if (format.azimuthBaseUnit !== undefined) {
315962
316296
  if (inputUnit !== undefined) {
315963
- azimuthBaseConversion = await unitsProvider.getConversion(format.azimuthBaseUnit, inputUnit);
315964
- if (azimuthBaseConversion.error) {
315965
- _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logWarning(_QuantityLoggerCategory__WEBPACK_IMPORTED_MODULE_1__.QuantityLoggerCategory.Formatting, `Unit conversion from "${format.azimuthBaseUnit.name}" to "${inputUnit.name}" could not be resolved.`);
315966
- }
316297
+ azimuthBaseConversion = yield* requestConversion(format.azimuthBaseUnit, inputUnit);
315967
316298
  }
315968
316299
  else {
315969
316300
  azimuthBaseConversion = { factor: 1.0, offset: 0.0 };
@@ -315972,10 +316303,7 @@ class FormatterSpec {
315972
316303
  let revolutionConversion;
315973
316304
  if (format.revolutionUnit !== undefined) {
315974
316305
  if (inputUnit !== undefined) {
315975
- revolutionConversion = await unitsProvider.getConversion(format.revolutionUnit, inputUnit);
315976
- if (revolutionConversion.error) {
315977
- _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logWarning(_QuantityLoggerCategory__WEBPACK_IMPORTED_MODULE_1__.QuantityLoggerCategory.Formatting, `Unit conversion from "${format.revolutionUnit.name}" to "${inputUnit.name}" could not be resolved.`);
315978
- }
316306
+ revolutionConversion = yield* requestConversion(format.revolutionUnit, inputUnit);
315979
316307
  }
315980
316308
  else {
315981
316309
  revolutionConversion = { factor: 1.0, offset: 0.0 };
@@ -315988,6 +316316,30 @@ class FormatterSpec {
315988
316316
  return _Formatter__WEBPACK_IMPORTED_MODULE_3__.Formatter.formatQuantity(magnitude, this);
315989
316317
  }
315990
316318
  }
316319
+ function* requestConversion(fromUnit, toUnit) {
316320
+ const conversion = yield [fromUnit, toUnit];
316321
+ if (conversion.error) {
316322
+ _itwin_core_bentley__WEBPACK_IMPORTED_MODULE_0__.Logger.logWarning(_QuantityLoggerCategory__WEBPACK_IMPORTED_MODULE_1__.QuantityLoggerCategory.Formatting, `Unit conversion from "${fromUnit.name}" to "${toUnit.name}" could not be resolved.`);
316323
+ }
316324
+ return conversion;
316325
+ }
316326
+ async function runAsync(builder, unitsProvider) {
316327
+ let step = builder.next();
316328
+ while (!step.done)
316329
+ step = builder.next(await unitsProvider.getConversion(...step.value));
316330
+ return step.value;
316331
+ }
316332
+ function runSync(builder, unitsProvider) {
316333
+ let step = builder.next();
316334
+ while (!step.done)
316335
+ step = builder.next(unitsProvider.getConversionSync(...step.value));
316336
+ return step.value;
316337
+ }
316338
+ function createRatioConversionProps(ratioScaleFactor, sourceConversion) {
316339
+ return sourceConversion.error
316340
+ ? { factor: ratioScaleFactor, offset: 0.0, error: true }
316341
+ : { factor: ratioScaleFactor, offset: 0.0 };
316342
+ }
315991
316343
 
315992
316344
 
315993
316345
  /***/ },
@@ -316980,8 +317332,8 @@ class Parser {
316980
317332
  static parseRatioFormat(inString, spec) {
316981
317333
  if (!inString)
316982
317334
  return { ok: false, error: ParseError.NoValueOrUnitFoundInString };
316983
- const separator = spec.format.ratioSeparator ?? ":";
316984
- const parts = inString.split(separator);
317335
+ const separator = spec.format.ratioSeparator?.split(" ").join("") || ":";
317336
+ const parts = inString.split(separator).map((p) => p.trim());
316985
317337
  if (parts.length > 2)
316986
317338
  return { ok: false, error: ParseError.UnableToConvertParseTokensToQuantity };
316987
317339
  // If the string doesn't contain the expected separator but contains other ratio-like separators,
@@ -319696,7 +320048,8 @@ const basicUnitConversionData = {
319696
320048
  __webpack_require__.r(__webpack_exports__);
319697
320049
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
319698
320050
  /* harmony export */ _testResetResolvedBasicUnitsDataCache: () => (/* binding */ _testResetResolvedBasicUnitsDataCache),
319699
- /* harmony export */ resolveBasicUnitsData: () => (/* binding */ resolveBasicUnitsData)
320051
+ /* harmony export */ resolveBasicUnitsData: () => (/* binding */ resolveBasicUnitsData),
320052
+ /* harmony export */ resolveBasicUnitsDataSync: () => (/* binding */ resolveBasicUnitsDataSync)
319700
320053
  /* harmony export */ });
319701
320054
  /* harmony import */ var _BasicUnitConversionData__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BasicUnitConversionData */ "../../core/quantity/lib/esm/internal/BasicUnitConversionData.js");
319702
320055
 
@@ -319723,6 +320076,12 @@ async function resolveBasicUnitsData(loadSchema) {
319723
320076
  }
319724
320077
  return _resolvePromise;
319725
320078
  }
320079
+ /** Return shared resolved data for built-in units, building it synchronously on first use.
320080
+ * @internal
320081
+ */
320082
+ function resolveBasicUnitsDataSync(schema) {
320083
+ return _resolvedData ??= (0,_BasicUnitConversionData__WEBPACK_IMPORTED_MODULE_0__.buildResolvedBasicUnitsData)(schema);
320084
+ }
319726
320085
  /** @internal — test use only. Resets the shared module-level lazy cache.
319727
320086
  * This stays in source rather than under a test folder because the public test seam
319728
320087
  * `BasicUnitsProvider._testResetUnitsCache()` lives in source and delegates here.
@@ -324614,9 +324973,9 @@ flatbuffers.ByteBuffer.prototype.createLong = function(low, high) {
324614
324973
 
324615
324974
  /***/ },
324616
324975
 
324617
- /***/ "../../common/temp/node_modules/.pnpm/js-base64@3.9.3/node_modules/js-base64/base64.mjs"
324976
+ /***/ "../../common/temp/node_modules/.pnpm/js-base64@3.9.4/node_modules/js-base64/base64.mjs"
324618
324977
  /*!**********************************************************************************************!*\
324619
- !*** ../../common/temp/node_modules/.pnpm/js-base64@3.9.3/node_modules/js-base64/base64.mjs ***!
324978
+ !*** ../../common/temp/node_modules/.pnpm/js-base64@3.9.4/node_modules/js-base64/base64.mjs ***!
324620
324979
  \**********************************************************************************************/
324621
324980
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
324622
324981
 
@@ -324656,7 +325015,7 @@ __webpack_require__.r(__webpack_exports__);
324656
325015
  *
324657
325016
  * @author Dan Kogai (https://github.com/dankogai)
324658
325017
  */
324659
- const version = '3.9.3';
325018
+ const version = '3.9.4';
324660
325019
  /**
324661
325020
  * @deprecated use lowercase `version`.
324662
325021
  */
@@ -336970,7 +337329,18 @@ class WMS {
336970
337329
  (module) {
336971
337330
 
336972
337331
  "use strict";
336973
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","version":"5.14.0-dev.9","description":"iTwin.js frontend components","main":"lib/cjs/core-frontend.js","module":"lib/esm/core-frontend.js","typings":"lib/cjs/core-frontend","license":"MIT","scripts":{"build":"npm run -s copy:public && npm run -s build:cjs && npm run -s build:esm && npm run -s build:workers && npm run -s copy:draco","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2022 --outDir lib/esm","clean":"rimraf -g lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","copy:draco":"cpx \\"./node_modules/@loaders.gl/draco/dist/libs/*\\" ./lib/public/scripts","docs":"betools docs --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts && npm run -s extract","extract":"betools extract --fileExt=ts --extractFrom=./src/test/example-code --recursive --out=../../generated-docs/extract","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint --no-inline-config -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint \\"./src/**/*.ts\\" 1>&2","lint-fix":"eslint --fix -f visualstudio \\"./src/**/*.ts\\" 1>&2","lint-deprecation":"eslint --fix -f visualstudio --no-inline-config -c ../../common/config/eslint/eslint.config.deprecation-policy.js \\"./src/**/*.ts\\"","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run build:test-worker && vitest --run","cover":"npm run build:test-worker && vitest --run","build:test-worker":"vite build --config ./src/test/worker/vite.config.mts 1>&2","build:workers":"rimraf lib/workers/webpack && vite build --config ./src/workers/ImdlParser/vite.config.mts 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.git","directory":"core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/ecschema-metadata":"workspace:*","@itwin/ecschema-rpcinterface-common":"workspace:*"},"//devDependencies":["NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install","NOTE: All tools used by scripts in this package must be listed as devDependencies"],"devDependencies":{"@bentley/aec-units-schema":"^1.0.3","@bentley/formats-schema":"^1.0.0","@bentley/units-schema":"^1.0.11","@itwin/appui-abstract":"workspace:*","@itwin/build-tools":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/ecschema-metadata":"workspace:*","@itwin/ecschema-rpcinterface-common":"workspace:*","@itwin/object-storage-core":"^3.0.4","@itwin/eslint-plugin":"^6.0.0","@types/node":"~20.17.0","@types/sinon":"^17.0.2","@vitest/browser-playwright":"^4.1.10","@vitest/coverage-v8":"^4.1.10","cpx2":"^8.0.0","eslint":"^9.31.0","playwright":"~1.56.1","rimraf":"^6.0.1","sinon":"^17.0.2","typescript":"~5.6.2","vite":"^6.4.3","vitest":"^4.1.10","vite-plugin-static-copy":"2.2.0"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/core-i18n":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^4.4.5","@loaders.gl/draco":"^4.4.5","fuse.js":"^3.3.0","wms-capabilities":"0.6.0"}}');
337332
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","version":"5.15.0-dev.2","description":"iTwin.js frontend components","main":"lib/cjs/core-frontend.js","module":"lib/esm/core-frontend.js","typings":"lib/cjs/core-frontend","license":"MIT","scripts":{"build":"npm run -s copy:public && npm run -s build:cjs && npm run -s build:esm && npm run -s build:workers && npm run -s copy:draco","build:cjs":"npm run -s copy:js:cjs && tsc 1>&2 --outDir lib/cjs","build:esm":"npm run -s copy:js:esm && tsc 1>&2 --module ES2022 --outDir lib/esm","clean":"rimraf -g lib .rush/temp/package-deps*.json","copy:public":"cpx \\"./src/public/**/*\\" ./lib/public","copy:js:cjs":"cpx \\"./src/**/*.js\\" ./lib/cjs","copy:js:esm":"cpx \\"./src/**/*.js\\" ./lib/esm","copy:draco":"cpx \\"./node_modules/@loaders.gl/draco/dist/libs/*\\" ./lib/public/scripts","docs":"betools docs --json=../../generated-docs/core/core-frontend/file.json --tsIndexFile=./core-frontend.ts --onlyJson --excludes=webgl/**/*,**/map/*.d.ts,**/tile/*.d.ts,**/*-css.ts && npm run -s extract","extract":"betools extract --fileExt=ts --extractFrom=./src/test/example-code --recursive --out=../../generated-docs/extract","extract-api":"betools extract-api --entry=core-frontend && npm run extract-extension-api","extract-extension-api":"eslint --no-inline-config -c extraction.eslint.config.js \\"./src/**/*.ts\\" 1>&2","lint":"eslint \\"./src/**/*.ts\\" 1>&2","lint-fix":"eslint --fix -f visualstudio \\"./src/**/*.ts\\" 1>&2","lint-deprecation":"eslint --fix -f visualstudio --no-inline-config -c ../../common/config/eslint/eslint.config.deprecation-policy.js \\"./src/**/*.ts\\"","pseudolocalize":"betools pseudolocalize --englishDir ./src/public/locales/en --out ./public/locales/en-PSEUDO","test":"npm run build:test-worker && vitest --run","cover":"npm run build:test-worker && vitest --run","build:test-worker":"vite build --config ./src/test/worker/vite.config.mts 1>&2","build:workers":"rimraf lib/workers/webpack && vite build --config ./src/workers/ImdlParser/vite.config.mts 1>&2"},"repository":{"type":"git","url":"https://github.com/iTwin/itwinjs-core.git","directory":"core/frontend"},"keywords":["Bentley","BIM","iModel","digital-twin","iTwin"],"author":{"name":"Bentley Systems, Inc.","url":"http://www.bentley.com"},"peerDependencies":{"@itwin/appui-abstract":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/ecschema-metadata":"workspace:*","@itwin/ecschema-rpcinterface-common":"workspace:*"},"//devDependencies":["NOTE: All peerDependencies should also be listed as devDependencies since peerDependencies are not considered by npm install","NOTE: All tools used by scripts in this package must be listed as devDependencies"],"devDependencies":{"@bentley/aec-units-schema":"^1.0.3","@bentley/formats-schema":"^1.0.0","@bentley/units-schema":"^1.0.11","@itwin/appui-abstract":"workspace:*","@itwin/build-tools":"workspace:*","@itwin/core-bentley":"workspace:*","@itwin/core-common":"workspace:*","@itwin/core-geometry":"workspace:*","@itwin/core-orbitgt":"workspace:*","@itwin/core-quantity":"workspace:*","@itwin/ecschema-metadata":"workspace:*","@itwin/ecschema-rpcinterface-common":"workspace:*","@itwin/object-storage-core":"^3.0.4","@itwin/eslint-plugin":"^6.0.0","@types/node":"~20.17.0","@types/sinon":"^17.0.2","@vitest/browser-playwright":"^4.1.10","@vitest/coverage-v8":"^4.1.10","cpx2":"^8.0.0","eslint":"^9.31.0","playwright":"~1.56.1","rimraf":"^6.0.1","sinon":"^17.0.2","typescript":"~5.6.2","vite":"^6.4.3","vitest":"^4.1.10","vite-plugin-static-copy":"2.2.0"},"//dependencies":["NOTE: these dependencies should be only for things that DO NOT APPEAR IN THE API","NOTE: core-frontend should remain UI technology agnostic, so no react/angular dependencies are allowed"],"dependencies":{"@itwin/core-i18n":"workspace:*","@itwin/webgl-compatibility":"workspace:*","@loaders.gl/core":"^4.4.5","@loaders.gl/draco":"^4.4.5","fuse.js":"^3.3.0","wms-capabilities":"0.6.0"}}');
337333
+
337334
+ /***/ },
337335
+
337336
+ /***/ "../../core/quantity/lib/esm/assets/Units.json"
337337
+ /*!*****************************************************!*\
337338
+ !*** ../../core/quantity/lib/esm/assets/Units.json ***!
337339
+ \*****************************************************/
337340
+ (module) {
337341
+
337342
+ "use strict";
337343
+ module.exports = /*#__PURE__*/JSON.parse('{"version":"01.00.00","sourceEcSchemaVersion":"01.00.11","name":"Units","alias":"u","label":"Units","description":"Standard Set of Unit definitions for the system","items":{"SI":{"schemaItemType":"UnitSystem"},"CGS":{"schemaItemType":"UnitSystem"},"METRIC":{"schemaItemType":"UnitSystem"},"IMPERIAL":{"schemaItemType":"UnitSystem"},"MARITIME":{"schemaItemType":"UnitSystem"},"USSURVEY":{"schemaItemType":"UnitSystem"},"INDUSTRIAL":{"schemaItemType":"UnitSystem"},"INTERNATIONAL":{"schemaItemType":"UnitSystem"},"USCUSTOM":{"schemaItemType":"UnitSystem"},"STATISTICS":{"schemaItemType":"UnitSystem"},"FINANCE":{"schemaItemType":"UnitSystem"},"CONSTANT":{"schemaItemType":"UnitSystem"},"APPARENT_POWER":{"schemaItemType":"Phenomenon","label":"Apparent Power","definition":"ELECTRIC_POTENTIAL*CURRENT"},"AREA":{"schemaItemType":"Phenomenon","label":"Area","definition":"LENGTH(2)"},"VOLUME":{"schemaItemType":"Phenomenon","label":"Volume","definition":"LENGTH(3)"},"VELOCITY":{"schemaItemType":"Phenomenon","label":"Velocity","definition":"LENGTH*TIME(-1)"},"ANGULAR_VELOCITY":{"schemaItemType":"Phenomenon","label":"Angular Velocity","definition":"ANGLE*TIME(-1)"},"ACCELERATION":{"schemaItemType":"Phenomenon","label":"Acceleration","definition":"LENGTH*TIME(-2)"},"FORCE":{"schemaItemType":"Phenomenon","label":"Force","definition":"MASS*ACCELERATION"},"PRESSURE":{"schemaItemType":"Phenomenon","label":"Pressure","definition":"FORCE*AREA(-1)"},"FORCE_DENSITY":{"schemaItemType":"Phenomenon","label":"Force Density","definition":"FORCE*VOLUME(-1)"},"PRESSURE_GRADIENT":{"schemaItemType":"Phenomenon","label":"Pressure Gradient","definition":"PRESSURE*LENGTH(-1)"},"TORQUE":{"schemaItemType":"Phenomenon","label":"Torque","definition":"FORCE*LENGTH*ANGLE(-1)"},"LINEAR_TORQUE":{"schemaItemType":"Phenomenon","label":"Linear Torque","definition":"TORQUE*LENGTH(-1)"},"AREA_TORQUE":{"schemaItemType":"Phenomenon","label":"Area Torque","definition":"TORQUE*AREA(-1)"},"AREA_MOMENT_INERTIA":{"schemaItemType":"Phenomenon","label":"Area Moment Inertia","definition":"LENGTH(4)"},"MASS_RATIO":{"schemaItemType":"Phenomenon","label":"Mass Ratio","definition":"MASS*MASS(-1)"},"DENSITY":{"schemaItemType":"Phenomenon","label":"Density","definition":"MASS*VOLUME(-1)"},"SPECIFIC_VOLUME":{"schemaItemType":"Phenomenon","label":"Specific Volume","definition":"VOLUME*MASS(-1)"},"LINEAR_DENSITY":{"schemaItemType":"Phenomenon","label":"Linear Density","definition":"MASS*LENGTH(-1)"},"SURFACE_DENSITY":{"schemaItemType":"Phenomenon","label":"Surface Density","definition":"MASS*AREA(-1)"},"WORK":{"schemaItemType":"Phenomenon","label":"Work","definition":"FORCE*LENGTH"},"POWER":{"schemaItemType":"Phenomenon","label":"Power","definition":"WORK*TIME(-1)"},"VOLUMETRIC_FLOW":{"schemaItemType":"Phenomenon","label":"Volumetric Flow","definition":"VOLUME*TIME(-1)"},"FLOW_DENSITY_PER_AREA":{"schemaItemType":"Phenomenon","label":"Flow Density per Area","description":"Flow demanded by or discharged to a Water/Sewer network per area.","definition":"VOLUMETRIC_FLOW*AREA(-1)"},"MASS_FLOW":{"schemaItemType":"Phenomenon","label":"Mass Flow","definition":"MASS*TIME(-1)"},"MOLAR_FLOW":{"schemaItemType":"Phenomenon","label":"Molar Flow","definition":"MOLE*TIME(-1)"},"DYNAMIC_VISCOSITY":{"schemaItemType":"Phenomenon","label":"Dynamic Viscosity","definition":"PRESSURE*TIME"},"KINEMATIC_VISCOSITY":{"schemaItemType":"Phenomenon","label":"Kinematic Viscosity","definition":"DYNAMIC_VISCOSITY*DENSITY(-1)"},"ELECTRIC_CHARGE":{"schemaItemType":"Phenomenon","label":"Electric Charge","definition":"CURRENT*TIME"},"ELECTRIC_POTENTIAL":{"schemaItemType":"Phenomenon","label":"Electric Potential","definition":"POWER*CURRENT(-1)"},"LUMINOUS_FLUX":{"schemaItemType":"Phenomenon","label":"Luminous Flux","definition":"LUMINOSITY*SOLIDANGLE"},"ILLUMINANCE":{"schemaItemType":"Phenomenon","label":"Illuminance","definition":"LUMINOUS_FLUX*LENGTH(-2)"},"ROTATIONAL_SPRING_CONSTANT":{"schemaItemType":"Phenomenon","label":"Rotational Spring Constant","definition":"TORQUE*ANGLE(-1)"},"LINEAR_ROTATIONAL_SPRING_CONSTANT":{"schemaItemType":"Phenomenon","label":"Linear Rotational Spring Constant","definition":"FORCE*ANGLE(-1)"},"SPRING_CONSTANT":{"schemaItemType":"Phenomenon","label":"Spring Constant","definition":"FORCE*LENGTH(-1)"},"LINEAR_SPRING_CONSTANT":{"schemaItemType":"Phenomenon","label":"Linear Spring Constant","definition":"SPRING_CONSTANT*LENGTH(-1)"},"AREA_SPRING_CONSTANT":{"schemaItemType":"Phenomenon","label":"Area Spring Constant","definition":"SPRING_CONSTANT*AREA(-1)"},"PIPE_DIAMETER_LENGTH":{"schemaItemType":"Phenomenon","label":"Pipe Diameter-Length","description":"The diameter of a pipe multiplied by its length, used as a coefficient for pipe-infiltration calculations.","definition":"LENGTH*LENGTH"},"THERMAL_CONDUCTIVITY":{"schemaItemType":"Phenomenon","label":"Thermal Conductivity","definition":"POWER*LENGTH(-1)*TEMPERATURE_CHANGE(-1)"},"THERMAL_INSULANCE":{"schemaItemType":"Phenomenon","label":"Thermal Resistance","definition":"AREA*TEMPERATURE_CHANGE*POWER(-1)"},"TEMPERATURE_GRADIENT":{"schemaItemType":"Phenomenon","label":"Temperature Gradient","definition":"TEMPERATURE_CHANGE*LENGTH(-1)"},"MOLAR_VOLUME":{"schemaItemType":"Phenomenon","label":"Molar Volume","definition":"VOLUME*MOLE(-1)"},"MOLAR_CONCENTRATION":{"schemaItemType":"Phenomenon","label":"Molar Concentration","definition":"MOLE*VOLUME(-1)"},"SLOPE":{"schemaItemType":"Phenomenon","label":"Slope","definition":"LENGTH*LENGTH(-1)"},"HEAT_TRANSFER":{"schemaItemType":"Phenomenon","label":"Heat Transfer","description":"https://en.wikipedia.org/wiki/Heat_transfer_coefficient","definition":"POWER*AREA(-1)*TEMPERATURE_CHANGE(-1)"},"HEAT_FLUX_DENSITY":{"schemaItemType":"Phenomenon","label":"Heat Flux Density","description":"https://en.wikipedia.org/wiki/Heat_flux see description of heat flux density","definition":"POWER*AREA(-1)"},"TORSIONAL_WARPING_CONSTANT":{"schemaItemType":"Phenomenon","label":"Torsional Warping Constant","definition":"LENGTH(6)"},"POPULATION_DENSITY":{"schemaItemType":"Phenomenon","label":"Population Density","definition":"CAPITA*AREA(-1)"},"FREQUENCY":{"schemaItemType":"Phenomenon","label":"Frequency","definition":"TIME(-1)"},"LINEAR_LOAD":{"schemaItemType":"Phenomenon","label":"Linear Load","definition":"FORCE*LENGTH(-1)"},"ENERGY_DENSITY":{"schemaItemType":"Phenomenon","label":"Energy Density","definition":"WORK*VOLUME(-1)"},"ELECTRICAL_RESISTANCE":{"schemaItemType":"Phenomenon","label":"Electrical Resistance","definition":"ELECTRIC_POTENTIAL*CURRENT(-1)"},"ELECTRICAL_RESISTIVITY":{"schemaItemType":"Phenomenon","label":"Electrical Resistivity","definition":"ELECTRICAL_RESISTANCE*LENGTH"},"SPECIFIC_ENERGY":{"schemaItemType":"Phenomenon","label":"Specific Energy","definition":"WORK*MASS(-1)"},"SPECIFIC_HEAT_CAPACITY":{"schemaItemType":"Phenomenon","label":"Specific_heat Capacity","definition":"WORK*MASS(-1)*TEMPERATURE_CHANGE(-1)"},"SPECIFIC_HEAT_CAPACITY_MOLAR":{"schemaItemType":"Phenomenon","label":"Specific_heat Capacity Molar","definition":"WORK*MOLE(-1)*TEMPERATURE_CHANGE(-1)"},"PERCENTAGE":{"schemaItemType":"Phenomenon","label":"Percentage","definition":"NUMBER"},"PROBABILITY":{"schemaItemType":"Phenomenon","label":"Probability","definition":"NUMBER"},"LINEAR_RATE":{"schemaItemType":"Phenomenon","label":"Linear Rate","definition":"NUMBER*LENGTH(-1)"},"LINEAR_COEFFICIENT_OF_THERMAL_EXPANSION":{"schemaItemType":"Phenomenon","label":"Linear Coefficient Of Thermal Expansion","definition":"LENGTH*LENGTH(-1)*TEMPERATURE_CHANGE(-1)"},"VOLUME_RATIO":{"schemaItemType":"Phenomenon","label":"Volume Ratio","definition":"VOLUME*VOLUME(-1)"},"LENGTH_RATIO":{"schemaItemType":"Phenomenon","definition":"LENGTH*LENGTH(-1)"},"VOLUME_PER_LENGTH":{"schemaItemType":"Phenomenon","label":"Volume per Unit Length","definition":"VOLUME*LENGTH(-1)"},"LENGTH":{"schemaItemType":"Phenomenon","label":"Length","definition":"LENGTH"},"MASS":{"schemaItemType":"Phenomenon","label":"Mass","definition":"MASS"},"TIME":{"schemaItemType":"Phenomenon","label":"Time","definition":"TIME"},"TEMPERATURE":{"schemaItemType":"Phenomenon","label":"Temperature","definition":"TEMPERATURE"},"TEMPERATURE_CHANGE":{"schemaItemType":"Phenomenon","label":"Temperature Change","definition":"TEMPERATURE_CHANGE"},"CURRENT":{"schemaItemType":"Phenomenon","label":"Current","definition":"CURRENT"},"MOLE":{"schemaItemType":"Phenomenon","label":"Mole","definition":"MOLE"},"LUMINOSITY":{"schemaItemType":"Phenomenon","label":"Luminosity","definition":"LUMINOSITY"},"ANGLE":{"schemaItemType":"Phenomenon","label":"Angle","definition":"ANGLE"},"HORIZONTAL_DIRECTION":{"schemaItemType":"Phenomenon","label":"Horizontal Direction","definition":"HORIZONTAL_DIRECTION"},"SOLIDANGLE":{"schemaItemType":"Phenomenon","label":"Solid Angle","definition":"SOLIDANGLE"},"CURRENCY":{"schemaItemType":"Phenomenon","definition":"CURRENCY"},"CAPITA":{"schemaItemType":"Phenomenon","label":"Capita","definition":"CAPITA"},"NUMBER":{"schemaItemType":"Phenomenon","label":"Number","definition":"NUMBER"},"THREAD_PITCH":{"schemaItemType":"Phenomenon","label":"Thread Pitch","definition":"LENGTH*ANGLE(-1)"},"ENTROPY":{"schemaItemType":"Phenomenon","label":"Entropy","definition":"WORK*TEMPERATURE_CHANGE(-1)"},"LUMINOUS_EFFICACY":{"schemaItemType":"Phenomenon","label":"Luminous Efficacy","definition":"LUMINOUS_FLUX*POWER(-1)"},"MOMENT_DISPLAY_SCALE":{"schemaItemType":"Phenomenon","label":"Moment Scale","description":"Display size of the linear moment","definition":"FORCE(-1)"},"FORCE_DISPLAY_SCALE":{"schemaItemType":"Phenomenon","label":"Force Scale","description":"Display size of the force","definition":"LINEAR_LOAD(-1)"},"PI":{"schemaItemType":"Constant","label":"Pi","phenomenon":"Units.LENGTH_RATIO","definition":"ONE","numerator":3.141592653589793},"QUARTER_PI":{"schemaItemType":"Constant","label":"Pi/4","phenomenon":"Units.LENGTH_RATIO","definition":"PI","numerator":1,"denominator":4},"HALF_PI":{"schemaItemType":"Constant","label":"Pi/2","phenomenon":"Units.LENGTH_RATIO","definition":"PI","numerator":1,"denominator":2},"TWO_PI":{"schemaItemType":"Constant","label":"2Pi","phenomenon":"Units.LENGTH_RATIO","definition":"PI","numerator":2},"DEG360":{"schemaItemType":"Constant","label":"360°","phenomenon":"Units.ANGLE","definition":"ARC_DEG","numerator":360},"STD_G":{"schemaItemType":"Constant","label":"ɡ0","phenomenon":"Units.ACCELERATION","definition":"M*S(-2)","numerator":9.80665},"DECI":{"schemaItemType":"Constant","label":"deci","phenomenon":"Units.NUMBER","definition":"ONE","numerator":0.1},"CENTI":{"schemaItemType":"Constant","label":"centi","phenomenon":"Units.NUMBER","definition":"ONE","numerator":0.01},"MILLI":{"schemaItemType":"Constant","label":"milli","phenomenon":"Units.NUMBER","definition":"ONE","numerator":0.001},"MICRO":{"schemaItemType":"Constant","label":"micro","phenomenon":"Units.NUMBER","definition":"ONE","numerator":0.000001},"NANO":{"schemaItemType":"Constant","label":"nano","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1e-9},"PICO":{"schemaItemType":"Constant","label":"pico","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1e-12},"FEMTO":{"schemaItemType":"Constant","label":"femto","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1e-15},"ATTO":{"schemaItemType":"Constant","label":"atto","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1e-18},"ZEPTO":{"schemaItemType":"Constant","label":"zepto","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1e-21},"YOCTO":{"schemaItemType":"Constant","label":"yocto","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1e-24},"DECA":{"schemaItemType":"Constant","phenomenon":"Units.NUMBER","definition":"ONE","numerator":10},"HECTO":{"schemaItemType":"Constant","label":"hecto","phenomenon":"Units.NUMBER","definition":"ONE","numerator":100},"KILO":{"schemaItemType":"Constant","label":"kilo","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1000},"MEGA":{"schemaItemType":"Constant","label":"mega","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1000000},"GIGA":{"schemaItemType":"Constant","label":"giga","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1000000000},"TERA":{"schemaItemType":"Constant","label":"tera","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1000000000000},"PETA":{"schemaItemType":"Constant","label":"peta","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1000000000000000},"EXA":{"schemaItemType":"Constant","label":"exa","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1000000000000000000},"ZETTA":{"schemaItemType":"Constant","label":"zetta","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1e+21},"YOTTA":{"schemaItemType":"Constant","label":"yotta","phenomenon":"Units.NUMBER","definition":"ONE","numerator":1e+24},"MM":{"schemaItemType":"Unit","label":"mm","phenomenon":"Units.LENGTH","unitSystem":"Units.METRIC","definition":"[MILLI]*M"},"CM":{"schemaItemType":"Unit","label":"cm","phenomenon":"Units.LENGTH","unitSystem":"Units.METRIC","definition":"[CENTI]*M"},"DM":{"schemaItemType":"Unit","label":"dm","phenomenon":"Units.LENGTH","unitSystem":"Units.METRIC","definition":"[DECI]*M"},"KM":{"schemaItemType":"Unit","label":"km","phenomenon":"Units.LENGTH","unitSystem":"Units.METRIC","definition":"[KILO]*M"},"UM":{"schemaItemType":"Unit","label":"µm","phenomenon":"Units.LENGTH","unitSystem":"Units.METRIC","definition":"[MICRO]*M"},"MILLIINCH":{"schemaItemType":"Unit","label":"mil","phenomenon":"Units.LENGTH","unitSystem":"Units.USCUSTOM","definition":"[MILLI]*IN"},"MICROINCH":{"schemaItemType":"Unit","label":"µin","phenomenon":"Units.LENGTH","unitSystem":"Units.USCUSTOM","definition":"[MICRO]*IN"},"MILLIFOOT":{"schemaItemType":"Unit","label":"mft","phenomenon":"Units.LENGTH","unitSystem":"Units.USCUSTOM","definition":"[MILLI]*FT"},"IN":{"schemaItemType":"Unit","label":"in","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix B. Section 3.1, Page B-10","phenomenon":"Units.LENGTH","unitSystem":"Units.USCUSTOM","definition":"MM","numerator":25.4},"FT":{"schemaItemType":"Unit","label":"ft","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 2, Page C-4","phenomenon":"Units.LENGTH","unitSystem":"Units.USCUSTOM","definition":"IN","numerator":12},"YRD":{"schemaItemType":"Unit","label":"yd","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 2, Page C-4","phenomenon":"Units.LENGTH","unitSystem":"Units.USCUSTOM","definition":"FT","numerator":3},"CHAIN":{"schemaItemType":"Unit","label":"chain","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 4, Page C-8","phenomenon":"Units.LENGTH","unitSystem":"Units.USCUSTOM","definition":"FT","numerator":66},"MILE":{"schemaItemType":"Unit","label":"mi","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 4, Page C-8","phenomenon":"Units.LENGTH","unitSystem":"Units.USCUSTOM","definition":"YRD","numerator":1760},"US_SURVEY_IN":{"schemaItemType":"Unit","label":"in (US Survey)","description":"100/3937 Derived from the definition of us survey foot in terms of meters. Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 4, Page C-9","phenomenon":"Units.LENGTH","unitSystem":"Units.USSURVEY","definition":"M","numerator":100,"denominator":3937},"US_SURVEY_FT":{"schemaItemType":"Unit","label":"ft (US Survey)","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 2, Page C-4","phenomenon":"Units.LENGTH","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_IN","numerator":12},"US_SURVEY_YRD":{"schemaItemType":"Unit","label":"yrd (US Survey)","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 2, Page C-4","phenomenon":"Units.LENGTH","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_FT","numerator":3},"US_SURVEY_CHAIN":{"schemaItemType":"Unit","label":"chain (US Survey)","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 4, Page C-8","phenomenon":"Units.LENGTH","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_FT","numerator":66},"US_SURVEY_MILE":{"schemaItemType":"Unit","label":"mi (US Survey)","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 4, Page C-8","phenomenon":"Units.LENGTH","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_YRD","numerator":1760},"NAUT_MILE":{"schemaItemType":"Unit","label":"nmi","description":"International Nautical Mile. Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 2, Page C-4","phenomenon":"Units.LENGTH","unitSystem":"Units.MARITIME","definition":"M","numerator":1852},"G":{"schemaItemType":"Unit","label":"g","phenomenon":"Units.MASS","unitSystem":"Units.METRIC","definition":"[MILLI]*KG"},"MG":{"schemaItemType":"Unit","label":"mg","phenomenon":"Units.MASS","unitSystem":"Units.METRIC","definition":"[MILLI]*G"},"MKG":{"schemaItemType":"Unit","label":"µg","phenomenon":"Units.MASS","unitSystem":"Units.METRIC","definition":"[MICRO]*G"},"NG":{"schemaItemType":"Unit","label":"ng","phenomenon":"Units.MASS","unitSystem":"Units.METRIC","definition":"[NANO]*G"},"MEGAGRAM":{"schemaItemType":"Unit","label":"Mg","phenomenon":"Units.MASS","unitSystem":"Units.METRIC","definition":"[MEGA]*G"},"TONNE":{"schemaItemType":"Unit","label":"tonne","description":"Also known as a metric ton http://phyMETRICcs.nist.gov/cuu/pdf/sp811.pdf, Appendix B.","phenomenon":"Units.MASS","unitSystem":"Units.METRIC","definition":"[KILO]*KG"},"LBM":{"schemaItemType":"Unit","label":"lb","description":"Is Avoirdupois Pound. Exact, http://physics.nist.gov/cuu/pdf/sp811.pdf, Appendix B. Footnote 22","phenomenon":"Units.MASS","unitSystem":"Units.USCUSTOM","definition":"KG","numerator":0.45359237},"SLUG":{"schemaItemType":"Unit","label":"slug","phenomenon":"Units.MASS","unitSystem":"Units.USCUSTOM","definition":"LBF*S(2)*FT(-1)"},"GRM":{"schemaItemType":"Unit","label":"gr","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix B. Section 3.2, Page B-10","phenomenon":"Units.MASS","unitSystem":"Units.USCUSTOM","definition":"LBM","denominator":7000},"SHORT_TON_MASS":{"schemaItemType":"Unit","label":"tn (short)","description":"Exact, http://physics.nist.gov/cuu/pdf/sp811.pdf, Appendix B.","phenomenon":"Units.MASS","unitSystem":"Units.USCUSTOM","definition":"LBM","numerator":2000},"LONG_TON_MASS":{"schemaItemType":"Unit","label":"tn (long)","description":"Exact, http://physics.nist.gov/cuu/pdf/sp811.pdf, Appendix B.","phenomenon":"Units.MASS","unitSystem":"Units.USCUSTOM","definition":"LBM","numerator":2240},"KIPM":{"schemaItemType":"Unit","label":"kipm","description":"Exact, http://physics.nist.gov/cuu/pdf/sp811.pdf, Appendix B.","phenomenon":"Units.MASS","unitSystem":"Units.USCUSTOM","definition":"[KILO]*LBM"},"OZM":{"schemaItemType":"Unit","label":"oz","description":"1/16 Exact, https://en.wikipedia.org/wiki/Ounce","phenomenon":"Units.MASS","unitSystem":"Units.USCUSTOM","definition":"LBM","denominator":16},"MIN":{"schemaItemType":"Unit","label":"min","phenomenon":"Units.TIME","unitSystem":"Units.INTERNATIONAL","definition":"S","numerator":60},"HR":{"schemaItemType":"Unit","label":"h","phenomenon":"Units.TIME","unitSystem":"Units.INTERNATIONAL","definition":"MIN","numerator":60},"DAY":{"schemaItemType":"Unit","label":"days","phenomenon":"Units.TIME","unitSystem":"Units.INTERNATIONAL","definition":"HR","numerator":24},"WEEK":{"schemaItemType":"Unit","label":"week","phenomenon":"Units.TIME","unitSystem":"Units.INTERNATIONAL","definition":"DAY","numerator":7},"YR":{"schemaItemType":"Unit","label":"years","description":"http://physics.nist.gov/cuu/pdf/sp811.pdf, Appendix B. Year is 3.1536 E+07 seconds which is equal to 365 * 24 * 60 * 60","phenomenon":"Units.TIME","unitSystem":"Units.INTERNATIONAL","definition":"DAY","numerator":365},"YEAR_SIDEREAL":{"schemaItemType":"Unit","label":"Year (Sidereal)","description":"http://physics.nist.gov/cuu/pdf/sp811.pdf, Appendix B.","phenomenon":"Units.TIME","unitSystem":"Units.INTERNATIONAL","definition":"S","numerator":31558150},"YEAR_TROPICAL":{"schemaItemType":"Unit","label":"Year (Tropical)","description":"http://physics.nist.gov/cuu/pdf/sp811.pdf, Appendix B.","phenomenon":"Units.TIME","unitSystem":"Units.INTERNATIONAL","definition":"S","numerator":31556930},"MS":{"schemaItemType":"Unit","label":"ms","phenomenon":"Units.TIME","unitSystem":"Units.INTERNATIONAL","definition":"[MILLI]*S"},"MKS":{"schemaItemType":"Unit","label":"µs","phenomenon":"Units.TIME","unitSystem":"Units.INTERNATIONAL","definition":"[MICRO]*S"},"CELSIUS":{"schemaItemType":"Unit","label":"°C","phenomenon":"Units.TEMPERATURE","unitSystem":"Units.METRIC","definition":"K","offset":273.15},"FAHRENHEIT":{"schemaItemType":"Unit","label":"°F","description":"Factor is 5/9","phenomenon":"Units.TEMPERATURE","unitSystem":"Units.USCUSTOM","definition":"CELSIUS","numerator":5,"denominator":9,"offset":-32},"RANKINE":{"schemaItemType":"Unit","label":"°R","description":"Factor is 5/9","phenomenon":"Units.TEMPERATURE","unitSystem":"Units.USCUSTOM","definition":"K","numerator":5,"denominator":9},"DELTA_CELSIUS":{"schemaItemType":"Unit","label":"Δ°C","phenomenon":"Units.TEMPERATURE_CHANGE","unitSystem":"Units.METRIC","definition":"DELTA_KELVIN"},"DELTA_FAHRENHEIT":{"schemaItemType":"Unit","label":"Δ°F","description":"Factor is 5/9","phenomenon":"Units.TEMPERATURE_CHANGE","unitSystem":"Units.USCUSTOM","definition":"DELTA_CELSIUS","numerator":5,"denominator":9},"DELTA_RANKINE":{"schemaItemType":"Unit","label":"Δ°R","description":"Factor is 5/9","phenomenon":"Units.TEMPERATURE_CHANGE","unitSystem":"Units.USCUSTOM","definition":"DELTA_KELVIN","numerator":5,"denominator":9},"KELVIN_PER_M":{"schemaItemType":"Unit","label":"ΔK/m","phenomenon":"Units.TEMPERATURE_GRADIENT","unitSystem":"Units.SI","definition":"DELTA_KELVIN*M(-1)"},"STRAIN_PER_KELVIN":{"schemaItemType":"Unit","label":"1/ΔK","phenomenon":"Units.LINEAR_COEFFICIENT_OF_THERMAL_EXPANSION","unitSystem":"Units.SI","definition":"DELTA_KELVIN(-1)"},"STRAIN_PER_CELSIUS":{"schemaItemType":"Unit","label":"1/Δ°C","phenomenon":"Units.LINEAR_COEFFICIENT_OF_THERMAL_EXPANSION","unitSystem":"Units.METRIC","definition":"DELTA_CELSIUS(-1)"},"STRAIN_PER_FAHRENHEIT":{"schemaItemType":"Unit","label":"1/Δ°F","phenomenon":"Units.LINEAR_COEFFICIENT_OF_THERMAL_EXPANSION","unitSystem":"Units.USCUSTOM","definition":"DELTA_FAHRENHEIT(-1)"},"STRAIN_PER_RANKINE":{"schemaItemType":"Unit","label":"1/Δ°R","phenomenon":"Units.LINEAR_COEFFICIENT_OF_THERMAL_EXPANSION","unitSystem":"Units.USCUSTOM","definition":"DELTA_RANKINE(-1)"},"LUMEN":{"schemaItemType":"Unit","label":"lm","phenomenon":"Units.LUMINOUS_FLUX","unitSystem":"Units.SI","definition":"CD*STERAD"},"LUX":{"schemaItemType":"Unit","label":"lx","phenomenon":"Units.ILLUMINANCE","unitSystem":"Units.SI","definition":"LUMEN*M(-2)"},"LUMEN_PER_SQ_FT":{"schemaItemType":"Unit","label":"lm/ft²","phenomenon":"Units.ILLUMINANCE","unitSystem":"Units.USCUSTOM","definition":"LUMEN*FT(-2)"},"KMOL":{"schemaItemType":"Unit","label":"kmol","phenomenon":"Units.MOLE","unitSystem":"Units.METRIC","definition":"[KILO]*MOL"},"LB_MOL":{"schemaItemType":"Unit","label":"lb-mol","description":"ASTM SI 10 standard SI1-.phhc8328.pdf page 29, 35 and http://en.wikipedia.org/wiki/Mole_%28unit%29","phenomenon":"Units.MOLE","unitSystem":"Units.USCUSTOM","definition":"MOL","numerator":453.59237},"HUNDRED_PERSON":{"schemaItemType":"Unit","phenomenon":"Units.CAPITA","unitSystem":"Units.STATISTICS","definition":"[HECTO]*PERSON"},"THOUSAND_PERSON":{"schemaItemType":"Unit","phenomenon":"Units.CAPITA","unitSystem":"Units.STATISTICS","definition":"[KILO]*PERSON"},"N_M_PER_RAD":{"schemaItemType":"Unit","label":"N·m/rad","phenomenon":"Units.ROTATIONAL_SPRING_CONSTANT","unitSystem":"Units.SI","definition":"N_M*RAD(-1)"},"KN_M_PER_RAD":{"schemaItemType":"Unit","label":"kN·m/rad","phenomenon":"Units.ROTATIONAL_SPRING_CONSTANT","unitSystem":"Units.METRIC","definition":"KN_M*RAD(-1)"},"N_M_PER_DEG":{"schemaItemType":"Unit","label":"N·m/deg","phenomenon":"Units.ROTATIONAL_SPRING_CONSTANT","unitSystem":"Units.METRIC","definition":"N_M*ARC_DEG(-1)"},"KN_M_PER_DEG":{"schemaItemType":"Unit","label":"kN·m/deg","phenomenon":"Units.ROTATIONAL_SPRING_CONSTANT","unitSystem":"Units.METRIC","definition":"KN_M*ARC_DEG(-1)"},"KPF_FT_PER_RAD":{"schemaItemType":"Unit","label":"kpf·ft/rad","phenomenon":"Units.ROTATIONAL_SPRING_CONSTANT","unitSystem":"Units.USCUSTOM","definition":"KPF_FT*RAD(-1)"},"KPF_FT_PER_DEG":{"schemaItemType":"Unit","label":"kpf·ft/deg","phenomenon":"Units.ROTATIONAL_SPRING_CONSTANT","unitSystem":"Units.USCUSTOM","definition":"KPF_FT*ARC_DEG(-1)"},"N_PER_RAD":{"schemaItemType":"Unit","label":"N/rad","phenomenon":"Units.LINEAR_ROTATIONAL_SPRING_CONSTANT","unitSystem":"Units.SI","definition":"N*RAD(-1)"},"KN_PER_RAD":{"schemaItemType":"Unit","label":"kN/rad","phenomenon":"Units.LINEAR_ROTATIONAL_SPRING_CONSTANT","unitSystem":"Units.METRIC","definition":"KN*RAD(-1)"},"KPF_PER_RAD":{"schemaItemType":"Unit","label":"kpf/rad","phenomenon":"Units.LINEAR_ROTATIONAL_SPRING_CONSTANT","unitSystem":"Units.USCUSTOM","definition":"KPF*RAD(-1)"},"SPRING_CONSTANT_N_PER_M":{"schemaItemType":"Unit","label":"N/m","phenomenon":"Units.SPRING_CONSTANT","unitSystem":"Units.SI","definition":"N*M(-1)"},"SPRING_CONSTANT_KN_PER_M":{"schemaItemType":"Unit","label":"kN/m","phenomenon":"Units.SPRING_CONSTANT","unitSystem":"Units.METRIC","definition":"KN*M(-1)"},"SPRING_CONSTANT_KPF_PER_FT":{"schemaItemType":"Unit","label":"kpf/ft","phenomenon":"Units.SPRING_CONSTANT","unitSystem":"Units.USCUSTOM","definition":"KPF*FT(-1)"},"LINEAR_SPRING_CONSTANT_N_PER_SQ_M":{"schemaItemType":"Unit","label":"N/m²","phenomenon":"Units.LINEAR_SPRING_CONSTANT","unitSystem":"Units.SI","definition":"SPRING_CONSTANT_N_PER_M*M(-1)"},"LINEAR_SPRING_CONSTANT_KN_PER_SQ_M":{"schemaItemType":"Unit","label":"kN/m²","phenomenon":"Units.LINEAR_SPRING_CONSTANT","unitSystem":"Units.METRIC","definition":"SPRING_CONSTANT_KN_PER_M*M(-1)"},"LINEAR_SPRING_CONSTANT_KPF_PER_SQ_FT":{"schemaItemType":"Unit","label":"kpf/ft²","phenomenon":"Units.LINEAR_SPRING_CONSTANT","unitSystem":"Units.USCUSTOM","definition":"SPRING_CONSTANT_KPF_PER_FT*FT(-1)"},"AREA_SPRING_CONSTANT_N_PER_CUB_M":{"schemaItemType":"Unit","label":"N/m³","phenomenon":"Units.AREA_SPRING_CONSTANT","unitSystem":"Units.SI","definition":"SPRING_CONSTANT_N_PER_M*SQ_M(-1)"},"AREA_SPRING_CONSTANT_KN_PER_CUB_M":{"schemaItemType":"Unit","label":"kN/m³","phenomenon":"Units.AREA_SPRING_CONSTANT","unitSystem":"Units.METRIC","definition":"SPRING_CONSTANT_KN_PER_M*SQ_M(-1)"},"AREA_SPRING_CONSTANT_KPF_PER_CUB_FT":{"schemaItemType":"Unit","label":"kpf/ft³","phenomenon":"Units.AREA_SPRING_CONSTANT","unitSystem":"Units.USCUSTOM","definition":"SPRING_CONSTANT_KPF_PER_FT*SQ_FT(-1)"},"M_PER_SEC_SQ":{"schemaItemType":"Unit","label":"m/sec²","phenomenon":"Units.ACCELERATION","unitSystem":"Units.SI","definition":"M*S(-2)"},"CM_PER_SEC_SQ":{"schemaItemType":"Unit","label":"cm/sec²","phenomenon":"Units.ACCELERATION","unitSystem":"Units.METRIC","definition":"CM*S(-2)"},"FT_PER_SEC_SQ":{"schemaItemType":"Unit","label":"ft/sec²","phenomenon":"Units.ACCELERATION","unitSystem":"Units.USCUSTOM","definition":"FT*S(-2)"},"ARC_DEG":{"schemaItemType":"Unit","label":"°","description":"1/180","phenomenon":"Units.ANGLE","unitSystem":"Units.METRIC","definition":"[PI]*RAD","denominator":180},"ARC_MINUTE":{"schemaItemType":"Unit","label":"\'","description":"1/60","phenomenon":"Units.ANGLE","unitSystem":"Units.METRIC","definition":"ARC_DEG","denominator":60},"ARC_SECOND":{"schemaItemType":"Unit","label":"\'\'","description":"1/3600","phenomenon":"Units.ANGLE","unitSystem":"Units.METRIC","definition":"ARC_DEG","denominator":3600},"ARC_QUADRANT":{"schemaItemType":"Unit","label":"quadrants","phenomenon":"Units.ANGLE","unitSystem":"Units.METRIC","definition":"[HALF_PI]*RAD"},"GRAD":{"schemaItemType":"Unit","label":"grad","description":"1/200","phenomenon":"Units.ANGLE","unitSystem":"Units.METRIC","definition":"[PI]*RAD","denominator":200},"REVOLUTION":{"schemaItemType":"Unit","label":"r","phenomenon":"Units.ANGLE","unitSystem":"Units.METRIC","definition":"[TWO_PI]*RAD"},"HORIZONTAL_DIR_ARC_DEG":{"schemaItemType":"Unit","label":"°","description":"1/180","phenomenon":"Units.HORIZONTAL_DIRECTION","unitSystem":"Units.METRIC","definition":"[PI]*HORIZONTAL_DIR_RAD","denominator":180},"HORIZONTAL_DIR_ARC_MINUTE":{"schemaItemType":"Unit","label":"\'","description":"1/60","phenomenon":"Units.HORIZONTAL_DIRECTION","unitSystem":"Units.METRIC","definition":"HORIZONTAL_DIR_ARC_DEG","denominator":60},"HORIZONTAL_DIR_ARC_SECOND":{"schemaItemType":"Unit","label":"\'\'","description":"1/3600","phenomenon":"Units.HORIZONTAL_DIRECTION","unitSystem":"Units.METRIC","definition":"HORIZONTAL_DIR_ARC_DEG","denominator":3600},"HORIZONTAL_DIR_GRAD":{"schemaItemType":"Unit","label":"grad","description":"1/200","phenomenon":"Units.HORIZONTAL_DIRECTION","unitSystem":"Units.METRIC","definition":"[PI]*HORIZONTAL_DIR_RAD","denominator":200},"HORIZONTAL_DIR_MILLIRAD":{"schemaItemType":"Unit","label":"mrad","description":"1/1000","phenomenon":"Units.HORIZONTAL_DIRECTION","unitSystem":"Units.METRIC","definition":"[PI]*HORIZONTAL_DIR_RAD","denominator":1000},"HORIZONTAL_DIR_REVOLUTION":{"schemaItemType":"Unit","label":"r","phenomenon":"Units.HORIZONTAL_DIRECTION","unitSystem":"Units.METRIC","definition":"[TWO_PI]*HORIZONTAL_DIR_RAD"},"SQ_M":{"schemaItemType":"Unit","label":"m²","phenomenon":"Units.AREA","unitSystem":"Units.SI","definition":"M(2)"},"SQ_UM":{"schemaItemType":"Unit","label":"um²","phenomenon":"Units.AREA","unitSystem":"Units.METRIC","definition":"UM(2)"},"SQ_MM":{"schemaItemType":"Unit","label":"mm²","phenomenon":"Units.AREA","unitSystem":"Units.METRIC","definition":"MM(2)"},"SQ_CM":{"schemaItemType":"Unit","label":"cm²","phenomenon":"Units.AREA","unitSystem":"Units.METRIC","definition":"CM(2)"},"SQ_DM":{"schemaItemType":"Unit","label":"dm²","phenomenon":"Units.AREA","unitSystem":"Units.METRIC","definition":"DM(2)"},"SQ_KM":{"schemaItemType":"Unit","label":"km²","phenomenon":"Units.AREA","unitSystem":"Units.METRIC","definition":"KM(2)"},"ARE":{"schemaItemType":"Unit","label":"are","phenomenon":"Units.AREA","unitSystem":"Units.METRIC","definition":"[HECTO]*M(2)"},"HECTARE":{"schemaItemType":"Unit","label":"ha","phenomenon":"Units.AREA","unitSystem":"Units.METRIC","definition":"[HECTO]*ARE"},"SQ_IN":{"schemaItemType":"Unit","label":"in²","phenomenon":"Units.AREA","unitSystem":"Units.USCUSTOM","definition":"IN(2)"},"SQ_FT":{"schemaItemType":"Unit","label":"ft²","phenomenon":"Units.AREA","unitSystem":"Units.USCUSTOM","definition":"FT(2)"},"THOUSAND_SQ_FT":{"schemaItemType":"Unit","label":"thousand ft²","phenomenon":"Units.AREA","unitSystem":"Units.USCUSTOM","definition":"[KILO]*FT(2)"},"SQ_YRD":{"schemaItemType":"Unit","label":"yd²","phenomenon":"Units.AREA","unitSystem":"Units.USCUSTOM","definition":"YRD(2)"},"SQ_MILE":{"schemaItemType":"Unit","label":"mi²","phenomenon":"Units.AREA","unitSystem":"Units.USCUSTOM","definition":"MILE(2)"},"SQ_CHAIN":{"schemaItemType":"Unit","label":"chain²","phenomenon":"Units.AREA","unitSystem":"Units.USCUSTOM","definition":"CHAIN(2)"},"ACRE":{"schemaItemType":"Unit","label":"acres","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 4, Page C-9","phenomenon":"Units.AREA","unitSystem":"Units.USCUSTOM","definition":"CHAIN(2)","numerator":10},"SQ_US_SURVEY_IN":{"schemaItemType":"Unit","label":"in² (US Survey)","phenomenon":"Units.AREA","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_IN(2)"},"SQ_US_SURVEY_FT":{"schemaItemType":"Unit","label":"ft² (US Survey)","phenomenon":"Units.AREA","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_FT(2)"},"SQ_US_SURVEY_YRD":{"schemaItemType":"Unit","label":"yrd² (US Survey)","phenomenon":"Units.AREA","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_YRD(2)"},"SQ_US_SURVEY_MILE":{"schemaItemType":"Unit","label":"mile² (US Survey)","phenomenon":"Units.AREA","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_MILE(2)"},"SQ_US_SURVEY_CHAIN":{"schemaItemType":"Unit","label":"chain² (US Survey)","phenomenon":"Units.AREA","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_CHAIN(2)"},"US_SURVEY_ACRE":{"schemaItemType":"Unit","label":"acre (US Survey)","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 4, Page C-9","phenomenon":"Units.AREA","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_CHAIN(2)","numerator":10},"IN_MILE":{"schemaItemType":"Unit","label":"in·mi","phenomenon":"Units.PIPE_DIAMETER_LENGTH","unitSystem":"Units.INDUSTRIAL","definition":"IN*MILE"},"FT_MILE":{"schemaItemType":"Unit","label":"ft·mi","phenomenon":"Units.PIPE_DIAMETER_LENGTH","unitSystem":"Units.INDUSTRIAL","definition":"FT*MILE"},"FT_FT":{"schemaItemType":"Unit","label":"ft·ft","phenomenon":"Units.PIPE_DIAMETER_LENGTH","unitSystem":"Units.INDUSTRIAL","definition":"FT*FT"},"IN_FT":{"schemaItemType":"Unit","label":"in·ft","phenomenon":"Units.PIPE_DIAMETER_LENGTH","unitSystem":"Units.INDUSTRIAL","definition":"IN*FT"},"IN_M":{"schemaItemType":"Unit","label":"in·m","phenomenon":"Units.PIPE_DIAMETER_LENGTH","unitSystem":"Units.INDUSTRIAL","definition":"IN*M"},"MM_KM":{"schemaItemType":"Unit","label":"mm·km","phenomenon":"Units.PIPE_DIAMETER_LENGTH","unitSystem":"Units.INDUSTRIAL","definition":"MM*KM"},"MM_M":{"schemaItemType":"Unit","label":"mm·m","phenomenon":"Units.PIPE_DIAMETER_LENGTH","unitSystem":"Units.INDUSTRIAL","definition":"MM*M"},"MM_MILE":{"schemaItemType":"Unit","label":"mm·mi","phenomenon":"Units.PIPE_DIAMETER_LENGTH","unitSystem":"Units.INDUSTRIAL","definition":"MM*MILE"},"M_KM":{"schemaItemType":"Unit","label":"m·km","phenomenon":"Units.PIPE_DIAMETER_LENGTH","unitSystem":"Units.INDUSTRIAL","definition":"M*KM"},"M_M":{"schemaItemType":"Unit","label":"m·m","phenomenon":"Units.PIPE_DIAMETER_LENGTH","unitSystem":"Units.SI","definition":"M*M"},"KG_PER_CUB_M":{"schemaItemType":"Unit","label":"kg/m³","phenomenon":"Units.DENSITY","unitSystem":"Units.SI","definition":"KG*M(-3)"},"KG_PER_CUB_CM":{"schemaItemType":"Unit","label":"kg/cm³","phenomenon":"Units.DENSITY","unitSystem":"Units.METRIC","definition":"KG*CM(-3)"},"KG_PER_LITRE":{"schemaItemType":"Unit","label":"kg/dm³","phenomenon":"Units.DENSITY","unitSystem":"Units.METRIC","definition":"KG*DM(-3)"},"G_PER_CUB_CM":{"schemaItemType":"Unit","label":"g/cm³","phenomenon":"Units.DENSITY","unitSystem":"Units.METRIC","definition":"G*CM(-3)"},"MKG_PER_LITRE":{"schemaItemType":"Unit","label":"µg/L","phenomenon":"Units.DENSITY","unitSystem":"Units.METRIC","definition":"MKG*DM(-3)"},"MG_PER_LITRE":{"schemaItemType":"Unit","label":"mg/L","phenomenon":"Units.DENSITY","unitSystem":"Units.METRIC","definition":"MG*DM(-3)"},"LBM_PER_CUB_FT":{"schemaItemType":"Unit","label":"lb/ft³","phenomenon":"Units.DENSITY","unitSystem":"Units.USCUSTOM","definition":"LBM*FT(-3)"},"LBM_PER_GALLON":{"schemaItemType":"Unit","label":"lb/gal","phenomenon":"Units.DENSITY","unitSystem":"Units.USCUSTOM","definition":"LBM*GALLON(-1)"},"LBM_PER_GALLON_IMPERIAL":{"schemaItemType":"Unit","label":"lb/gal (imp)","phenomenon":"Units.DENSITY","unitSystem":"Units.IMPERIAL","definition":"LBM*GALLON_IMPERIAL(-1)"},"LBM_PER_CUB_IN":{"schemaItemType":"Unit","label":"lb/in³","phenomenon":"Units.DENSITY","unitSystem":"Units.USCUSTOM","definition":"LBM*IN(-3)"},"LBM_PER_MILLION_GALLON":{"schemaItemType":"Unit","label":"lb/million gal","phenomenon":"Units.DENSITY","unitSystem":"Units.USCUSTOM","definition":"LBM*[MEGA](-1)*GALLON(-1)"},"SLUG_PER_CUB_FT":{"schemaItemType":"Unit","label":"slug/ft³","phenomenon":"Units.DENSITY","unitSystem":"Units.USCUSTOM","definition":"SLUG*FT(-3)"},"KIP_PER_CUB_FT":{"schemaItemType":"Unit","label":"kip/ft³","phenomenon":"Units.DENSITY","unitSystem":"Units.USCUSTOM","definition":"KIPM*FT(-3)"},"SHORT_TON_PER_CUB_FT":{"schemaItemType":"Unit","label":"tn (short)/ft³","phenomenon":"Units.DENSITY","unitSystem":"Units.USCUSTOM","definition":"SHORT_TON_MASS*FT(-3)"},"N_PER_CUB_M":{"schemaItemType":"Unit","label":"N/m³","phenomenon":"Units.FORCE_DENSITY","unitSystem":"Units.SI","definition":"N*M(-3)"},"KN_PER_CUB_M":{"schemaItemType":"Unit","label":"kN/m³","phenomenon":"Units.FORCE_DENSITY","unitSystem":"Units.METRIC","definition":"[KILO]*N*M(-3)"},"KPF_PER_CUB_FT":{"schemaItemType":"Unit","label":"kpf/ft³","phenomenon":"Units.FORCE_DENSITY","unitSystem":"Units.USCUSTOM","definition":"KPF*FT(-3)"},"N_PER_CUB_FT":{"schemaItemType":"Unit","label":"N/ft³","phenomenon":"Units.FORCE_DENSITY","unitSystem":"Units.USCUSTOM","definition":"N*FT(-3)"},"KN_PER_CUB_FT":{"schemaItemType":"Unit","label":"kN/ft³","phenomenon":"Units.FORCE_DENSITY","unitSystem":"Units.USCUSTOM","definition":"[KILO]*N*FT(-3)"},"PERSON_PER_SQ_M":{"schemaItemType":"Unit","label":"p/m²","phenomenon":"Units.POPULATION_DENSITY","unitSystem":"Units.SI","definition":"PERSON*M(-2)"},"PERSON_PER_HECTARE":{"schemaItemType":"Unit","label":"p/ha","phenomenon":"Units.POPULATION_DENSITY","unitSystem":"Units.METRIC","definition":"PERSON*HECTARE(-1)"},"PERSON_PER_SQ_KM":{"schemaItemType":"Unit","label":"p/km²","phenomenon":"Units.POPULATION_DENSITY","unitSystem":"Units.METRIC","definition":"PERSON*KM(-2)"},"PERSON_PER_ACRE":{"schemaItemType":"Unit","label":"p/acre","phenomenon":"Units.POPULATION_DENSITY","unitSystem":"Units.USCUSTOM","definition":"PERSON*ACRE(-1)"},"PERSON_PER_SQ_FT":{"schemaItemType":"Unit","label":"p/ft²","phenomenon":"Units.POPULATION_DENSITY","unitSystem":"Units.USCUSTOM","definition":"PERSON*FT(-2)"},"PERSON_PER_SQ_MILE":{"schemaItemType":"Unit","label":"p/mi²","phenomenon":"Units.POPULATION_DENSITY","unitSystem":"Units.USCUSTOM","definition":"PERSON*MILE(-2)"},"KILOAMPERE":{"schemaItemType":"Unit","label":"KA","phenomenon":"Units.CURRENT","unitSystem":"Units.METRIC","definition":"[KILO]*A"},"MILLIAMPERE":{"schemaItemType":"Unit","label":"mA","phenomenon":"Units.CURRENT","unitSystem":"Units.METRIC","definition":"[MILLI]*A"},"MICROAMPERE":{"schemaItemType":"Unit","label":"µA","phenomenon":"Units.CURRENT","unitSystem":"Units.METRIC","definition":"[MICRO]*A"},"COULOMB":{"schemaItemType":"Unit","label":"C","phenomenon":"Units.ELECTRIC_CHARGE","unitSystem":"Units.SI","definition":"A*S"},"VOLT":{"schemaItemType":"Unit","label":"V","phenomenon":"Units.ELECTRIC_POTENTIAL","unitSystem":"Units.SI","definition":"N*M*COULOMB(-1)"},"KILOVOLT":{"schemaItemType":"Unit","label":"KV","phenomenon":"Units.ELECTRIC_POTENTIAL","unitSystem":"Units.METRIC","definition":"[KILO]*VOLT"},"MEGAVOLT":{"schemaItemType":"Unit","label":"MV","phenomenon":"Units.ELECTRIC_POTENTIAL","unitSystem":"Units.METRIC","definition":"[MEGA]*VOLT"},"J":{"schemaItemType":"Unit","phenomenon":"Units.WORK","unitSystem":"Units.SI","definition":"N*M"},"KJ":{"schemaItemType":"Unit","label":"kJ","phenomenon":"Units.WORK","unitSystem":"Units.METRIC","definition":"[KILO]*J"},"MEGAJ":{"schemaItemType":"Unit","label":"MJ","phenomenon":"Units.WORK","unitSystem":"Units.METRIC","definition":"[MEGA]*J"},"GJ":{"schemaItemType":"Unit","phenomenon":"Units.WORK","unitSystem":"Units.METRIC","definition":"[GIGA]*J"},"FT_PDL":{"schemaItemType":"Unit","label":"ft*pdl","phenomenon":"Units.WORK","unitSystem":"Units.USCUSTOM","definition":"PDL*FT"},"BTU":{"schemaItemType":"Unit","label":"Btu","description":"Is IT BTU. http://physics.nist.gov/cuu/pdf/sp811.pdf, Appendix B. See foot note #9: ","phenomenon":"Units.WORK","unitSystem":"Units.INTERNATIONAL","definition":"J","numerator":1055.05585262},"KILOBTU":{"schemaItemType":"Unit","label":"kBtu","phenomenon":"Units.WORK","unitSystem":"Units.USCUSTOM","definition":"[KILO]*BTU"},"WATT_SECOND":{"schemaItemType":"Unit","label":"Ws","phenomenon":"Units.WORK","unitSystem":"Units.INTERNATIONAL","definition":"W*S"},"KWH":{"schemaItemType":"Unit","label":"kW·h","phenomenon":"Units.WORK","unitSystem":"Units.INTERNATIONAL","definition":"KW*HR"},"MEGAWH":{"schemaItemType":"Unit","label":"MWh","phenomenon":"Units.WORK","unitSystem":"Units.INTERNATIONAL","definition":"MEGAW*HR"},"GWH":{"schemaItemType":"Unit","label":"GWh","phenomenon":"Units.WORK","unitSystem":"Units.INTERNATIONAL","definition":"GW*HR"},"J_PER_CUB_M":{"schemaItemType":"Unit","label":"J/m³","phenomenon":"Units.ENERGY_DENSITY","unitSystem":"Units.SI","definition":"J*M(-3)"},"KJ_PER_CUB_M":{"schemaItemType":"Unit","label":"kJ/m³","phenomenon":"Units.ENERGY_DENSITY","unitSystem":"Units.METRIC","definition":"KJ*M(-3)"},"KWH_PER_CUB_M":{"schemaItemType":"Unit","label":"kW·h/m³","phenomenon":"Units.ENERGY_DENSITY","unitSystem":"Units.METRIC","definition":"KWH*M(-3)"},"KWH_PER_CUB_FT":{"schemaItemType":"Unit","label":"kWh/ft³","phenomenon":"Units.ENERGY_DENSITY","unitSystem":"Units.USCUSTOM","definition":"KWH*FT(-3)"},"KWH_PER_MILLION_GALLON":{"schemaItemType":"Unit","label":"kW·h/million gal","phenomenon":"Units.ENERGY_DENSITY","unitSystem":"Units.USCUSTOM","definition":"KWH*[MEGA](-1)*GALLON(-1)"},"J_PER_KG":{"schemaItemType":"Unit","label":"J/kg","phenomenon":"Units.SPECIFIC_ENERGY","unitSystem":"Units.SI","definition":"J*KG(-1)"},"KJ_PER_KG":{"schemaItemType":"Unit","label":"kJ/kg","phenomenon":"Units.SPECIFIC_ENERGY","unitSystem":"Units.METRIC","definition":"KJ*KG(-1)"},"MEGAJ_PER_KG":{"schemaItemType":"Unit","label":"MJ/kg","phenomenon":"Units.SPECIFIC_ENERGY","unitSystem":"Units.METRIC","definition":"MEGAJ*KG(-1)"},"BTU_PER_LBM":{"schemaItemType":"Unit","label":"Btu/lb","phenomenon":"Units.SPECIFIC_ENERGY","unitSystem":"Units.USCUSTOM","definition":"BTU*LBM(-1)"},"J_PER_KG_K":{"schemaItemType":"Unit","label":"J/(kg·ΔK)","phenomenon":"Units.SPECIFIC_HEAT_CAPACITY","unitSystem":"Units.SI","definition":"J*KG(-1)*DELTA_KELVIN(-1)"},"BTU_PER_LBM_RANKINE":{"schemaItemType":"Unit","label":"Btu/(lbm·Δ°R)","phenomenon":"Units.SPECIFIC_HEAT_CAPACITY","unitSystem":"Units.USCUSTOM","definition":"BTU*LBM(-1)*DELTA_RANKINE(-1)"},"J_PER_G_CELSIUS":{"schemaItemType":"Unit","label":"J/(g·Δ°C)","phenomenon":"Units.SPECIFIC_HEAT_CAPACITY","unitSystem":"Units.METRIC","definition":"J*G(-1)*DELTA_CELSIUS(-1)"},"J_PER_MOL_K":{"schemaItemType":"Unit","label":"J/(mol*K)","phenomenon":"Units.SPECIFIC_HEAT_CAPACITY_MOLAR","unitSystem":"Units.SI","definition":"J*MOL(-1)*DELTA_KELVIN(-1)"},"J_PER_KMOL_K":{"schemaItemType":"Unit","label":"J/(kmol·ΔK)","phenomenon":"Units.SPECIFIC_HEAT_CAPACITY_MOLAR","unitSystem":"Units.METRIC","definition":"J*KMOL(-1)*DELTA_KELVIN(-1)"},"KJ_PER_KMOL_K":{"schemaItemType":"Unit","label":"kJ/(kmol·ΔK)","phenomenon":"Units.SPECIFIC_HEAT_CAPACITY_MOLAR","unitSystem":"Units.METRIC","definition":"KJ*KMOL(-1)*DELTA_KELVIN(-1)"},"BTU_PER_LB_MOL_RANKINE":{"schemaItemType":"Unit","label":"Btu/(lb-mol·Δ°R)","phenomenon":"Units.SPECIFIC_HEAT_CAPACITY_MOLAR","unitSystem":"Units.USCUSTOM","definition":"BTU*LB_MOL(-1)*DELTA_RANKINE(-1)"},"CUB_M_PER_SEC":{"schemaItemType":"Unit","label":"m³/s","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.SI","definition":"M(3)*S(-1)"},"CUB_M_PER_MIN":{"schemaItemType":"Unit","label":"m³/min","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.METRIC","definition":"M(3)*MIN(-1)"},"CUB_M_PER_HR":{"schemaItemType":"Unit","label":"m³/h","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.METRIC","definition":"M(3)*HR(-1)"},"CUB_M_PER_DAY":{"schemaItemType":"Unit","label":"m³/day","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.METRIC","definition":"M(3)*DAY(-1)"},"LITRE_PER_SEC":{"schemaItemType":"Unit","label":"L/s","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.METRIC","definition":"LITRE*S(-1)"},"LITRE_PER_MIN":{"schemaItemType":"Unit","label":"L/min","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.METRIC","definition":"LITRE*MIN(-1)"},"LITRE_PER_HR":{"schemaItemType":"Unit","label":"L/h","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.METRIC","definition":"LITRE*HR(-1)"},"LITRE_PER_DAY":{"schemaItemType":"Unit","label":"L/day","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.METRIC","definition":"LITRE*DAY(-1)"},"CUB_IN_PER_SEC":{"schemaItemType":"Unit","label":"in³/sec","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"CUB_IN*S(-1)"},"CUB_IN_PER_MIN":{"schemaItemType":"Unit","label":"in³/min","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"CUB_IN*MIN(-1)"},"CUB_FT_PER_SEC":{"schemaItemType":"Unit","label":"ft³/s","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"CUB_FT*S(-1)"},"CUB_FT_PER_MIN":{"schemaItemType":"Unit","label":"ft³/min","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"CUB_FT*MIN(-1)"},"CUB_FT_PER_DAY":{"schemaItemType":"Unit","label":"ft³/day","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"CUB_FT*DAY(-1)"},"ACRE_FT_PER_DAY":{"schemaItemType":"Unit","label":"acre·ft/day","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"ACRE_FT*DAY(-1)"},"ACRE_FT_PER_HR":{"schemaItemType":"Unit","label":"acre·ft/h","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"ACRE_FT*HR(-1)"},"ACRE_FT_PER_MIN":{"schemaItemType":"Unit","label":"acre·ft/min","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"ACRE_FT*MIN(-1)"},"ACRE_IN_PER_DAY":{"schemaItemType":"Unit","label":"acre_in/day","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"ACRE_IN*DAY(-1)"},"ACRE_IN_PER_HR":{"schemaItemType":"Unit","label":"acre·in/h","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"ACRE_IN*HR(-1)"},"ACRE_IN_PER_MIN":{"schemaItemType":"Unit","label":"acre·in/min","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"ACRE_IN*MIN(-1)"},"GALLON_IMPERIAL_PER_SEC":{"schemaItemType":"Unit","label":"gal (imp)/s","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.IMPERIAL","definition":"GALLON_IMPERIAL*S(-1)"},"GALLON_IMPERIAL_PER_MIN":{"schemaItemType":"Unit","label":"gal (imp)/min","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.IMPERIAL","definition":"GALLON_IMPERIAL*MIN(-1)"},"GALLON_IMPERIAL_PER_HR":{"schemaItemType":"Unit","label":"gal (imp)/h","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.IMPERIAL","definition":"GALLON_IMPERIAL*HR(-1)"},"GALLON_IMPERIAL_PER_DAY":{"schemaItemType":"Unit","label":"gal (imp)/day","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.IMPERIAL","definition":"GALLON_IMPERIAL*DAY(-1)"},"GALLON_PER_SEC":{"schemaItemType":"Unit","label":"gal/s","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"GALLON*S(-1)"},"GALLON_PER_MIN":{"schemaItemType":"Unit","label":"gal/min","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"GALLON*MIN(-1)"},"GALLON_PER_HR":{"schemaItemType":"Unit","label":"gal/h","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"GALLON*HR(-1)"},"GALLON_PER_DAY":{"schemaItemType":"Unit","label":"gal/day","phenomenon":"Units.VOLUMETRIC_FLOW","unitSystem":"Units.USCUSTOM","definition":"GALLON*DAY(-1)"},"HZ":{"schemaItemType":"Unit","label":"Hz","phenomenon":"Units.FREQUENCY","unitSystem":"Units.SI","definition":"S(-1)"},"KHZ":{"schemaItemType":"Unit","label":"KHz","phenomenon":"Units.FREQUENCY","unitSystem":"Units.METRIC","definition":"[KILO]*S(-1)"},"MHZ":{"schemaItemType":"Unit","label":"MHz","phenomenon":"Units.FREQUENCY","unitSystem":"Units.METRIC","definition":"[MEGA]*S(-1)"},"CUB_M_PER_SQ_M_SEC":{"schemaItemType":"Unit","label":"m³/(m²*sec)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.SI","definition":"M*S(-1)"},"CUB_M_PER_SQ_M_DAY":{"schemaItemType":"Unit","label":"m³/(m²·day)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.METRIC","definition":"M*DAY(-1)"},"CUB_M_PER_HECTARE_DAY":{"schemaItemType":"Unit","label":"m³/(ha·day)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.METRIC","definition":"CUB_M*HECTARE(-1)*DAY(-1)"},"CUB_M_PER_SQ_KM_DAY":{"schemaItemType":"Unit","label":"m³/(km²·day)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.METRIC","definition":"CUB_M*KM(-2)*DAY(-1)"},"LITRE_PER_SQ_M_SEC":{"schemaItemType":"Unit","label":"L/(m²·s)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.METRIC","definition":"LITRE*M(-2)*S(-1)"},"CUB_FT_PER_SQ_FT_MIN":{"schemaItemType":"Unit","label":"ft³/(ft²·min)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.USCUSTOM","definition":"FT*MIN(-1)"},"CUB_FT_PER_SQ_FT_SEC":{"schemaItemType":"Unit","label":"ft³/(ft²·s)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.USCUSTOM","definition":"FT*S(-1)"},"CUB_FT_PER_SQ_MILE_SEC":{"schemaItemType":"Unit","label":"ft³/(mi²·s)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.USCUSTOM","definition":"FT(3)*MILE(-2)*S(-1)"},"CUB_FT_PER_ACRE_SEC":{"schemaItemType":"Unit","label":"ft³/(acres·s)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.USCUSTOM","definition":"FT(3)*ACRE(-1)*S(-1)"},"GALLON_PER_ACRE_DAY":{"schemaItemType":"Unit","label":"gal/(acre·day)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.USCUSTOM","definition":"GALLON*DAY(-1)*ACRE(-1)"},"GALLON_PER_ACRE_MIN":{"schemaItemType":"Unit","label":"gal/(acre·min)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.USCUSTOM","definition":"GALLON*MIN(-1)*ACRE(-1)"},"GALLON_PER_SQ_FT_MIN":{"schemaItemType":"Unit","label":"gal/(ft²·min)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.USCUSTOM","definition":"GALLON*MIN(-1)*FT(-2)"},"GALLON_PER_SQ_FT_DAY":{"schemaItemType":"Unit","label":"gal/(ft²·day)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.USCUSTOM","definition":"GALLON*DAY(-1)*FT(-2)"},"GALLON_PER_SQ_MILE_MIN":{"schemaItemType":"Unit","label":"gal/(mi²·min)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.USCUSTOM","definition":"GALLON*MIN(-1)*MILE(-2)"},"GALLON_PER_SQ_MILE_DAY":{"schemaItemType":"Unit","label":"gal/(mi²·day)","phenomenon":"Units.FLOW_DENSITY_PER_AREA","unitSystem":"Units.USCUSTOM","definition":"GALLON*DAY(-1)*MILE(-2)"},"KG_PER_KG":{"schemaItemType":"Unit","label":"kg/kg","phenomenon":"Units.MASS_RATIO","unitSystem":"Units.SI","definition":"KG*KG(-1)"},"GRM_PER_LBM":{"schemaItemType":"Unit","label":"gr/lb","phenomenon":"Units.MASS_RATIO","unitSystem":"Units.USCUSTOM","definition":"GRM*LBM(-1)"},"KG_PER_SEC":{"schemaItemType":"Unit","label":"kg/s","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.SI","definition":"KG*S(-1)"},"KG_PER_MIN":{"schemaItemType":"Unit","label":"kg/min","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"KG*MIN(-1)"},"KG_PER_HR":{"schemaItemType":"Unit","label":"kg/h","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"KG*HR(-1)"},"KG_PER_DAY":{"schemaItemType":"Unit","label":"kg/day","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"KG*DAY(-1)"},"G_PER_SEC":{"schemaItemType":"Unit","label":"g/s","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"G*S(-1)"},"G_PER_MIN":{"schemaItemType":"Unit","label":"g/min","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"G*MIN(-1)"},"G_PER_HR":{"schemaItemType":"Unit","label":"g/h","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"G*HR(-1)"},"MG_PER_SEC":{"schemaItemType":"Unit","label":"mg/s","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"MG*S(-1)"},"MG_PER_MIN":{"schemaItemType":"Unit","label":"mg/min","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"MG*MIN(-1)"},"MG_PER_HR":{"schemaItemType":"Unit","label":"mg/h","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"MG*HR(-1)"},"MG_PER_DAY":{"schemaItemType":"Unit","label":"mg/day","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"MG*DAY(-1)"},"MKG_PER_SEC":{"schemaItemType":"Unit","label":"µg/s","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"MKG*S(-1)"},"MKG_PER_MIN":{"schemaItemType":"Unit","label":"µg/min","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"MKG*MIN(-1)"},"MKG_PER_HR":{"schemaItemType":"Unit","label":"µg/h","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"MKG*HR(-1)"},"MKG_PER_DAY":{"schemaItemType":"Unit","label":"µg/day","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"MKG*DAY(-1)"},"TONNE_PER_HR":{"schemaItemType":"Unit","label":"tph","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.METRIC","definition":"TONNE*HR(-1)"},"LBM_PER_SEC":{"schemaItemType":"Unit","label":"lb/s","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.USCUSTOM","definition":"LBM*S(-1)"},"LBM_PER_MIN":{"schemaItemType":"Unit","label":"lb/min","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.USCUSTOM","definition":"LBM*MIN(-1)"},"LBM_PER_HR":{"schemaItemType":"Unit","label":"lb/h","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.USCUSTOM","definition":"LBM*HR(-1)"},"LBM_PER_DAY":{"schemaItemType":"Unit","label":"lb/day","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.USCUSTOM","definition":"LBM*DAY(-1)"},"SHORT_TON_PER_HR":{"schemaItemType":"Unit","label":"tph","phenomenon":"Units.MASS_FLOW","unitSystem":"Units.USCUSTOM","definition":"SHORT_TON_MASS*HR(-1)"},"MOL_PER_SEC":{"schemaItemType":"Unit","label":"mol/s","phenomenon":"Units.MOLAR_FLOW","unitSystem":"Units.SI","definition":"MOL*S(-1)"},"KMOL_PER_SEC":{"schemaItemType":"Unit","label":"kmol/s","phenomenon":"Units.MOLAR_FLOW","unitSystem":"Units.METRIC","definition":"[KILO]*MOL*S(-1)"},"N":{"schemaItemType":"Unit","phenomenon":"Units.FORCE","unitSystem":"Units.SI","definition":"KG*M*S(-2)"},"DECAN":{"schemaItemType":"Unit","label":"daN","phenomenon":"Units.FORCE","unitSystem":"Units.SI","definition":"[DECA]*N"},"KN":{"schemaItemType":"Unit","label":"kN","phenomenon":"Units.FORCE","unitSystem":"Units.METRIC","definition":"[KILO]*N"},"MN":{"schemaItemType":"Unit","label":"mN","phenomenon":"Units.FORCE","unitSystem":"Units.METRIC","definition":"[MILLI]*N"},"MEGAN":{"schemaItemType":"Unit","label":"MN","phenomenon":"Units.FORCE","unitSystem":"Units.METRIC","definition":"[MEGA]*N"},"KGF":{"schemaItemType":"Unit","label":"kgf","phenomenon":"Units.FORCE","unitSystem":"Units.METRIC","definition":"[STD_G]*KG"},"DYNE":{"schemaItemType":"Unit","label":"dyn","phenomenon":"Units.FORCE","unitSystem":"Units.METRIC","definition":"G*CM*S(-2)"},"PDL":{"schemaItemType":"Unit","label":"pdl","phenomenon":"Units.FORCE","unitSystem":"Units.USCUSTOM","definition":"LBM*FT*S(-2)"},"SHORT_TON_FORCE":{"schemaItemType":"Unit","label":"tnf (short)","phenomenon":"Units.FORCE","unitSystem":"Units.USCUSTOM","definition":"[STD_G]*SHORT_TON_MASS"},"LONG_TON_FORCE":{"schemaItemType":"Unit","label":"tnf (long)","phenomenon":"Units.FORCE","unitSystem":"Units.USCUSTOM","definition":"[STD_G]*LONG_TON_MASS"},"LBF":{"schemaItemType":"Unit","label":"lbf","phenomenon":"Units.FORCE","unitSystem":"Units.USCUSTOM","definition":"[STD_G]*LBM"},"OZF":{"schemaItemType":"Unit","label":"ozf","phenomenon":"Units.FORCE","unitSystem":"Units.USCUSTOM","definition":"[STD_G]*OZM"},"KPF":{"schemaItemType":"Unit","label":"kpf","phenomenon":"Units.FORCE","unitSystem":"Units.USCUSTOM","definition":"[KILO]*LBF"},"W_PER_SQ_M":{"schemaItemType":"Unit","label":"W/m²","phenomenon":"Units.HEAT_FLUX_DENSITY","unitSystem":"Units.SI","definition":"W*M(-2)"},"W_PER_SQ_M_K":{"schemaItemType":"Unit","label":"W/(m²·ΔK)","phenomenon":"Units.HEAT_TRANSFER","unitSystem":"Units.SI","definition":"W*M(-2)*DELTA_KELVIN(-1)"},"W_PER_SQ_M_CELSIUS":{"schemaItemType":"Unit","label":"W/(m²·Δ°C)","phenomenon":"Units.HEAT_TRANSFER","unitSystem":"Units.METRIC","definition":"W*M(-2)*DELTA_CELSIUS(-1)"},"BTU_PER_SQ_FT_HR_FAHRENHEIT":{"schemaItemType":"Unit","label":"Btu/(ft²·h·Δ°F)","phenomenon":"Units.HEAT_TRANSFER","unitSystem":"Units.USCUSTOM","definition":"BTU*FT(-2)*HR(-1)*DELTA_FAHRENHEIT(-1)"},"KG_PER_M":{"schemaItemType":"Unit","label":"kg/m","phenomenon":"Units.LINEAR_DENSITY","unitSystem":"Units.SI","definition":"KG*M(-1)"},"KG_PER_MM":{"schemaItemType":"Unit","label":"kg/mm","phenomenon":"Units.LINEAR_DENSITY","unitSystem":"Units.METRIC","definition":"KG*MM(-1)"},"LBM_PER_FT":{"schemaItemType":"Unit","label":"lb/ft","phenomenon":"Units.LINEAR_DENSITY","unitSystem":"Units.USCUSTOM","definition":"LBM*FT(-1)"},"N_PER_M":{"schemaItemType":"Unit","label":"N/m","phenomenon":"Units.LINEAR_LOAD","unitSystem":"Units.SI","definition":"N*M(-1)"},"KN_PER_M":{"schemaItemType":"Unit","label":"kN/m","phenomenon":"Units.LINEAR_LOAD","unitSystem":"Units.METRIC","definition":"KN*M(-1)"},"MEGAN_PER_M":{"schemaItemType":"Unit","label":"MN/m","phenomenon":"Units.LINEAR_LOAD","unitSystem":"Units.METRIC","definition":"MEGAN*M(-1)"},"N_PER_MM":{"schemaItemType":"Unit","label":"N/mm","phenomenon":"Units.LINEAR_LOAD","unitSystem":"Units.METRIC","definition":"N*MM(-1)"},"LBF_PER_IN":{"schemaItemType":"Unit","label":"lbf/in","phenomenon":"Units.LINEAR_LOAD","unitSystem":"Units.USCUSTOM","definition":"LBF*IN(-1)"},"LBF_PER_FT":{"schemaItemType":"Unit","label":"lbf/ft","phenomenon":"Units.LINEAR_LOAD","unitSystem":"Units.USCUSTOM","definition":"LBF*FT(-1)"},"KGF_PER_M":{"schemaItemType":"Unit","label":"kgf/m","phenomenon":"Units.LINEAR_LOAD","unitSystem":"Units.METRIC","definition":"KGF*M(-1)"},"KPF_PER_FT":{"schemaItemType":"Unit","label":"kpf/ft","phenomenon":"Units.LINEAR_LOAD","unitSystem":"Units.USCUSTOM","definition":"KPF*FT(-1)"},"PER_M":{"schemaItemType":"Unit","label":"1/m","phenomenon":"Units.LINEAR_RATE","unitSystem":"Units.SI","definition":"M(-1)"},"PER_MM":{"schemaItemType":"Unit","label":"1/mm","phenomenon":"Units.LINEAR_RATE","unitSystem":"Units.METRIC","definition":"MM(-1)"},"PER_KM":{"schemaItemType":"Unit","label":"1/km","phenomenon":"Units.LINEAR_RATE","unitSystem":"Units.METRIC","definition":"KM(-1)"},"PER_FT":{"schemaItemType":"Unit","label":"1/ft","phenomenon":"Units.LINEAR_RATE","unitSystem":"Units.USCUSTOM","definition":"FT(-1)"},"PER_MILE":{"schemaItemType":"Unit","label":"1/mile","phenomenon":"Units.LINEAR_RATE","unitSystem":"Units.USCUSTOM","definition":"MILE(-1)"},"PER_THOUSAND_FT":{"schemaItemType":"Unit","label":"1/1000 ft","phenomenon":"Units.LINEAR_RATE","unitSystem":"Units.USCUSTOM","definition":"FT(-1)","numerator":0.001},"N_M":{"schemaItemType":"Unit","label":"N·m","phenomenon":"Units.TORQUE","unitSystem":"Units.SI","definition":"N*M*RAD(-1)"},"KN_M":{"schemaItemType":"Unit","label":"kN·m","phenomenon":"Units.TORQUE","unitSystem":"Units.METRIC","definition":"KN*M*RAD(-1)"},"MEGAN_M":{"schemaItemType":"Unit","label":"MN·m","phenomenon":"Units.TORQUE","unitSystem":"Units.METRIC","definition":"MEGAN*M*RAD(-1)"},"N_CM":{"schemaItemType":"Unit","label":"N·cm","phenomenon":"Units.TORQUE","unitSystem":"Units.METRIC","definition":"N*CM*RAD(-1)"},"LBF_FT":{"schemaItemType":"Unit","label":"lbf·ft","phenomenon":"Units.TORQUE","unitSystem":"Units.USCUSTOM","definition":"LBF*FT*RAD(-1)"},"LBF_IN":{"schemaItemType":"Unit","label":"lbf·in","phenomenon":"Units.TORQUE","unitSystem":"Units.USCUSTOM","definition":"LBF*IN*RAD(-1)"},"KGF_M":{"schemaItemType":"Unit","label":"kgf·m","phenomenon":"Units.TORQUE","unitSystem":"Units.METRIC","definition":"KGF*M*RAD(-1)"},"KPF_FT":{"schemaItemType":"Unit","label":"kpf·ft","phenomenon":"Units.TORQUE","unitSystem":"Units.USCUSTOM","definition":"KPF*FT*RAD(-1)"},"N_M_PER_M":{"schemaItemType":"Unit","label":"N·m/m","phenomenon":"Units.LINEAR_TORQUE","unitSystem":"Units.SI","definition":"N_M*M(-1)"},"KN_M_PER_M":{"schemaItemType":"Unit","label":"kN·m/m","phenomenon":"Units.LINEAR_TORQUE","unitSystem":"Units.METRIC","definition":"KN_M*M(-1)"},"MEGAN_M_PER_M":{"schemaItemType":"Unit","label":"MN·m/m","phenomenon":"Units.LINEAR_TORQUE","unitSystem":"Units.METRIC","definition":"MEGAN_M*M(-1)"},"N_CM_PER_CM":{"schemaItemType":"Unit","label":"N·cm/cm","phenomenon":"Units.LINEAR_TORQUE","unitSystem":"Units.METRIC","definition":"N_CM*CM(-1)"},"LBF_IN_PER_IN":{"schemaItemType":"Unit","label":"lbf·in/in","phenomenon":"Units.LINEAR_TORQUE","unitSystem":"Units.USCUSTOM","definition":"LBF_IN*IN(-1)"},"LBF_FT_PER_FT":{"schemaItemType":"Unit","label":"lbf·ft/ft","phenomenon":"Units.LINEAR_TORQUE","unitSystem":"Units.USCUSTOM","definition":"LBF_FT*FT(-1)"},"KPF_FT_PER_FT":{"schemaItemType":"Unit","label":"kpf·ft/ft","phenomenon":"Units.LINEAR_TORQUE","unitSystem":"Units.USCUSTOM","definition":"KPF_FT*FT(-1)"},"N_M_PER_SQ_M":{"schemaItemType":"Unit","label":"N·m/m²","phenomenon":"Units.AREA_TORQUE","unitSystem":"Units.SI","definition":"N_M*M(-2)"},"KN_M_PER_SQ_M":{"schemaItemType":"Unit","label":"kN·m/m²","phenomenon":"Units.AREA_TORQUE","unitSystem":"Units.METRIC","definition":"KN_M*M(-2)"},"MEGAN_M_PER_SQ_M":{"schemaItemType":"Unit","label":"MN·m/m²","phenomenon":"Units.AREA_TORQUE","unitSystem":"Units.METRIC","definition":"MEGAN_M*M(-2)"},"N_CM_PER_SQ_CM":{"schemaItemType":"Unit","label":"N·cm/cm²","phenomenon":"Units.AREA_TORQUE","unitSystem":"Units.METRIC","definition":"N_CM*CM(-2)"},"LBF_IN_PER_SQ_IN":{"schemaItemType":"Unit","label":"lbf·in/in²","phenomenon":"Units.AREA_TORQUE","unitSystem":"Units.USCUSTOM","definition":"LBF_IN*IN(-2)"},"LBF_FT_PER_SQ_FT":{"schemaItemType":"Unit","label":"lbf·ft/ft²","phenomenon":"Units.AREA_TORQUE","unitSystem":"Units.USCUSTOM","definition":"LBF_FT*FT(-2)"},"KPF_FT_PER_SQ_FT":{"schemaItemType":"Unit","label":"kpf·ft/ft²","phenomenon":"Units.AREA_TORQUE","unitSystem":"Units.USCUSTOM","definition":"KPF_FT*FT(-2)"},"CUB_M_PER_MOL":{"schemaItemType":"Unit","label":"m³/mol","phenomenon":"Units.MOLAR_VOLUME","unitSystem":"Units.SI","definition":"CUB_M*MOL(-1)"},"CUB_M_PER_KMOL":{"schemaItemType":"Unit","label":"m³/kmol","phenomenon":"Units.MOLAR_VOLUME","unitSystem":"Units.METRIC","definition":"CUB_M*[KILO](-1)*MOL(-1)"},"CUB_FT_PER_LB_MOL":{"schemaItemType":"Unit","label":"ft³/lb-mol","phenomenon":"Units.MOLAR_VOLUME","unitSystem":"Units.USCUSTOM","definition":"CUB_FT*LB_MOL(-1)"},"MOL_PER_CUB_M":{"schemaItemType":"Unit","label":"mol/m³","phenomenon":"Units.MOLAR_CONCENTRATION","unitSystem":"Units.SI","definition":"MOL*CUB_M(-1)"},"KMOL_PER_CUB_M":{"schemaItemType":"Unit","label":"kmol/m³","phenomenon":"Units.MOLAR_CONCENTRATION","unitSystem":"Units.METRIC","definition":"[KILO]*MOL*CUB_M(-1)"},"MOL_PER_CUB_DM":{"schemaItemType":"Unit","label":"mol/dm³","phenomenon":"Units.MOLAR_CONCENTRATION","unitSystem":"Units.METRIC","definition":"MOL*CUB_DM(-1)"},"MICROMOL_PER_CUB_DM":{"schemaItemType":"Unit","label":"µmol/dm³","phenomenon":"Units.MOLAR_CONCENTRATION","unitSystem":"Units.METRIC","definition":"[MICRO]*MOL*CUB_DM(-1)"},"NMOL_PER_CUB_DM":{"schemaItemType":"Unit","label":"nmol/dm³","phenomenon":"Units.MOLAR_CONCENTRATION","unitSystem":"Units.METRIC","definition":"[NANO]*MOL*CUB_DM(-1)"},"PICOMOL_PER_CUB_DM":{"schemaItemType":"Unit","label":"picomol/dm³","phenomenon":"Units.MOLAR_CONCENTRATION","unitSystem":"Units.METRIC","definition":"[PICO]*MOL*CUB_DM(-1)"},"MOL_PER_CUB_FT":{"schemaItemType":"Unit","label":"mol/ft³","phenomenon":"Units.MOLAR_CONCENTRATION","unitSystem":"Units.USCUSTOM","definition":"MOL*CUB_FT(-1)"},"MM_TO_THE_FOURTH":{"schemaItemType":"Unit","label":"mm⁴","phenomenon":"Units.AREA_MOMENT_INERTIA","unitSystem":"Units.METRIC","definition":"MM(4)"},"M_TO_THE_FOURTH":{"schemaItemType":"Unit","label":"m⁴","phenomenon":"Units.AREA_MOMENT_INERTIA","unitSystem":"Units.SI","definition":"M(4)"},"CM_TO_THE_FOURTH":{"schemaItemType":"Unit","label":"cm⁴","phenomenon":"Units.AREA_MOMENT_INERTIA","unitSystem":"Units.METRIC","definition":"CM(4)"},"IN_TO_THE_FOURTH":{"schemaItemType":"Unit","label":"in⁴","phenomenon":"Units.AREA_MOMENT_INERTIA","unitSystem":"Units.USCUSTOM","definition":"IN(4)"},"FT_TO_THE_FOURTH":{"schemaItemType":"Unit","label":"ft⁴","phenomenon":"Units.AREA_MOMENT_INERTIA","unitSystem":"Units.USCUSTOM","definition":"FT(4)"},"W":{"schemaItemType":"Unit","phenomenon":"Units.POWER","unitSystem":"Units.SI","definition":"N*M*S(-1)"},"KW":{"schemaItemType":"Unit","label":"kW","phenomenon":"Units.POWER","unitSystem":"Units.METRIC","definition":"[KILO]*W"},"MEGAW":{"schemaItemType":"Unit","label":"MW","phenomenon":"Units.POWER","unitSystem":"Units.METRIC","definition":"[MEGA]*W"},"GW":{"schemaItemType":"Unit","phenomenon":"Units.POWER","unitSystem":"Units.METRIC","definition":"[GIGA]*W"},"BTU_PER_HR":{"schemaItemType":"Unit","label":"Btu/h","phenomenon":"Units.POWER","unitSystem":"Units.USCUSTOM","definition":"BTU*HR(-1)"},"KILOBTU_PER_HR":{"schemaItemType":"Unit","label":"kBtu/h","phenomenon":"Units.POWER","unitSystem":"Units.USCUSTOM","definition":"[KILO]*BTU*HR(-1)"},"HP":{"schemaItemType":"Unit","label":"hp","description":"Exact, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B.","phenomenon":"Units.POWER","unitSystem":"Units.USCUSTOM","definition":"LBF*FT*S(-1)","numerator":550},"PA":{"schemaItemType":"Unit","label":"N/m²","phenomenon":"Units.PRESSURE","unitSystem":"Units.SI","definition":"N*M(-2)"},"PA_GAUGE":{"schemaItemType":"Unit","label":"Pa (gauge)","description":"Offset is one standard atmosphere in PA. Offset is exact, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B. ","phenomenon":"Units.PRESSURE","unitSystem":"Units.INDUSTRIAL","definition":"PA","numerator":1,"offset":101325},"HECTOPASCAL":{"schemaItemType":"Unit","label":"hPa","phenomenon":"Units.PRESSURE","unitSystem":"Units.METRIC","definition":"[HECTO]*PA"},"KILOPASCAL":{"schemaItemType":"Unit","label":"kPa","phenomenon":"Units.PRESSURE","unitSystem":"Units.METRIC","definition":"[KILO]*PA"},"MICROPASCAL":{"schemaItemType":"Unit","label":"µPa","phenomenon":"Units.PRESSURE","unitSystem":"Units.METRIC","definition":"[MICRO]*PA"},"KILOPASCAL_GAUGE":{"schemaItemType":"Unit","label":"kPa (Gauge)","description":"Offset is one standard atmosphere (101325 PA) converted to kilopascal. Offset is exact, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B. ","phenomenon":"Units.PRESSURE","unitSystem":"Units.INDUSTRIAL","definition":"[KILO]*PA","numerator":1,"offset":101.325},"MEGAPASCAL":{"schemaItemType":"Unit","label":"MPa","phenomenon":"Units.PRESSURE","unitSystem":"Units.METRIC","definition":"[MEGA]*PA"},"MEGAPASCAL_GAUGE":{"schemaItemType":"Unit","label":"MPa (Gauge)","description":"Offset is one standard atmosphere (101325 PA) converted to megapascal. Offset is exact, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B. ","phenomenon":"Units.PRESSURE","unitSystem":"Units.INDUSTRIAL","definition":"[MEGA]*PA","numerator":1,"offset":0.101325},"AT":{"schemaItemType":"Unit","label":"kgf/cm²","description":"Exact, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B.","phenomenon":"Units.PRESSURE","unitSystem":"Units.INTERNATIONAL","definition":"KGF*CM(-2)"},"AT_GAUGE":{"schemaItemType":"Unit","label":"kgf/cm² (Gauge)","description":"Offset is one standard atmosphere (101325 PA) converted to atmosphere-technical (AT). Offset is exact, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B. ","phenomenon":"Units.PRESSURE","unitSystem":"Units.INDUSTRIAL","definition":"AT","offset":1.033227452799886},"KGF_PER_SQ_M":{"schemaItemType":"Unit","label":"kgf/m²","phenomenon":"Units.PRESSURE","unitSystem":"Units.INTERNATIONAL","definition":"KGF*M(-2)"},"ATM":{"schemaItemType":"Unit","label":"atm","description":"Standard atmosphere, see AT for atmosphere-technical. Exact, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B. ","phenomenon":"Units.PRESSURE","unitSystem":"Units.METRIC","definition":"PA","numerator":101325},"BAR":{"schemaItemType":"Unit","label":"bar","description":"Exact, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B. ","phenomenon":"Units.PRESSURE","unitSystem":"Units.METRIC","definition":"PA","numerator":100000},"BAR_GAUGE":{"schemaItemType":"Unit","label":"bar (Gauge)","description":"Offset is one standard atmosphere converted to BAR. Offset is exact, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B. ","phenomenon":"Units.PRESSURE","unitSystem":"Units.INDUSTRIAL","definition":"PA","numerator":100000,"offset":1.01325},"MBAR":{"schemaItemType":"Unit","label":"mBar","phenomenon":"Units.PRESSURE","unitSystem":"Units.METRIC","definition":"[MILLI]*BAR"},"BARYE":{"schemaItemType":"Unit","label":"ba","phenomenon":"Units.PRESSURE","unitSystem":"Units.METRIC","definition":"DYNE*CM(-2)"},"PSI":{"schemaItemType":"Unit","label":"lbf/in²","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"LBF*IN(-2)"},"PSF":{"schemaItemType":"Unit","label":"lbf/ft²","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"LBF*FT(-2)"},"PSIG":{"schemaItemType":"Unit","label":"lbf/in² (Gauge)","description":"Offset is one standard atmosphere (101325 PA) converted to PSI","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"LBF*IN(-2)","numerator":1,"offset":14.695948775513449},"KSI":{"schemaItemType":"Unit","label":"ksi","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"KPF*IN(-2)"},"KSF":{"schemaItemType":"Unit","label":"ksf","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"KPF*FT(-2)"},"LBF_PER_SQ_FT":{"schemaItemType":"Unit","label":"lbf/ft²","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"LBF*FT(-2)"},"TORR":{"schemaItemType":"Unit","label":"torr","description":"See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B. for approx conversion and Table 11 for a reference to the exact conversion","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"PA","numerator":101325,"denominator":760},"M_H2O":{"schemaItemType":"Unit","label":"mH2O (Conv)","description":"Meter of H2O Conventional","phenomenon":"Units.PRESSURE","unitSystem":"Units.METRIC","definition":"[KILO]*MM_H2O"},"MM_H2O":{"schemaItemType":"Unit","label":"mmH2O (Conv)","description":"Millimeter of H2O Conventional, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B.","phenomenon":"Units.PRESSURE","unitSystem":"Units.METRIC","definition":"PA","numerator":9.80665},"MM_HG_AT_32F":{"schemaItemType":"Unit","label":"mmHg@32°F","description":"See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B. Used centimeter of mercury (0 C) to pascal","phenomenon":"Units.PRESSURE","unitSystem":"Units.METRIC","definition":"PA","numerator":133.322},"FT_H2O":{"schemaItemType":"Unit","label":"ft H2O (Conv)","description":"foot of H2O Conventional, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B.","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"PA","numerator":2989.067},"IN_H2O_AT_32F":{"schemaItemType":"Unit","label":"inH2O@32°F","description":"Inch of H2O at 32 Fahrenheit, Water is assumed to be in a liquid state. Equal to water at 0C. No verified source","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"PA","numerator":249.1083},"IN_H2O_AT_39_2F":{"schemaItemType":"Unit","label":"inH2O@39.2°F","description":"See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B.","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"PA","numerator":249.082},"IN_H2O_AT_60F":{"schemaItemType":"Unit","label":"inH2O@60°F","description":"See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B.","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"PA","numerator":248.84},"IN_HG":{"schemaItemType":"Unit","label":"inHg (Conv)","description":"Inch of HG conventional, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B.","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"PA","numerator":3386.389},"IN_HG_AT_32F":{"schemaItemType":"Unit","label":"inHg@32°F","description":"See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B.","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"PA","numerator":3386.38},"IN_HG_AT_60F":{"schemaItemType":"Unit","label":"inHg@60°F","description":"See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B.","phenomenon":"Units.PRESSURE","unitSystem":"Units.USCUSTOM","definition":"PA","numerator":3376.85},"PA_PER_M":{"schemaItemType":"Unit","label":"Pa/m","phenomenon":"Units.PRESSURE_GRADIENT","unitSystem":"Units.SI","definition":"PA*M(-1)"},"BAR_PER_KM":{"schemaItemType":"Unit","label":"bar/km","phenomenon":"Units.PRESSURE_GRADIENT","unitSystem":"Units.METRIC","definition":"BAR*KM(-1)"},"PERCENT":{"schemaItemType":"Unit","label":"%","description":"Unit used to show a ratio as a percentage in the UI.","phenomenon":"Units.PERCENTAGE","unitSystem":"Units.INTERNATIONAL","definition":"ONE"},"DECIMAL_PERCENT":{"schemaItemType":"Unit","label":"decimal percent","description":"Unit suitable for storing a decimal number that represents an unspecified ratio.","phenomenon":"Units.PERCENTAGE","unitSystem":"Units.INTERNATIONAL","definition":"PERCENT","numerator":100},"PROBABILITY_FRACTION":{"schemaItemType":"Unit","label":"","phenomenon":"Units.PROBABILITY","unitSystem":"Units.SI","definition":"ONE"},"PROBABILITY_PERCENT":{"schemaItemType":"Unit","label":"%","phenomenon":"Units.PROBABILITY","unitSystem":"Units.INTERNATIONAL","definition":"PROBABILITY_FRACTION","denominator":100},"M_PER_M":{"schemaItemType":"Unit","label":"m/m","phenomenon":"Units.SLOPE","unitSystem":"Units.SI","definition":"M*M(-1)"},"CM_PER_M":{"schemaItemType":"Unit","label":"cm/m","phenomenon":"Units.SLOPE","unitSystem":"Units.METRIC","definition":"CM*M(-1)"},"MM_PER_M":{"schemaItemType":"Unit","label":"mm/m","phenomenon":"Units.SLOPE","unitSystem":"Units.METRIC","definition":"MM*M(-1)"},"M_PER_KM":{"schemaItemType":"Unit","label":"m/km","phenomenon":"Units.SLOPE","unitSystem":"Units.METRIC","definition":"M*KM(-1)"},"FT_PER_THOUSAND_FOOT":{"schemaItemType":"Unit","label":"ft/1000ft","phenomenon":"Units.SLOPE","unitSystem":"Units.USCUSTOM","definition":"FT*[KILO](-1)*FT(-1)"},"FT_PER_FT":{"schemaItemType":"Unit","label":"ft/ft","phenomenon":"Units.SLOPE","unitSystem":"Units.USCUSTOM","definition":"FT*FT(-1)"},"IN_PER_FT":{"schemaItemType":"Unit","label":"in/ft","phenomenon":"Units.SLOPE","unitSystem":"Units.USCUSTOM","definition":"IN*FT(-1)"},"FT_PER_IN":{"schemaItemType":"Unit","label":"ft/in","phenomenon":"Units.SLOPE","unitSystem":"Units.USCUSTOM","definition":"FT*IN(-1)"},"FT_PER_MILE":{"schemaItemType":"Unit","label":"ft/mi","phenomenon":"Units.SLOPE","unitSystem":"Units.USCUSTOM","definition":"FT*MILE(-1)"},"VERTICAL_PER_HORIZONTAL":{"schemaItemType":"Unit","label":"slope","phenomenon":"Units.SLOPE","unitSystem":"Units.INTERNATIONAL","definition":"M_PER_M"},"PERCENT_SLOPE":{"schemaItemType":"Unit","label":"%","phenomenon":"Units.SLOPE","unitSystem":"Units.INTERNATIONAL","definition":"DECIMAL_PERCENT(-1)*M_PER_M"},"HORIZONTAL_PER_VERTICAL":{"schemaItemType":"InvertedUnit","invertsUnit":"Units.VERTICAL_PER_HORIZONTAL","unitSystem":"Units.INTERNATIONAL"},"FT_HORIZONTAL_PER_FT_VERTICAL":{"schemaItemType":"InvertedUnit","invertsUnit":"Units.FT_PER_FT","unitSystem":"Units.USCUSTOM"},"M_HORIZONTAL_PER_M_VERTICAL":{"schemaItemType":"InvertedUnit","invertsUnit":"Units.M_PER_M","unitSystem":"Units.SI"},"KG_PER_SQ_M":{"schemaItemType":"Unit","label":"kg/m²","phenomenon":"Units.SURFACE_DENSITY","unitSystem":"Units.SI","definition":"KG*M(-2)"},"G_PER_SQ_M":{"schemaItemType":"Unit","label":"g/m²","phenomenon":"Units.SURFACE_DENSITY","unitSystem":"Units.METRIC","definition":"G*M(-2)"},"KG_PER_HECTARE":{"schemaItemType":"Unit","label":"kg/ha","phenomenon":"Units.SURFACE_DENSITY","unitSystem":"Units.METRIC","definition":"KG*HECTARE(-1)"},"LBM_PER_ACRE":{"schemaItemType":"Unit","label":"lb/acre","phenomenon":"Units.SURFACE_DENSITY","unitSystem":"Units.USCUSTOM","definition":"LBM*ACRE(-1)"},"W_PER_M_K":{"schemaItemType":"Unit","label":"W/(m·K)","phenomenon":"Units.THERMAL_CONDUCTIVITY","unitSystem":"Units.SI","definition":"W*M(-1)*DELTA_KELVIN(-1)"},"W_PER_M_C":{"schemaItemType":"Unit","label":"W/(m·Δ°C)","phenomenon":"Units.THERMAL_CONDUCTIVITY","unitSystem":"Units.METRIC","definition":"W*M(-1)*DELTA_CELSIUS(-1)"},"BTU_IN_PER_SQ_FT_HR_FAHRENHEIT":{"schemaItemType":"Unit","label":"Btu·in/(ft²·h·Δ°F)","phenomenon":"Units.THERMAL_CONDUCTIVITY","unitSystem":"Units.USCUSTOM","definition":"BTU*IN*FT(-2)*HR(-1)*DELTA_FAHRENHEIT(-1)"},"SQ_M_KELVIN_PER_WATT":{"schemaItemType":"Unit","label":"m²·ΔK/W","phenomenon":"Units.THERMAL_INSULANCE","unitSystem":"Units.SI","definition":"M(2)*DELTA_KELVIN*W(-1)"},"SQ_M_CELSIUS_PER_WATT":{"schemaItemType":"Unit","label":"m²·Δ°C/W","phenomenon":"Units.THERMAL_INSULANCE","unitSystem":"Units.METRIC","definition":"M(2)*DELTA_CELSIUS*W(-1)"},"SQ_FT_HR_FAHRENHEIT_PER_BTU":{"schemaItemType":"Unit","label":"ft²·h·Δ°F/Btu","phenomenon":"Units.THERMAL_INSULANCE","unitSystem":"Units.USCUSTOM","definition":"FT(2)*HR*DELTA_FAHRENHEIT*BTU(-1)"},"M_PER_SEC":{"schemaItemType":"Unit","label":"m/s","phenomenon":"Units.VELOCITY","unitSystem":"Units.SI","definition":"M*S(-1)"},"M_PER_MIN":{"schemaItemType":"Unit","label":"m/min","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"M*MIN(-1)"},"M_PER_HR":{"schemaItemType":"Unit","label":"m/h","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"M*HR(-1)"},"M_PER_DAy":{"schemaItemType":"Unit","label":"m/day","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"M*DAY(-1)"},"MM_PER_SEC":{"schemaItemType":"Unit","label":"mm/sec","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"MM*S(-1)"},"MM_PER_MIN":{"schemaItemType":"Unit","label":"mm/min","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"MM*MIN(-1)"},"MM_PER_HR":{"schemaItemType":"Unit","label":"mm/h","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"MM*HR(-1)"},"MM_PER_DAY":{"schemaItemType":"Unit","label":"mm/day","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"MM*DAY(-1)"},"CM_PER_SEC":{"schemaItemType":"Unit","label":"cm/s","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"CM*S(-1)"},"CM_PER_MIN":{"schemaItemType":"Unit","label":"cm/min","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"CM*MIN(-1)"},"CM_PER_HR":{"schemaItemType":"Unit","label":"cm/h","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"CM*HR(-1)"},"CM_PER_DAY":{"schemaItemType":"Unit","label":"cm/day","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"CM*DAY(-1)"},"KM_PER_SEC":{"schemaItemType":"Unit","label":"km/sec","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"KM*S(-1)"},"KM_PER_HR":{"schemaItemType":"Unit","label":"km/h","phenomenon":"Units.VELOCITY","unitSystem":"Units.METRIC","definition":"KM*HR(-1)"},"IN_PER_SEC":{"schemaItemType":"Unit","label":"in/s","phenomenon":"Units.VELOCITY","unitSystem":"Units.USCUSTOM","definition":"IN*S(-1)"},"IN_PER_MIN":{"schemaItemType":"Unit","label":"in/min","phenomenon":"Units.VELOCITY","unitSystem":"Units.USCUSTOM","definition":"IN*MIN(-1)"},"IN_PER_HR":{"schemaItemType":"Unit","label":"in/h","phenomenon":"Units.VELOCITY","unitSystem":"Units.USCUSTOM","definition":"IN*HR(-1)"},"IN_PER_DAY":{"schemaItemType":"Unit","label":"in/day","phenomenon":"Units.VELOCITY","unitSystem":"Units.USCUSTOM","definition":"IN*DAY(-1)"},"FT_PER_SEC":{"schemaItemType":"Unit","label":"ft/s","phenomenon":"Units.VELOCITY","unitSystem":"Units.USCUSTOM","definition":"FT*S(-1)"},"FT_PER_MIN":{"schemaItemType":"Unit","label":"ft/min","phenomenon":"Units.VELOCITY","unitSystem":"Units.USCUSTOM","definition":"FT*MIN(-1)"},"FT_PER_HR":{"schemaItemType":"Unit","label":"ft/h","phenomenon":"Units.VELOCITY","unitSystem":"Units.USCUSTOM","definition":"FT*HR(-1)"},"FT_PER_DAY":{"schemaItemType":"Unit","label":"ft/day","phenomenon":"Units.VELOCITY","unitSystem":"Units.USCUSTOM","definition":"FT*DAY(-1)"},"YRD_PER_SEC":{"schemaItemType":"Unit","label":"yrd/sec","phenomenon":"Units.VELOCITY","unitSystem":"Units.USCUSTOM","definition":"YRD*S(-1)"},"MPH":{"schemaItemType":"Unit","label":"mi/h","phenomenon":"Units.VELOCITY","unitSystem":"Units.USCUSTOM","definition":"MILE*HR(-1)"},"KNOT_INTERNATIONAL":{"schemaItemType":"Unit","label":"knot (Int.)","phenomenon":"Units.VELOCITY","unitSystem":"Units.MARITIME","definition":"NAUT_MILE*HR(-1)"},"RAD_PER_SEC":{"schemaItemType":"Unit","label":"rad/sec","phenomenon":"Units.ANGULAR_VELOCITY","unitSystem":"Units.SI","definition":"RAD*S(-1)"},"RAD_PER_MIN":{"schemaItemType":"Unit","label":"rad/min","phenomenon":"Units.ANGULAR_VELOCITY","unitSystem":"Units.METRIC","definition":"RAD*MIN(-1)"},"RAD_PER_HR":{"schemaItemType":"Unit","label":"rad/hr","phenomenon":"Units.ANGULAR_VELOCITY","unitSystem":"Units.METRIC","definition":"RAD*HR(-1)"},"RPS":{"schemaItemType":"Unit","label":"cycle/sec","phenomenon":"Units.ANGULAR_VELOCITY","unitSystem":"Units.METRIC","definition":"[TWO_PI]*RAD*S(-1)"},"RPM":{"schemaItemType":"Unit","label":"cycle/min","phenomenon":"Units.ANGULAR_VELOCITY","unitSystem":"Units.METRIC","definition":"[TWO_PI]*RAD*MIN(-1)"},"RPH":{"schemaItemType":"Unit","label":"cycle/hr","phenomenon":"Units.ANGULAR_VELOCITY","unitSystem":"Units.METRIC","definition":"[TWO_PI]*RAD*HR(-1)"},"DEG_PER_SEC":{"schemaItemType":"Unit","label":"deg/sec","phenomenon":"Units.ANGULAR_VELOCITY","unitSystem":"Units.METRIC","definition":"ARC_DEG*S(-1)"},"DEG_PER_MIN":{"schemaItemType":"Unit","label":"deg/min","phenomenon":"Units.ANGULAR_VELOCITY","unitSystem":"Units.METRIC","definition":"ARC_DEG*MIN(-1)"},"DEG_PER_HR":{"schemaItemType":"Unit","label":"deg/hr","phenomenon":"Units.ANGULAR_VELOCITY","unitSystem":"Units.METRIC","definition":"ARC_DEG*HR(-1)"},"PA_S":{"schemaItemType":"Unit","label":"Pa·s","phenomenon":"Units.DYNAMIC_VISCOSITY","unitSystem":"Units.SI","definition":"PA*S"},"POISE":{"schemaItemType":"Unit","label":"poise","description":"Exact, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B.","phenomenon":"Units.DYNAMIC_VISCOSITY","unitSystem":"Units.METRIC","definition":"[DECI]*PA_S"},"CENTIPOISE":{"schemaItemType":"Unit","label":"cP","phenomenon":"Units.DYNAMIC_VISCOSITY","unitSystem":"Units.METRIC","definition":"[CENTI]*POISE"},"LBM_PER_FT_S":{"schemaItemType":"Unit","label":"lbm/(ft*s)","phenomenon":"Units.DYNAMIC_VISCOSITY","unitSystem":"Units.USCUSTOM","definition":"LBM*FT(-1)*S(-1)"},"SQ_M_PER_SEC":{"schemaItemType":"Unit","label":"m²/s","phenomenon":"Units.KINEMATIC_VISCOSITY","unitSystem":"Units.SI","definition":"M(2)*S(-1)"},"SQ_FT_PER_SEC":{"schemaItemType":"Unit","label":"ft²/s","phenomenon":"Units.KINEMATIC_VISCOSITY","unitSystem":"Units.USCUSTOM","definition":"FT(2)*S(-1)"},"STOKE":{"schemaItemType":"Unit","label":"St","phenomenon":"Units.KINEMATIC_VISCOSITY","unitSystem":"Units.METRIC","definition":"CM(2)*S(-1)"},"CENTISTOKE":{"schemaItemType":"Unit","label":"cSt","phenomenon":"Units.KINEMATIC_VISCOSITY","unitSystem":"Units.METRIC","definition":"MM(2)*S(-1)"},"CUB_M":{"schemaItemType":"Unit","label":"m³","phenomenon":"Units.VOLUME","unitSystem":"Units.SI","definition":"M(3)"},"CUB_UM":{"schemaItemType":"Unit","label":"um³","phenomenon":"Units.VOLUME","unitSystem":"Units.METRIC","definition":"UM(3)"},"CUB_MM":{"schemaItemType":"Unit","label":"mm³","phenomenon":"Units.VOLUME","unitSystem":"Units.METRIC","definition":"MM(3)"},"CUB_CM":{"schemaItemType":"Unit","label":"cm³","phenomenon":"Units.VOLUME","unitSystem":"Units.METRIC","definition":"CM(3)"},"CUB_DM":{"schemaItemType":"Unit","label":"dm³","phenomenon":"Units.VOLUME","unitSystem":"Units.METRIC","definition":"DM(3)"},"CUB_KM":{"schemaItemType":"Unit","label":"km³","phenomenon":"Units.VOLUME","unitSystem":"Units.METRIC","definition":"KM(3)"},"LITRE":{"schemaItemType":"Unit","label":"L","phenomenon":"Units.VOLUME","unitSystem":"Units.METRIC","definition":"CUB_DM"},"THOUSAND_LITRE":{"schemaItemType":"Unit","label":"thousand L","phenomenon":"Units.VOLUME","unitSystem":"Units.METRIC","definition":"[KILO]*LITRE"},"MILLION_LITRE":{"schemaItemType":"Unit","label":"million L","phenomenon":"Units.VOLUME","unitSystem":"Units.METRIC","definition":"[MEGA]*LITRE"},"MILLILITRE":{"schemaItemType":"Unit","label":"mL","phenomenon":"Units.VOLUME","unitSystem":"Units.METRIC","definition":"[MILLI]*LITRE"},"MICROLITRE":{"schemaItemType":"Unit","label":"µliter","phenomenon":"Units.VOLUME","unitSystem":"Units.METRIC","definition":"[MICRO]*LITRE"},"CUB_IN":{"schemaItemType":"Unit","label":"in³","phenomenon":"Units.VOLUME","unitSystem":"Units.USCUSTOM","definition":"IN(3)"},"CUB_FT":{"schemaItemType":"Unit","label":"ft³","phenomenon":"Units.VOLUME","unitSystem":"Units.USCUSTOM","definition":"FT(3)"},"CUB_YRD":{"schemaItemType":"Unit","label":"yd³","phenomenon":"Units.VOLUME","unitSystem":"Units.USCUSTOM","definition":"YRD(3)"},"CUB_MILE":{"schemaItemType":"Unit","label":"mile³","phenomenon":"Units.VOLUME","unitSystem":"Units.USCUSTOM","definition":"MILE(3)"},"ACRE_IN":{"schemaItemType":"Unit","label":"acre·in","phenomenon":"Units.VOLUME","unitSystem":"Units.USCUSTOM","definition":"ACRE*IN"},"ACRE_FT":{"schemaItemType":"Unit","label":"acre·ft","phenomenon":"Units.VOLUME","unitSystem":"Units.USCUSTOM","definition":"ACRE*FT"},"GALLON":{"schemaItemType":"Unit","label":"gal","description":"Exact, http://www.nist.gov/pml/wmd/pubs/upload/hb44-15-web-final.pdf, Appendix C. Section 4, Page C-11","phenomenon":"Units.VOLUME","unitSystem":"Units.USCUSTOM","definition":"IN(3)","numerator":231},"THOUSAND_GALLON":{"schemaItemType":"Unit","label":"thousand gal","phenomenon":"Units.VOLUME","unitSystem":"Units.USCUSTOM","definition":"[KILO]*GALLON"},"MILLION_GALLON":{"schemaItemType":"Unit","label":"million gal","phenomenon":"Units.VOLUME","unitSystem":"Units.USCUSTOM","definition":"[MEGA]*GALLON"},"CUB_US_SURVEY_IN":{"schemaItemType":"Unit","label":"in³ (US Survey)","phenomenon":"Units.VOLUME","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_IN(3)"},"CUB_US_SURVEY_FT":{"schemaItemType":"Unit","label":"ft³ (US Survey)","phenomenon":"Units.VOLUME","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_FT(3)"},"CUB_US_SURVEY_YRD":{"schemaItemType":"Unit","label":"yrd³ (US Survey)","phenomenon":"Units.VOLUME","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_YRD(3)"},"CUB_US_SURVEY_MILE":{"schemaItemType":"Unit","label":"mile³ (US Survey)","phenomenon":"Units.VOLUME","unitSystem":"Units.USSURVEY","definition":"US_SURVEY_MILE(3)"},"GALLON_IMPERIAL":{"schemaItemType":"Unit","label":"gal (imp)","description":"Exact, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B.","phenomenon":"Units.VOLUME","unitSystem":"Units.IMPERIAL","definition":"LITRE","numerator":4.54609},"CUB_M_PER_CUB_M":{"schemaItemType":"Unit","label":"m³/m³","phenomenon":"Units.VOLUME_RATIO","unitSystem":"Units.SI","definition":"M(3)*M(-3)"},"LITRE_PER_LITRE":{"schemaItemType":"Unit","label":"liter/liter","phenomenon":"Units.VOLUME_RATIO","unitSystem":"Units.METRIC","definition":"LITRE*LITRE(-1)"},"CUB_M_PER_KG":{"schemaItemType":"Unit","label":"m³/kg","phenomenon":"Units.SPECIFIC_VOLUME","unitSystem":"Units.SI","definition":"M(3)*KG(-1)"},"CUB_FT_PER_LBM":{"schemaItemType":"Unit","label":"ft³/lm","phenomenon":"Units.SPECIFIC_VOLUME","unitSystem":"Units.USCUSTOM","definition":"FT(3)*LBM(-1)"},"CUB_M_PER_M":{"schemaItemType":"Unit","label":"m³/m","phenomenon":"Units.VOLUME_PER_LENGTH","unitSystem":"Units.SI","definition":"M(3)*M(-1)"},"CUB_FT_PER_FT":{"schemaItemType":"Unit","label":"ft³/ft","phenomenon":"Units.VOLUME_PER_LENGTH","unitSystem":"Units.USCUSTOM","definition":"FT(3)*FT(-1)"},"M_TO_THE_SIXTH":{"schemaItemType":"Unit","label":"m⁶","phenomenon":"Units.TORSIONAL_WARPING_CONSTANT","unitSystem":"Units.SI","definition":"M(6)"},"MM_TO_THE_SIXTH":{"schemaItemType":"Unit","label":"mm⁶","phenomenon":"Units.TORSIONAL_WARPING_CONSTANT","unitSystem":"Units.METRIC","definition":"MM(6)"},"CM_TO_THE_SIXTH":{"schemaItemType":"Unit","label":"cm⁶","phenomenon":"Units.TORSIONAL_WARPING_CONSTANT","unitSystem":"Units.METRIC","definition":"CM(6)"},"IN_TO_THE_SIXTH":{"schemaItemType":"Unit","label":"in⁶","phenomenon":"Units.TORSIONAL_WARPING_CONSTANT","unitSystem":"Units.USCUSTOM","definition":"IN(6)"},"FT_TO_THE_SIXTH":{"schemaItemType":"Unit","label":"ft⁶","phenomenon":"Units.TORSIONAL_WARPING_CONSTANT","unitSystem":"Units.USCUSTOM","definition":"FT(6)"},"VA":{"schemaItemType":"Unit","phenomenon":"Units.APPARENT_POWER","unitSystem":"Units.SI","definition":"VOLT*A"},"KVA":{"schemaItemType":"Unit","phenomenon":"Units.APPARENT_POWER","unitSystem":"Units.METRIC","definition":"[KILO]*VA"},"MVA":{"schemaItemType":"Unit","phenomenon":"Units.APPARENT_POWER","unitSystem":"Units.METRIC","definition":"[MEGA]*VA"},"M":{"schemaItemType":"Unit","label":"m","phenomenon":"Units.LENGTH","unitSystem":"Units.SI","definition":"M"},"KG":{"schemaItemType":"Unit","label":"kg","phenomenon":"Units.MASS","unitSystem":"Units.SI","definition":"KG"},"S":{"schemaItemType":"Unit","label":"s","phenomenon":"Units.TIME","unitSystem":"Units.SI","definition":"S"},"K":{"schemaItemType":"Unit","phenomenon":"Units.TEMPERATURE","unitSystem":"Units.SI","definition":"K"},"DELTA_KELVIN":{"schemaItemType":"Unit","label":"ΔK","phenomenon":"Units.TEMPERATURE_CHANGE","unitSystem":"Units.SI","definition":"DELTA_KELVIN"},"A":{"schemaItemType":"Unit","phenomenon":"Units.CURRENT","unitSystem":"Units.SI","definition":"A"},"MOL":{"schemaItemType":"Unit","label":"mol","description":"Where mol is the SI gram mol or gmol.","phenomenon":"Units.MOLE","unitSystem":"Units.SI","definition":"MOL"},"CD":{"schemaItemType":"Unit","label":"cd","phenomenon":"Units.LUMINOSITY","unitSystem":"Units.SI","definition":"CD"},"RAD":{"schemaItemType":"Unit","label":"rad","phenomenon":"Units.ANGLE","unitSystem":"Units.SI","definition":"RAD"},"HORIZONTAL_DIR_RAD":{"schemaItemType":"Unit","label":"rad","phenomenon":"Units.HORIZONTAL_DIRECTION","unitSystem":"Units.SI","definition":"HORIZONTAL_DIR_RAD"},"STERAD":{"schemaItemType":"Unit","label":"sterad","phenomenon":"Units.SOLIDANGLE","unitSystem":"Units.SI","definition":"STERAD"},"US_DOLLAR":{"schemaItemType":"Unit","label":"$","phenomenon":"Units.CURRENCY","unitSystem":"Units.FINANCE","definition":"US_DOLLAR"},"MONETARY_UNIT":{"schemaItemType":"Unit","label":"¤","description":"For money of an unspecified denomination","phenomenon":"Units.CURRENCY","unitSystem":"Units.FINANCE","definition":"MONETARY_UNIT"},"PERSON":{"schemaItemType":"Unit","label":"person","phenomenon":"Units.CAPITA","unitSystem":"Units.SI","definition":"PERSON"},"ONE":{"schemaItemType":"Unit","label":"one","phenomenon":"Units.NUMBER","unitSystem":"Units.INTERNATIONAL","definition":"ONE"},"COEFFICIENT":{"schemaItemType":"Unit","label":"coefficient","description":"For unitless coefficients","phenomenon":"Units.NUMBER","unitSystem":"Units.INTERNATIONAL","definition":"ONE"},"OHM":{"schemaItemType":"Unit","label":"Ω","phenomenon":"Units.ELECTRICAL_RESISTANCE","unitSystem":"Units.SI","definition":"VOLT*A(-1)"},"KOHM":{"schemaItemType":"Unit","label":"kΩ","phenomenon":"Units.ELECTRICAL_RESISTANCE","unitSystem":"Units.METRIC","definition":"[KILO]*OHM"},"OHM_M":{"schemaItemType":"Unit","label":"Ω·m","phenomenon":"Units.ELECTRICAL_RESISTIVITY","unitSystem":"Units.SI","definition":"OHM*M"},"M_PER_REVOLUTION":{"schemaItemType":"Unit","label":"m/r","phenomenon":"Units.THREAD_PITCH","unitSystem":"Units.INTERNATIONAL","definition":"M*REVOLUTION(-1)"},"M_PER_RAD":{"schemaItemType":"Unit","label":"m/rad","phenomenon":"Units.THREAD_PITCH","unitSystem":"Units.SI","definition":"M*RAD(-1)"},"IN_PER_DEGREE":{"schemaItemType":"Unit","label":"in/degree","phenomenon":"Units.THREAD_PITCH","unitSystem":"Units.USCUSTOM","definition":"IN*ARC_DEG(-1)"},"J_PER_K":{"schemaItemType":"Unit","label":"J/K","phenomenon":"Units.ENTROPY","unitSystem":"Units.SI","definition":"J*DELTA_KELVIN(-1)"},"KJ_PER_K":{"schemaItemType":"Unit","label":"KJ/K","phenomenon":"Units.ENTROPY","unitSystem":"Units.METRIC","definition":"[KILO]*J*DELTA_KELVIN(-1)"},"BTU_PER_FAHRENHEIT":{"schemaItemType":"Unit","label":"Btu/°F","description":"Exact, See http://physics.nist.gov/cuu/pdf/sp811.pdf Appendix B.8, page 46.","phenomenon":"Units.ENTROPY","unitSystem":"Units.USCUSTOM","definition":"BTU*DELTA_FAHRENHEIT(-1)"},"LUMEN_PER_W":{"schemaItemType":"Unit","label":"lm/W","phenomenon":"Units.LUMINOUS_EFFICACY","unitSystem":"Units.SI","definition":"LUMEN*W(-1)"},"INVERSE_N":{"schemaItemType":"Unit","label":"1/N","phenomenon":"Units.MOMENT_DISPLAY_SCALE","unitSystem":"Units.SI","definition":"N(-1)"},"INVERSE_KN":{"schemaItemType":"Unit","label":"1/kN","phenomenon":"Units.MOMENT_DISPLAY_SCALE","unitSystem":"Units.METRIC","definition":"KN(-1)"},"INVERSE_KPF":{"schemaItemType":"Unit","label":"1/kpf","phenomenon":"Units.MOMENT_DISPLAY_SCALE","unitSystem":"Units.USCUSTOM","definition":"KPF(-1)"},"M_PER_N":{"schemaItemType":"Unit","label":"m/N","phenomenon":"Units.FORCE_DISPLAY_SCALE","unitSystem":"Units.SI","definition":"N_PER_M(-1)"},"M_PER_KN":{"schemaItemType":"Unit","label":"m/kN","phenomenon":"Units.FORCE_DISPLAY_SCALE","unitSystem":"Units.METRIC","definition":"KN_PER_M(-1)"}}}');
336974
337344
 
336975
337345
  /***/ }
336976
337346
 
@@ -337065,10 +337435,9 @@ module.exports = /*#__PURE__*/JSON.parse('{"name":"@itwin/core-frontend","versio
337065
337435
  /******/ // This file contains only the entry chunk.
337066
337436
  /******/ // The chunk loading function for additional chunks
337067
337437
  /******/ __webpack_require__.e = (chunkId) => {
337068
- /******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {
337069
- /******/ __webpack_require__.f[key](chunkId, promises);
337070
- /******/ return promises;
337071
- /******/ }, []));
337438
+ /******/ const promises = [];
337439
+ /******/ __webpack_require__.f.j(chunkId, promises);
337440
+ /******/ return Promise.all(promises);
337072
337441
  /******/ };
337073
337442
  /******/
337074
337443
  /******/ /* webpack/runtime/get javascript chunk filename */