@ifc-lite/query 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +373 -0
- package/dist/parser/src/classification-extractor.d.ts +73 -0
- package/dist/parser/src/classification-extractor.d.ts.map +1 -0
- package/dist/parser/src/classification-extractor.js +218 -0
- package/dist/parser/src/classification-extractor.js.map +1 -0
- package/dist/parser/src/columnar-parser.d.ts +43 -0
- package/dist/parser/src/columnar-parser.d.ts.map +1 -0
- package/dist/parser/src/columnar-parser.js +226 -0
- package/dist/parser/src/columnar-parser.js.map +1 -0
- package/dist/parser/src/entity-extractor.d.ts +15 -0
- package/dist/parser/src/entity-extractor.d.ts.map +1 -0
- package/dist/parser/src/entity-extractor.js +144 -0
- package/dist/parser/src/entity-extractor.js.map +1 -0
- package/dist/parser/src/entity-index.d.ts +11 -0
- package/dist/parser/src/entity-index.d.ts.map +1 -0
- package/dist/parser/src/entity-index.js +24 -0
- package/dist/parser/src/entity-index.js.map +1 -0
- package/dist/parser/src/generated/entities.d.ts +6198 -0
- package/dist/parser/src/generated/entities.d.ts.map +1 -0
- package/dist/parser/src/generated/entities.js +5 -0
- package/dist/parser/src/generated/entities.js.map +1 -0
- package/dist/parser/src/generated/enums.d.ts +2260 -0
- package/dist/parser/src/generated/enums.d.ts.map +1 -0
- package/dist/parser/src/generated/enums.js +2470 -0
- package/dist/parser/src/generated/enums.js.map +1 -0
- package/dist/parser/src/generated/schema-registry.d.ts +50 -0
- package/dist/parser/src/generated/schema-registry.d.ts.map +1 -0
- package/dist/parser/src/generated/schema-registry.js +60518 -0
- package/dist/parser/src/generated/schema-registry.js.map +1 -0
- package/dist/parser/src/georef-extractor.d.ts +60 -0
- package/dist/parser/src/georef-extractor.d.ts.map +1 -0
- package/dist/parser/src/georef-extractor.js +200 -0
- package/dist/parser/src/georef-extractor.js.map +1 -0
- package/dist/parser/src/ifc-schema.d.ts +13 -0
- package/dist/parser/src/ifc-schema.d.ts.map +1 -0
- package/dist/parser/src/ifc-schema.js +203 -0
- package/dist/parser/src/ifc-schema.js.map +1 -0
- package/dist/parser/src/index.d.ts +43 -0
- package/dist/parser/src/index.d.ts.map +1 -0
- package/dist/parser/src/index.js +150 -0
- package/dist/parser/src/index.js.map +1 -0
- package/dist/parser/src/material-extractor.d.ts +97 -0
- package/dist/parser/src/material-extractor.d.ts.map +1 -0
- package/dist/parser/src/material-extractor.js +283 -0
- package/dist/parser/src/material-extractor.js.map +1 -0
- package/dist/parser/src/property-extractor.d.ts +23 -0
- package/dist/parser/src/property-extractor.d.ts.map +1 -0
- package/dist/parser/src/property-extractor.js +102 -0
- package/dist/parser/src/property-extractor.js.map +1 -0
- package/dist/parser/src/quantity-extractor.d.ts +64 -0
- package/dist/parser/src/quantity-extractor.d.ts.map +1 -0
- package/dist/parser/src/quantity-extractor.js +202 -0
- package/dist/parser/src/quantity-extractor.js.map +1 -0
- package/dist/parser/src/relationship-extractor.d.ts +18 -0
- package/dist/parser/src/relationship-extractor.d.ts.map +1 -0
- package/dist/parser/src/relationship-extractor.js +91 -0
- package/dist/parser/src/relationship-extractor.js.map +1 -0
- package/dist/parser/src/spatial-hierarchy-builder.d.ts +21 -0
- package/dist/parser/src/spatial-hierarchy-builder.d.ts.map +1 -0
- package/dist/parser/src/spatial-hierarchy-builder.js +201 -0
- package/dist/parser/src/spatial-hierarchy-builder.js.map +1 -0
- package/dist/parser/src/style-extractor.d.ts +83 -0
- package/dist/parser/src/style-extractor.d.ts.map +1 -0
- package/dist/parser/src/style-extractor.js +327 -0
- package/dist/parser/src/style-extractor.js.map +1 -0
- package/dist/parser/src/tokenizer.d.ts +26 -0
- package/dist/parser/src/tokenizer.d.ts.map +1 -0
- package/dist/parser/src/tokenizer.js +181 -0
- package/dist/parser/src/tokenizer.js.map +1 -0
- package/dist/parser/src/types.d.ts +42 -0
- package/dist/parser/src/types.d.ts.map +1 -0
- package/dist/parser/src/types.js +5 -0
- package/dist/parser/src/types.js.map +1 -0
- package/dist/query/src/duckdb-integration.d.ts +59 -0
- package/dist/query/src/duckdb-integration.d.ts.map +1 -0
- package/dist/query/src/duckdb-integration.js +380 -0
- package/dist/query/src/duckdb-integration.js.map +1 -0
- package/dist/query/src/entity-node.d.ts +30 -0
- package/dist/query/src/entity-node.d.ts.map +1 -0
- package/dist/query/src/entity-node.js +114 -0
- package/dist/query/src/entity-node.js.map +1 -0
- package/dist/query/src/entity-query.d.ts +31 -0
- package/dist/query/src/entity-query.d.ts.map +1 -0
- package/dist/query/src/entity-query.js +129 -0
- package/dist/query/src/entity-query.js.map +1 -0
- package/dist/query/src/entity-table.d.ts +26 -0
- package/dist/query/src/entity-table.d.ts.map +1 -0
- package/dist/query/src/entity-table.js +37 -0
- package/dist/query/src/entity-table.js.map +1 -0
- package/dist/query/src/fluent-api.d.ts +45 -0
- package/dist/query/src/fluent-api.d.ts.map +1 -0
- package/dist/query/src/fluent-api.js +81 -0
- package/dist/query/src/fluent-api.js.map +1 -0
- package/dist/query/src/ifc-query.d.ts +34 -0
- package/dist/query/src/ifc-query.d.ts.map +1 -0
- package/dist/query/src/ifc-query.js +117 -0
- package/dist/query/src/ifc-query.js.map +1 -0
- package/dist/query/src/index.d.ts +12 -0
- package/dist/query/src/index.d.ts.map +1 -0
- package/dist/query/src/index.js +15 -0
- package/dist/query/src/index.js.map +1 -0
- package/dist/query/src/property-table.d.ts +30 -0
- package/dist/query/src/property-table.d.ts.map +1 -0
- package/dist/query/src/property-table.js +79 -0
- package/dist/query/src/property-table.js.map +1 -0
- package/dist/query/src/query-result-entity.d.ts +33 -0
- package/dist/query/src/query-result-entity.d.ts.map +1 -0
- package/dist/query/src/query-result-entity.js +84 -0
- package/dist/query/src/query-result-entity.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../../../parser/src/tokenizer.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,UAAU,CAAa;gBAEnB,MAAM,EAAE,UAAU;IAI9B;;;OAGG;IACF,YAAY,IAAI,SAAS,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAmE7G,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,YAAY;IA+BpB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,gBAAgB;CA8CzB"}
|
|
@@ -0,0 +1,181 @@
|
|
|
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
|
+
/**
|
|
5
|
+
* STEP tokenizer - fast byte-level scanning for entity markers
|
|
6
|
+
* Leverages Spike 1 approach: ~1,259 MB/s throughput
|
|
7
|
+
*/
|
|
8
|
+
export class StepTokenizer {
|
|
9
|
+
buffer;
|
|
10
|
+
position = 0;
|
|
11
|
+
lineNumber = 1;
|
|
12
|
+
constructor(buffer) {
|
|
13
|
+
this.buffer = buffer;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Scan for all entity declarations (#EXPRESS_ID = TYPE(...))
|
|
17
|
+
* Returns entity references without parsing full content
|
|
18
|
+
*/
|
|
19
|
+
*scanEntities() {
|
|
20
|
+
this.position = 0;
|
|
21
|
+
this.lineNumber = 1;
|
|
22
|
+
while (this.position < this.buffer.length) {
|
|
23
|
+
// Look for '#' character (entity ID marker)
|
|
24
|
+
if (this.buffer[this.position] === 0x23) { // '#'
|
|
25
|
+
const startOffset = this.position;
|
|
26
|
+
const startLine = this.lineNumber;
|
|
27
|
+
// Read express ID
|
|
28
|
+
const expressId = this.readExpressId();
|
|
29
|
+
if (expressId === null) {
|
|
30
|
+
this.position++;
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
// Skip whitespace
|
|
34
|
+
this.skipWhitespace();
|
|
35
|
+
// Check for '=' (assignment)
|
|
36
|
+
if (this.position >= this.buffer.length || this.buffer[this.position] !== 0x3D) {
|
|
37
|
+
this.position++;
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
this.position++; // Skip '='
|
|
41
|
+
// Skip whitespace
|
|
42
|
+
this.skipWhitespace();
|
|
43
|
+
// Read type name
|
|
44
|
+
const type = this.readTypeName();
|
|
45
|
+
if (!type) {
|
|
46
|
+
this.position++;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
// Skip whitespace
|
|
50
|
+
this.skipWhitespace();
|
|
51
|
+
// Check for '(' (start of parameters)
|
|
52
|
+
if (this.position >= this.buffer.length || this.buffer[this.position] !== 0x28) {
|
|
53
|
+
this.position++;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
// Find matching closing parenthesis to get full entity length
|
|
57
|
+
const entityLength = this.findEntityLength(startOffset);
|
|
58
|
+
if (entityLength > 0) {
|
|
59
|
+
yield {
|
|
60
|
+
expressId,
|
|
61
|
+
type,
|
|
62
|
+
offset: startOffset,
|
|
63
|
+
length: entityLength,
|
|
64
|
+
line: startLine,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else if (this.buffer[this.position] === 0x0A) {
|
|
69
|
+
// Newline
|
|
70
|
+
this.lineNumber++;
|
|
71
|
+
this.position++;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.position++;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
readExpressId() {
|
|
79
|
+
let id = 0;
|
|
80
|
+
let digits = 0;
|
|
81
|
+
let pos = this.position + 1; // Skip '#'
|
|
82
|
+
while (pos < this.buffer.length) {
|
|
83
|
+
const char = this.buffer[pos];
|
|
84
|
+
if (char >= 0x30 && char <= 0x39) { // '0'-'9'
|
|
85
|
+
id = id * 10 + (char - 0x30);
|
|
86
|
+
digits++;
|
|
87
|
+
pos++;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (digits === 0)
|
|
94
|
+
return null;
|
|
95
|
+
this.position = pos;
|
|
96
|
+
return id;
|
|
97
|
+
}
|
|
98
|
+
readTypeName() {
|
|
99
|
+
let start = this.position;
|
|
100
|
+
let end = start;
|
|
101
|
+
// Type names start with uppercase letter
|
|
102
|
+
if (this.position >= this.buffer.length || this.buffer[this.position] < 0x41 || this.buffer[this.position] > 0x5A) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
while (end < this.buffer.length) {
|
|
106
|
+
const char = this.buffer[end];
|
|
107
|
+
// Allow letters, numbers, and underscore
|
|
108
|
+
if ((char >= 0x41 && char <= 0x5A) || // A-Z
|
|
109
|
+
(char >= 0x61 && char <= 0x7A) || // a-z
|
|
110
|
+
(char >= 0x30 && char <= 0x39) || // 0-9
|
|
111
|
+
char === 0x5F // _
|
|
112
|
+
) {
|
|
113
|
+
end++;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (end === start)
|
|
120
|
+
return null;
|
|
121
|
+
const typeName = new TextDecoder().decode(this.buffer.subarray(start, end));
|
|
122
|
+
this.position = end;
|
|
123
|
+
return typeName;
|
|
124
|
+
}
|
|
125
|
+
skipWhitespace() {
|
|
126
|
+
while (this.position < this.buffer.length) {
|
|
127
|
+
const char = this.buffer[this.position];
|
|
128
|
+
if (char === 0x20 || char === 0x09 || char === 0x0D || char === 0x0A) { // space, tab, CR, LF
|
|
129
|
+
if (char === 0x0A)
|
|
130
|
+
this.lineNumber++;
|
|
131
|
+
this.position++;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
findEntityLength(startOffset) {
|
|
139
|
+
let pos = this.position;
|
|
140
|
+
let depth = 0;
|
|
141
|
+
let inString = false;
|
|
142
|
+
let escapeNext = false;
|
|
143
|
+
while (pos < this.buffer.length) {
|
|
144
|
+
const char = this.buffer[pos];
|
|
145
|
+
if (escapeNext) {
|
|
146
|
+
escapeNext = false;
|
|
147
|
+
pos++;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (char === 0x27) { // Single quote (string delimiter)
|
|
151
|
+
inString = !inString;
|
|
152
|
+
pos++;
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
if (inString) {
|
|
156
|
+
if (char === 0x5C) { // Backslash (escape)
|
|
157
|
+
escapeNext = true;
|
|
158
|
+
}
|
|
159
|
+
pos++;
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
if (char === 0x28) { // '('
|
|
163
|
+
depth++;
|
|
164
|
+
pos++;
|
|
165
|
+
}
|
|
166
|
+
else if (char === 0x29) { // ')'
|
|
167
|
+
depth--;
|
|
168
|
+
pos++;
|
|
169
|
+
if (depth === 0) {
|
|
170
|
+
// Found matching closing parenthesis
|
|
171
|
+
return pos - startOffset;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
pos++;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return 0; // No matching closing parenthesis found
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=tokenizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../../../parser/src/tokenizer.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;GAGG;AAEH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAa;IACnB,QAAQ,GAAW,CAAC,CAAC;IACrB,UAAU,GAAW,CAAC,CAAC;IAE/B,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,CAAC,YAAY;QACX,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAEpB,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC1C,4CAA4C;YAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM;gBAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAClC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;gBAElC,kBAAkB;gBAClB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,SAAS;gBACX,CAAC;gBAED,kBAAkB;gBAClB,IAAI,CAAC,cAAc,EAAE,CAAC;gBAEtB,6BAA6B;gBAC7B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC/E,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW;gBAE5B,kBAAkB;gBAClB,IAAI,CAAC,cAAc,EAAE,CAAC;gBAEtB,iBAAiB;gBACjB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,SAAS;gBACX,CAAC;gBAED,kBAAkB;gBAClB,IAAI,CAAC,cAAc,EAAE,CAAC;gBAEtB,sCAAsC;gBACtC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC/E,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,SAAS;gBACX,CAAC;gBAED,8DAA8D;gBAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBACxD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;oBACrB,MAAM;wBACJ,SAAS;wBACT,IAAI;wBACJ,MAAM,EAAE,WAAW;wBACnB,MAAM,EAAE,YAAY;wBACpB,IAAI,EAAE,SAAS;qBAChB,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC/C,UAAU;gBACV,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,WAAW;QAExC,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,UAAU;gBAC5C,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;gBAC7B,MAAM,EAAE,CAAC;gBACT,GAAG,EAAE,CAAC;YACR,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,YAAY;QAClB,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC1B,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,yCAAyC;QACzC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;YAClH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,yCAAyC;YACzC,IACE,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM;gBACxC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM;gBACxC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM;gBACxC,IAAI,KAAK,IAAI,CAAC,IAAI;cAClB,CAAC;gBACD,GAAG,EAAE,CAAC;YACR,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,GAAG,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAE/B,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,cAAc;QACpB,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,qBAAqB;gBAC3F,IAAI,IAAI,KAAK,IAAI;oBAAE,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,WAAmB;QAC1C,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAE9B,IAAI,UAAU,EAAE,CAAC;gBACf,UAAU,GAAG,KAAK,CAAC;gBACnB,GAAG,EAAE,CAAC;gBACN,SAAS;YACX,CAAC;YAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,kCAAkC;gBACrD,QAAQ,GAAG,CAAC,QAAQ,CAAC;gBACrB,GAAG,EAAE,CAAC;gBACN,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,qBAAqB;oBACxC,UAAU,GAAG,IAAI,CAAC;gBACpB,CAAC;gBACD,GAAG,EAAE,CAAC;gBACN,SAAS;YACX,CAAC;YAED,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM;gBACzB,KAAK,EAAE,CAAC;gBACR,GAAG,EAAE,CAAC;YACR,CAAC;iBAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM;gBAChC,KAAK,EAAE,CAAC;gBACR,GAAG,EAAE,CAAC;gBACN,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBAChB,qCAAqC;oBACrC,OAAO,GAAG,GAAG,WAAW,CAAC;gBAC3B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,EAAE,CAAC;YACR,CAAC;QACH,CAAC;QAED,OAAO,CAAC,CAAC,CAAC,wCAAwC;IACpD,CAAC;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for IFC parsing
|
|
3
|
+
*/
|
|
4
|
+
export interface EntityRef {
|
|
5
|
+
expressId: number;
|
|
6
|
+
type: string;
|
|
7
|
+
byteOffset: number;
|
|
8
|
+
byteLength: number;
|
|
9
|
+
lineNumber: number;
|
|
10
|
+
}
|
|
11
|
+
export interface EntityIndex {
|
|
12
|
+
byId: Map<number, EntityRef>;
|
|
13
|
+
byType: Map<string, number[]>;
|
|
14
|
+
}
|
|
15
|
+
export interface IfcEntity {
|
|
16
|
+
expressId: number;
|
|
17
|
+
type: string;
|
|
18
|
+
attributes: any[];
|
|
19
|
+
}
|
|
20
|
+
export interface PropertyValue {
|
|
21
|
+
type: 'string' | 'number' | 'boolean' | 'null' | 'reference';
|
|
22
|
+
value: string | number | boolean | null | number;
|
|
23
|
+
}
|
|
24
|
+
export interface PropertySet {
|
|
25
|
+
name: string;
|
|
26
|
+
properties: Map<string, PropertyValue>;
|
|
27
|
+
}
|
|
28
|
+
export interface Relationship {
|
|
29
|
+
type: string;
|
|
30
|
+
relatingObject: number;
|
|
31
|
+
relatedObjects: number[];
|
|
32
|
+
attributes?: Record<string, any>;
|
|
33
|
+
}
|
|
34
|
+
export interface ParseResult {
|
|
35
|
+
entities: Map<number, IfcEntity>;
|
|
36
|
+
propertySets: Map<number, PropertySet>;
|
|
37
|
+
relationships: Relationship[];
|
|
38
|
+
entityIndex: EntityIndex;
|
|
39
|
+
fileSize: number;
|
|
40
|
+
entityCount: number;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../parser/src/types.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,GAAG,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;IAC7D,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;CAClD;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../parser/src/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DuckDB-WASM integration for SQL queries
|
|
3
|
+
* Lazy-loaded to avoid adding ~4MB to bundle unless needed
|
|
4
|
+
*/
|
|
5
|
+
import type { IfcDataStore } from '@ifc-lite/parser';
|
|
6
|
+
export interface SQLResult {
|
|
7
|
+
columns: string[];
|
|
8
|
+
rows: any[][];
|
|
9
|
+
toArray(): any[];
|
|
10
|
+
toJSON(): any[];
|
|
11
|
+
}
|
|
12
|
+
export declare class DuckDBIntegration {
|
|
13
|
+
private db;
|
|
14
|
+
private conn;
|
|
15
|
+
private initPromise;
|
|
16
|
+
private initialized;
|
|
17
|
+
/**
|
|
18
|
+
* Initialize DuckDB (lazy-loaded)
|
|
19
|
+
*/
|
|
20
|
+
init(store: IfcDataStore): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Execute SQL query
|
|
23
|
+
*/
|
|
24
|
+
query(sql: string): Promise<SQLResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Register tables from columnar store using SQL INSERT statements
|
|
27
|
+
* This approach works without Arrow dependencies and is more portable
|
|
28
|
+
*/
|
|
29
|
+
private registerTables;
|
|
30
|
+
/**
|
|
31
|
+
* Create and populate entities table
|
|
32
|
+
*/
|
|
33
|
+
private createEntitiesTable;
|
|
34
|
+
/**
|
|
35
|
+
* Create and populate properties table
|
|
36
|
+
*/
|
|
37
|
+
private createPropertiesTable;
|
|
38
|
+
/**
|
|
39
|
+
* Create and populate quantities table
|
|
40
|
+
*/
|
|
41
|
+
private createQuantitiesTable;
|
|
42
|
+
/**
|
|
43
|
+
* Create and populate relationships table
|
|
44
|
+
*/
|
|
45
|
+
private createRelationshipsTable;
|
|
46
|
+
/**
|
|
47
|
+
* Create convenience views
|
|
48
|
+
*/
|
|
49
|
+
private createViews;
|
|
50
|
+
/**
|
|
51
|
+
* Check if DuckDB is available
|
|
52
|
+
*/
|
|
53
|
+
static isAvailable(): Promise<boolean>;
|
|
54
|
+
/**
|
|
55
|
+
* Dispose of DuckDB resources
|
|
56
|
+
*/
|
|
57
|
+
dispose(): Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=duckdb-integration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duckdb-integration.d.ts","sourceRoot":"","sources":["../../../src/duckdb-integration.ts"],"names":[],"mappings":"AAIA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;IACd,OAAO,IAAI,GAAG,EAAE,CAAC;IACjB,MAAM,IAAI,GAAG,EAAE,CAAC;CACjB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,WAAW,CAAS;IAE5B;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC9C;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAuB5C;;;OAGG;YACW,cAAc;IAkB5B;;OAEG;YACW,mBAAmB;IAgDjC;;OAEG;YACW,qBAAqB;IA6DnC;;OAEG;YACW,qBAAqB;IAgDnC;;OAEG;YACW,wBAAwB;IAgEtC;;OAEG;YACW,WAAW;IAiEzB;;OAEG;WACU,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAW5C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAY/B"}
|