@itwin/ecschema-metadata 3.7.13 → 3.7.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/Constants.d.ts +23 -23
  3. package/lib/cjs/Constants.js +33 -33
  4. package/lib/cjs/Constants.js.map +1 -1
  5. package/lib/cjs/Context.d.ts +139 -139
  6. package/lib/cjs/Context.js +204 -204
  7. package/lib/cjs/DelayedPromise.d.ts +88 -88
  8. package/lib/cjs/DelayedPromise.js +91 -91
  9. package/lib/cjs/DelayedPromise.js.map +1 -1
  10. package/lib/cjs/Deserialization/AbstractParser.d.ts +45 -45
  11. package/lib/cjs/Deserialization/AbstractParser.js +11 -11
  12. package/lib/cjs/Deserialization/AbstractParser.js.map +1 -1
  13. package/lib/cjs/Deserialization/Helper.d.ts +251 -251
  14. package/lib/cjs/Deserialization/Helper.js +843 -843
  15. package/lib/cjs/Deserialization/Helper.js.map +1 -1
  16. package/lib/cjs/Deserialization/JsonParser.d.ts +165 -165
  17. package/lib/cjs/Deserialization/JsonParser.js +680 -680
  18. package/lib/cjs/Deserialization/JsonParser.js.map +1 -1
  19. package/lib/cjs/Deserialization/JsonProps.d.ts +282 -282
  20. package/lib/cjs/Deserialization/JsonProps.js +9 -9
  21. package/lib/cjs/Deserialization/JsonProps.js.map +1 -1
  22. package/lib/cjs/Deserialization/SchemaGraphUtil.d.ts +34 -34
  23. package/lib/cjs/Deserialization/SchemaGraphUtil.js +77 -77
  24. package/lib/cjs/Deserialization/SchemaGraphUtil.js.map +1 -1
  25. package/lib/cjs/Deserialization/XmlParser.d.ts +85 -85
  26. package/lib/cjs/Deserialization/XmlParser.js +973 -973
  27. package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
  28. package/lib/cjs/Deserialization/XmlSerializationUtils.d.ts +54 -54
  29. package/lib/cjs/Deserialization/XmlSerializationUtils.js +174 -174
  30. package/lib/cjs/Deserialization/XmlSerializationUtils.js.map +1 -1
  31. package/lib/cjs/ECName.d.ts +30 -30
  32. package/lib/cjs/ECName.js +85 -85
  33. package/lib/cjs/ECName.js.map +1 -1
  34. package/lib/cjs/ECObjects.d.ts +162 -162
  35. package/lib/cjs/ECObjects.js +453 -453
  36. package/lib/cjs/ECObjects.js.map +1 -1
  37. package/lib/cjs/Exception.d.ts +43 -43
  38. package/lib/cjs/Exception.js +86 -86
  39. package/lib/cjs/Exception.js.map +1 -1
  40. package/lib/cjs/Interfaces.d.ts +66 -66
  41. package/lib/cjs/Interfaces.js +9 -9
  42. package/lib/cjs/Interfaces.js.map +1 -1
  43. package/lib/cjs/Metadata/Class.d.ts +243 -243
  44. package/lib/cjs/Metadata/Class.js +558 -558
  45. package/lib/cjs/Metadata/Class.js.map +1 -1
  46. package/lib/cjs/Metadata/Constant.d.ts +64 -64
  47. package/lib/cjs/Metadata/Constant.js +123 -123
  48. package/lib/cjs/Metadata/Constant.js.map +1 -1
  49. package/lib/cjs/Metadata/CustomAttribute.d.ts +23 -23
  50. package/lib/cjs/Metadata/CustomAttribute.js +27 -27
  51. package/lib/cjs/Metadata/CustomAttribute.js.map +1 -1
  52. package/lib/cjs/Metadata/CustomAttributeClass.d.ts +39 -39
  53. package/lib/cjs/Metadata/CustomAttributeClass.js +68 -68
  54. package/lib/cjs/Metadata/CustomAttributeClass.js.map +1 -1
  55. package/lib/cjs/Metadata/EntityClass.d.ts +77 -77
  56. package/lib/cjs/Metadata/EntityClass.js +230 -230
  57. package/lib/cjs/Metadata/EntityClass.js.map +1 -1
  58. package/lib/cjs/Metadata/Enumeration.d.ts +86 -86
  59. package/lib/cjs/Metadata/Enumeration.js +159 -159
  60. package/lib/cjs/Metadata/Enumeration.js.map +1 -1
  61. package/lib/cjs/Metadata/Format.d.ts +98 -98
  62. package/lib/cjs/Metadata/Format.js +242 -242
  63. package/lib/cjs/Metadata/Format.js.map +1 -1
  64. package/lib/cjs/Metadata/InvertedUnit.d.ts +49 -49
  65. package/lib/cjs/Metadata/InvertedUnit.js +97 -97
  66. package/lib/cjs/Metadata/InvertedUnit.js.map +1 -1
  67. package/lib/cjs/Metadata/KindOfQuantity.d.ts +65 -65
  68. package/lib/cjs/Metadata/KindOfQuantity.js +225 -225
  69. package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
  70. package/lib/cjs/Metadata/Mixin.d.ts +54 -54
  71. package/lib/cjs/Metadata/Mixin.js +113 -113
  72. package/lib/cjs/Metadata/Mixin.js.map +1 -1
  73. package/lib/cjs/Metadata/OverrideFormat.d.ts +55 -55
  74. package/lib/cjs/Metadata/OverrideFormat.js +88 -88
  75. package/lib/cjs/Metadata/OverrideFormat.js.map +1 -1
  76. package/lib/cjs/Metadata/Phenomenon.d.ts +33 -33
  77. package/lib/cjs/Metadata/Phenomenon.js +59 -59
  78. package/lib/cjs/Metadata/Phenomenon.js.map +1 -1
  79. package/lib/cjs/Metadata/Property.d.ts +197 -197
  80. package/lib/cjs/Metadata/Property.js +491 -491
  81. package/lib/cjs/Metadata/Property.js.map +1 -1
  82. package/lib/cjs/Metadata/PropertyCategory.d.ts +39 -39
  83. package/lib/cjs/Metadata/PropertyCategory.js +61 -61
  84. package/lib/cjs/Metadata/PropertyCategory.js.map +1 -1
  85. package/lib/cjs/Metadata/RelationshipClass.d.ts +152 -152
  86. package/lib/cjs/Metadata/RelationshipClass.js +349 -349
  87. package/lib/cjs/Metadata/RelationshipClass.js.map +1 -1
  88. package/lib/cjs/Metadata/Schema.d.ts +291 -291
  89. package/lib/cjs/Metadata/Schema.js +520 -520
  90. package/lib/cjs/Metadata/Schema.js.map +1 -1
  91. package/lib/cjs/Metadata/SchemaItem.d.ts +61 -61
  92. package/lib/cjs/Metadata/SchemaItem.js +136 -136
  93. package/lib/cjs/Metadata/SchemaItem.js.map +1 -1
  94. package/lib/cjs/Metadata/Unit.d.ts +76 -76
  95. package/lib/cjs/Metadata/Unit.js +162 -162
  96. package/lib/cjs/Metadata/UnitSystem.d.ts +20 -20
  97. package/lib/cjs/Metadata/UnitSystem.js +29 -29
  98. package/lib/cjs/Metadata/UnitSystem.js.map +1 -1
  99. package/lib/cjs/PropertyTypes.d.ts +49 -49
  100. package/lib/cjs/PropertyTypes.js +91 -91
  101. package/lib/cjs/PropertyTypes.js.map +1 -1
  102. package/lib/cjs/SchemaJsonLocater.d.ts +34 -34
  103. package/lib/cjs/SchemaJsonLocater.js +42 -42
  104. package/lib/cjs/SchemaJsonLocater.js.map +1 -1
  105. package/lib/cjs/SchemaKey.d.ts +110 -110
  106. package/lib/cjs/SchemaKey.js +219 -219
  107. package/lib/cjs/SchemaKey.js.map +1 -1
  108. package/lib/cjs/SchemaLoader.d.ts +23 -23
  109. package/lib/cjs/SchemaLoader.js +47 -47
  110. package/lib/cjs/SchemaLoader.js.map +1 -1
  111. package/lib/cjs/SchemaPartVisitorDelegate.d.ts +274 -274
  112. package/lib/cjs/SchemaPartVisitorDelegate.js +212 -212
  113. package/lib/cjs/SchemaPartVisitorDelegate.js.map +1 -1
  114. package/lib/cjs/UnitConversion/Graph.d.ts +34 -34
  115. package/lib/cjs/UnitConversion/Graph.js +83 -83
  116. package/lib/cjs/UnitConversion/Graph.js.map +1 -1
  117. package/lib/cjs/UnitConversion/Parser.d.ts +8 -8
  118. package/lib/cjs/UnitConversion/Parser.js +42 -42
  119. package/lib/cjs/UnitConversion/Parser.js.map +1 -1
  120. package/lib/cjs/UnitConversion/UnitConversion.d.ts +45 -45
  121. package/lib/cjs/UnitConversion/UnitConversion.js +77 -77
  122. package/lib/cjs/UnitConversion/UnitConversion.js.map +1 -1
  123. package/lib/cjs/UnitConversion/UnitConverter.d.ts +39 -39
  124. package/lib/cjs/UnitConversion/UnitConverter.js +116 -116
  125. package/lib/cjs/UnitConversion/UnitConverter.js.map +1 -1
  126. package/lib/cjs/UnitConversion/UnitTree.d.ts +43 -43
  127. package/lib/cjs/UnitConversion/UnitTree.js +169 -169
  128. package/lib/cjs/UnitConversion/UnitTree.js.map +1 -1
  129. package/lib/cjs/UnitProvider/SchemaUnitProvider.d.ts +77 -77
  130. package/lib/cjs/UnitProvider/SchemaUnitProvider.js +236 -236
  131. package/lib/cjs/UnitProvider/SchemaUnitProvider.js.map +1 -1
  132. package/lib/cjs/Validation/SchemaWalker.d.ts +23 -23
  133. package/lib/cjs/Validation/SchemaWalker.js +53 -53
  134. package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
  135. package/lib/cjs/ecschema-metadata.d.ts +51 -51
  136. package/lib/cjs/ecschema-metadata.js +96 -96
  137. package/lib/cjs/ecschema-metadata.js.map +1 -1
  138. package/lib/cjs/utils/SchemaGraph.d.ts +25 -25
  139. package/lib/cjs/utils/SchemaGraph.js +65 -65
  140. package/lib/cjs/utils/SchemaGraph.js.map +1 -1
  141. package/package.json +8 -8
