@ifc-lite/query 1.0.0 → 1.1.1

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 (127) hide show
  1. package/dist/duckdb-integration.d.ts.map +1 -0
  2. package/dist/duckdb-integration.js.map +1 -0
  3. package/dist/entity-node.d.ts.map +1 -0
  4. package/dist/entity-node.js.map +1 -0
  5. package/dist/entity-query.d.ts.map +1 -0
  6. package/dist/entity-query.js.map +1 -0
  7. package/dist/entity-table.d.ts.map +1 -0
  8. package/dist/entity-table.js.map +1 -0
  9. package/dist/fluent-api.d.ts.map +1 -0
  10. package/dist/fluent-api.js.map +1 -0
  11. package/dist/ifc-query.d.ts.map +1 -0
  12. package/dist/ifc-query.js.map +1 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/property-table.d.ts.map +1 -0
  16. package/dist/property-table.js.map +1 -0
  17. package/dist/query-result-entity.d.ts.map +1 -0
  18. package/dist/query-result-entity.js.map +1 -0
  19. package/package.json +5 -5
  20. package/dist/parser/src/classification-extractor.d.ts +0 -73
  21. package/dist/parser/src/classification-extractor.d.ts.map +0 -1
  22. package/dist/parser/src/classification-extractor.js +0 -218
  23. package/dist/parser/src/classification-extractor.js.map +0 -1
  24. package/dist/parser/src/columnar-parser.d.ts +0 -43
  25. package/dist/parser/src/columnar-parser.d.ts.map +0 -1
  26. package/dist/parser/src/columnar-parser.js +0 -226
  27. package/dist/parser/src/columnar-parser.js.map +0 -1
  28. package/dist/parser/src/entity-extractor.d.ts +0 -15
  29. package/dist/parser/src/entity-extractor.d.ts.map +0 -1
  30. package/dist/parser/src/entity-extractor.js +0 -144
  31. package/dist/parser/src/entity-extractor.js.map +0 -1
  32. package/dist/parser/src/entity-index.d.ts +0 -11
  33. package/dist/parser/src/entity-index.d.ts.map +0 -1
  34. package/dist/parser/src/entity-index.js +0 -24
  35. package/dist/parser/src/entity-index.js.map +0 -1
  36. package/dist/parser/src/generated/entities.d.ts +0 -6198
  37. package/dist/parser/src/generated/entities.d.ts.map +0 -1
  38. package/dist/parser/src/generated/entities.js +0 -5
  39. package/dist/parser/src/generated/entities.js.map +0 -1
  40. package/dist/parser/src/generated/enums.d.ts +0 -2260
  41. package/dist/parser/src/generated/enums.d.ts.map +0 -1
  42. package/dist/parser/src/generated/enums.js +0 -2470
  43. package/dist/parser/src/generated/enums.js.map +0 -1
  44. package/dist/parser/src/generated/schema-registry.d.ts +0 -50
  45. package/dist/parser/src/generated/schema-registry.d.ts.map +0 -1
  46. package/dist/parser/src/generated/schema-registry.js +0 -60518
  47. package/dist/parser/src/generated/schema-registry.js.map +0 -1
  48. package/dist/parser/src/georef-extractor.d.ts +0 -60
  49. package/dist/parser/src/georef-extractor.d.ts.map +0 -1
  50. package/dist/parser/src/georef-extractor.js +0 -200
  51. package/dist/parser/src/georef-extractor.js.map +0 -1
  52. package/dist/parser/src/ifc-schema.d.ts +0 -13
  53. package/dist/parser/src/ifc-schema.d.ts.map +0 -1
  54. package/dist/parser/src/ifc-schema.js +0 -203
  55. package/dist/parser/src/ifc-schema.js.map +0 -1
  56. package/dist/parser/src/index.d.ts +0 -43
  57. package/dist/parser/src/index.d.ts.map +0 -1
  58. package/dist/parser/src/index.js +0 -150
  59. package/dist/parser/src/index.js.map +0 -1
  60. package/dist/parser/src/material-extractor.d.ts +0 -97
  61. package/dist/parser/src/material-extractor.d.ts.map +0 -1
  62. package/dist/parser/src/material-extractor.js +0 -283
  63. package/dist/parser/src/material-extractor.js.map +0 -1
  64. package/dist/parser/src/property-extractor.d.ts +0 -23
  65. package/dist/parser/src/property-extractor.d.ts.map +0 -1
  66. package/dist/parser/src/property-extractor.js +0 -102
  67. package/dist/parser/src/property-extractor.js.map +0 -1
  68. package/dist/parser/src/quantity-extractor.d.ts +0 -64
  69. package/dist/parser/src/quantity-extractor.d.ts.map +0 -1
  70. package/dist/parser/src/quantity-extractor.js +0 -202
  71. package/dist/parser/src/quantity-extractor.js.map +0 -1
  72. package/dist/parser/src/relationship-extractor.d.ts +0 -18
  73. package/dist/parser/src/relationship-extractor.d.ts.map +0 -1
  74. package/dist/parser/src/relationship-extractor.js +0 -91
  75. package/dist/parser/src/relationship-extractor.js.map +0 -1
  76. package/dist/parser/src/spatial-hierarchy-builder.d.ts +0 -21
  77. package/dist/parser/src/spatial-hierarchy-builder.d.ts.map +0 -1
  78. package/dist/parser/src/spatial-hierarchy-builder.js +0 -201
  79. package/dist/parser/src/spatial-hierarchy-builder.js.map +0 -1
  80. package/dist/parser/src/style-extractor.d.ts +0 -83
  81. package/dist/parser/src/style-extractor.d.ts.map +0 -1
  82. package/dist/parser/src/style-extractor.js +0 -327
  83. package/dist/parser/src/style-extractor.js.map +0 -1
  84. package/dist/parser/src/tokenizer.d.ts +0 -26
  85. package/dist/parser/src/tokenizer.d.ts.map +0 -1
  86. package/dist/parser/src/tokenizer.js +0 -181
  87. package/dist/parser/src/tokenizer.js.map +0 -1
  88. package/dist/parser/src/types.d.ts +0 -42
  89. package/dist/parser/src/types.d.ts.map +0 -1
  90. package/dist/parser/src/types.js +0 -5
  91. package/dist/parser/src/types.js.map +0 -1
  92. package/dist/query/src/duckdb-integration.d.ts.map +0 -1
  93. package/dist/query/src/duckdb-integration.js.map +0 -1
  94. package/dist/query/src/entity-node.d.ts.map +0 -1
  95. package/dist/query/src/entity-node.js.map +0 -1
  96. package/dist/query/src/entity-query.d.ts.map +0 -1
  97. package/dist/query/src/entity-query.js.map +0 -1
  98. package/dist/query/src/entity-table.d.ts.map +0 -1
  99. package/dist/query/src/entity-table.js.map +0 -1
  100. package/dist/query/src/fluent-api.d.ts.map +0 -1
  101. package/dist/query/src/fluent-api.js.map +0 -1
  102. package/dist/query/src/ifc-query.d.ts.map +0 -1
  103. package/dist/query/src/ifc-query.js.map +0 -1
  104. package/dist/query/src/index.d.ts.map +0 -1
  105. package/dist/query/src/index.js.map +0 -1
  106. package/dist/query/src/property-table.d.ts.map +0 -1
  107. package/dist/query/src/property-table.js.map +0 -1
  108. package/dist/query/src/query-result-entity.d.ts.map +0 -1
  109. package/dist/query/src/query-result-entity.js.map +0 -1
  110. /package/dist/{query/src/duckdb-integration.d.ts → duckdb-integration.d.ts} +0 -0
  111. /package/dist/{query/src/duckdb-integration.js → duckdb-integration.js} +0 -0
  112. /package/dist/{query/src/entity-node.d.ts → entity-node.d.ts} +0 -0
  113. /package/dist/{query/src/entity-node.js → entity-node.js} +0 -0
  114. /package/dist/{query/src/entity-query.d.ts → entity-query.d.ts} +0 -0
  115. /package/dist/{query/src/entity-query.js → entity-query.js} +0 -0
  116. /package/dist/{query/src/entity-table.d.ts → entity-table.d.ts} +0 -0
  117. /package/dist/{query/src/entity-table.js → entity-table.js} +0 -0
  118. /package/dist/{query/src/fluent-api.d.ts → fluent-api.d.ts} +0 -0
  119. /package/dist/{query/src/fluent-api.js → fluent-api.js} +0 -0
  120. /package/dist/{query/src/ifc-query.d.ts → ifc-query.d.ts} +0 -0
  121. /package/dist/{query/src/ifc-query.js → ifc-query.js} +0 -0
  122. /package/dist/{query/src/index.d.ts → index.d.ts} +0 -0
  123. /package/dist/{query/src/index.js → index.js} +0 -0
  124. /package/dist/{query/src/property-table.d.ts → property-table.d.ts} +0 -0
  125. /package/dist/{query/src/property-table.js → property-table.js} +0 -0
  126. /package/dist/{query/src/query-result-entity.d.ts → query-result-entity.d.ts} +0 -0
  127. /package/dist/{query/src/query-result-entity.js → query-result-entity.js} +0 -0
