@ifc-lite/parser 4.3.2 → 5.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/dist/attribute-helpers.d.ts +38 -4
- package/dist/attribute-helpers.d.ts.map +1 -1
- package/dist/attribute-helpers.js +71 -4
- package/dist/attribute-helpers.js.map +1 -1
- package/dist/columnar-parser-attributes.d.ts.map +1 -1
- package/dist/columnar-parser-attributes.js +35 -5
- package/dist/columnar-parser-attributes.js.map +1 -1
- package/dist/columnar-parser-indexes.d.ts.map +1 -1
- package/dist/columnar-parser-indexes.js +14 -2
- package/dist/columnar-parser-indexes.js.map +1 -1
- package/dist/columnar-parser-relationships.d.ts.map +1 -1
- package/dist/columnar-parser-relationships.js +6 -1
- package/dist/columnar-parser-relationships.js.map +1 -1
- package/dist/columnar-parser.d.ts +3 -1
- package/dist/columnar-parser.d.ts.map +1 -1
- package/dist/columnar-parser.js +16 -25
- package/dist/columnar-parser.js.map +1 -1
- package/dist/compact-entity-index-transport.d.ts +23 -0
- package/dist/compact-entity-index-transport.d.ts.map +1 -0
- package/dist/compact-entity-index-transport.js +28 -0
- package/dist/compact-entity-index-transport.js.map +1 -0
- package/dist/compact-entity-index.d.ts +0 -10
- package/dist/compact-entity-index.d.ts.map +1 -1
- package/dist/compact-entity-index.js +31 -24
- package/dist/compact-entity-index.js.map +1 -1
- package/dist/data-store-transport.d.ts +2 -12
- package/dist/data-store-transport.d.ts.map +1 -1
- package/dist/data-store-transport.js +7 -20
- package/dist/data-store-transport.js.map +1 -1
- package/dist/entity-extractor.d.ts.map +1 -1
- package/dist/entity-extractor.js +101 -6
- package/dist/entity-extractor.js.map +1 -1
- package/dist/entity-refs-from-index.d.ts.map +1 -1
- package/dist/entity-refs-from-index.js +12 -2
- package/dist/entity-refs-from-index.js.map +1 -1
- package/dist/entity-scanner.d.ts +63 -0
- package/dist/entity-scanner.d.ts.map +1 -1
- package/dist/entity-scanner.js +79 -2
- package/dist/entity-scanner.js.map +1 -1
- package/dist/express-id.d.ts +47 -0
- package/dist/express-id.d.ts.map +1 -0
- package/dist/express-id.js +57 -0
- package/dist/express-id.js.map +1 -0
- package/dist/generated/entities.d.ts +1 -1
- package/dist/generated/entities.d.ts.map +1 -1
- package/dist/generated/schema-registry.js +146 -146
- package/dist/generated/schema-registry.js.map +1 -1
- package/dist/georef-epset.d.ts +25 -0
- package/dist/georef-epset.d.ts.map +1 -0
- package/dist/georef-epset.js +214 -0
- package/dist/georef-epset.js.map +1 -0
- package/dist/georef-extractor.d.ts.map +1 -1
- package/dist/georef-extractor.js +38 -175
- package/dist/georef-extractor.js.map +1 -1
- package/dist/georef-map-conversion.d.ts +29 -0
- package/dist/georef-map-conversion.d.ts.map +1 -0
- package/dist/georef-map-conversion.js +75 -0
- package/dist/georef-map-conversion.js.map +1 -0
- package/dist/ifc-schema.d.ts +4 -2
- package/dist/ifc-schema.d.ts.map +1 -1
- package/dist/ifc-schema.js +15 -5
- package/dist/ifc-schema.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/material-extractor.d.ts +2 -17
- package/dist/material-extractor.d.ts.map +1 -1
- package/dist/material-extractor.js +12 -37
- package/dist/material-extractor.js.map +1 -1
- package/dist/material-layer-reader.d.ts +45 -0
- package/dist/material-layer-reader.d.ts.map +1 -0
- package/dist/material-layer-reader.js +63 -0
- package/dist/material-layer-reader.js.map +1 -0
- package/dist/material-resolver.d.ts.map +1 -1
- package/dist/material-resolver.js +14 -14
- package/dist/material-resolver.js.map +1 -1
- package/dist/measure-unit-scale.d.ts +41 -0
- package/dist/measure-unit-scale.d.ts.map +1 -0
- package/dist/measure-unit-scale.js +53 -0
- package/dist/measure-unit-scale.js.map +1 -0
- package/dist/on-demand-extractors.d.ts +3 -19
- package/dist/on-demand-extractors.d.ts.map +1 -1
- package/dist/on-demand-extractors.js +54 -264
- package/dist/on-demand-extractors.js.map +1 -1
- package/dist/owning-project.d.ts +54 -0
- package/dist/owning-project.d.ts.map +1 -0
- package/dist/owning-project.js +76 -0
- package/dist/owning-project.js.map +1 -0
- package/dist/parser.worker.d.ts +14 -0
- package/dist/parser.worker.d.ts.map +1 -1
- package/dist/parser.worker.js +2 -0
- package/dist/parser.worker.js.map +1 -1
- package/dist/project-units-symbols.d.ts +33 -0
- package/dist/project-units-symbols.d.ts.map +1 -0
- package/dist/project-units-symbols.js +265 -0
- package/dist/project-units-symbols.js.map +1 -0
- package/dist/project-units.d.ts +11 -19
- package/dist/project-units.d.ts.map +1 -1
- package/dist/project-units.js +9 -267
- package/dist/project-units.js.map +1 -1
- package/dist/property-set-merge.d.ts +65 -8
- package/dist/property-set-merge.d.ts.map +1 -1
- package/dist/property-set-merge.js +130 -29
- package/dist/property-set-merge.js.map +1 -1
- package/dist/property-value-parser.d.ts +55 -0
- package/dist/property-value-parser.d.ts.map +1 -0
- package/dist/property-value-parser.js +277 -0
- package/dist/property-value-parser.js.map +1 -0
- package/dist/quantity-collect.d.ts +42 -3
- package/dist/quantity-collect.d.ts.map +1 -1
- package/dist/quantity-collect.js +114 -7
- package/dist/quantity-collect.js.map +1 -1
- package/dist/query-backend-maps.d.ts +5 -8
- package/dist/query-backend-maps.d.ts.map +1 -1
- package/dist/query-backend-maps.js +155 -15
- package/dist/query-backend-maps.js.map +1 -1
- package/dist/relationship-extractor.d.ts.map +1 -1
- package/dist/relationship-extractor.js +18 -0
- package/dist/relationship-extractor.js.map +1 -1
- package/dist/scan-entities-balanced.d.ts +38 -0
- package/dist/scan-entities-balanced.d.ts.map +1 -0
- package/dist/scan-entities-balanced.js +258 -0
- package/dist/scan-entities-balanced.js.map +1 -0
- package/dist/scan-worker-inline.d.ts +17 -11
- package/dist/scan-worker-inline.d.ts.map +1 -1
- package/dist/scan-worker-inline.js +9 -235
- package/dist/scan-worker-inline.js.map +1 -1
- package/dist/scan-worker-source.d.ts +9 -0
- package/dist/scan-worker-source.d.ts.map +1 -0
- package/dist/scan-worker-source.js +383 -0
- package/dist/scan-worker-source.js.map +1 -0
- package/dist/spatial-hierarchy-builder.js +3 -3
- package/dist/spatial-hierarchy-builder.js.map +1 -1
- package/dist/step-lexing.d.ts +2 -0
- package/dist/step-lexing.d.ts.map +1 -1
- package/dist/step-lexing.js +116 -18
- package/dist/step-lexing.js.map +1 -1
- package/dist/step-trivia.d.ts +60 -0
- package/dist/step-trivia.d.ts.map +1 -0
- package/dist/step-trivia.js +63 -0
- package/dist/step-trivia.js.map +1 -0
- package/dist/tokenizer.d.ts +20 -21
- package/dist/tokenizer.d.ts.map +1 -1
- package/dist/tokenizer.js +164 -203
- package/dist/tokenizer.js.map +1 -1
- package/dist/unit-extractor.d.ts +43 -1
- package/dist/unit-extractor.d.ts.map +1 -1
- package/dist/unit-extractor.js +63 -4
- package/dist/unit-extractor.js.map +1 -1
- package/dist/worker-parser.d.ts +11 -1
- package/dist/worker-parser.d.ts.map +1 -1
- package/dist/worker-parser.js +16 -2
- package/dist/worker-parser.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-contained entity scanner code (runs inside Web Worker).
|
|
3
|
+
* This is the same algorithm as StepTokenizer.scanEntitiesFast() but
|
|
4
|
+
* written as a standalone function for worker embedding.
|
|
5
|
+
*/
|
|
6
|
+
/** Exported for direct testing (run inside a mock `self`); the runtime path
|
|
7
|
+
* wraps it in a Blob worker in `scan-worker-inline.ts`. */
|
|
8
|
+
export declare const WORKER_CODE = "\n'use strict';\nself.onmessage = function(e) {\n var buf = new Uint8Array(e.data);\n var len = buf.length;\n var pos = 0;\n var line = 1;\n\n // Pre-allocate result array (estimate ~13,500 entities per MB)\n var estimatedCount = Math.max((len / 1024 / 1024) * 13500, 1000) | 0;\n // Pack results into typed arrays for fast transfer. Uint32Array for the ids:\n // that is the express-id storage contract every consumer of this scan holds\n // to (CompactEntityIndex, the entity/property/quantity tables, the wasm\n // boundary, Rust's ColumnarIndex), so the guard below refuses anything wider\n // rather than carrying it one buffer further and truncating downstream\n // (#3395). The worker runs from a Blob URL and cannot import at runtime, so\n // the bound below is interpolated from express-id.ts when this template is\n // evaluated -- one home for the number, not a copy that can drift.\n // Whether a STEP comment opens at p.\n function opensCommentAt(p) {\n return p + 1 < len && buf[p] === 0x2F && buf[p + 1] === 0x2A;\n }\n\n // Index just past the '*/' closing the comment at p, or -1 when it never\n // closes. Counts the newlines it crosses so line numbers stay in step.\n //\n // Kept behaviourally identical to skipComment/skipTrivia in step-lexing.ts,\n // which this cannot import: the worker source is a string, so this copy of\n // the rule has to live here. Comments do not nest, per ISO 10303-21.\n function skipCommentAt(p) {\n var q = p + 2;\n while (q + 1 < len) {\n if (buf[q] === 0x2A && buf[q + 1] === 0x2F) return q + 2;\n if (buf[q] === 0x0A) line++;\n q++;\n }\n return -1;\n }\n\n // Skip whitespace, comments, and any run of the two -- 10303-21 allows a\n // comment wherever whitespace is allowed, INCLUDING inside a record.\n // Returns -1 when a comment opens and never closes: everything from there on\n // is inside it, so there is nothing left to find.\n //\n // The whitespace byte set (space, tab, CR, LF, form feed, vertical tab) is\n // kept byte-for-byte in sync with isSpaceByte in step-lexing.ts and its\n // three inline twins in tokenizer.ts's scanEntitiesFast -- this file is a\n // string because a Blob worker cannot import at runtime, not a reason for\n // the rule itself to drift.\n function skipTriviaAt(p) {\n for (;;) {\n while (p < len) {\n var t = buf[p];\n if (t === 0x20 || t === 0x09 || t === 0x0D || t === 0x0C || t === 0x0B) { p++; }\n else if (t === 0x0A) { line++; p++; }\n else break;\n }\n if (!opensCommentAt(p)) return p;\n var e = skipCommentAt(p);\n if (e < 0) return -1;\n p = e;\n }\n }\n\n var ids = new Uint32Array(estimatedCount);\n var offsets = new Uint32Array(estimatedCount);\n var lengths = new Uint32Array(estimatedCount);\n var lines = new Uint32Array(estimatedCount);\n // Type names stored separately (strings)\n var types = new Array(estimatedCount);\n var count = 0;\n // Records refused by the express-id bound, reported back to the caller.\n var oversizedIds = 0;\n // 0 or 1, never a count of how many: whether this scan stopped early on an\n // unclosed string, an unclosed comment, or a declaration cut off before its\n // own '(' -- set once, by the single post-loop check at the bottom of this\n // function. Reported back to the caller. Mirrors tokenizer.ts's\n // scanEntitiesFast contract exactly, including the 0-or-1 shape.\n var malformedRecords = 0;\n // Set on the way to that post-loop check, not counted at each site:\n // 'stopped' for an unclosed string or comment that ran to end of buffer\n // with nothing left to find, 'declOpen' while a #id=TYPE( header is\n // incomplete. 'declOpen' stays armed ONLY when the reason for abandoning\n // is running out of buffer (pos >= len); a mismatch with buffer still\n // left (bad byte, oversized id) clears it, because the scan resumes\n // byte-by-byte from wherever it gave up, and a #ref token inside the\n // abandoned record's own argument list reads as a fresh, equally\n // incomplete attempt that must not report \"cut off\" just because\n // nothing later happens to clear it.\n var stopped = false;\n var declOpen = false;\n\n // Type name cache (IFC files have ~776 unique types across millions of entities)\n var typeCache = new Map();\n\n function growArrays() {\n var newSize = (count * 2) | 0;\n var newIds = new Uint32Array(newSize);\n newIds.set(ids);\n ids = newIds;\n var newOffsets = new Uint32Array(newSize);\n newOffsets.set(offsets);\n offsets = newOffsets;\n var newLengths = new Uint32Array(newSize);\n newLengths.set(lengths);\n lengths = newLengths;\n var newLines = new Uint32Array(newSize);\n newLines.set(lines);\n lines = newLines;\n types.length = newSize;\n }\n\n while (pos < len) {\n var ch = buf[pos];\n\n if (ch === 0x23) { // '#'\n var startOffset = pos;\n var startLine = line;\n pos++;\n\n // Read express ID\n var expressId = 0;\n var hasDigits = false;\n while (pos < len) {\n var c = buf[pos];\n if (c >= 0x30 && c <= 0x39) {\n expressId = expressId * 10 + (c - 0x30);\n hasDigits = true;\n pos++;\n } else {\n break;\n }\n }\n if (!hasDigits) continue;\n declOpen = true;\n\n // Whitespace AND comments: '#1 /* was #7 */ =' is a declaration. The\n // inline loop stays for the common case; skipTriviaAt runs only once a\n // comment actually opens. Mirrors tokenizer.ts's scanEntitiesFast.\n while (pos < len) {\n var c2 = buf[pos];\n if (c2 === 0x20 || c2 === 0x09 || c2 === 0x0D || c2 === 0x0C || c2 === 0x0B) { pos++; }\n else if (c2 === 0x0A) { line++; pos++; }\n else break;\n }\n if (opensCommentAt(pos)) { pos = skipTriviaAt(pos); if (pos < 0) { stopped = true; break; } }\n\n // Check for '='. A byte that is not '=' with buffer left to scan is\n // not a truncation -- clear declOpen so a reference token inside a\n // LATER abandoned record's argument list (see the oversized-id note\n // below) cannot leave it stuck armed with nothing left to clear it.\n if (pos >= len) continue;\n if (buf[pos] !== 0x3D) { declOpen = false; continue; }\n pos++;\n\n // Express-id bound, identical to StepTokenizer.scanEntitiesFast -- this\n // worker is that scan's twin and must reject the same records, and count\n // the same ones, or which scan path ran decides both whether an id\n // collides with another and what the user is told was dropped. The\n // single '>' subsumes a safe-integer check: a digit run accumulated as a\n // double is non-negative and integral, and every value past 2^32 --\n // including one past 2^53, where two distinct ids collide onto one\n // double -- fails it. Tested only after '=' has matched, because that is\n // the DECLARATION shape Rust's EntityScanner validates before refusing:\n // the 'continue' below resumes inside the refused record's argument\n // list, so an oversized '#ref' in there arrives here too and would be\n // counted as a second dropped record. Count the refusal; a record that\n // vanishes without a trace is the same defect wearing a different hat.\n if (expressId > 4294967295) { oversizedIds++; declOpen = false; continue; }\n\n // Skip whitespace and comments\n while (pos < len) {\n var c3 = buf[pos];\n if (c3 === 0x20 || c3 === 0x09 || c3 === 0x0D || c3 === 0x0C || c3 === 0x0B) { pos++; }\n else if (c3 === 0x0A) { line++; pos++; }\n else break;\n }\n if (opensCommentAt(pos)) { pos = skipTriviaAt(pos); if (pos < 0) { stopped = true; break; } }\n\n // Read type name. Must start A-Z; a bad start byte with buffer left\n // clears declOpen for the same reason as the '=' check.\n var typeStart = pos;\n if (pos >= len) continue;\n if (buf[pos] < 0x41 || buf[pos] > 0x5A) { declOpen = false; continue; }\n\n while (pos < len) {\n var c4 = buf[pos];\n if ((c4 >= 0x41 && c4 <= 0x5A) || (c4 >= 0x61 && c4 <= 0x7A) ||\n (c4 >= 0x30 && c4 <= 0x39) || c4 === 0x5F) {\n pos++;\n } else {\n break;\n }\n }\n if (pos === typeStart) continue;\n\n // Cache type name \u2014 use length + hash compound key and verify the actual\n // bytes on a hit. Length alone can't disambiguate a 32-bit hash collision\n // (e.g. \"Aa\"/\"BB\"), so without the byte compare a crafted/unlucky file\n // could have one type silently misread as another. Mirrors tokenizer.ts.\n var typeLen = pos - typeStart;\n var typeHash = typeLen;\n for (var i = typeStart; i < pos; i++) {\n typeHash = (typeHash * 31 + buf[i]) | 0;\n }\n var cacheKey = typeLen + ':' + typeHash;\n var typeName = typeCache.get(cacheKey);\n var cacheHitMatches = false;\n if (typeName !== undefined && typeName.length === typeLen) {\n cacheHitMatches = true;\n for (var v = 0; v < typeLen; v++) {\n if (typeName.charCodeAt(v) !== buf[typeStart + v]) {\n cacheHitMatches = false;\n break;\n }\n }\n }\n if (typeName === undefined || !cacheHitMatches) {\n typeName = String.fromCharCode.apply(null, buf.subarray(typeStart, pos));\n typeCache.set(cacheKey, typeName);\n }\n\n // Skip whitespace and comments\n while (pos < len) {\n var c5 = buf[pos];\n if (c5 === 0x20 || c5 === 0x09 || c5 === 0x0D || c5 === 0x0C || c5 === 0x0B) { pos++; }\n else if (c5 === 0x0A) { line++; pos++; }\n else break;\n }\n if (opensCommentAt(pos)) { pos = skipTriviaAt(pos); if (pos < 0) { stopped = true; break; } }\n\n // Check for '('. Same EOF-vs-mismatch split as '=' and the type name.\n if (pos >= len) continue;\n if (buf[pos] !== 0x28) { declOpen = false; continue; }\n declOpen = false; // Header complete: '(' found.\n\n // Skip to semicolon (handling strings)\n var inString = false;\n var foundTerminator = false;\n while (pos < len) {\n var c6 = buf[pos];\n if (c6 === 0x27) { // quote\n if (inString && pos + 1 < len && buf[pos + 1] === 0x27) {\n pos += 2;\n continue;\n }\n inString = !inString;\n } else if (c6 === 0x2F && !inString && opensCommentAt(pos)) {\n // The ';' that ends a record can be preceded by a comment holding\n // its own ';'. Take the comment whole, which also makes the quotes\n // and parens inside it text -- the other direction of the rule the\n // quote branch above gives for a '/*' inside a literal.\n var ce = skipCommentAt(pos);\n if (ce < 0) {\n // Unterminated: this record has no terminator, and neither has\n // anything after it. Drop it and stop.\n pos = len;\n break;\n }\n pos = ce;\n continue;\n } else if (c6 === 0x3B && !inString) { // semicolon\n var entityLength = pos - startOffset + 1;\n\n // Grow if needed\n if (count >= ids.length) growArrays();\n\n ids[count] = expressId;\n offsets[count] = startOffset;\n lengths[count] = entityLength;\n lines[count] = startLine;\n types[count] = typeName;\n count++;\n\n pos++;\n foundTerminator = true;\n break;\n } else if (c6 === 0x0A) {\n line++;\n }\n pos++;\n }\n\n // Ran off the end without an unquoted ';' -- usually an unescaped\n // quote left open, or the unterminated-comment break above (mirrors\n // tokenizer.ts's scanEntitiesFast). Not resynced: with no known\n // terminator, guessing a resume point risks fabricating entities from\n // misaligned bytes. Recorded in 'stopped', not incremented here -- see\n // the post-loop check below.\n if (!foundTerminator) { stopped = true; }\n } else if (ch === 0x0A) {\n line++;\n pos++;\n } else if (ch === 0x27) { // quote\n // Consume a string literal whole. HEADER records carry no '#', so this\n // loop walks them byte by byte, and a '/*' inside a description would\n // otherwise open a comment that never closes and take DATA with it.\n var sp = pos + 1;\n var closed = false;\n while (sp < len) {\n if (buf[sp] === 0x27) {\n if (sp + 1 < len && buf[sp + 1] === 0x27) { sp += 2; continue; }\n sp++;\n closed = true;\n break;\n }\n if (buf[sp] === 0x0A) { line++; }\n sp++;\n }\n pos = sp;\n // Ran off the end without a closing quote: everything from the open\n // quote to EOF was consumed looking for one, so nothing after it was\n // ever a candidate '#' -- the same \"no terminator\" shape as inside a\n // record, just outside one (a HEADER string, most often).\n if (!closed) { stopped = true; break; }\n } else if (opensCommentAt(pos)) {\n // Skip a comment region BETWEEN records. A record that is commented out\n // is still a well-formed #id = TYPE(...), so every check above accepts\n // it and only skipping the region rejects it.\n var cp = skipCommentAt(pos);\n if (cp < 0) {\n // Unterminated: everything to EOF is commented out.\n pos = len;\n stopped = true;\n break;\n }\n pos = cp;\n } else {\n pos++;\n }\n }\n\n // ONE post-loop check, not an increment at every exit site above: the scan\n // stopped early if it hit an explicit \"no terminator\" boundary ('stopped'),\n // or the last #id=TYPE( header was cut short before its own '(' was found\n // ('declOpen'). Always 0 or 1 -- the scan stops at the first one, so there\n // is nothing further to accumulate.\n if (stopped || declOpen) { malformedRecords = 1; }\n\n // Trim arrays once, reuse for both message and transfer list\n var needsTrim = ids.buffer.byteLength > count * 4;\n var trimmedIds = needsTrim ? ids.slice(0, count) : ids;\n var trimmedOffsets = needsTrim ? offsets.slice(0, count) : offsets;\n var trimmedLengths = needsTrim ? lengths.slice(0, count) : lengths;\n var trimmedLines = needsTrim ? lines.slice(0, count) : lines;\n self.postMessage({\n ids: trimmedIds.buffer,\n offsets: trimmedOffsets.buffer,\n lengths: trimmedLengths.buffer,\n lines: trimmedLines.buffer,\n types: types.slice(0, count),\n count: count,\n oversizedIds: oversizedIds,\n malformedRecords: malformedRecords,\n }, [\n trimmedIds.buffer,\n trimmedOffsets.buffer,\n trimmedLengths.buffer,\n trimmedLines.buffer,\n ]);\n};\n";
|
|
9
|
+
//# sourceMappingURL=scan-worker-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-worker-source.d.ts","sourceRoot":"","sources":["../src/scan-worker-source.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH;4DAC4D;AAC5D,eAAO,MAAM,WAAW,uodAyWvB,CAAC"}
|
|
@@ -0,0 +1,383 @@
|
|
|
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
|
+
* The scan worker's source, as a string.
|
|
6
|
+
*
|
|
7
|
+
* Split from `scan-worker-inline.ts`, which owns the Blob/Worker plumbing and
|
|
8
|
+
* the result decoding. The scanner is a string because a Blob worker cannot
|
|
9
|
+
* import at runtime, so this file is the one place the third copy of the STEP
|
|
10
|
+
* scan rules lives -- see the comments inside for which `step-lexing.ts`
|
|
11
|
+
* function each mirrors.
|
|
12
|
+
*/
|
|
13
|
+
import { MAX_EXPRESS_ID } from './express-id.js';
|
|
14
|
+
/**
|
|
15
|
+
* Self-contained entity scanner code (runs inside Web Worker).
|
|
16
|
+
* This is the same algorithm as StepTokenizer.scanEntitiesFast() but
|
|
17
|
+
* written as a standalone function for worker embedding.
|
|
18
|
+
*/
|
|
19
|
+
/** Exported for direct testing (run inside a mock `self`); the runtime path
|
|
20
|
+
* wraps it in a Blob worker in `scan-worker-inline.ts`. */
|
|
21
|
+
export const WORKER_CODE = `
|
|
22
|
+
'use strict';
|
|
23
|
+
self.onmessage = function(e) {
|
|
24
|
+
var buf = new Uint8Array(e.data);
|
|
25
|
+
var len = buf.length;
|
|
26
|
+
var pos = 0;
|
|
27
|
+
var line = 1;
|
|
28
|
+
|
|
29
|
+
// Pre-allocate result array (estimate ~13,500 entities per MB)
|
|
30
|
+
var estimatedCount = Math.max((len / 1024 / 1024) * 13500, 1000) | 0;
|
|
31
|
+
// Pack results into typed arrays for fast transfer. Uint32Array for the ids:
|
|
32
|
+
// that is the express-id storage contract every consumer of this scan holds
|
|
33
|
+
// to (CompactEntityIndex, the entity/property/quantity tables, the wasm
|
|
34
|
+
// boundary, Rust's ColumnarIndex), so the guard below refuses anything wider
|
|
35
|
+
// rather than carrying it one buffer further and truncating downstream
|
|
36
|
+
// (#3395). The worker runs from a Blob URL and cannot import at runtime, so
|
|
37
|
+
// the bound below is interpolated from express-id.ts when this template is
|
|
38
|
+
// evaluated -- one home for the number, not a copy that can drift.
|
|
39
|
+
// Whether a STEP comment opens at p.
|
|
40
|
+
function opensCommentAt(p) {
|
|
41
|
+
return p + 1 < len && buf[p] === 0x2F && buf[p + 1] === 0x2A;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Index just past the '*/' closing the comment at p, or -1 when it never
|
|
45
|
+
// closes. Counts the newlines it crosses so line numbers stay in step.
|
|
46
|
+
//
|
|
47
|
+
// Kept behaviourally identical to skipComment/skipTrivia in step-lexing.ts,
|
|
48
|
+
// which this cannot import: the worker source is a string, so this copy of
|
|
49
|
+
// the rule has to live here. Comments do not nest, per ISO 10303-21.
|
|
50
|
+
function skipCommentAt(p) {
|
|
51
|
+
var q = p + 2;
|
|
52
|
+
while (q + 1 < len) {
|
|
53
|
+
if (buf[q] === 0x2A && buf[q + 1] === 0x2F) return q + 2;
|
|
54
|
+
if (buf[q] === 0x0A) line++;
|
|
55
|
+
q++;
|
|
56
|
+
}
|
|
57
|
+
return -1;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Skip whitespace, comments, and any run of the two -- 10303-21 allows a
|
|
61
|
+
// comment wherever whitespace is allowed, INCLUDING inside a record.
|
|
62
|
+
// Returns -1 when a comment opens and never closes: everything from there on
|
|
63
|
+
// is inside it, so there is nothing left to find.
|
|
64
|
+
//
|
|
65
|
+
// The whitespace byte set (space, tab, CR, LF, form feed, vertical tab) is
|
|
66
|
+
// kept byte-for-byte in sync with isSpaceByte in step-lexing.ts and its
|
|
67
|
+
// three inline twins in tokenizer.ts's scanEntitiesFast -- this file is a
|
|
68
|
+
// string because a Blob worker cannot import at runtime, not a reason for
|
|
69
|
+
// the rule itself to drift.
|
|
70
|
+
function skipTriviaAt(p) {
|
|
71
|
+
for (;;) {
|
|
72
|
+
while (p < len) {
|
|
73
|
+
var t = buf[p];
|
|
74
|
+
if (t === 0x20 || t === 0x09 || t === 0x0D || t === 0x0C || t === 0x0B) { p++; }
|
|
75
|
+
else if (t === 0x0A) { line++; p++; }
|
|
76
|
+
else break;
|
|
77
|
+
}
|
|
78
|
+
if (!opensCommentAt(p)) return p;
|
|
79
|
+
var e = skipCommentAt(p);
|
|
80
|
+
if (e < 0) return -1;
|
|
81
|
+
p = e;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
var ids = new Uint32Array(estimatedCount);
|
|
86
|
+
var offsets = new Uint32Array(estimatedCount);
|
|
87
|
+
var lengths = new Uint32Array(estimatedCount);
|
|
88
|
+
var lines = new Uint32Array(estimatedCount);
|
|
89
|
+
// Type names stored separately (strings)
|
|
90
|
+
var types = new Array(estimatedCount);
|
|
91
|
+
var count = 0;
|
|
92
|
+
// Records refused by the express-id bound, reported back to the caller.
|
|
93
|
+
var oversizedIds = 0;
|
|
94
|
+
// 0 or 1, never a count of how many: whether this scan stopped early on an
|
|
95
|
+
// unclosed string, an unclosed comment, or a declaration cut off before its
|
|
96
|
+
// own '(' -- set once, by the single post-loop check at the bottom of this
|
|
97
|
+
// function. Reported back to the caller. Mirrors tokenizer.ts's
|
|
98
|
+
// scanEntitiesFast contract exactly, including the 0-or-1 shape.
|
|
99
|
+
var malformedRecords = 0;
|
|
100
|
+
// Set on the way to that post-loop check, not counted at each site:
|
|
101
|
+
// 'stopped' for an unclosed string or comment that ran to end of buffer
|
|
102
|
+
// with nothing left to find, 'declOpen' while a #id=TYPE( header is
|
|
103
|
+
// incomplete. 'declOpen' stays armed ONLY when the reason for abandoning
|
|
104
|
+
// is running out of buffer (pos >= len); a mismatch with buffer still
|
|
105
|
+
// left (bad byte, oversized id) clears it, because the scan resumes
|
|
106
|
+
// byte-by-byte from wherever it gave up, and a #ref token inside the
|
|
107
|
+
// abandoned record's own argument list reads as a fresh, equally
|
|
108
|
+
// incomplete attempt that must not report "cut off" just because
|
|
109
|
+
// nothing later happens to clear it.
|
|
110
|
+
var stopped = false;
|
|
111
|
+
var declOpen = false;
|
|
112
|
+
|
|
113
|
+
// Type name cache (IFC files have ~776 unique types across millions of entities)
|
|
114
|
+
var typeCache = new Map();
|
|
115
|
+
|
|
116
|
+
function growArrays() {
|
|
117
|
+
var newSize = (count * 2) | 0;
|
|
118
|
+
var newIds = new Uint32Array(newSize);
|
|
119
|
+
newIds.set(ids);
|
|
120
|
+
ids = newIds;
|
|
121
|
+
var newOffsets = new Uint32Array(newSize);
|
|
122
|
+
newOffsets.set(offsets);
|
|
123
|
+
offsets = newOffsets;
|
|
124
|
+
var newLengths = new Uint32Array(newSize);
|
|
125
|
+
newLengths.set(lengths);
|
|
126
|
+
lengths = newLengths;
|
|
127
|
+
var newLines = new Uint32Array(newSize);
|
|
128
|
+
newLines.set(lines);
|
|
129
|
+
lines = newLines;
|
|
130
|
+
types.length = newSize;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
while (pos < len) {
|
|
134
|
+
var ch = buf[pos];
|
|
135
|
+
|
|
136
|
+
if (ch === 0x23) { // '#'
|
|
137
|
+
var startOffset = pos;
|
|
138
|
+
var startLine = line;
|
|
139
|
+
pos++;
|
|
140
|
+
|
|
141
|
+
// Read express ID
|
|
142
|
+
var expressId = 0;
|
|
143
|
+
var hasDigits = false;
|
|
144
|
+
while (pos < len) {
|
|
145
|
+
var c = buf[pos];
|
|
146
|
+
if (c >= 0x30 && c <= 0x39) {
|
|
147
|
+
expressId = expressId * 10 + (c - 0x30);
|
|
148
|
+
hasDigits = true;
|
|
149
|
+
pos++;
|
|
150
|
+
} else {
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (!hasDigits) continue;
|
|
155
|
+
declOpen = true;
|
|
156
|
+
|
|
157
|
+
// Whitespace AND comments: '#1 /* was #7 */ =' is a declaration. The
|
|
158
|
+
// inline loop stays for the common case; skipTriviaAt runs only once a
|
|
159
|
+
// comment actually opens. Mirrors tokenizer.ts's scanEntitiesFast.
|
|
160
|
+
while (pos < len) {
|
|
161
|
+
var c2 = buf[pos];
|
|
162
|
+
if (c2 === 0x20 || c2 === 0x09 || c2 === 0x0D || c2 === 0x0C || c2 === 0x0B) { pos++; }
|
|
163
|
+
else if (c2 === 0x0A) { line++; pos++; }
|
|
164
|
+
else break;
|
|
165
|
+
}
|
|
166
|
+
if (opensCommentAt(pos)) { pos = skipTriviaAt(pos); if (pos < 0) { stopped = true; break; } }
|
|
167
|
+
|
|
168
|
+
// Check for '='. A byte that is not '=' with buffer left to scan is
|
|
169
|
+
// not a truncation -- clear declOpen so a reference token inside a
|
|
170
|
+
// LATER abandoned record's argument list (see the oversized-id note
|
|
171
|
+
// below) cannot leave it stuck armed with nothing left to clear it.
|
|
172
|
+
if (pos >= len) continue;
|
|
173
|
+
if (buf[pos] !== 0x3D) { declOpen = false; continue; }
|
|
174
|
+
pos++;
|
|
175
|
+
|
|
176
|
+
// Express-id bound, identical to StepTokenizer.scanEntitiesFast -- this
|
|
177
|
+
// worker is that scan's twin and must reject the same records, and count
|
|
178
|
+
// the same ones, or which scan path ran decides both whether an id
|
|
179
|
+
// collides with another and what the user is told was dropped. The
|
|
180
|
+
// single '>' subsumes a safe-integer check: a digit run accumulated as a
|
|
181
|
+
// double is non-negative and integral, and every value past 2^32 --
|
|
182
|
+
// including one past 2^53, where two distinct ids collide onto one
|
|
183
|
+
// double -- fails it. Tested only after '=' has matched, because that is
|
|
184
|
+
// the DECLARATION shape Rust's EntityScanner validates before refusing:
|
|
185
|
+
// the 'continue' below resumes inside the refused record's argument
|
|
186
|
+
// list, so an oversized '#ref' in there arrives here too and would be
|
|
187
|
+
// counted as a second dropped record. Count the refusal; a record that
|
|
188
|
+
// vanishes without a trace is the same defect wearing a different hat.
|
|
189
|
+
if (expressId > ${MAX_EXPRESS_ID}) { oversizedIds++; declOpen = false; continue; }
|
|
190
|
+
|
|
191
|
+
// Skip whitespace and comments
|
|
192
|
+
while (pos < len) {
|
|
193
|
+
var c3 = buf[pos];
|
|
194
|
+
if (c3 === 0x20 || c3 === 0x09 || c3 === 0x0D || c3 === 0x0C || c3 === 0x0B) { pos++; }
|
|
195
|
+
else if (c3 === 0x0A) { line++; pos++; }
|
|
196
|
+
else break;
|
|
197
|
+
}
|
|
198
|
+
if (opensCommentAt(pos)) { pos = skipTriviaAt(pos); if (pos < 0) { stopped = true; break; } }
|
|
199
|
+
|
|
200
|
+
// Read type name. Must start A-Z; a bad start byte with buffer left
|
|
201
|
+
// clears declOpen for the same reason as the '=' check.
|
|
202
|
+
var typeStart = pos;
|
|
203
|
+
if (pos >= len) continue;
|
|
204
|
+
if (buf[pos] < 0x41 || buf[pos] > 0x5A) { declOpen = false; continue; }
|
|
205
|
+
|
|
206
|
+
while (pos < len) {
|
|
207
|
+
var c4 = buf[pos];
|
|
208
|
+
if ((c4 >= 0x41 && c4 <= 0x5A) || (c4 >= 0x61 && c4 <= 0x7A) ||
|
|
209
|
+
(c4 >= 0x30 && c4 <= 0x39) || c4 === 0x5F) {
|
|
210
|
+
pos++;
|
|
211
|
+
} else {
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (pos === typeStart) continue;
|
|
216
|
+
|
|
217
|
+
// Cache type name — use length + hash compound key and verify the actual
|
|
218
|
+
// bytes on a hit. Length alone can't disambiguate a 32-bit hash collision
|
|
219
|
+
// (e.g. "Aa"/"BB"), so without the byte compare a crafted/unlucky file
|
|
220
|
+
// could have one type silently misread as another. Mirrors tokenizer.ts.
|
|
221
|
+
var typeLen = pos - typeStart;
|
|
222
|
+
var typeHash = typeLen;
|
|
223
|
+
for (var i = typeStart; i < pos; i++) {
|
|
224
|
+
typeHash = (typeHash * 31 + buf[i]) | 0;
|
|
225
|
+
}
|
|
226
|
+
var cacheKey = typeLen + ':' + typeHash;
|
|
227
|
+
var typeName = typeCache.get(cacheKey);
|
|
228
|
+
var cacheHitMatches = false;
|
|
229
|
+
if (typeName !== undefined && typeName.length === typeLen) {
|
|
230
|
+
cacheHitMatches = true;
|
|
231
|
+
for (var v = 0; v < typeLen; v++) {
|
|
232
|
+
if (typeName.charCodeAt(v) !== buf[typeStart + v]) {
|
|
233
|
+
cacheHitMatches = false;
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (typeName === undefined || !cacheHitMatches) {
|
|
239
|
+
typeName = String.fromCharCode.apply(null, buf.subarray(typeStart, pos));
|
|
240
|
+
typeCache.set(cacheKey, typeName);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Skip whitespace and comments
|
|
244
|
+
while (pos < len) {
|
|
245
|
+
var c5 = buf[pos];
|
|
246
|
+
if (c5 === 0x20 || c5 === 0x09 || c5 === 0x0D || c5 === 0x0C || c5 === 0x0B) { pos++; }
|
|
247
|
+
else if (c5 === 0x0A) { line++; pos++; }
|
|
248
|
+
else break;
|
|
249
|
+
}
|
|
250
|
+
if (opensCommentAt(pos)) { pos = skipTriviaAt(pos); if (pos < 0) { stopped = true; break; } }
|
|
251
|
+
|
|
252
|
+
// Check for '('. Same EOF-vs-mismatch split as '=' and the type name.
|
|
253
|
+
if (pos >= len) continue;
|
|
254
|
+
if (buf[pos] !== 0x28) { declOpen = false; continue; }
|
|
255
|
+
declOpen = false; // Header complete: '(' found.
|
|
256
|
+
|
|
257
|
+
// Skip to semicolon (handling strings)
|
|
258
|
+
var inString = false;
|
|
259
|
+
var foundTerminator = false;
|
|
260
|
+
while (pos < len) {
|
|
261
|
+
var c6 = buf[pos];
|
|
262
|
+
if (c6 === 0x27) { // quote
|
|
263
|
+
if (inString && pos + 1 < len && buf[pos + 1] === 0x27) {
|
|
264
|
+
pos += 2;
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
inString = !inString;
|
|
268
|
+
} else if (c6 === 0x2F && !inString && opensCommentAt(pos)) {
|
|
269
|
+
// The ';' that ends a record can be preceded by a comment holding
|
|
270
|
+
// its own ';'. Take the comment whole, which also makes the quotes
|
|
271
|
+
// and parens inside it text -- the other direction of the rule the
|
|
272
|
+
// quote branch above gives for a '/*' inside a literal.
|
|
273
|
+
var ce = skipCommentAt(pos);
|
|
274
|
+
if (ce < 0) {
|
|
275
|
+
// Unterminated: this record has no terminator, and neither has
|
|
276
|
+
// anything after it. Drop it and stop.
|
|
277
|
+
pos = len;
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
pos = ce;
|
|
281
|
+
continue;
|
|
282
|
+
} else if (c6 === 0x3B && !inString) { // semicolon
|
|
283
|
+
var entityLength = pos - startOffset + 1;
|
|
284
|
+
|
|
285
|
+
// Grow if needed
|
|
286
|
+
if (count >= ids.length) growArrays();
|
|
287
|
+
|
|
288
|
+
ids[count] = expressId;
|
|
289
|
+
offsets[count] = startOffset;
|
|
290
|
+
lengths[count] = entityLength;
|
|
291
|
+
lines[count] = startLine;
|
|
292
|
+
types[count] = typeName;
|
|
293
|
+
count++;
|
|
294
|
+
|
|
295
|
+
pos++;
|
|
296
|
+
foundTerminator = true;
|
|
297
|
+
break;
|
|
298
|
+
} else if (c6 === 0x0A) {
|
|
299
|
+
line++;
|
|
300
|
+
}
|
|
301
|
+
pos++;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// Ran off the end without an unquoted ';' -- usually an unescaped
|
|
305
|
+
// quote left open, or the unterminated-comment break above (mirrors
|
|
306
|
+
// tokenizer.ts's scanEntitiesFast). Not resynced: with no known
|
|
307
|
+
// terminator, guessing a resume point risks fabricating entities from
|
|
308
|
+
// misaligned bytes. Recorded in 'stopped', not incremented here -- see
|
|
309
|
+
// the post-loop check below.
|
|
310
|
+
if (!foundTerminator) { stopped = true; }
|
|
311
|
+
} else if (ch === 0x0A) {
|
|
312
|
+
line++;
|
|
313
|
+
pos++;
|
|
314
|
+
} else if (ch === 0x27) { // quote
|
|
315
|
+
// Consume a string literal whole. HEADER records carry no '#', so this
|
|
316
|
+
// loop walks them byte by byte, and a '/*' inside a description would
|
|
317
|
+
// otherwise open a comment that never closes and take DATA with it.
|
|
318
|
+
var sp = pos + 1;
|
|
319
|
+
var closed = false;
|
|
320
|
+
while (sp < len) {
|
|
321
|
+
if (buf[sp] === 0x27) {
|
|
322
|
+
if (sp + 1 < len && buf[sp + 1] === 0x27) { sp += 2; continue; }
|
|
323
|
+
sp++;
|
|
324
|
+
closed = true;
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
if (buf[sp] === 0x0A) { line++; }
|
|
328
|
+
sp++;
|
|
329
|
+
}
|
|
330
|
+
pos = sp;
|
|
331
|
+
// Ran off the end without a closing quote: everything from the open
|
|
332
|
+
// quote to EOF was consumed looking for one, so nothing after it was
|
|
333
|
+
// ever a candidate '#' -- the same "no terminator" shape as inside a
|
|
334
|
+
// record, just outside one (a HEADER string, most often).
|
|
335
|
+
if (!closed) { stopped = true; break; }
|
|
336
|
+
} else if (opensCommentAt(pos)) {
|
|
337
|
+
// Skip a comment region BETWEEN records. A record that is commented out
|
|
338
|
+
// is still a well-formed #id = TYPE(...), so every check above accepts
|
|
339
|
+
// it and only skipping the region rejects it.
|
|
340
|
+
var cp = skipCommentAt(pos);
|
|
341
|
+
if (cp < 0) {
|
|
342
|
+
// Unterminated: everything to EOF is commented out.
|
|
343
|
+
pos = len;
|
|
344
|
+
stopped = true;
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
pos = cp;
|
|
348
|
+
} else {
|
|
349
|
+
pos++;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// ONE post-loop check, not an increment at every exit site above: the scan
|
|
354
|
+
// stopped early if it hit an explicit "no terminator" boundary ('stopped'),
|
|
355
|
+
// or the last #id=TYPE( header was cut short before its own '(' was found
|
|
356
|
+
// ('declOpen'). Always 0 or 1 -- the scan stops at the first one, so there
|
|
357
|
+
// is nothing further to accumulate.
|
|
358
|
+
if (stopped || declOpen) { malformedRecords = 1; }
|
|
359
|
+
|
|
360
|
+
// Trim arrays once, reuse for both message and transfer list
|
|
361
|
+
var needsTrim = ids.buffer.byteLength > count * 4;
|
|
362
|
+
var trimmedIds = needsTrim ? ids.slice(0, count) : ids;
|
|
363
|
+
var trimmedOffsets = needsTrim ? offsets.slice(0, count) : offsets;
|
|
364
|
+
var trimmedLengths = needsTrim ? lengths.slice(0, count) : lengths;
|
|
365
|
+
var trimmedLines = needsTrim ? lines.slice(0, count) : lines;
|
|
366
|
+
self.postMessage({
|
|
367
|
+
ids: trimmedIds.buffer,
|
|
368
|
+
offsets: trimmedOffsets.buffer,
|
|
369
|
+
lengths: trimmedLengths.buffer,
|
|
370
|
+
lines: trimmedLines.buffer,
|
|
371
|
+
types: types.slice(0, count),
|
|
372
|
+
count: count,
|
|
373
|
+
oversizedIds: oversizedIds,
|
|
374
|
+
malformedRecords: malformedRecords,
|
|
375
|
+
}, [
|
|
376
|
+
trimmedIds.buffer,
|
|
377
|
+
trimmedOffsets.buffer,
|
|
378
|
+
trimmedLengths.buffer,
|
|
379
|
+
trimmedLines.buffer,
|
|
380
|
+
]);
|
|
381
|
+
};
|
|
382
|
+
`;
|
|
383
|
+
//# sourceMappingURL=scan-worker-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-worker-source.js","sourceRoot":"","sources":["../src/scan-worker-source.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;GAIG;AACH;4DAC4D;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAwKH,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiMrC,CAAC"}
|
|
@@ -117,9 +117,9 @@ export class SpatialHierarchyBuilder {
|
|
|
117
117
|
// source bytes; the source-less buildFromCache fallback leaves it undefined,
|
|
118
118
|
// exactly like storey elevation.
|
|
119
119
|
const rawLongName = this.extractLongName(expressId, ctx);
|
|
120
|
-
// Fall back to LongName when Name is empty (common for IfcSpace)
|
|
121
|
-
//
|
|
122
|
-
const name = rawName || rawLongName ||
|
|
120
|
+
// Fall back to LongName when Name is empty (common for IfcSpace). Left
|
|
121
|
+
// empty, not a fabricated `Entity #<id>` — it flows into the export layer.
|
|
122
|
+
const name = rawName || rawLongName || '';
|
|
123
123
|
// Only keep LongName as a distinct descriptor when it adds something beyond
|
|
124
124
|
// the primary label (never duplicate it into the secondary slot).
|
|
125
125
|
const longName = rawLongName && rawLongName !== name ? rawLongName : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spatial-hierarchy-builder.js","sourceRoot":"","sources":["../src/spatial-hierarchy-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spatial-hierarchy-builder.js","sourceRoot":"","sources":["../src/spatial-hierarchy-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/step-lexing.d.ts
CHANGED
|
@@ -8,7 +8,9 @@ export interface Skip {
|
|
|
8
8
|
}
|
|
9
9
|
export declare function skipLexical(buf: Uint8Array, pos: number, len: number): Skip;
|
|
10
10
|
export declare function opensLiteralOrComment(buf: Uint8Array, pos: number, len: number): boolean;
|
|
11
|
+
export declare function skipTrivia(buf: Uint8Array, pos: number, len: number): Skip;
|
|
11
12
|
export declare function countNewlines(buf: Uint8Array, from: number, to: number): number;
|
|
13
|
+
export declare function findEntityLength(buf: Uint8Array, pos: number, startOffset: number): number;
|
|
12
14
|
/**
|
|
13
15
|
* A scan of one decoded string.
|
|
14
16
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-lexing.d.ts","sourceRoot":"","sources":["../src/step-lexing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"step-lexing.d.ts","sourceRoot":"","sources":["../src/step-lexing.ts"],"names":[],"mappings":"AA2BA,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/E;AA0BD,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAO7E;AAaD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAanF;AAED,MAAM,WAAW,IAAI;IAEnB,IAAI,EAAE,MAAM,CAAC;IAEb,KAAK,EAAE,MAAM,CAAC;IAKd,IAAI,EAAE,OAAO,CAAC;CACf;AAKD,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAa3E;AAGD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAExF;AAuCD,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAkB1E;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAM/E;AAkBD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAgC1F;AAmBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,YAAY;IASX,OAAO,CAAC,QAAQ,CAAC,IAAI;IARjC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAS;IAEzB,iFAAiF;IACjF,IAAI,QAAQ,IAAI,MAAM,CAErB;gBAE4B,IAAI,EAAE,MAAM;IAEzC;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAarB;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAahC;;;;;;;;OAQG;IACH,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAS9B;AAOD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAOlF"}
|