@@ -1,84 +1,84 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
- * See LICENSE.md in the project root for license terms and full copyright notice.
5
- *--------------------------------------------------------------------------------------------*/
6
- // Following https://github.com/dagrejs/graphlib/blob/master/lib/graph.js
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.Graph = void 0;
9
- /** @internal */
10
- class Graph {
11
- constructor() {
12
- this._edgeKeyDelim = "\x01";
13
- this._label = "";
14
- this._nodeCount = 0;
15
- this._edgeCount = 0;
16
- this.setGraph = (label) => {
17
- this._label = label;
18
- return this;
19
- };
20
- this.graph = () => {
21
- return this._label;
22
- };
23
- this.nodeCount = () => {
24
- return this._nodeCount;
25
- };
26
- this.nodes = () => {
27
- return Object.keys(this._nodes);
28
- };
29
- this.setNode = (nodeKey, nodeValue) => {
30
- if (nodeKey in this._nodes) {
31
- this._nodes[nodeKey] = nodeValue;
32
- return;
33
- }
34
- this._nodes[nodeKey] = nodeValue;
35
- this._outEdges[nodeKey] = {};
36
- ++this._nodeCount;
37
- };
38
- this.node = (nodeKey) => {
39
- return this._nodes[nodeKey];
40
- };
41
- this.hasNode = (nodeKey) => {
42
- return nodeKey in this._nodes;
43
- };
44
- this.edgeCount = () => {
45
- return this._edgeCount;
46
- };
47
- this.edges = () => {
48
- return Object.values(this._edgeObjs);
49
- };
50
- this.setEdge = (v, w, value) => {
51
- const edgeId = v + this._edgeKeyDelim + w + this._edgeKeyDelim;
52
- if (edgeId in this._edgeLabels) {
53
- // this._edgeLabels[edgeId] = value;
54
- // Update exponent, specific to this graph's use case
55
- this._edgeLabels[edgeId].exponent += value.exponent;
56
- return;
57
- }
58
- this._edgeLabels[edgeId] = value;
59
- const edgeObj = {
60
- v,
61
- w,
62
- };
63
- this._edgeObjs[edgeId] = edgeObj;
64
- // setNode should have ran first, so this.outEdges[v] shouldn't be undefined
65
- this._outEdges[v][edgeId] = edgeObj;
66
- this._edgeCount++;
67
- };
68
- this.edge = (v, w) => {
69
- const edgeId = v + this._edgeKeyDelim + w + this._edgeKeyDelim;
70
- return this._edgeLabels[edgeId];
71
- };
72
- this.outEdges = (v) => {
73
- const outV = this._outEdges[v];
74
- const edges = Object.values(outV);
75
- return edges;
76
- };
77
- this._nodes = {};
78
- this._edgeObjs = {};
79
- this._edgeLabels = {};
80
- this._outEdges = {};
81
- }
82
- }
83
- exports.Graph = Graph;
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ // Following https://github.com/dagrejs/graphlib/blob/master/lib/graph.js
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.Graph = void 0;
9
+ /** @internal */
10
+ class Graph {
11
+ constructor() {
12
+ this._edgeKeyDelim = "\x01";
13
+ this._label = "";
14
+ this._nodeCount = 0;
15
+ this._edgeCount = 0;
16
+ this.setGraph = (label) => {
17
+ this._label = label;
18
+ return this;
19
+ };
20
+ this.graph = () => {
21
+ return this._label;
22
+ };
23
+ this.nodeCount = () => {
24
+ return this._nodeCount;
25
+ };
26
+ this.nodes = () => {
27
+ return Object.keys(this._nodes);
28
+ };
29
+ this.setNode = (nodeKey, nodeValue) => {
30
+ if (nodeKey in this._nodes) {
31
+ this._nodes[nodeKey] = nodeValue;
32
+ return;
33
+ }
34
+ this._nodes[nodeKey] = nodeValue;
35
+ this._outEdges[nodeKey] = {};
36
+ ++this._nodeCount;
37
+ };
38
+ this.node = (nodeKey) => {
39
+ return this._nodes[nodeKey];
40
+ };
41
+ this.hasNode = (nodeKey) => {
42
+ return nodeKey in this._nodes;
43
+ };
44
+ this.edgeCount = () => {
45
+ return this._edgeCount;
46
+ };
47
+ this.edges = () => {
48
+ return Object.values(this._edgeObjs);
49
+ };
50
+ this.setEdge = (v, w, value) => {
51
+ const edgeId = v + this._edgeKeyDelim + w + this._edgeKeyDelim;
52
+ if (edgeId in this._edgeLabels) {
53
+ // this._edgeLabels[edgeId] = value;
54
+ // Update exponent, specific to this graph's use case
55
+ this._edgeLabels[edgeId].exponent += value.exponent;
56
+ return;
57
+ }
58
+ this._edgeLabels[edgeId] = value;
59
+ const edgeObj = {
60
+ v,
61
+ w,
62
+ };
63
+ this._edgeObjs[edgeId] = edgeObj;
64
+ // setNode should have ran first, so this.outEdges[v] shouldn't be undefined
65
+ this._outEdges[v][edgeId] = edgeObj;
66
+ this._edgeCount++;
67
+ };
68
+ this.edge = (v, w) => {
69
+ const edgeId = v + this._edgeKeyDelim + w + this._edgeKeyDelim;
70
+ return this._edgeLabels[edgeId];
71
+ };
72
+ this.outEdges = (v) => {
73
+ const outV = this._outEdges[v];
74
+ const edges = Object.values(outV);
75
+ return edges;
76
+ };
77
+ this._nodes = {};
78
+ this._edgeObjs = {};
79
+ this._edgeLabels = {};
80
+ this._outEdges = {};
81
+ }
82
+ }
83
+ exports.Graph = Graph;
84
84
  //# sourceMappingURL=Graph.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../../src/UnitConversion/Graph.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F,yEAAyE;;;AA0CzE,gBAAgB;AAChB,MAAa,KAAK;IAUhB;QATQ,kBAAa,GAAG,MAAM,CAAC;QACvB,WAAM,GAAG,EAAE,CAAC;QACZ,eAAU,GAAG,CAAC,CAAC;QACf,eAAU,GAAG,CAAC,CAAC;QAahB,aAAQ,GAAG,CAAC,KAAa,EAAY,EAAE;YAC5C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEK,UAAK,GAAG,GAAG,EAAE;YAClB,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC,CAAC;QAEK,cAAS,GAAG,GAAG,EAAE;YACtB,OAAO,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC,CAAC;QAEK,UAAK,GAAG,GAAG,EAAE;YAClB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,CAAC;QAEK,YAAO,GAAG,CAAC,OAAe,EAAE,SAAY,EAAE,EAAE;YACjD,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;gBACjC,OAAO;aACR;YACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAC7B,EAAE,IAAI,CAAC,UAAU,CAAC;QACpB,CAAC,CAAC;QAEK,SAAI,GAAG,CAAC,OAAe,EAAE,EAAE;YAChC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEK,YAAO,GAAG,CAAC,OAAe,EAAE,EAAE;YACnC,OAAO,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;QAChC,CAAC,CAAC;QAEK,cAAS,GAAG,GAAG,EAAE;YACtB,OAAO,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC,CAAC;QAEK,UAAK,GAAG,GAAG,EAAE;YAClB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC,CAAC;QAEK,YAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,KAA2B,EAAE,EAAE;YACrE,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YAC/D,IAAI,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;gBAC9B,oCAAoC;gBACpC,qDAAqD;gBACrD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC;gBACpD,OAAO;aACR;YAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;YACjC,MAAM,OAAO,GAAG;gBACd,CAAC;gBACD,CAAC;aACF,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;YACjC,4EAA4E;YAC5E,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;YACpC,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC,CAAC;QAEK,SAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE;YACrC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YAC/D,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,CAAC;QAEK,aAAQ,GAAG,CAAC,CAAS,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QA9EA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;CA2EF;AA1FD,sBA0FC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n// Following https://github.com/dagrejs/graphlib/blob/master/lib/graph.js\n\n/**\n * Using generics for nodes - T represents Unit | Constant in our use case\n * @internal\n */\ninterface NodesMap<T> {\n [node: string]: T;\n}\n\n/**\n * Describe edges based on its node endpoints (v, w)\n * @internal\n */\ninterface EdgeObjsMap {\n [edge: string]: {\n v: string;\n w: string;\n };\n}\n\n/**\n * Describe edges based on the exponent they carry\n * @internal\n */\ninterface EdgeLabelsMap {\n [edge: string]: { exponent: number };\n}\n\n/**\n * List each node with outgoing edges in outer map; describe each node's outgoing edges in inner map\n * @internal\n */\ninterface OutEdgesMap {\n [node: string]: {\n [edges: string]: {\n v: string;\n w: string;\n };\n };\n}\n\n/** @internal */\nexport class Graph<T> {\n private _edgeKeyDelim = \"\\x01\";\n private _label = \"\";\n private _nodeCount = 0;\n private _edgeCount = 0;\n private _nodes: NodesMap<T>;\n private _edgeObjs: EdgeObjsMap;\n private _edgeLabels: EdgeLabelsMap;\n private _outEdges: OutEdgesMap;\n\n constructor() {\n this._nodes = {};\n this._edgeObjs = {};\n this._edgeLabels = {};\n this._outEdges = {};\n }\n\n public setGraph = (label: string): Graph<T> => {\n this._label = label;\n return this;\n };\n\n public graph = () => {\n return this._label;\n };\n\n public nodeCount = () => {\n return this._nodeCount;\n };\n\n public nodes = () => {\n return Object.keys(this._nodes);\n };\n\n public setNode = (nodeKey: string, nodeValue: T) => {\n if (nodeKey in this._nodes) {\n this._nodes[nodeKey] = nodeValue;\n return;\n }\n this._nodes[nodeKey] = nodeValue;\n this._outEdges[nodeKey] = {};\n ++this._nodeCount;\n };\n\n public node = (nodeKey: string) => {\n return this._nodes[nodeKey];\n };\n\n public hasNode = (nodeKey: string) => {\n return nodeKey in this._nodes;\n };\n\n public edgeCount = () => {\n return this._edgeCount;\n };\n\n public edges = () => {\n return Object.values(this._edgeObjs);\n };\n\n public setEdge = (v: string, w: string, value: { exponent: number }) => {\n const edgeId = v + this._edgeKeyDelim + w + this._edgeKeyDelim;\n if (edgeId in this._edgeLabels) {\n // this._edgeLabels[edgeId] = value;\n // Update exponent, specific to this graph's use case\n this._edgeLabels[edgeId].exponent += value.exponent;\n return;\n }\n\n this._edgeLabels[edgeId] = value;\n const edgeObj = {\n v,\n w,\n };\n this._edgeObjs[edgeId] = edgeObj;\n // setNode should have ran first, so this.outEdges[v] shouldn't be undefined\n this._outEdges[v][edgeId] = edgeObj;\n this._edgeCount++;\n };\n\n public edge = (v: string, w: string) => {\n const edgeId = v + this._edgeKeyDelim + w + this._edgeKeyDelim;\n return this._edgeLabels[edgeId];\n };\n\n public outEdges = (v: string) => {\n const outV = this._outEdges[v];\n const edges = Object.values(outV);\n return edges;\n };\n}\n"]}
