@ifc-lite/parser 4.0.1 → 4.0.3
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/generated/type-ids.js +2 -2
- package/dist/parser.worker.d.ts +6 -0
- package/dist/parser.worker.d.ts.map +1 -1
- package/dist/parser.worker.js +6 -0
- package/dist/parser.worker.js.map +1 -1
- package/dist/scan-worker-inline.d.ts +1 -1
- package/dist/scan-worker-inline.d.ts.map +1 -1
- package/dist/scan-worker-inline.js +35 -0
- package/dist/scan-worker-inline.js.map +1 -1
- package/dist/step-lexing.d.ts +12 -0
- package/dist/step-lexing.d.ts.map +1 -0
- package/dist/step-lexing.js +118 -0
- package/dist/step-lexing.js.map +1 -0
- package/dist/tokenizer.d.ts.map +1 -1
- package/dist/tokenizer.js +36 -0
- package/dist/tokenizer.js.map +1 -1
- package/dist/wasm-panic-forward.d.ts +67 -0
- package/dist/wasm-panic-forward.d.ts.map +1 -0
- package/dist/wasm-panic-forward.js +107 -0
- package/dist/wasm-panic-forward.js.map +1 -0
- package/dist/worker-parser.d.ts.map +1 -1
- package/dist/worker-parser.js +7 -0
- package/dist/worker-parser.js.map +1 -1
- package/package.json +5 -5
|
@@ -1640,7 +1640,7 @@ const CRC32_TABLE = new Uint32Array([
|
|
|
1640
1640
|
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
|
|
1641
1641
|
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
|
|
1642
1642
|
0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
|
|
1643
|
-
0x44042d73, 0x33031de5, 0xaa0a4c5f,
|
|
1643
|
+
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
|
|
1644
1644
|
0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
|
|
1645
1645
|
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
|
|
1646
1646
|
0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
|
|
@@ -1662,7 +1662,7 @@ const CRC32_TABLE = new Uint32Array([
|
|
|
1662
1662
|
0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
|
|
1663
1663
|
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
|
|
1664
1664
|
0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
|
|
1665
|
-
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
|
|
1665
|
+
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
|
|
1666
1666
|
0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
|
|
1667
1667
|
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
|
|
1668
1668
|
]);
|
package/dist/parser.worker.d.ts
CHANGED
|
@@ -55,6 +55,12 @@ export interface ParserWorkerErrorMessage {
|
|
|
55
55
|
type: 'error';
|
|
56
56
|
id: string;
|
|
57
57
|
message: string;
|
|
58
|
+
/** This worker realm's wasm panic-location stash (#2527 follow-up), forwarded
|
|
59
|
+
* so the main thread can re-plant it on ITS global for the existing
|
|
60
|
+
* `attachWasmPanicLocation` gate. Location only, never the panic message.
|
|
61
|
+
* Absent when there was no stash. See `wasm-panic-forward.ts`. */
|
|
62
|
+
wasmPanicLocation?: string;
|
|
63
|
+
wasmPanicAt?: number;
|
|
58
64
|
}
|
|
59
65
|
export type ParserWorkerOutputMessage = ParserWorkerProgressMessage | ParserWorkerDiagnosticMessage | ParserWorkerPartialStoreMessage | ParserWorkerCompleteMessage | ParserWorkerErrorMessage;
|
|
60
66
|
//# sourceMappingURL=parser.worker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.worker.d.ts","sourceRoot":"","sources":["../src/parser.worker.ts"],"names":[],"mappings":"AAsBA,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.worker.d.ts","sourceRoot":"","sources":["../src/parser.worker.ts"],"names":[],"mappings":"AAsBA,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AAGnC,gFAAgF;AAChF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,iBAAiB,CAAC;IAC1B,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,uFAAuF;AACvF,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,kBAAkB,CAAC;IACzB,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,uCAAuC;AACvC,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9C;AAED,kFAAkF;AAClF,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,YAAY,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wFAAwF;AACxF,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,eAAe,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED,gCAAgC;AAChC,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB;;;uEAGmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,yBAAyB,GACjC,2BAA2B,GAC3B,6BAA6B,GAC7B,+BAA+B,GAC/B,2BAA2B,GAC3B,wBAAwB,CAAC"}
|
package/dist/parser.worker.js
CHANGED
|
@@ -17,6 +17,7 @@ import init, { IfcAPI } from '@ifc-lite/wasm';
|
|
|
17
17
|
import { initWasmWithRetry } from './wasm-init-retry.js';
|
|
18
18
|
import { IfcParser } from './index.js';
|
|
19
19
|
import { toTransport, transportByteSize, } from './data-store-transport.js';
|
|
20
|
+
import { takeWasmPanicStash } from './wasm-panic-forward.js';
|
|
20
21
|
function readJsHeapBytes() {
|
|
21
22
|
const perf = performance;
|
|
22
23
|
return perf.memory?.usedJSHeapSize;
|
|
@@ -227,10 +228,15 @@ self.onmessage = async (event) => {
|
|
|
227
228
|
postOutput({ type: 'complete', id, payload, memory }, transfers);
|
|
228
229
|
}
|
|
229
230
|
catch (err) {
|
|
231
|
+
// #2527 follow-up: forward this realm's panic-location stash (set by the
|
|
232
|
+
// Rust panic hook if this failure was a wasm trap) so the main thread can
|
|
233
|
+
// re-plant it on ITS global for `attachWasmPanicLocation`.
|
|
234
|
+
const panic = takeWasmPanicStash(self);
|
|
230
235
|
postOutput({
|
|
231
236
|
type: 'error',
|
|
232
237
|
id,
|
|
233
238
|
message: err instanceof Error ? err.message : String(err),
|
|
239
|
+
...(panic ? { wasmPanicLocation: panic.location, wasmPanicAt: panic.at } : {}),
|
|
234
240
|
});
|
|
235
241
|
}
|
|
236
242
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.worker.js","sourceRoot":"","sources":["../src/parser.worker.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;GAWG;AAEH,OAAO,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAEL,WAAW,EACX,iBAAiB,GAGlB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.worker.js","sourceRoot":"","sources":["../src/parser.worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ export interface EntityRefWorkerResult {
|
|
|
19
19
|
*/
|
|
20
20
|
/** Exported for direct testing (run inside a mock `self`); the runtime path
|
|
21
21
|
* wraps it in a Blob worker via {@link getWorkerBlobUrl}. */
|
|
22
|
-
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\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\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\n // Skip whitespace\n while (pos < len) {\n var c2 = buf[pos];\n if (c2 === 0x20 || c2 === 0x09 || c2 === 0x0D) { pos++; }\n else if (c2 === 0x0A) { line++; pos++; }\n else break;\n }\n\n // Check for '='\n if (pos >= len || buf[pos] !== 0x3D) continue;\n pos++;\n\n // Skip whitespace\n while (pos < len) {\n var c3 = buf[pos];\n if (c3 === 0x20 || c3 === 0x09 || c3 === 0x0D) { pos++; }\n else if (c3 === 0x0A) { line++; pos++; }\n else break;\n }\n\n // Read type name\n var typeStart = pos;\n if (pos >= len || buf[pos] < 0x41 || buf[pos] > 0x5A) 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\n while (pos < len) {\n var c5 = buf[pos];\n if (c5 === 0x20 || c5 === 0x09 || c5 === 0x0D) { pos++; }\n else if (c5 === 0x0A) { line++; pos++; }\n else break;\n }\n\n // Check for '('\n if (pos >= len || buf[pos] !== 0x28) continue;\n\n // Skip to semicolon (handling strings)\n var inString = 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 === 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 break;\n } else if (c6 === 0x0A) {\n line++;\n }\n pos++;\n }\n } else if (ch === 0x0A) {\n line++;\n pos++;\n } else {\n pos++;\n }\n }\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 }, [\n trimmedIds.buffer,\n trimmedOffsets.buffer,\n trimmedLengths.buffer,\n trimmedLines.buffer,\n ]);\n};\n";
|
|
22
|
+
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\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\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\n // Skip whitespace\n while (pos < len) {\n var c2 = buf[pos];\n if (c2 === 0x20 || c2 === 0x09 || c2 === 0x0D) { pos++; }\n else if (c2 === 0x0A) { line++; pos++; }\n else break;\n }\n\n // Check for '='\n if (pos >= len || buf[pos] !== 0x3D) continue;\n pos++;\n\n // Skip whitespace\n while (pos < len) {\n var c3 = buf[pos];\n if (c3 === 0x20 || c3 === 0x09 || c3 === 0x0D) { pos++; }\n else if (c3 === 0x0A) { line++; pos++; }\n else break;\n }\n\n // Read type name\n var typeStart = pos;\n if (pos >= len || buf[pos] < 0x41 || buf[pos] > 0x5A) 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\n while (pos < len) {\n var c5 = buf[pos];\n if (c5 === 0x20 || c5 === 0x09 || c5 === 0x0D) { pos++; }\n else if (c5 === 0x0A) { line++; pos++; }\n else break;\n }\n\n // Check for '('\n if (pos >= len || buf[pos] !== 0x28) continue;\n\n // Skip to semicolon (handling strings)\n var inString = 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 === 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 break;\n } else if (c6 === 0x0A) {\n line++;\n }\n pos++;\n }\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 while (sp < len) {\n if (buf[sp] === 0x27) {\n if (sp + 1 < len && buf[sp + 1] === 0x27) { sp += 2; continue; }\n sp++;\n break;\n }\n if (buf[sp] === 0x0A) { line++; }\n sp++;\n }\n pos = sp;\n } else if (ch === 0x2F && pos + 1 < len && buf[pos + 1] === 0x2A) {\n // Skip a /* */ region. A record that is commented out is still a\n // well-formed #id = TYPE(...), so every check above accepts it and only\n // skipping the region rejects it. Kept byte-identical to\n // step-lexing.ts, which this cannot import: the worker source is a\n // string, so the third copy of this loop has to carry its own copy of\n // the rule. Comments do not nest, per ISO 10303-21.\n var cp = pos + 2;\n var closed = false;\n while (cp + 1 < len) {\n if (buf[cp] === 0x2A && buf[cp + 1] === 0x2F) { closed = true; break; }\n if (buf[cp] === 0x0A) { line++; }\n cp++;\n }\n if (!closed) {\n // Unterminated: everything to EOF is commented out.\n pos = len;\n break;\n }\n pos = cp + 2;\n } else {\n pos++;\n }\n }\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 }, [\n trimmedIds.buffer,\n trimmedOffsets.buffer,\n trimmedLengths.buffer,\n trimmedLines.buffer,\n ]);\n};\n";
|
|
23
23
|
/**
|
|
24
24
|
* Scan IFC entities in a Web Worker (non-blocking).
|
|
25
25
|
* Sends a structured clone of the buffer to the worker (browser handles copy).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan-worker-inline.d.ts","sourceRoot":"","sources":["../src/scan-worker-inline.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,MAAM,WAAW,qBAAqB;IACpC,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;;;;GAIG;AACH;8DAC8D;AAC9D,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"scan-worker-inline.d.ts","sourceRoot":"","sources":["../src/scan-worker-inline.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,MAAM,WAAW,qBAAqB;IACpC,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;;;;GAIG;AACH;8DAC8D;AAC9D,eAAO,MAAM,WAAW,uqOAmOvB,CAAC;AAYF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,WAAW,GAAG,iBAAiB,GACtC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAuClC"}
|
|
@@ -175,6 +175,41 @@ self.onmessage = function(e) {
|
|
|
175
175
|
} else if (ch === 0x0A) {
|
|
176
176
|
line++;
|
|
177
177
|
pos++;
|
|
178
|
+
} else if (ch === 0x27) { // quote
|
|
179
|
+
// Consume a string literal whole. HEADER records carry no '#', so this
|
|
180
|
+
// loop walks them byte by byte, and a '/*' inside a description would
|
|
181
|
+
// otherwise open a comment that never closes and take DATA with it.
|
|
182
|
+
var sp = pos + 1;
|
|
183
|
+
while (sp < len) {
|
|
184
|
+
if (buf[sp] === 0x27) {
|
|
185
|
+
if (sp + 1 < len && buf[sp + 1] === 0x27) { sp += 2; continue; }
|
|
186
|
+
sp++;
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
if (buf[sp] === 0x0A) { line++; }
|
|
190
|
+
sp++;
|
|
191
|
+
}
|
|
192
|
+
pos = sp;
|
|
193
|
+
} else if (ch === 0x2F && pos + 1 < len && buf[pos + 1] === 0x2A) {
|
|
194
|
+
// Skip a /* */ region. A record that is commented out is still a
|
|
195
|
+
// well-formed #id = TYPE(...), so every check above accepts it and only
|
|
196
|
+
// skipping the region rejects it. Kept byte-identical to
|
|
197
|
+
// step-lexing.ts, which this cannot import: the worker source is a
|
|
198
|
+
// string, so the third copy of this loop has to carry its own copy of
|
|
199
|
+
// the rule. Comments do not nest, per ISO 10303-21.
|
|
200
|
+
var cp = pos + 2;
|
|
201
|
+
var closed = false;
|
|
202
|
+
while (cp + 1 < len) {
|
|
203
|
+
if (buf[cp] === 0x2A && buf[cp + 1] === 0x2F) { closed = true; break; }
|
|
204
|
+
if (buf[cp] === 0x0A) { line++; }
|
|
205
|
+
cp++;
|
|
206
|
+
}
|
|
207
|
+
if (!closed) {
|
|
208
|
+
// Unterminated: everything to EOF is commented out.
|
|
209
|
+
pos = len;
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
pos = cp + 2;
|
|
178
213
|
} else {
|
|
179
214
|
pos++;
|
|
180
215
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan-worker-inline.js","sourceRoot":"","sources":["../src/scan-worker-inline.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkB/D;;;;GAIG;AACH;8DAC8D;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAG
|
|
1
|
+
{"version":3,"file":"scan-worker-inline.js","sourceRoot":"","sources":["../src/scan-worker-inline.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkB/D;;;;GAIG;AACH;8DAC8D;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmO1B,CAAC;AAEF,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC,SAAS,gBAAgB;IACvB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACzE,aAAa,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAuC;IAEvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAE9C,MAAM,CAAC,SAAS,GAAG,CAAC,CAAe,EAAE,EAAE;gBACrC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC9D,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;gBACnC,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC3C,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC3C,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;gBAEvC,MAAM,IAAI,GAA4B,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/B,IAAI,CAAC,CAAC,CAAC,GAAG;wBACR,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;wBACnB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;wBACd,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;wBACxB,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;wBACxB,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;qBACvB,CAAC;gBACJ,CAAC;gBAED,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC;YAEF,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;gBACrB,MAAM,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC,CAAC;YAEF,8EAA8E;YAC9E,0EAA0E;YAC1E,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function opensComment(buf: Uint8Array, pos: number, len: number): boolean;
|
|
2
|
+
export declare function skipComment(buf: Uint8Array, pos: number, len: number): number;
|
|
3
|
+
export declare function skipStringLiteral(buf: Uint8Array, pos: number, len: number): number;
|
|
4
|
+
export interface Skip {
|
|
5
|
+
next: number;
|
|
6
|
+
lines: number;
|
|
7
|
+
stop: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function skipLexical(buf: Uint8Array, pos: number, len: number): Skip;
|
|
10
|
+
export declare function opensLiteralOrComment(buf: Uint8Array, pos: number, len: number): boolean;
|
|
11
|
+
export declare function countNewlines(buf: Uint8Array, from: number, to: number): number;
|
|
12
|
+
//# sourceMappingURL=step-lexing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-lexing.d.ts","sourceRoot":"","sources":["../src/step-lexing.ts"],"names":[],"mappings":"AAmBA,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/E;AAyCD,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAO7E;AAWD,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;IAGd,IAAI,EAAE,OAAO,CAAC;CACf;AAKD,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAU3E;AAGD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAExF;AAGD,wBAAgB,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAM/E"}
|
|
@@ -0,0 +1,118 @@
|
|
|
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
|
+
// ISO 10303-21 lexical skipping for the byte-level scanners: comments, and the
|
|
5
|
+
// string literals that must not be mistaken for them.
|
|
6
|
+
//
|
|
7
|
+
// Written as line comments, not a JSDoc block, so the delimiters below can be
|
|
8
|
+
// spelled literally. Escaping them with a zero-width space to survive a block
|
|
9
|
+
// comment puts invisible Unicode in the one place that explains how comment
|
|
10
|
+
// termination works, and anyone copying the example into a fixture then gets a
|
|
11
|
+
// string that is not a valid terminator.
|
|
12
|
+
const SLASH = 0x2f; // '/'
|
|
13
|
+
const STAR = 0x2a; // '*'
|
|
14
|
+
const NEWLINE = 0x0a; // '\n'
|
|
15
|
+
const QUOTE = 0x27; // '\''
|
|
16
|
+
// Whether a comment opens at `pos`.
|
|
17
|
+
export function opensComment(buf, pos, len) {
|
|
18
|
+
return buf[pos] === SLASH && pos + 1 < len && buf[pos + 1] === STAR;
|
|
19
|
+
}
|
|
20
|
+
// Index just past the */ closing the comment that opens at `pos`, or -1 when it
|
|
21
|
+
// is never closed.
|
|
22
|
+
//
|
|
23
|
+
// A STEP comment can contain anything, including a complete entity record. That
|
|
24
|
+
// is not hypothetical: files ship elements commented out for a revision, and
|
|
25
|
+
// such a record is well-formed, so every downstream shape check accepts it. The
|
|
26
|
+
// guard added in #856 requires a #<digits> to be followed by '=', which rejects
|
|
27
|
+
// a bare #1 in prose and cannot reject a commented-out record, because that
|
|
28
|
+
// record has its '='. The region has to be skipped as a region.
|
|
29
|
+
//
|
|
30
|
+
// Nesting is not supported, and must not be: ISO 10303-21 comments do not nest,
|
|
31
|
+
// so the first */ closes the comment, and treating an inner /* as a new level
|
|
32
|
+
// would swallow live records after it.
|
|
33
|
+
//
|
|
34
|
+
// This function is not string-aware and must not be called from inside a
|
|
35
|
+
// string literal. Callers skip literals with skipStringLiteral first, which is
|
|
36
|
+
// what keeps a /* inside a HEADER description from opening a comment.
|
|
37
|
+
//
|
|
38
|
+
// Known, shared with the Rust EntityScanner, and deliberately NOT fixed here:
|
|
39
|
+
// ISO 10303-21 allows a comment anywhere whitespace is allowed, and none of the
|
|
40
|
+
// scanners treat one as trivia *within* a record. Two shapes, both pre-existing
|
|
41
|
+
// and both unchanged by this file:
|
|
42
|
+
//
|
|
43
|
+
// #1 /* note */ = IFCWALL(); header: fails the '=' check, no record
|
|
44
|
+
// #1=IFCWALL('a', /* n; */ $); body: ends early at the ';' in the comment
|
|
45
|
+
//
|
|
46
|
+
// That is true of scanEntities, of scanEntitiesFast, of the worker scanner, and
|
|
47
|
+
// of the Rust side, whose next_entity wants '=' straight after the digits and
|
|
48
|
+
// whose find_entity_end jumps to the next quote or semicolon with memchr2.
|
|
49
|
+
// Correcting it on the TypeScript side alone would put the JS fallback and the
|
|
50
|
+
// wasm scan at odds on well-formed files, so it wants one change across all
|
|
51
|
+
// four loops rather than a partial one here. Separate defect.
|
|
52
|
+
//
|
|
53
|
+
// The literal skip above is a smaller version of the same tension and is worth
|
|
54
|
+
// naming rather than hiding. Rust has no literal skip outside a record, so on a
|
|
55
|
+
// malformed file carrying an unpaired quote in DATA the two now disagree: this
|
|
56
|
+
// consumes to the next quote, Rust does not. Accepted because it only affects
|
|
57
|
+
// files that are already malformed, and it fails in the same direction as the
|
|
58
|
+
// unterminated-comment rule. Worth giving the Rust scanner the same skip.
|
|
59
|
+
export function skipComment(buf, pos, len) {
|
|
60
|
+
let p = pos + 2;
|
|
61
|
+
while (p + 1 < len) {
|
|
62
|
+
if (buf[p] === STAR && buf[p + 1] === SLASH)
|
|
63
|
+
return p + 2;
|
|
64
|
+
p++;
|
|
65
|
+
}
|
|
66
|
+
return -1;
|
|
67
|
+
}
|
|
68
|
+
// Index just past the closing quote of the literal opening at `pos`, or `len`
|
|
69
|
+
// when it never closes. A doubled '' is an escaped quote and stays inside.
|
|
70
|
+
//
|
|
71
|
+
// Scanners consume a literal whole so nothing inside it can be mistaken for
|
|
72
|
+
// syntax. Without this, a HEADER description reading `'rev /* pending'` opens a
|
|
73
|
+
// comment that never closes, and the scanner drops the entire DATA section of
|
|
74
|
+
// a legal file. A `#12=` inside such a string was equally readable as a record.
|
|
75
|
+
// The outer loops walk HEADER records byte by byte, since those carry no `#` to
|
|
76
|
+
// consume them, so HEADER is exactly where this bites.
|
|
77
|
+
export function skipStringLiteral(buf, pos, len) {
|
|
78
|
+
let p = pos + 1;
|
|
79
|
+
while (p < len) {
|
|
80
|
+
if (buf[p] === QUOTE) {
|
|
81
|
+
if (p + 1 < len && buf[p + 1] === QUOTE) {
|
|
82
|
+
p += 2;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
return p + 1;
|
|
86
|
+
}
|
|
87
|
+
p++;
|
|
88
|
+
}
|
|
89
|
+
return len;
|
|
90
|
+
}
|
|
91
|
+
// Skip a string literal or a comment starting at `pos`. Callers test
|
|
92
|
+
// `opensLiteralOrComment` first, so this is only reached on a byte that starts
|
|
93
|
+
// one. Shared by both generators, which otherwise held two copies of the rule.
|
|
94
|
+
export function skipLexical(buf, pos, len) {
|
|
95
|
+
if (buf[pos] === QUOTE) {
|
|
96
|
+
const next = skipStringLiteral(buf, pos, len);
|
|
97
|
+
return { next, lines: countNewlines(buf, pos, next), stop: false };
|
|
98
|
+
}
|
|
99
|
+
const next = skipComment(buf, pos, len);
|
|
100
|
+
if (next < 0) {
|
|
101
|
+
return { next: len, lines: countNewlines(buf, pos, len), stop: true };
|
|
102
|
+
}
|
|
103
|
+
return { next, lines: countNewlines(buf, pos, next), stop: false };
|
|
104
|
+
}
|
|
105
|
+
// Whether a string literal or a comment starts at `pos`.
|
|
106
|
+
export function opensLiteralOrComment(buf, pos, len) {
|
|
107
|
+
return buf[pos] === QUOTE || opensComment(buf, pos, len);
|
|
108
|
+
}
|
|
109
|
+
// Newlines in [from, to), so a skipped region does not desync line numbers.
|
|
110
|
+
export function countNewlines(buf, from, to) {
|
|
111
|
+
let n = 0;
|
|
112
|
+
for (let p = from; p < to; p++) {
|
|
113
|
+
if (buf[p] === NEWLINE)
|
|
114
|
+
n++;
|
|
115
|
+
}
|
|
116
|
+
return n;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=step-lexing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-lexing.js","sourceRoot":"","sources":["../src/step-lexing.ts"],"names":[],"mappings":"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"}
|
package/dist/tokenizer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../src/tokenizer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../src/tokenizer.ts"],"names":[],"mappings":"AAaA,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;IA0F7G;;;OAGG;IACF,gBAAgB,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;IAuKjH,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,YAAY;IA+BpB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,gBAAgB;CA6CzB"}
|
package/dist/tokenizer.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* Leverages Spike 1 approach: ~1,259 MB/s throughput
|
|
7
7
|
*/
|
|
8
8
|
import { safeUtf8Decode } from '@ifc-lite/data';
|
|
9
|
+
import { countNewlines, opensLiteralOrComment, skipLexical } from './step-lexing.js';
|
|
9
10
|
export class StepTokenizer {
|
|
10
11
|
buffer;
|
|
11
12
|
position = 0;
|
|
@@ -57,6 +58,17 @@ export class StepTokenizer {
|
|
|
57
58
|
// Find matching closing parenthesis to get full entity length
|
|
58
59
|
const entityLength = this.findEntityLength(startOffset);
|
|
59
60
|
if (entityLength > 0) {
|
|
61
|
+
// Step past the whole record, as Rust's next_entity does. Leaving
|
|
62
|
+
// `position` at the '(' made this loop re-walk the body, which was
|
|
63
|
+
// harmless only while it ignored quotes and comments.
|
|
64
|
+
//
|
|
65
|
+
// Count from `position`, not from `startOffset`: `position` is on the
|
|
66
|
+
// '(' here, and every newline before it was already counted by the
|
|
67
|
+
// three skipWhitespace calls above. Counting the whole record instead
|
|
68
|
+
// double-counts a newline written between `#1=` and its type name,
|
|
69
|
+
// which is ordinary whitespace and legal.
|
|
70
|
+
this.lineNumber += countNewlines(this.buffer, this.position, startOffset + entityLength);
|
|
71
|
+
this.position = startOffset + entityLength;
|
|
60
72
|
yield {
|
|
61
73
|
expressId,
|
|
62
74
|
type,
|
|
@@ -71,6 +83,16 @@ export class StepTokenizer {
|
|
|
71
83
|
this.lineNumber++;
|
|
72
84
|
this.position++;
|
|
73
85
|
}
|
|
86
|
+
else if (opensLiteralOrComment(this.buffer, this.position, this.buffer.length)) {
|
|
87
|
+
// A commented-out record satisfies every check above, so a comment has
|
|
88
|
+
// to be skipped as a region; a literal has to be skipped so its
|
|
89
|
+
// contents cannot look like one. See step-lexing.
|
|
90
|
+
const skip = skipLexical(this.buffer, this.position, this.buffer.length);
|
|
91
|
+
this.lineNumber += skip.lines;
|
|
92
|
+
this.position = skip.next;
|
|
93
|
+
if (skip.stop)
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
74
96
|
else {
|
|
75
97
|
this.position++;
|
|
76
98
|
}
|
|
@@ -237,6 +259,20 @@ export class StepTokenizer {
|
|
|
237
259
|
line++;
|
|
238
260
|
pos++;
|
|
239
261
|
}
|
|
262
|
+
else if (opensLiteralOrComment(buf, pos, len)) {
|
|
263
|
+
// After the newline branch, not before it: the inner loop consumes
|
|
264
|
+
// entity bodies, so newline is the commonest byte this chain sees.
|
|
265
|
+
// The byte values are mutually exclusive, so order is
|
|
266
|
+
// semantics-neutral. See step-lexing for what is skipped and why.
|
|
267
|
+
const skip = skipLexical(buf, pos, len);
|
|
268
|
+
line += skip.lines;
|
|
269
|
+
pos = skip.next;
|
|
270
|
+
if (skip.stop) {
|
|
271
|
+
this.position = len;
|
|
272
|
+
this.lineNumber = line;
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
240
276
|
else {
|
|
241
277
|
pos++;
|
|
242
278
|
}
|
package/dist/tokenizer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../src/tokenizer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../src/tokenizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Forward a worker realm's wasm panic-location stash to the main thread
|
|
3
|
+
* (#2527 follow-up).
|
|
4
|
+
*
|
|
5
|
+
* The Rust panic hook (`rust/wasm-bindings/src/utils.rs`) stashes
|
|
6
|
+
* `{ location, at }` on whichever realm's JS global it runs in — `self` in a
|
|
7
|
+
* worker, `window` on the main thread. #2527 taught the main thread to read
|
|
8
|
+
* its OWN global's stash and attach it to a trap's exception event
|
|
9
|
+
* (`apps/viewer/src/lib/analytics-scrub.ts`'s `attachWasmPanicLocation`), but
|
|
10
|
+
* a worker-realm trap leaves that stash stranded in the worker's global,
|
|
11
|
+
* which the main thread can never see across the realm boundary.
|
|
12
|
+
*
|
|
13
|
+
* `takeWasmPanicStash` reads + consumes the stash worker-side so it can ride
|
|
14
|
+
* the worker's own `{type:'error'}` message; `restashWasmPanicLocation`
|
|
15
|
+
* re-plants it on the main thread's global so the EXISTING #2527 gate (same
|
|
16
|
+
* key, same TTL, same consume-once semantics) picks it up unmodified.
|
|
17
|
+
*
|
|
18
|
+
* Location only, never the panic's message — the message can embed
|
|
19
|
+
* model-derived text (see `utils.rs`'s privacy contract); the location alone
|
|
20
|
+
* travels on the error message and through this module.
|
|
21
|
+
*
|
|
22
|
+
* NOTE: this file is intentionally byte-identical to
|
|
23
|
+
* `packages/geometry/src/wasm-panic-forward.ts` — both `@ifc-lite/geometry`
|
|
24
|
+
* and `@ifc-lite/parser` need the exact same realm-forwarding contract, and
|
|
25
|
+
* neither package depends on the other (nor is `@ifc-lite/wasm`, the one
|
|
26
|
+
* package both DO depend on, a safe home: it ships only the wasm-pack build
|
|
27
|
+
* output, with no TypeScript build step of its own, and `test`/`typecheck`
|
|
28
|
+
* for either consumer already runs its build via turbo's `^build` — adding a
|
|
29
|
+
* hand-written TS module there would make every geometry/parser test run
|
|
30
|
+
* gate on a full Rust→wasm rebuild). Keep any change to one copy in lockstep
|
|
31
|
+
* with the other; `wasm-panic-forward.test.ts` is duplicated the same way.
|
|
32
|
+
*/
|
|
33
|
+
/** Kept in lockstep with `PANIC_STASH_KEY` in `rust/wasm-bindings/src/utils.rs`,
|
|
34
|
+
* `WASM_PANIC_STASH_KEY` in `apps/viewer/src/lib/analytics-scrub.ts`, and this
|
|
35
|
+
* module's twin at `packages/geometry/src/wasm-panic-forward.ts`. */
|
|
36
|
+
export declare const WASM_PANIC_STASH_KEY = "__ifclite_wasm_panic";
|
|
37
|
+
export interface WasmPanicStash {
|
|
38
|
+
location: string;
|
|
39
|
+
at: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Worker-side: read and CONSUME this realm's panic stash so it can be
|
|
43
|
+
* forwarded on the worker's own error message. Consume-once regardless of
|
|
44
|
+
* shape validity — an unconsumed malformed stash must not linger to
|
|
45
|
+
* mislabel a later trap, mirroring the main-thread gate's own rule.
|
|
46
|
+
*/
|
|
47
|
+
export declare function takeWasmPanicStash(realm: object): WasmPanicStash | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Main-side: re-plant a worker-forwarded stash on this realm's global so the
|
|
50
|
+
* existing #2527 `attachWasmPanicLocation` gate consumes it unmodified.
|
|
51
|
+
*
|
|
52
|
+
* Gated on `errorMessage` looking like a wasm trap: the worker forwards
|
|
53
|
+
* `wasmPanicLocation`/`wasmPanicAt` on ANY `{type:'error'}` message (a stale
|
|
54
|
+
* stash from an earlier suppressed panic can ride out on an ordinary,
|
|
55
|
+
* non-trap worker error), and re-planting unconditionally would let that
|
|
56
|
+
* stale location sit on `globalThis` until an unrelated trap-shaped
|
|
57
|
+
* exception consumed it — mislabeling that trap. Only a message that itself
|
|
58
|
+
* looks like a wasm trap is allowed to re-plant.
|
|
59
|
+
*
|
|
60
|
+
* Never clobbers an existing, unconsumed stash — a genuine main-thread trap
|
|
61
|
+
* that hasn't been captured yet must win over a worker trap that merely
|
|
62
|
+
* arrived first (the older-looking stash, if stale, is simply dropped later
|
|
63
|
+
* by the TTL check at attach time; this function never overwrites either
|
|
64
|
+
* way).
|
|
65
|
+
*/
|
|
66
|
+
export declare function restashWasmPanicLocation(realm: object, location: unknown, at: unknown, errorMessage: string): void;
|
|
67
|
+
//# sourceMappingURL=wasm-panic-forward.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-panic-forward.d.ts","sourceRoot":"","sources":["../src/wasm-panic-forward.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH;;sEAEsE;AACtE,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAgB3D,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAeD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAK5E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,EACjB,EAAE,EAAE,OAAO,EACX,YAAY,EAAE,MAAM,GACnB,IAAI,CAON"}
|
|
@@ -0,0 +1,107 @@
|
|
|
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
|
+
* Forward a worker realm's wasm panic-location stash to the main thread
|
|
6
|
+
* (#2527 follow-up).
|
|
7
|
+
*
|
|
8
|
+
* The Rust panic hook (`rust/wasm-bindings/src/utils.rs`) stashes
|
|
9
|
+
* `{ location, at }` on whichever realm's JS global it runs in — `self` in a
|
|
10
|
+
* worker, `window` on the main thread. #2527 taught the main thread to read
|
|
11
|
+
* its OWN global's stash and attach it to a trap's exception event
|
|
12
|
+
* (`apps/viewer/src/lib/analytics-scrub.ts`'s `attachWasmPanicLocation`), but
|
|
13
|
+
* a worker-realm trap leaves that stash stranded in the worker's global,
|
|
14
|
+
* which the main thread can never see across the realm boundary.
|
|
15
|
+
*
|
|
16
|
+
* `takeWasmPanicStash` reads + consumes the stash worker-side so it can ride
|
|
17
|
+
* the worker's own `{type:'error'}` message; `restashWasmPanicLocation`
|
|
18
|
+
* re-plants it on the main thread's global so the EXISTING #2527 gate (same
|
|
19
|
+
* key, same TTL, same consume-once semantics) picks it up unmodified.
|
|
20
|
+
*
|
|
21
|
+
* Location only, never the panic's message — the message can embed
|
|
22
|
+
* model-derived text (see `utils.rs`'s privacy contract); the location alone
|
|
23
|
+
* travels on the error message and through this module.
|
|
24
|
+
*
|
|
25
|
+
* NOTE: this file is intentionally byte-identical to
|
|
26
|
+
* `packages/geometry/src/wasm-panic-forward.ts` — both `@ifc-lite/geometry`
|
|
27
|
+
* and `@ifc-lite/parser` need the exact same realm-forwarding contract, and
|
|
28
|
+
* neither package depends on the other (nor is `@ifc-lite/wasm`, the one
|
|
29
|
+
* package both DO depend on, a safe home: it ships only the wasm-pack build
|
|
30
|
+
* output, with no TypeScript build step of its own, and `test`/`typecheck`
|
|
31
|
+
* for either consumer already runs its build via turbo's `^build` — adding a
|
|
32
|
+
* hand-written TS module there would make every geometry/parser test run
|
|
33
|
+
* gate on a full Rust→wasm rebuild). Keep any change to one copy in lockstep
|
|
34
|
+
* with the other; `wasm-panic-forward.test.ts` is duplicated the same way.
|
|
35
|
+
*/
|
|
36
|
+
/** Kept in lockstep with `PANIC_STASH_KEY` in `rust/wasm-bindings/src/utils.rs`,
|
|
37
|
+
* `WASM_PANIC_STASH_KEY` in `apps/viewer/src/lib/analytics-scrub.ts`, and this
|
|
38
|
+
* module's twin at `packages/geometry/src/wasm-panic-forward.ts`. */
|
|
39
|
+
export const WASM_PANIC_STASH_KEY = '__ifclite_wasm_panic';
|
|
40
|
+
/**
|
|
41
|
+
* Trap-shape text match, kept in lockstep with `WASM_TRAP_TEXT` in
|
|
42
|
+
* `apps/viewer/src/lib/analytics-scrub.ts` and this module's twin at
|
|
43
|
+
* `packages/geometry/src/wasm-panic-forward.ts`. Deliberately excludes bare
|
|
44
|
+
* "unreachable" inside network-failure phrasing ("network is unreachable",
|
|
45
|
+
* "host unreachable") — those are not wasm traps.
|
|
46
|
+
*/
|
|
47
|
+
const WASM_TRAP_TEXT = /(?<!network is |host |destination |address )\bunreachable\b|\bRuntimeError\b|memory access out of bounds|index out of bounds|indirect call to null|integer (?:overflow|divide by zero)|call stack exhausted/i;
|
|
48
|
+
function looksLikeWasmTrap(message) {
|
|
49
|
+
return WASM_TRAP_TEXT.test(message);
|
|
50
|
+
}
|
|
51
|
+
/** Validate + narrow an unknown stash value read off a realm global. */
|
|
52
|
+
function readStashShape(value) {
|
|
53
|
+
if (typeof value !== 'object' || value === null)
|
|
54
|
+
return undefined;
|
|
55
|
+
const { location, at } = value;
|
|
56
|
+
if (typeof location !== 'string' || location === '')
|
|
57
|
+
return undefined;
|
|
58
|
+
// Reject non-finite (`NaN`/`Infinity`) and future timestamps — both pass
|
|
59
|
+
// the analytics TTL gate's `Date.now() - at <= TTL` check trivially
|
|
60
|
+
// (`Infinity` makes the delta `-Infinity`; a future `at` makes it
|
|
61
|
+
// negative), which would let a malformed stash label a later trap.
|
|
62
|
+
if (typeof at !== 'number' || !Number.isFinite(at) || at > Date.now())
|
|
63
|
+
return undefined;
|
|
64
|
+
return { location, at };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Worker-side: read and CONSUME this realm's panic stash so it can be
|
|
68
|
+
* forwarded on the worker's own error message. Consume-once regardless of
|
|
69
|
+
* shape validity — an unconsumed malformed stash must not linger to
|
|
70
|
+
* mislabel a later trap, mirroring the main-thread gate's own rule.
|
|
71
|
+
*/
|
|
72
|
+
export function takeWasmPanicStash(realm) {
|
|
73
|
+
const g = realm;
|
|
74
|
+
const raw = g[WASM_PANIC_STASH_KEY];
|
|
75
|
+
delete g[WASM_PANIC_STASH_KEY];
|
|
76
|
+
return readStashShape(raw);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Main-side: re-plant a worker-forwarded stash on this realm's global so the
|
|
80
|
+
* existing #2527 `attachWasmPanicLocation` gate consumes it unmodified.
|
|
81
|
+
*
|
|
82
|
+
* Gated on `errorMessage` looking like a wasm trap: the worker forwards
|
|
83
|
+
* `wasmPanicLocation`/`wasmPanicAt` on ANY `{type:'error'}` message (a stale
|
|
84
|
+
* stash from an earlier suppressed panic can ride out on an ordinary,
|
|
85
|
+
* non-trap worker error), and re-planting unconditionally would let that
|
|
86
|
+
* stale location sit on `globalThis` until an unrelated trap-shaped
|
|
87
|
+
* exception consumed it — mislabeling that trap. Only a message that itself
|
|
88
|
+
* looks like a wasm trap is allowed to re-plant.
|
|
89
|
+
*
|
|
90
|
+
* Never clobbers an existing, unconsumed stash — a genuine main-thread trap
|
|
91
|
+
* that hasn't been captured yet must win over a worker trap that merely
|
|
92
|
+
* arrived first (the older-looking stash, if stale, is simply dropped later
|
|
93
|
+
* by the TTL check at attach time; this function never overwrites either
|
|
94
|
+
* way).
|
|
95
|
+
*/
|
|
96
|
+
export function restashWasmPanicLocation(realm, location, at, errorMessage) {
|
|
97
|
+
const stash = readStashShape({ location, at });
|
|
98
|
+
if (!stash)
|
|
99
|
+
return;
|
|
100
|
+
if (!looksLikeWasmTrap(errorMessage))
|
|
101
|
+
return;
|
|
102
|
+
const g = realm;
|
|
103
|
+
if (g[WASM_PANIC_STASH_KEY] !== undefined)
|
|
104
|
+
return;
|
|
105
|
+
g[WASM_PANIC_STASH_KEY] = stash;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=wasm-panic-forward.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-panic-forward.js","sourceRoot":"","sources":["../src/wasm-panic-forward.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH;;sEAEsE;AACtE,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,cAAc,GAClB,8MAA8M,CAAC;AAEjN,SAAS,iBAAiB,CAAC,OAAe;IACxC,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAOD,wEAAwE;AACxE,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAClE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,KAA6C,CAAC;IACvE,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACtE,yEAAyE;IACzE,oEAAoE;IACpE,kEAAkE;IAClE,mEAAmE;IACnE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,SAAS,CAAC;IACxF,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC/B,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,wBAAwB,CACtC,KAAa,EACb,QAAiB,EACjB,EAAW,EACX,YAAoB;IAEpB,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;QAAE,OAAO;IAC7C,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,IAAI,CAAC,CAAC,oBAAoB,CAAC,KAAK,SAAS;QAAE,OAAO;IAClD,CAAC,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC;AAClC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-parser.d.ts","sourceRoot":"","sources":["../src/worker-parser.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-parser.d.ts","sourceRoot":"","sources":["../src/worker-parser.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AAQnC,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,6EAA6E;IAC7E,SAAS,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC;IACzB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC5D;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD;;;;OAIG;IACH,OAAO,CAAC,iBAAiB,CAIT;IAEhB;;;;;;;OAOG;IACH,MAAM,CAAC,WAAW,IAAI,OAAO;gBAOjB,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,GAAG,GAAG,MAAM,CAAA;KAAO;IAQtD;;;;;;OAMG;IACH,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC;IA8IlG;;;;;OAKG;IACH,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAiBjF,gEAAgE;IAChE,SAAS,IAAI,IAAI;CAMlB"}
|
package/dist/worker-parser.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
import { fromTransport, } from './data-store-transport.js';
|
|
5
5
|
import { contiguousSourceBytes } from './source-bytes.js';
|
|
6
|
+
import { restashWasmPanicLocation } from './wasm-panic-forward.js';
|
|
6
7
|
export class WorkerParser {
|
|
7
8
|
worker = null;
|
|
8
9
|
requestCounter = 0;
|
|
@@ -121,6 +122,12 @@ export class WorkerParser {
|
|
|
121
122
|
return;
|
|
122
123
|
}
|
|
123
124
|
case 'error':
|
|
125
|
+
// #2527 follow-up: re-plant the worker realm's panic-location
|
|
126
|
+
// stash (if this error was a wasm trap) on THIS realm's global,
|
|
127
|
+
// before the rejection below propagates, so
|
|
128
|
+
// `attachWasmPanicLocation` in analytics-scrub.ts sees it
|
|
129
|
+
// exactly as it would a main-thread trap.
|
|
130
|
+
restashWasmPanicLocation(globalThis, msg.wasmPanicLocation, msg.wasmPanicAt, msg.message);
|
|
124
131
|
settle(() => {
|
|
125
132
|
worker.terminate();
|
|
126
133
|
this.worker = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-parser.js","sourceRoot":"","sources":["../src/worker-parser.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAqB/D,OAAO,EACL,aAAa,GAGd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-parser.js","sourceRoot":"","sources":["../src/worker-parser.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ifc-lite/parser",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.3",
|
|
4
4
|
"description": "IFC/STEP parser for IFC-Lite",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"fflate": "^0.8.3",
|
|
21
21
|
"jszip": "^3.10.0",
|
|
22
|
-
"@ifc-lite/data": "^3.
|
|
23
|
-
"@ifc-lite/encoding": "^
|
|
24
|
-
"@ifc-lite/ifcx": "^2.3.
|
|
25
|
-
"@ifc-lite/wasm": "^4.
|
|
22
|
+
"@ifc-lite/data": "^3.3.0",
|
|
23
|
+
"@ifc-lite/encoding": "^2.0.0",
|
|
24
|
+
"@ifc-lite/ifcx": "^2.3.5",
|
|
25
|
+
"@ifc-lite/wasm": "^4.5.1"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"typescript": "^6.0.3",
|