@@ -1,102 +0,0 @@
1
- /* This Source Code Form is subject to the terms of the Mozilla Public
2
- * License, v. 2.0. If a copy of the MPL was not distributed with this
3
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
- export class PropertyExtractor {
5
- entities;
6
- constructor(entities) {
7
- this.entities = entities;
8
- }
9
- /**
10
- * Extract all PropertySets from entities
11
- */
12
- extractPropertySets() {
13
- const propertySets = new Map();
14
- for (const [id, entity] of this.entities) {
15
- // IFC entity types may be uppercase (IFCPROPERTYSET) or mixed case (IfcPropertySet)
16
- if (entity.type.toUpperCase() === 'IFCPROPERTYSET') {
17
- const pset = this.extractPropertySet(entity);
18
- if (pset) {
19
- propertySets.set(id, pset);
20
- }
21
- }
22
- }
23
- return propertySets;
24
- }
25
- /**
26
- * Extract PropertySet from entity
27
- */
28
- extractPropertySet(entity) {
29
- try {
30
- // IfcPropertySet structure: (GlobalId, OwnerHistory, Name, Description, HasProperties)
31
- // Attributes: [0]=GlobalId, [1]=OwnerHistory, [2]=Name, [3]=Description, [4]=HasProperties
32
- const name = this.getAttributeValue(entity, 2);
33
- if (!name)
34
- return null;
35
- const hasProperties = this.getAttributeValue(entity, 4);
36
- const properties = new Map();
37
- // HasProperties is a list of references to IfcProperty
38
- if (Array.isArray(hasProperties)) {
39
- for (const propRef of hasProperties) {
40
- if (typeof propRef === 'number') {
41
- const propEntity = this.entities.get(propRef);
42
- if (propEntity) {
43
- const prop = this.extractProperty(propEntity);
44
- if (prop) {
45
- properties.set(prop.name, prop.value);
46
- }
47
- }
48
- }
49
- }
50
- }
51
- return { name, properties };
52
- }
53
- catch (error) {
54
- console.warn(`Failed to extract PropertySet #${entity.expressId}:`, error);
55
- return null;
56
- }
57
- }
58
- /**
59
- * Extract property from IfcProperty entity
60
- */
61
- extractProperty(entity) {
62
- try {
63
- // IfcPropertySingleValue structure: (Name, Description, NominalValue, Unit)
64
- const name = this.getAttributeValue(entity, 0);
65
- if (!name)
66
- return null;
67
- const nominalValue = this.getAttributeValue(entity, 2);
68
- const value = this.parsePropertyValue(nominalValue);
69
- return { name, value };
70
- }
71
- catch (error) {
72
- console.warn(`Failed to extract property #${entity.expressId}:`, error);
73
- return null;
74
- }
75
- }
76
- parsePropertyValue(value) {
77
- if (value === null || value === undefined) {
78
- return { type: 'null', value: null };
79
- }
80
- if (typeof value === 'number') {
81
- return { type: 'number', value };
82
- }
83
- if (typeof value === 'boolean') {
84
- return { type: 'boolean', value };
85
- }
86
- if (typeof value === 'string') {
87
- return { type: 'string', value };
88
- }
89
- if (typeof value === 'number' && value < 0) {
90
- // Negative numbers might be references in some contexts
91
- return { type: 'reference', value };
92
- }
93
- return { type: 'string', value: String(value) };
94
- }
95
- getAttributeValue(entity, index) {
96
- if (index < 0 || index >= entity.attributes.length) {
97
- return null;
98
- }
99
- return entity.attributes[index];
100
- }
101
- }
102
- //# sourceMappingURL=property-extractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"property-extractor.js","sourceRoot":"","sources":["../../../../parser/src/property-extractor.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAQ/D,MAAM,OAAO,iBAAiB;IACpB,QAAQ,CAAyB;IAEzC,YAAY,QAAgC;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;QAEpD,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzC,oFAAoF;YACpF,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,gBAAgB,EAAE,CAAC;gBACnD,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAC7C,IAAI,IAAI,EAAE,CAAC;oBACT,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,MAAiB;QAC1C,IAAI,CAAC;YACH,uFAAuF;YACvF,2FAA2F;YAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAW,CAAC;YACzD,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEvB,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;YAEpD,uDAAuD;YACvD,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjC,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;oBACpC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;wBAChC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;wBAC9C,IAAI,UAAU,EAAE,CAAC;4BACf,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;4BAC9C,IAAI,IAAI,EAAE,CAAC;gCACT,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;4BACxC,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,kCAAkC,MAAM,CAAC,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,MAAiB;QACvC,IAAI,CAAC;YACH,4EAA4E;YAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAW,CAAC;YACzD,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YAEvB,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;YAEpD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;YACxE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,KAAU;QACnC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACvC,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACnC,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACnC,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC3C,wDAAwD;YACxD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QACtC,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAClD,CAAC;IAEO,iBAAiB,CAAC,MAAiB,EAAE,KAAa;QACxD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;CACF"}
@@ -1,64 +0,0 @@
1
- /**
2
- * Quantity extractor - extracts IfcElementQuantity sets and their values
3
- */
4
- import type { IfcEntity } from './types.js';
5
- export interface QuantitySet {
6
- expressId: number;
7
- name: string;
8
- globalId?: string;
9
- methodOfMeasurement?: string;
10
- quantities: QuantityValue[];
11
- }
12
- export interface QuantityValue {
13
- name: string;
14
- type: QuantityValueType;
15
- value: number;
16
- unit?: string;
17
- formula?: string;
18
- }
19
- export type QuantityValueType = 'length' | 'area' | 'volume' | 'count' | 'weight' | 'time';
20
- export declare class QuantityExtractor {
21
- private entities;
22
- private debug;
23
- constructor(entities: Map<number, IfcEntity>, debug?: boolean);
24
- /**
25
- * Extract all IfcElementQuantity sets from entities
26
- */
27
- extractQuantitySets(): Map<number, QuantitySet>;
28
- /**
29
- * Extract QuantitySet from IfcElementQuantity entity
30
- *
31
- * IFC Schema for IfcElementQuantity:
32
- * - GlobalId (IfcGloballyUniqueId) [0]
33
- * - OwnerHistory (IfcOwnerHistory) [1]
34
- * - Name (IfcLabel) [2]
35
- * - Description (IfcText) [3]
36
- * - MethodOfMeasurement (IfcLabel) [4]
37
- * - Quantities (SET [1:?] OF IfcPhysicalQuantity) [5]
38
- */
39
- private extractQuantitySet;
40
- /**
41
- * Extract quantity from IfcPhysicalQuantity entity
42
- *
43
- * All IFC quantity types (IfcQuantityLength, IfcQuantityArea, etc.) have:
44
- * - Name (IfcLabel) [0]
45
- * - Description (IfcText) [1]
46
- * - Unit (IfcNamedUnit) [2] - optional reference
47
- * - *Value (IfcLengthMeasure/etc.) [3]
48
- * - Formula (IfcLabel) [4] - optional (IFC4 only)
49
- */
50
- private extractQuantity;
51
- /**
52
- * Safely convert a value to string
53
- */
54
- private toString;
55
- /**
56
- * Get count of IfcElementQuantity entities in the model
57
- */
58
- getElementQuantityCount(): number;
59
- /**
60
- * Get count of individual quantity values (IfcQuantityLength, etc.)
61
- */
62
- getQuantityValueCount(): number;
63
- }
64
- //# sourceMappingURL=quantity-extractor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quantity-extractor.d.ts","sourceRoot":"","sources":["../../../../parser/src/quantity-extractor.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAY3F,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,KAAK,CAAU;gBAEX,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAE,OAAe;IAKpE;;OAEG;IACH,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;IAgC/C;;;;;;;;;;OAUG;IACH,OAAO,CAAC,kBAAkB;IAuD1B;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;IAmDvB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAUhB;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAUjC;;OAEG;IACH,qBAAqB,IAAI,MAAM;CAUhC"}
@@ -1,202 +0,0 @@
1
- /* This Source Code Form is subject to the terms of the Mozilla Public
2
- * License, v. 2.0. If a copy of the MPL was not distributed with this
3
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
- // Map IFC type names to our quantity types
5
- const QUANTITY_TYPE_MAP = {
6
- 'IFCQUANTITYLENGTH': 'length',
7
- 'IFCQUANTITYAREA': 'area',
8
- 'IFCQUANTITYVOLUME': 'volume',
9
- 'IFCQUANTITYCOUNT': 'count',
10
- 'IFCQUANTITYWEIGHT': 'weight',
11
- 'IFCQUANTITYTIME': 'time',
12
- };
13
- export class QuantityExtractor {
14
- entities;
15
- debug;
16
- constructor(entities, debug = false) {
17
- this.entities = entities;
18
- this.debug = debug;
19
- }
20
- /**
21
- * Extract all IfcElementQuantity sets from entities
22
- */
23
- extractQuantitySets() {
24
- const quantitySets = new Map();
25
- let elementQuantityCount = 0;
26
- let quantityValueCount = 0;
27
- for (const [id, entity] of this.entities) {
28
- const typeUpper = entity.type.toUpperCase();
29
- if (typeUpper === 'IFCELEMENTQUANTITY') {
30
- elementQuantityCount++;
31
- const qset = this.extractQuantitySet(entity);
32
- if (qset) {
33
- quantitySets.set(id, qset);
34
- quantityValueCount += qset.quantities.length;
35
- if (this.debug && quantitySets.size <= 3) {
36
- console.log(`[QuantityExtractor] Extracted QuantitySet #${id}:`, {
37
- name: qset.name,
38
- quantities: qset.quantities.length,
39
- first: qset.quantities[0],
40
- });
41
- }
42
- }
43
- }
44
- }
45
- console.log(`[QuantityExtractor] Found ${elementQuantityCount} IfcElementQuantity entities`);
46
- console.log(`[QuantityExtractor] Extracted ${quantitySets.size} quantity sets with ${quantityValueCount} total quantities`);
47
- return quantitySets;
48
- }
49
- /**
50
- * Extract QuantitySet from IfcElementQuantity entity
51
- *
52
- * IFC Schema for IfcElementQuantity:
53
- * - GlobalId (IfcGloballyUniqueId) [0]
54
- * - OwnerHistory (IfcOwnerHistory) [1]
55
- * - Name (IfcLabel) [2]
56
- * - Description (IfcText) [3]
57
- * - MethodOfMeasurement (IfcLabel) [4]
58
- * - Quantities (SET [1:?] OF IfcPhysicalQuantity) [5]
59
- */
60
- extractQuantitySet(entity) {
61
- try {
62
- const attrs = entity.attributes;
63
- if (attrs.length < 6) {
64
- if (this.debug) {
65
- console.warn(`[QuantityExtractor] IfcElementQuantity #${entity.expressId} has insufficient attributes: ${attrs.length}`);
66
- }
67
- return null;
68
- }
69
- const globalId = this.toString(attrs[0]);
70
- const name = this.toString(attrs[2]);
71
- if (!name) {
72
- if (this.debug) {
73
- console.warn(`[QuantityExtractor] IfcElementQuantity #${entity.expressId} has no name`);
74
- }
75
- return null;
76
- }
77
- const methodOfMeasurement = this.toString(attrs[4]) || undefined;
78
- const quantitiesRefs = attrs[5];
79
- const quantities = [];
80
- // Quantities is a list of references to IfcPhysicalQuantity subtypes
81
- if (Array.isArray(quantitiesRefs)) {
82
- for (const quantRef of quantitiesRefs) {
83
- if (typeof quantRef === 'number') {
84
- const quantEntity = this.entities.get(quantRef);
85
- if (quantEntity) {
86
- const quantity = this.extractQuantity(quantEntity);
87
- if (quantity) {
88
- quantities.push(quantity);
89
- }
90
- }
91
- else if (this.debug) {
92
- console.warn(`[QuantityExtractor] Referenced quantity #${quantRef} not found`);
93
- }
94
- }
95
- }
96
- }
97
- return {
98
- expressId: entity.expressId,
99
- name,
100
- globalId: globalId || undefined,
101
- methodOfMeasurement,
102
- quantities,
103
- };
104
- }
105
- catch (error) {
106
- console.warn(`[QuantityExtractor] Failed to extract QuantitySet #${entity.expressId}:`, error);
107
- return null;
108
- }
109
- }
110
- /**
111
- * Extract quantity from IfcPhysicalQuantity entity
112
- *
113
- * All IFC quantity types (IfcQuantityLength, IfcQuantityArea, etc.) have:
114
- * - Name (IfcLabel) [0]
115
- * - Description (IfcText) [1]
116
- * - Unit (IfcNamedUnit) [2] - optional reference
117
- * - *Value (IfcLengthMeasure/etc.) [3]
118
- * - Formula (IfcLabel) [4] - optional (IFC4 only)
119
- */
120
- extractQuantity(entity) {
121
- try {
122
- const typeUpper = entity.type.toUpperCase();
123
- const quantityType = QUANTITY_TYPE_MAP[typeUpper];
124
- if (!quantityType) {
125
- // Not a recognized quantity type
126
- return null;
127
- }
128
- const attrs = entity.attributes;
129
- if (attrs.length < 4) {
130
- if (this.debug) {
131
- console.warn(`[QuantityExtractor] ${entity.type} #${entity.expressId} has insufficient attributes: ${attrs.length}`);
132
- }
133
- return null;
134
- }
135
- const name = this.toString(attrs[0]);
136
- if (!name) {
137
- if (this.debug) {
138
- console.warn(`[QuantityExtractor] ${entity.type} #${entity.expressId} has no name`);
139
- }
140
- return null;
141
- }
142
- // Value is at index 3 for all quantity types
143
- const value = attrs[3];
144
- if (typeof value !== 'number') {
145
- if (this.debug) {
146
- console.warn(`[QuantityExtractor] ${entity.type} #${entity.expressId} has non-numeric value:`, value);
147
- }
148
- return null;
149
- }
150
- // Formula is optional (index 4, IFC4 only)
151
- const formula = attrs.length > 4 ? this.toString(attrs[4]) || undefined : undefined;
152
- return {
153
- name,
154
- type: quantityType,
155
- value,
156
- formula,
157
- };
158
- }
159
- catch (error) {
160
- console.warn(`[QuantityExtractor] Failed to extract quantity #${entity.expressId}:`, error);
161
- return null;
162
- }
163
- }
164
- /**
165
- * Safely convert a value to string
166
- */
167
- toString(value) {
168
- if (value === null || value === undefined) {
169
- return null;
170
- }
171
- if (typeof value === 'string') {
172
- return value;
173
- }
174
- return null;
175
- }
176
- /**
177
- * Get count of IfcElementQuantity entities in the model
178
- */
179
- getElementQuantityCount() {
180
- let count = 0;
181
- for (const entity of this.entities.values()) {
182
- if (entity.type.toUpperCase() === 'IFCELEMENTQUANTITY') {
183
- count++;
184
- }
185
- }
186
- return count;
187
- }
188
- /**
189
- * Get count of individual quantity values (IfcQuantityLength, etc.)
190
- */
191
- getQuantityValueCount() {
192
- let count = 0;
193
- for (const entity of this.entities.values()) {
194
- const typeUpper = entity.type.toUpperCase();
195
- if (QUANTITY_TYPE_MAP[typeUpper]) {
196
- count++;
197
- }
198
- }
199
- return count;
200
- }
201
- }
202
- //# sourceMappingURL=quantity-extractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"quantity-extractor.js","sourceRoot":"","sources":["../../../../parser/src/quantity-extractor.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * Relationship extractor - extracts spatial structure and other relationships
3
- */
4
- import type { IfcEntity, Relationship } from './types.js';
5
- export declare class RelationshipExtractor {
6
- private entities;
7
- constructor(entities: Map<number, IfcEntity>);
8
- /**
9
- * Extract all relationships
10
- */
11
- extractRelationships(): Relationship[];
12
- /**
13
- * Extract relationship from entity
14
- */
15
- private extractRelationship;
16
- private getAttributeValue;
17
- }
18
- //# sourceMappingURL=relationship-extractor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relationship-extractor.d.ts","sourceRoot":"","sources":["../../../../parser/src/relationship-extractor.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;IAI5C;;OAEG;IACH,oBAAoB,IAAI,YAAY,EAAE;IAwBtC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwD3B,OAAO,CAAC,iBAAiB;CAM1B"}
@@ -1,91 +0,0 @@
1
- /* This Source Code Form is subject to the terms of the Mozilla Public
2
- * License, v. 2.0. If a copy of the MPL was not distributed with this
3
- * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
- export class RelationshipExtractor {
5
- entities;
6
- constructor(entities) {
7
- this.entities = entities;
8
- }
9
- /**
10
- * Extract all relationships
11
- */
12
- extractRelationships() {
13
- const relationships = [];
14
- // Debug: count relationship types found
15
- const typeCounts = new Map();
16
- for (const [, entity] of this.entities) {
17
- const typeUpper = entity.type.toUpperCase();
18
- if (typeUpper.startsWith('IFCREL')) {
19
- typeCounts.set(typeUpper, (typeCounts.get(typeUpper) || 0) + 1);
20
- }
21
- const rel = this.extractRelationship(entity);
22
- if (rel) {
23
- relationships.push(rel);
24
- }
25
- }
26
- console.log('[RelationshipExtractor] Relationship type counts:', Object.fromEntries(typeCounts));
27
- console.log('[RelationshipExtractor] Successfully extracted:', relationships.length);
28
- return relationships;
29
- }
30
- /**
31
- * Extract relationship from entity
32
- */
33
- extractRelationship(entity) {
34
- // IFC entity types may be uppercase or mixed case
35
- const entityTypeUpper = entity.type.toUpperCase();
36
- const relTypes = [
37
- 'IFCRELCONTAINEDINSPATIALSTRUCTURE',
38
- 'IFCRELAGGREGATES',
39
- 'IFCRELDEFINESBYPROPERTIES',
40
- 'IFCRELDEFINESBYTYPE',
41
- 'IFCRELASSOCIATESMATERIAL',
42
- 'IFCRELVOIDSELEMENT',
43
- 'IFCRELFILLSELEMENT',
44
- ];
45
- if (!relTypes.includes(entityTypeUpper)) {
46
- return null;
47
- }
48
- try {
49
- // IFC relationship attribute order varies by type:
50
- // IfcRelDefinesByProperties: RelatedObjects (4), RelatingPropertyDefinition (5)
51
- // IfcRelAggregates: RelatingObject (4), RelatedObjects (5)
52
- // IfcRelContainedInSpatialStructure: RelatedElements (4), RelatingStructure (5)
53
- let relatingObject;
54
- let relatedObjects;
55
- if (entityTypeUpper === 'IFCRELDEFINESBYPROPERTIES') {
56
- // RelatedObjects at 4, RelatingPropertyDefinition at 5
57
- relatedObjects = this.getAttributeValue(entity, 4);
58
- relatingObject = this.getAttributeValue(entity, 5);
59
- }
60
- else if (entityTypeUpper === 'IFCRELCONTAINEDINSPATIALSTRUCTURE') {
61
- // RelatedElements at 4, RelatingStructure at 5
62
- relatedObjects = this.getAttributeValue(entity, 4);
63
- relatingObject = this.getAttributeValue(entity, 5);
64
- }
65
- else {
66
- // Standard: RelatingObject at 4, RelatedObjects at 5
67
- relatingObject = this.getAttributeValue(entity, 4);
68
- relatedObjects = this.getAttributeValue(entity, 5);
69
- }
70
- if (relatingObject === null || typeof relatingObject !== 'number' || !Array.isArray(relatedObjects)) {
71
- return null;
72
- }
73
- return {
74
- type: entity.type,
75
- relatingObject: relatingObject,
76
- relatedObjects: relatedObjects.filter((id) => typeof id === 'number'),
77
- };
78
- }
79
- catch (error) {
80
- console.warn(`Failed to extract relationship #${entity.expressId}:`, error);
81
- return null;
82
- }
83
- }
84
- getAttributeValue(entity, index) {
85
- if (index < 0 || index >= entity.attributes.length) {
86
- return null;
87
- }
88
- return entity.attributes[index];
89
- }
90
- }
91
- //# sourceMappingURL=relationship-extractor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relationship-extractor.js","sourceRoot":"","sources":["../../../../parser/src/relationship-extractor.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Spatial hierarchy builder - builds project/building/storey tree
3
- */
4
- import type { EntityTable, StringTable, RelationshipGraph, SpatialHierarchy } from '@ifc-lite/data';
5
- import type { EntityRef } from './types.js';
6
- export declare class SpatialHierarchyBuilder {
7
- /**
8
- * Build spatial hierarchy from entities and relationships
9
- */
10
- build(entities: EntityTable, relationships: RelationshipGraph, strings: StringTable, source: Uint8Array, entityIndex: {
11
- byId: Map<number, EntityRef>;
12
- }): SpatialHierarchy;
13
- private buildNode;
14
- private getTypeEnum;
15
- /**
16
- * Extract elevation from IfcBuildingStorey entity
17
- * Elevation is typically in attribute index 8 (after GlobalId, OwnerHistory, Name, Description, ObjectType, etc.)
18
- */
19
- private extractElevation;
20
- }
21
- //# sourceMappingURL=spatial-hierarchy-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spatial-hierarchy-builder.d.ts","sourceRoot":"","sources":["../../../../parser/src/spatial-hierarchy-builder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAe,MAAM,gBAAgB,CAAC;AAEjH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,qBAAa,uBAAuB;IAClC;;OAEG;IACH,KAAK,CACH,QAAQ,EAAE,WAAW,EACrB,aAAa,EAAE,iBAAiB,EAChC,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,WAAW,EAAE;QAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;KAAE,GAC5C,gBAAgB;IA0HnB,OAAO,CAAC,SAAS;IA0FjB,OAAO,CAAC,WAAW;IAUnB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CA4CzB"}