1
+ {"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../../src/UnitConversion/Graph.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n// Following https://github.com/dagrejs/graphlib/blob/master/lib/graph.js\r\n\r\n/**\r\n * Using generics for nodes - T represents Unit | Constant in our use case\r\n * @internal\r\n */\r\ninterface NodesMap<T> {\r\n [node: string]: T;\r\n}\r\n\r\n/**\r\n * Describe edges based on its node endpoints (v, w)\r\n * @internal\r\n */\r\ninterface EdgeObjsMap {\r\n [edge: string]: {\r\n v: string;\r\n w: string;\r\n };\r\n}\r\n\r\n/**\r\n * Describe edges based on the exponent they carry\r\n * @internal\r\n */\r\ninterface EdgeLabelsMap {\r\n [edge: string]: { exponent: number };\r\n}\r\n\r\n/**\r\n * List each node with outgoing edges in outer map; describe each node's outgoing edges in inner map\r\n * @internal\r\n */\r\ninterface OutEdgesMap {\r\n [node: string]: {\r\n [edges: string]: {\r\n v: string;\r\n w: string;\r\n };\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport class Graph<T> {\r\n private _edgeKeyDelim = \"\\x01\";\r\n private _label = \"\";\r\n private _nodeCount = 0;\r\n private _edgeCount = 0;\r\n private _nodes: NodesMap<T>;\r\n private _edgeObjs: EdgeObjsMap;\r\n private _edgeLabels: EdgeLabelsMap;\r\n private _outEdges: OutEdgesMap;\r\n\r\n constructor() {\r\n this._nodes = {};\r\n this._edgeObjs = {};\r\n this._edgeLabels = {};\r\n this._outEdges = {};\r\n }\r\n\r\n public setGraph = (label: string): Graph<T> => {\r\n this._label = label;\r\n return this;\r\n };\r\n\r\n public graph = () => {\r\n return this._label;\r\n };\r\n\r\n public nodeCount = () => {\r\n return this._nodeCount;\r\n };\r\n\r\n public nodes = () => {\r\n return Object.keys(this._nodes);\r\n };\r\n\r\n public setNode = (nodeKey: string, nodeValue: T) => {\r\n if (nodeKey in this._nodes) {\r\n this._nodes[nodeKey] = nodeValue;\r\n return;\r\n }\r\n this._nodes[nodeKey] = nodeValue;\r\n this._outEdges[nodeKey] = {};\r\n ++this._nodeCount;\r\n };\r\n\r\n public node = (nodeKey: string) => {\r\n return this._nodes[nodeKey];\r\n };\r\n\r\n public hasNode = (nodeKey: string) => {\r\n return nodeKey in this._nodes;\r\n };\r\n\r\n public edgeCount = () => {\r\n return this._edgeCount;\r\n };\r\n\r\n public edges = () => {\r\n return Object.values(this._edgeObjs);\r\n };\r\n\r\n public setEdge = (v: string, w: string, value: { exponent: number }) => {\r\n const edgeId = v + this._edgeKeyDelim + w + this._edgeKeyDelim;\r\n if (edgeId in this._edgeLabels) {\r\n // this._edgeLabels[edgeId] = value;\r\n // Update exponent, specific to this graph's use case\r\n this._edgeLabels[edgeId].exponent += value.exponent;\r\n return;\r\n }\r\n\r\n this._edgeLabels[edgeId] = value;\r\n const edgeObj = {\r\n v,\r\n w,\r\n };\r\n this._edgeObjs[edgeId] = edgeObj;\r\n // setNode should have ran first, so this.outEdges[v] shouldn't be undefined\r\n this._outEdges[v][edgeId] = edgeObj;\r\n this._edgeCount++;\r\n };\r\n\r\n public edge = (v: string, w: string) => {\r\n const edgeId = v + this._edgeKeyDelim + w + this._edgeKeyDelim;\r\n return this._edgeLabels[edgeId];\r\n };\r\n\r\n public outEdges = (v: string) => {\r\n const outV = this._outEdges[v];\r\n const edges = Object.values(outV);\r\n return edges;\r\n };\r\n}\r\n"]}
@@ -1,9 +1,9 @@
1
- /** @internal */
2
- export interface DefinitionFragment {
3
- name: string;
4
- exponent: number;
5
- constant: boolean;
6
- }
7
- /** @internal */
8
- export declare function parseDefinition(definition: string): Map<string, DefinitionFragment>;
1
+ /** @internal */
2
+ export interface DefinitionFragment {
3
+ name: string;
4
+ exponent: number;
5
+ constant: boolean;
6
+ }
7
+ /** @internal */
8
+ export declare function parseDefinition(definition: string): Map<string, DefinitionFragment>;
9
9
  //# sourceMappingURL=Parser.d.ts.map
@@ -1,43 +1,43 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseDefinition = void 0;
4
- /*---------------------------------------------------------------------------------------------
5
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
- * See LICENSE.md in the project root for license terms and full copyright notice.
7
- *--------------------------------------------------------------------------------------------*/
8
- const expressionRgx = /^(([A-Z]\w*:)?([A-Z]\w*|\[([A-Z]\w*:)?[A-Z]\w*\])(\(-?\d+\))?(\*(?!$)|$))+$/i;
9
- const tokenRgx = /(?:(\[)?((?:[A-Z]\w*:)?[A-Z]\w*)\]?)(?:\((-?\d+)\))?/i;
10
- const sp = "*";
11
- /** @internal */
12
- var Tokens;
13
- (function (Tokens) {
14
- Tokens[Tokens["Bracket"] = 1] = "Bracket";
15
- Tokens[Tokens["Word"] = 2] = "Word";
16
- Tokens[Tokens["Exponent"] = 3] = "Exponent";
17
- })(Tokens || (Tokens = {}));
18
- /** @internal */
19
- function parseDefinition(definition) {
20
- const unitMap = new Map();
21
- if (expressionRgx.test(definition)) {
22
- for (const unit of definition.split(sp)) {
23
- const tokens = unit.split(tokenRgx);
24
- const name = tokens[Tokens.Word];
25
- const exponent = tokens[Tokens.Exponent] ? Number(tokens[Tokens.Exponent]) : 1;
26
- const constant = tokens[Tokens.Bracket] !== undefined;
27
- if (unitMap.has(name)) {
28
- const currentDefinition = unitMap.get(name);
29
- currentDefinition.exponent += exponent;
30
- unitMap.set(name, currentDefinition);
31
- }
32
- else {
33
- unitMap.set(name, { name, exponent, constant });
34
- }
35
- }
36
- return unitMap;
37
- }
38
- else {
39
- throw new Error("Invalid definition expression.");
40
- }
41
- }
42
- exports.parseDefinition = parseDefinition;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseDefinition = void 0;
4
+ /*---------------------------------------------------------------------------------------------
5
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
+ * See LICENSE.md in the project root for license terms and full copyright notice.
7
+ *--------------------------------------------------------------------------------------------*/
8
+ const expressionRgx = /^(([A-Z]\w*:)?([A-Z]\w*|\[([A-Z]\w*:)?[A-Z]\w*\])(\(-?\d+\))?(\*(?!$)|$))+$/i;
9
+ const tokenRgx = /(?:(\[)?((?:[A-Z]\w*:)?[A-Z]\w*)\]?)(?:\((-?\d+)\))?/i;
10
+ const sp = "*";
11
+ /** @internal */
12
+ var Tokens;
13
+ (function (Tokens) {
14
+ Tokens[Tokens["Bracket"] = 1] = "Bracket";
15
+ Tokens[Tokens["Word"] = 2] = "Word";
16
+ Tokens[Tokens["Exponent"] = 3] = "Exponent";
17
+ })(Tokens || (Tokens = {}));
18
+ /** @internal */
19
+ function parseDefinition(definition) {
20
+ const unitMap = new Map();
21
+ if (expressionRgx.test(definition)) {
22
+ for (const unit of definition.split(sp)) {
23
+ const tokens = unit.split(tokenRgx);
24
+ const name = tokens[Tokens.Word];
25
+ const exponent = tokens[Tokens.Exponent] ? Number(tokens[Tokens.Exponent]) : 1;
26
+ const constant = tokens[Tokens.Bracket] !== undefined;
27
+ if (unitMap.has(name)) {
28
+ const currentDefinition = unitMap.get(name);
29
+ currentDefinition.exponent += exponent;
30
+ unitMap.set(name, currentDefinition);
31
+ }
32
+ else {
33
+ unitMap.set(name, { name, exponent, constant });
34
+ }
35
+ }
36
+ return unitMap;
37
+ }
38
+ else {
39
+ throw new Error("Invalid definition expression.");
40
+ }
41
+ }
42
+ exports.parseDefinition = parseDefinition;
43
43
  //# sourceMappingURL=Parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../../src/UnitConversion/Parser.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,MAAM,aAAa,GAAG,8EAA8E,CAAC;AACrG,MAAM,QAAQ,GAAG,uDAAuD,CAAC;AACzE,MAAM,EAAE,GAAG,GAAG,CAAC;AAEf,gBAAgB;AAChB,IAAK,MAIJ;AAJD,WAAK,MAAM;IACT,yCAAW,CAAA;IACX,mCAAQ,CAAA;IACR,2CAAY,CAAA;AACd,CAAC,EAJI,MAAM,KAAN,MAAM,QAIV;AASD,gBAAgB;AAChB,SAAgB,eAAe,CAAC,UAAkB;IAChD,MAAM,OAAO,GAAoC,IAAI,GAAG,EAAE,CAAC;IAE3D,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QAClC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;YACtD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACrB,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;gBAC7C,iBAAiB,CAAC,QAAQ,IAAI,QAAQ,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;aACtC;iBAAM;gBACL,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;aACjD;SACF;QAED,OAAO,OAAO,CAAC;KAChB;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;KACnD;AACH,CAAC;AAtBD,0CAsBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nconst expressionRgx = /^(([A-Z]\\w*:)?([A-Z]\\w*|\\[([A-Z]\\w*:)?[A-Z]\\w*\\])(\\(-?\\d+\\))?(\\*(?!$)|$))+$/i;\nconst tokenRgx = /(?:(\\[)?((?:[A-Z]\\w*:)?[A-Z]\\w*)\\]?)(?:\\((-?\\d+)\\))?/i;\nconst sp = \"*\";\n\n/** @internal */\nenum Tokens {\n Bracket = 1,\n Word = 2,\n Exponent = 3,\n}\n\n/** @internal */\nexport interface DefinitionFragment {\n name: string;\n exponent: number;\n constant: boolean;\n}\n\n/** @internal */\nexport function parseDefinition(definition: string): Map<string, DefinitionFragment> {\n const unitMap: Map<string, DefinitionFragment> = new Map();\n\n if (expressionRgx.test(definition)) {\n for (const unit of definition.split(sp)) {\n const tokens = unit.split(tokenRgx);\n const name = tokens[Tokens.Word];\n const exponent = tokens[Tokens.Exponent] ? Number(tokens[Tokens.Exponent]) : 1;\n const constant = tokens[Tokens.Bracket] !== undefined;\n if (unitMap.has(name)) {\n const currentDefinition = unitMap.get(name)!;\n currentDefinition.exponent += exponent;\n unitMap.set(name, currentDefinition);\n } else {\n unitMap.set(name, { name, exponent, constant });\n }\n }\n\n return unitMap;\n } else {\n throw new Error(\"Invalid definition expression.\");\n }\n}\n"]}
1
+ {"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../../src/UnitConversion/Parser.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,MAAM,aAAa,GAAG,8EAA8E,CAAC;AACrG,MAAM,QAAQ,GAAG,uDAAuD,CAAC;AACzE,MAAM,EAAE,GAAG,GAAG,CAAC;AAEf,gBAAgB;AAChB,IAAK,MAIJ;AAJD,WAAK,MAAM;IACT,yCAAW,CAAA;IACX,mCAAQ,CAAA;IACR,2CAAY,CAAA;AACd,CAAC,EAJI,MAAM,KAAN,MAAM,QAIV;AASD,gBAAgB;AAChB,SAAgB,eAAe,CAAC,UAAkB;IAChD,MAAM,OAAO,GAAoC,IAAI,GAAG,EAAE,CAAC;IAE3D,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QAClC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;YACtD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACrB,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;gBAC7C,iBAAiB,CAAC,QAAQ,IAAI,QAAQ,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;aACtC;iBAAM;gBACL,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;aACjD;SACF;QAED,OAAO,OAAO,CAAC;KAChB;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;KACnD;AACH,CAAC;AAtBD,0CAsBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nconst expressionRgx = /^(([A-Z]\\w*:)?([A-Z]\\w*|\\[([A-Z]\\w*:)?[A-Z]\\w*\\])(\\(-?\\d+\\))?(\\*(?!$)|$))+$/i;\r\nconst tokenRgx = /(?:(\\[)?((?:[A-Z]\\w*:)?[A-Z]\\w*)\\]?)(?:\\((-?\\d+)\\))?/i;\r\nconst sp = \"*\";\r\n\r\n/** @internal */\r\nenum Tokens {\r\n Bracket = 1,\r\n Word = 2,\r\n Exponent = 3,\r\n}\r\n\r\n/** @internal */\r\nexport interface DefinitionFragment {\r\n name: string;\r\n exponent: number;\r\n constant: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport function parseDefinition(definition: string): Map<string, DefinitionFragment> {\r\n const unitMap: Map<string, DefinitionFragment> = new Map();\r\n\r\n if (expressionRgx.test(definition)) {\r\n for (const unit of definition.split(sp)) {\r\n const tokens = unit.split(tokenRgx);\r\n const name = tokens[Tokens.Word];\r\n const exponent = tokens[Tokens.Exponent] ? Number(tokens[Tokens.Exponent]) : 1;\r\n const constant = tokens[Tokens.Bracket] !== undefined;\r\n if (unitMap.has(name)) {\r\n const currentDefinition = unitMap.get(name)!;\r\n currentDefinition.exponent += exponent;\r\n unitMap.set(name, currentDefinition);\r\n } else {\r\n unitMap.set(name, { name, exponent, constant });\r\n }\r\n }\r\n\r\n return unitMap;\r\n } else {\r\n throw new Error(\"Invalid definition expression.\");\r\n }\r\n}\r\n"]}
@@ -1,46 +1,46 @@
1
- import { Constant } from "../Metadata/Constant";
2
- import { Unit } from "../Metadata/Unit";
3
- /**
4
- * Class used for storing calculated conversion between two Units [[UnitConverter.calculateConversion]] and converting values from one Unit to another [[UnitConverter.evaluate]]
5
- * @internal
6
- */
7
- export declare class UnitConversion {
8
- readonly factor: number;
9
- readonly offset: number;
10
- constructor(factor?: number, offset?: number);
11
- /**
12
- * Converts x using UnitConversion
13
- * @param x Input magnitude to be converted
14
- * @returns Output magnitude after conversion
15
- */
16
- evaluate(x: number): number;
17
- /**
18
- * Used to invert source's UnitConversion so that it can be composed with target's UnitConversion cleanly
19
- * @internal
20
- */
21
- inverse(): UnitConversion;
22
- /**
23
- * Combines two UnitConversions
24
- * Used to combine source's UnitConversion and target's UnitConversion for a final UnitConversion that can be evaluated
25
- * @internal
26
- */
27
- compose(conversion: UnitConversion): UnitConversion;
28
- /**
29
- * Multiples two UnitConversions together to calculate factor during reducing
30
- * @internal
31
- */
32
- multiply(conversion: UnitConversion): UnitConversion;
33
- /**
34
- * Raise UnitConversion's factor with power exponent to calculate factor during reducing
35
- * @internal
36
- */
37
- raise(power: number): UnitConversion;
38
- /** @internal */
39
- static identity: UnitConversion;
40
- /**
41
- * Returns UnitConversion with unit's numerator and denominator in factor and unit's offset in offset for reducing
42
- * @internal
43
- */
44
- static from(unit: Unit | Constant): UnitConversion;
45
- }
1
+ import { Constant } from "../Metadata/Constant";
2
+ import { Unit } from "../Metadata/Unit";
3
+ /**
4
+ * Class used for storing calculated conversion between two Units [[UnitConverter.calculateConversion]] and converting values from one Unit to another [[UnitConverter.evaluate]]
5
+ * @internal
6
+ */
7
+ export declare class UnitConversion {
8
+ readonly factor: number;
9
+ readonly offset: number;
10
+ constructor(factor?: number, offset?: number);
11
+ /**
12
+ * Converts x using UnitConversion
13
+ * @param x Input magnitude to be converted
14
+ * @returns Output magnitude after conversion
15
+ */
16
+ evaluate(x: number): number;
17
+ /**
18
+ * Used to invert source's UnitConversion so that it can be composed with target's UnitConversion cleanly
19
+ * @internal
20
+ */
21
+ inverse(): UnitConversion;
22
+ /**
23
+ * Combines two UnitConversions
24
+ * Used to combine source's UnitConversion and target's UnitConversion for a final UnitConversion that can be evaluated
25
+ * @internal
26
+ */
27
+ compose(conversion: UnitConversion): UnitConversion;
28
+ /**
29
+ * Multiples two UnitConversions together to calculate factor during reducing
30
+ * @internal
31
+ */
32
+ multiply(conversion: UnitConversion): UnitConversion;
33
+ /**
34
+ * Raise UnitConversion's factor with power exponent to calculate factor during reducing
35
+ * @internal
36
+ */
37
+ raise(power: number): UnitConversion;
38
+ /** @internal */
39
+ static identity: UnitConversion;
40
+ /**
41
+ * Returns UnitConversion with unit's numerator and denominator in factor and unit's offset in offset for reducing
42
+ * @internal
43
+ */
44
+ static from(unit: Unit | Constant): UnitConversion;
45
+ }
46
46
  //# sourceMappingURL=UnitConversion.d.ts.map
@@ -1,78 +1,78 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UnitConversion = void 0;
4
- /*---------------------------------------------------------------------------------------------
5
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
- * See LICENSE.md in the project root for license terms and full copyright notice.
7
- *--------------------------------------------------------------------------------------------*/
8
- const almostEqual = require("almost-equal");
9
- const ECObjects_1 = require("../ECObjects");
10
- /**
11
- * Class used for storing calculated conversion between two Units [[UnitConverter.calculateConversion]] and converting values from one Unit to another [[UnitConverter.evaluate]]
12
- * @internal
13
- */
14
- class UnitConversion {
15
- constructor(factor = 1.0, offset = 0.0) {
16
- this.factor = factor;
17
- this.offset = offset;
18
- }
19
- /**
20
- * Converts x using UnitConversion
21
- * @param x Input magnitude to be converted
22
- * @returns Output magnitude after conversion
23
- */
24
- evaluate(x) {
25
- return this.factor * x + this.offset;
26
- }
27
- /**
28
- * Used to invert source's UnitConversion so that it can be composed with target's UnitConversion cleanly
29
- * @internal
30
- */
31
- inverse() {
32
- const inverseFactor = 1.0 / this.factor;
33
- return new UnitConversion(inverseFactor, -this.offset * inverseFactor);
34
- }
35
- /**
36
- * Combines two UnitConversions
37
- * Used to combine source's UnitConversion and target's UnitConversion for a final UnitConversion that can be evaluated
38
- * @internal
39
- */
40
- compose(conversion) {
41
- return new UnitConversion(this.factor * conversion.factor, conversion.factor * this.offset + conversion.offset);
42
- }
43
- /**
44
- * Multiples two UnitConversions together to calculate factor during reducing
45
- * @internal
46
- */
47
- multiply(conversion) {
48
- if (almostEqual(conversion.offset, 0.0) && almostEqual(this.offset, 0.0))
49
- return new UnitConversion(this.factor * conversion.factor, 0.0);
50
- throw new Error("Cannot multiply two maps with non-zero offsets");
51
- }
52
- /**
53
- * Raise UnitConversion's factor with power exponent to calculate factor during reducing
54
- * @internal
55
- */
56
- raise(power) {
57
- if (almostEqual(power, 1.0))
58
- return new UnitConversion(this.factor, this.offset);
59
- else if (almostEqual(power, 0.0))
60
- return new UnitConversion(1.0, 0.0);
61
- if (almostEqual(this.offset, 0.0))
62
- return new UnitConversion(this.factor ** power, 0.0);
63
- throw new Error("Cannot raise map with non-zero offset");
64
- }
65
- /**
66
- * Returns UnitConversion with unit's numerator and denominator in factor and unit's offset in offset for reducing
67
- * @internal
68
- */
69
- static from(unit) {
70
- if (unit.schemaItemType === ECObjects_1.SchemaItemType.Unit)
71
- return new UnitConversion(unit.denominator / unit.numerator, -unit.offset);
72
- return new UnitConversion(unit.denominator / unit.numerator, 0.0);
73
- }
74
- }
75
- exports.UnitConversion = UnitConversion;
76
- /** @internal */
77
- UnitConversion.identity = new UnitConversion();
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnitConversion = void 0;
4
+ /*---------------------------------------------------------------------------------------------
5
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
+ * See LICENSE.md in the project root for license terms and full copyright notice.
7
+ *--------------------------------------------------------------------------------------------*/
8
+ const almostEqual = require("almost-equal");
9
+ const ECObjects_1 = require("../ECObjects");
10
+ /**
11
+ * Class used for storing calculated conversion between two Units [[UnitConverter.calculateConversion]] and converting values from one Unit to another [[UnitConverter.evaluate]]
12
+ * @internal
13
+ */
14
+ class UnitConversion {
15
+ constructor(factor = 1.0, offset = 0.0) {
16
+ this.factor = factor;
17
+ this.offset = offset;
18
+ }
19
+ /**
20
+ * Converts x using UnitConversion
21
+ * @param x Input magnitude to be converted
22
+ * @returns Output magnitude after conversion
23
+ */
24
+ evaluate(x) {
25
+ return this.factor * x + this.offset;
26
+ }
27
+ /**
28
+ * Used to invert source's UnitConversion so that it can be composed with target's UnitConversion cleanly
29
+ * @internal
30
+ */
31
+ inverse() {
32
+ const inverseFactor = 1.0 / this.factor;
33
+ return new UnitConversion(inverseFactor, -this.offset * inverseFactor);
34
+ }
35
+ /**
36
+ * Combines two UnitConversions
37
+ * Used to combine source's UnitConversion and target's UnitConversion for a final UnitConversion that can be evaluated
38
+ * @internal
39
+ */
40
+ compose(conversion) {
41
+ return new UnitConversion(this.factor * conversion.factor, conversion.factor * this.offset + conversion.offset);
42
+ }
43
+ /**
44
+ * Multiples two UnitConversions together to calculate factor during reducing
45
+ * @internal
46
+ */
47
+ multiply(conversion) {
48
+ if (almostEqual(conversion.offset, 0.0) && almostEqual(this.offset, 0.0))
49
+ return new UnitConversion(this.factor * conversion.factor, 0.0);
50
+ throw new Error("Cannot multiply two maps with non-zero offsets");
51
+ }
52
+ /**
53
+ * Raise UnitConversion's factor with power exponent to calculate factor during reducing
54
+ * @internal
55
+ */
56
+ raise(power) {
57
+ if (almostEqual(power, 1.0))
58
+ return new UnitConversion(this.factor, this.offset);
59
+ else if (almostEqual(power, 0.0))
60
+ return new UnitConversion(1.0, 0.0);
61
+ if (almostEqual(this.offset, 0.0))
62
+ return new UnitConversion(this.factor ** power, 0.0);
63
+ throw new Error("Cannot raise map with non-zero offset");
64
+ }
65
+ /**
66
+ * Returns UnitConversion with unit's numerator and denominator in factor and unit's offset in offset for reducing
67
+ * @internal
68
+ */
69
+ static from(unit) {
70
+ if (unit.schemaItemType === ECObjects_1.SchemaItemType.Unit)
71
+ return new UnitConversion(unit.denominator / unit.numerator, -unit.offset);
72
+ return new UnitConversion(unit.denominator / unit.numerator, 0.0);
73
+ }
74
+ }
75
+ exports.UnitConversion = UnitConversion;
76
+ /** @internal */
77
+ UnitConversion.identity = new UnitConversion();
78
78
  //# sourceMappingURL=UnitConversion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UnitConversion.js","sourceRoot":"","sources":["../../../src/UnitConversion/UnitConversion.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,4CAA4C;AAG5C,4CAA8C;AAE9C;;;GAGG;AACH,MAAa,cAAc;IACzB,YAA4B,SAAiB,GAAG,EAAkB,SAAiB,GAAG;QAA1D,WAAM,GAAN,MAAM,CAAc;QAAkB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAE1F;;;;OAIG;IACI,QAAQ,CAAC,CAAS;QACvB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,OAAO;QACZ,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxC,OAAO,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;IACzE,CAAC;IAED;;;;OAIG;IACI,OAAO,CAAC,UAA0B;QACvC,OAAO,IAAI,cAAc,CACvB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAC/B,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CACpD,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,UAA0B;QACxC,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YACtE,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAElE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,KAAa;QACxB,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;YACzB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACjD,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;YAC9B,OAAO,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEtC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YAC/B,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,GAAG,CAAC,CAAC;QAEvD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAKD;;;OAGG;IACI,MAAM,CAAC,IAAI,CAAC,IAAqB;QACtC,IAAI,IAAI,CAAC,cAAc,KAAK,0BAAc,CAAC,IAAI;YAC7C,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE7E,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;;AAxEH,wCAyEC;AAbC,gBAAgB;AACF,uBAAQ,GAAG,IAAI,cAAc,EAAE,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport * as almostEqual from \"almost-equal\";\nimport { Constant } from \"../Metadata/Constant\";\nimport { Unit } from \"../Metadata/Unit\";\nimport { SchemaItemType } from \"../ECObjects\";\n\n/**\n * Class used for storing calculated conversion between two Units [[UnitConverter.calculateConversion]] and converting values from one Unit to another [[UnitConverter.evaluate]]\n * @internal\n */\nexport class UnitConversion {\n constructor(public readonly factor: number = 1.0, public readonly offset: number = 0.0) {}\n\n /**\n * Converts x using UnitConversion\n * @param x Input magnitude to be converted\n * @returns Output magnitude after conversion\n */\n public evaluate(x: number): number {\n return this.factor * x + this.offset;\n }\n\n /**\n * Used to invert source's UnitConversion so that it can be composed with target's UnitConversion cleanly\n * @internal\n */\n public inverse(): UnitConversion {\n const inverseFactor = 1.0 / this.factor;\n return new UnitConversion(inverseFactor, -this.offset * inverseFactor);\n }\n\n /**\n * Combines two UnitConversions\n * Used to combine source's UnitConversion and target's UnitConversion for a final UnitConversion that can be evaluated\n * @internal\n */\n public compose(conversion: UnitConversion): UnitConversion {\n return new UnitConversion(\n this.factor * conversion.factor,\n conversion.factor * this.offset + conversion.offset\n );\n }\n\n /**\n * Multiples two UnitConversions together to calculate factor during reducing\n * @internal\n */\n public multiply(conversion: UnitConversion): UnitConversion {\n if (almostEqual(conversion.offset, 0.0) && almostEqual(this.offset, 0.0))\n return new UnitConversion(this.factor * conversion.factor, 0.0);\n\n throw new Error(\"Cannot multiply two maps with non-zero offsets\");\n }\n\n /**\n * Raise UnitConversion's factor with power exponent to calculate factor during reducing\n * @internal\n */\n public raise(power: number): UnitConversion {\n if (almostEqual(power, 1.0))\n return new UnitConversion(this.factor, this.offset);\n else if (almostEqual(power, 0.0))\n return new UnitConversion(1.0, 0.0);\n\n if (almostEqual(this.offset, 0.0))\n return new UnitConversion(this.factor ** power, 0.0);\n\n throw new Error(\"Cannot raise map with non-zero offset\");\n }\n\n /** @internal */\n public static identity = new UnitConversion();\n\n /**\n * Returns UnitConversion with unit's numerator and denominator in factor and unit's offset in offset for reducing\n * @internal\n */\n public static from(unit: Unit | Constant): UnitConversion {\n if (unit.schemaItemType === SchemaItemType.Unit)\n return new UnitConversion(unit.denominator / unit.numerator, -unit.offset);\n\n return new UnitConversion(unit.denominator / unit.numerator, 0.0);\n }\n}\n"]}
1
+ {"version":3,"file":"UnitConversion.js","sourceRoot":"","sources":["../../../src/UnitConversion/UnitConversion.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,4CAA4C;AAG5C,4CAA8C;AAE9C;;;GAGG;AACH,MAAa,cAAc;IACzB,YAA4B,SAAiB,GAAG,EAAkB,SAAiB,GAAG;QAA1D,WAAM,GAAN,MAAM,CAAc;QAAkB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAE1F;;;;OAIG;IACI,QAAQ,CAAC,CAAS;QACvB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,OAAO;QACZ,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxC,OAAO,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;IACzE,CAAC;IAED;;;;OAIG;IACI,OAAO,CAAC,UAA0B;QACvC,OAAO,IAAI,cAAc,CACvB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAC/B,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CACpD,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,UAA0B;QACxC,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YACtE,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAElE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,KAAa;QACxB,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;YACzB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;aACjD,IAAI,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;YAC9B,OAAO,IAAI,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEtC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;YAC/B,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,GAAG,CAAC,CAAC;QAEvD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAKD;;;OAGG;IACI,MAAM,CAAC,IAAI,CAAC,IAAqB;QACtC,IAAI,IAAI,CAAC,cAAc,KAAK,0BAAc,CAAC,IAAI;YAC7C,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE7E,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;;AAxEH,wCAyEC;AAbC,gBAAgB;AACF,uBAAQ,GAAG,IAAI,cAAc,EAAE,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport * as almostEqual from \"almost-equal\";\r\nimport { Constant } from \"../Metadata/Constant\";\r\nimport { Unit } from \"../Metadata/Unit\";\r\nimport { SchemaItemType } from \"../ECObjects\";\r\n\r\n/**\r\n * Class used for storing calculated conversion between two Units [[UnitConverter.calculateConversion]] and converting values from one Unit to another [[UnitConverter.evaluate]]\r\n * @internal\r\n */\r\nexport class UnitConversion {\r\n constructor(public readonly factor: number = 1.0, public readonly offset: number = 0.0) {}\r\n\r\n /**\r\n * Converts x using UnitConversion\r\n * @param x Input magnitude to be converted\r\n * @returns Output magnitude after conversion\r\n */\r\n public evaluate(x: number): number {\r\n return this.factor * x + this.offset;\r\n }\r\n\r\n /**\r\n * Used to invert source's UnitConversion so that it can be composed with target's UnitConversion cleanly\r\n * @internal\r\n */\r\n public inverse(): UnitConversion {\r\n const inverseFactor = 1.0 / this.factor;\r\n return new UnitConversion(inverseFactor, -this.offset * inverseFactor);\r\n }\r\n\r\n /**\r\n * Combines two UnitConversions\r\n * Used to combine source's UnitConversion and target's UnitConversion for a final UnitConversion that can be evaluated\r\n * @internal\r\n */\r\n public compose(conversion: UnitConversion): UnitConversion {\r\n return new UnitConversion(\r\n this.factor * conversion.factor,\r\n conversion.factor * this.offset + conversion.offset\r\n );\r\n }\r\n\r\n /**\r\n * Multiples two UnitConversions together to calculate factor during reducing\r\n * @internal\r\n */\r\n public multiply(conversion: UnitConversion): UnitConversion {\r\n if (almostEqual(conversion.offset, 0.0) && almostEqual(this.offset, 0.0))\r\n return new UnitConversion(this.factor * conversion.factor, 0.0);\r\n\r\n throw new Error(\"Cannot multiply two maps with non-zero offsets\");\r\n }\r\n\r\n /**\r\n * Raise UnitConversion's factor with power exponent to calculate factor during reducing\r\n * @internal\r\n */\r\n public raise(power: number): UnitConversion {\r\n if (almostEqual(power, 1.0))\r\n return new UnitConversion(this.factor, this.offset);\r\n else if (almostEqual(power, 0.0))\r\n return new UnitConversion(1.0, 0.0);\r\n\r\n if (almostEqual(this.offset, 0.0))\r\n return new UnitConversion(this.factor ** power, 0.0);\r\n\r\n throw new Error(\"Cannot raise map with non-zero offset\");\r\n }\r\n\r\n /** @internal */\r\n public static identity = new UnitConversion();\r\n\r\n /**\r\n * Returns UnitConversion with unit's numerator and denominator in factor and unit's offset in offset for reducing\r\n * @internal\r\n */\r\n public static from(unit: Unit | Constant): UnitConversion {\r\n if (unit.schemaItemType === SchemaItemType.Unit)\r\n return new UnitConversion(unit.denominator / unit.numerator, -unit.offset);\r\n\r\n return new UnitConversion(unit.denominator / unit.numerator, 0.0);\r\n }\r\n}\r\n"]}