@ifc-lite/pointcloud 0.9.0 → 0.11.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/index.d.ts CHANGED
@@ -12,12 +12,13 @@ export { decodePointsArray, decodePointsBase64, type PointsArrayAttribute, type
12
12
  export { decompressLZF } from './lzf.js';
13
13
  export { POINTCLOUD_ATTR, POINTCLOUD_ATTR_KEYS, decodeIfcxPointAttribute, } from './from-ifcx-attributes.js';
14
14
  export { parseLasHeader, decodeLasPoints, sampleMaxRgbChannel, type LasHeader, } from './formats/las.js';
15
- export type { StreamingPointSource, PointSourceInfo, DownsampleHint, } from './streaming/types.js';
15
+ export type { StreamingPointSource, PointSourceInfo, PointSourceSpatialMetadata, DownsampleHint, } from './streaming/types.js';
16
16
  export { LasStreamingSource } from './streaming/las-source.js';
17
17
  export { LazStreamingSource, probeLazPerfWasmLoad } from './streaming/laz-source.js';
18
18
  export { PlyStreamingSource } from './streaming/ply-source.js';
19
19
  export { PcdStreamingSource } from './streaming/pcd-source.js';
20
- export { E57StreamingSource } from './streaming/e57-source.js';
20
+ export { E57StreamingSource, inspectE57SpatialMetadata } from './streaming/e57-source.js';
21
+ export { extractWktCrsIdentifiers, extractWktSpatialMetadata, type WktAxisDirection, type WktCrsIdentifiers, type WktSpatialMetadata, } from './spatial-wkt.js';
21
22
  export { AsciiPointsStreamingSource } from './streaming/ascii-points-source.js';
22
23
  export { decodeAsciiPoints, decodeAsciiPointsFromText, probeAsciiPointsLayout, type AsciiPointsFormat, type AsciiPointsLayout, } from './formats/ascii-points.js';
23
24
  export { parsePlyHeader, decodePly } from './formats/ply.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGtF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,KAAK,SAAS,GACf,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,IAAI,eAAe,EAC/B,SAAS,EACT,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EACL,wBAAwB,EACxB,KAAK,+BAA+B,EACpC,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,EAC1B,KAAK,wBAAwB,GAC9B,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGtF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,KAAK,SAAS,GACf,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,IAAI,eAAe,EAC/B,SAAS,EACT,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EACL,wBAAwB,EACxB,KAAK,+BAA+B,EACpC,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,EAC1B,KAAK,wBAAwB,GAC9B,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -12,7 +12,8 @@ export { LasStreamingSource } from './streaming/las-source.js';
12
12
  export { LazStreamingSource, probeLazPerfWasmLoad } from './streaming/laz-source.js';
13
13
  export { PlyStreamingSource } from './streaming/ply-source.js';
14
14
  export { PcdStreamingSource } from './streaming/pcd-source.js';
15
- export { E57StreamingSource } from './streaming/e57-source.js';
15
+ export { E57StreamingSource, inspectE57SpatialMetadata } from './streaming/e57-source.js';
16
+ export { extractWktCrsIdentifiers, extractWktSpatialMetadata, } from './spatial-wkt.js';
16
17
  export { AsciiPointsStreamingSource } from './streaming/ascii-points-source.js';
17
18
  export { decodeAsciiPoints, decodeAsciiPointsFromText, probeAsciiPointsLayout, } from './formats/ascii-points.js';
18
19
  export { parsePlyHeader, decodePly } from './formats/ply.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAa/D,mCAAmC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GAGnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAEnC,wBAAwB;AACxB,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,GAEpB,MAAM,kBAAkB,CAAC;AAQ1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,GAGvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,IAAI,eAAe,EAC/B,SAAS,EACT,aAAa,GAGd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EACL,wBAAwB,GAIzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,gBAAgB,GAGjB,MAAM,qBAAqB,CAAC;AAE7B,qCAAqC;AACrC,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,GAE3B,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAa/D,mCAAmC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GAGnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAEnC,wBAAwB;AACxB,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,GAEpB,MAAM,kBAAkB,CAAC;AAS1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EACL,wBAAwB,EACxB,yBAAyB,GAI1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,sBAAsB,GAGvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,YAAY,IAAI,eAAe,EAC/B,SAAS,EACT,aAAa,GAGd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EACL,wBAAwB,GAIzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,gBAAgB,GAGjB,MAAM,qBAAqB,CAAC;AAE7B,qCAAqC;AACrC,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,GAE3B,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** Explicit CRS identifiers read from WKT1/WKT2 without guessing a CRS. */
2
+ export interface WktCrsIdentifiers {
3
+ horizontalId?: string;
4
+ verticalId?: string;
5
+ }
6
+ export type WktAxisDirection = 'east' | 'west' | 'north' | 'south' | 'up' | 'down';
7
+ export interface WktSpatialMetadata extends WktCrsIdentifiers {
8
+ axes?: readonly [WktAxisDirection, WktAxisDirection, WktAxisDirection];
9
+ horizontalUnitToMetres?: number;
10
+ verticalUnitToMetres?: number;
11
+ }
12
+ export declare function extractWktSpatialMetadata(wkt: string): WktSpatialMetadata;
13
+ export declare function extractWktCrsIdentifiers(wkt: string): WktCrsIdentifiers;
14
+ //# sourceMappingURL=spatial-wkt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spatial-wkt.d.ts","sourceRoot":"","sources":["../src/spatial-wkt.ts"],"names":[],"mappings":"AAIA,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAAG,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;AACjF,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;AACnF,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,IAAI,CAAC,EAAE,SAAS,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IACvE,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAsED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAwBzE;AACD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAGvE"}
@@ -0,0 +1,106 @@
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
+ /** Balanced lexical nodes; metadata is read only from direct owned children. */
5
+ function nodes(text) {
6
+ const result = [];
7
+ for (let index = 0; index < text.length;) {
8
+ const match = /([A-Za-z_][A-Za-z_0-9]*)\s*\[/.exec(text.slice(index));
9
+ if (!match)
10
+ break;
11
+ const start = index + match.index, bodyStart = start + match[0].length;
12
+ let depth = 1, quote = false, cursor = bodyStart;
13
+ for (; cursor < text.length && depth > 0; cursor += 1) {
14
+ const char = text[cursor];
15
+ if (char === '"')
16
+ quote = !quote;
17
+ else if (!quote && char === '[')
18
+ depth += 1;
19
+ else if (!quote && char === ']')
20
+ depth -= 1;
21
+ }
22
+ if (depth !== 0)
23
+ break;
24
+ result.push({ name: match[1].toUpperCase(), body: text.slice(bodyStart, cursor - 1) });
25
+ index = cursor;
26
+ }
27
+ return result;
28
+ }
29
+ function direct(body, names) {
30
+ const allowed = new Set(names);
31
+ return nodes(body).find((node) => allowed.has(node.name));
32
+ }
33
+ function root(wkt) { return nodes(wkt)[0]; }
34
+ function epsg(node) {
35
+ const owned = node && direct(node.body, ['ID', 'AUTHORITY']);
36
+ const code = owned?.body.match(/^\s*["']EPSG["']\s*,\s*["']?(\d+)/i)?.[1];
37
+ return code ? `EPSG:${code}` : undefined;
38
+ }
39
+ function axes(node) {
40
+ return node ? nodes(node.body).filter((child) => child.name === 'AXIS')
41
+ .map((child) => /^[^,]*,\s*(east|west|north|south|up|down)\b/i.exec(child.body)?.[1]?.toLowerCase())
42
+ .filter((value) => value !== undefined) : [];
43
+ }
44
+ function unitFactor(node) {
45
+ const number = Number(node && /,\s*([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)/i.exec(node.body)?.[1]);
46
+ return Number.isFinite(number) && number > 0 ? number : undefined;
47
+ }
48
+ /**
49
+ * WKT2 allows LENGTHUNIT to belong to each AXIS rather than to the CRS. Keep
50
+ * every owned candidate: picking the first silently turns a conflicting CRS
51
+ * declaration into metres (or whichever axis happened to be first).
52
+ */
53
+ function unit(node) {
54
+ if (!node)
55
+ return undefined;
56
+ // WKT1 GEOGCS owns an angular UNIT. It must never be interpreted as a
57
+ // metres-per-coordinate factor for a point cloud.
58
+ const names = node.name === 'GEOGCS' || node.name === 'GEOGCRS'
59
+ ? ['LENGTHUNIT']
60
+ : ['LENGTHUNIT', 'UNIT'];
61
+ const candidates = [
62
+ ...nodes(node.body)
63
+ .filter((child) => names.includes(child.name))
64
+ .map(unitFactor),
65
+ ...nodes(node.body)
66
+ .filter((child) => child.name === 'AXIS')
67
+ .flatMap((axis) => nodes(axis.body)
68
+ .filter((child) => names.includes(child.name))
69
+ .map(unitFactor)),
70
+ ];
71
+ if (candidates.length === 0 || candidates.some((value) => value === undefined))
72
+ return undefined;
73
+ const first = candidates[0];
74
+ return candidates.every((value) => value === first) ? first : undefined;
75
+ }
76
+ export function extractWktSpatialMetadata(wkt) {
77
+ const document = root(wkt);
78
+ if (!document)
79
+ return {};
80
+ const compound = ['COMPOUNDCRS', 'COMPD_CS'].includes(document.name) ? document : undefined;
81
+ const scope = compound?.body ?? wkt;
82
+ // E57 coordinateMetadata commonly stores adjacent top-level PROJCRS and
83
+ // VERTCRS nodes rather than wrapping them in COMPOUNDCRS.
84
+ const horizontal = direct(scope, ['PROJCRS', 'PROJCS', 'GEOGCRS', 'GEOGCS']);
85
+ const vertical = direct(scope, ['VERTCRS', 'VERT_CS']);
86
+ const horizontalAxes = axes(horizontal).filter((value) => value !== 'up' && value !== 'down');
87
+ // LAS has a third Z ordinate; when WKT describes only its horizontal CRS,
88
+ // retain its documented positive-height convention rather than borrowing a
89
+ // nested GEOGCS axis. A declared VERTCRS still owns the direction.
90
+ const verticalAxis = axes(vertical ?? horizontal).find((value) => value === 'up' || value === 'down')
91
+ ?? (!vertical ? 'up' : undefined);
92
+ const frame = horizontalAxes.length === 2 && new Set(horizontalAxes).size === 2 && verticalAxis
93
+ ? [horizontalAxes[0], horizontalAxes[1], verticalAxis] : undefined;
94
+ const horizontalId = epsg(horizontal), verticalId = epsg(vertical);
95
+ const horizontalUnitToMetres = unit(horizontal), verticalUnitToMetres = unit(vertical);
96
+ return {
97
+ ...(horizontalId ? { horizontalId } : {}), ...(verticalId ? { verticalId } : {}),
98
+ ...(frame ? { axes: frame } : {}), ...(horizontalUnitToMetres ? { horizontalUnitToMetres } : {}),
99
+ ...(verticalUnitToMetres ? { verticalUnitToMetres } : {}),
100
+ };
101
+ }
102
+ export function extractWktCrsIdentifiers(wkt) {
103
+ const { horizontalId, verticalId } = extractWktSpatialMetadata(wkt);
104
+ return { ...(horizontalId ? { horizontalId } : {}), ...(verticalId ? { verticalId } : {}) };
105
+ }
106
+ //# sourceMappingURL=spatial-wkt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spatial-wkt.js","sourceRoot":"","sources":["../src/spatial-wkt.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAY/D,gFAAgF;AAChF,SAAS,KAAK,CAAC,IAAY;IACzB,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;QACzC,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,KAAK;YAAE,MAAM;QAClB,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACvE,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QACjD,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,IAAI,KAAK,GAAG;gBAAE,KAAK,GAAG,CAAC,KAAK,CAAC;iBAC5B,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,GAAG;gBAAE,KAAK,IAAI,CAAC,CAAC;iBACvC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,GAAG;gBAAE,KAAK,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,KAAK,KAAK,CAAC;YAAE,MAAM;QACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACvF,KAAK,GAAG,MAAM,CAAC;IACjB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAS,MAAM,CAAC,IAAY,EAAE,KAAwB;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AACD,SAAS,IAAI,CAAC,GAAW,IAAyB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,SAAS,IAAI,CAAC,IAAyB;IACrC,MAAM,KAAK,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3C,CAAC;AACD,SAAS,IAAI,CAAC,IAAyB;IACrC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SACpE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,8CAA8C,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;SACnG,MAAM,CAAC,CAAC,KAAK,EAA6B,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC;AACD,SAAS,UAAU,CAAC,IAAyB;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,mDAAmD,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxG,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,SAAS,IAAI,CAAC,IAAyB;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,sEAAsE;IACtE,kDAAkD;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAC7D,CAAC,CAAC,CAAC,YAAY,CAAC;QAChB,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG;QACjB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;aAChB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC7C,GAAG,CAAC,UAAU,CAAC;QAClB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;aAChB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;aACxC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;aAChC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC7C,GAAG,CAAC,UAAU,CAAC,CAAC;KACtB,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACjG,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;IAC7B,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,QAAQ,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,MAAM,KAAK,GAAG,QAAQ,EAAE,IAAI,IAAI,GAAG,CAAC;IACpC,wEAAwE;IACxE,0DAA0D;IAC1D,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC;IAC9F,0EAA0E;IAC1E,2EAA2E;IAC3E,mEAAmE;IACnE,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC;WAChG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,YAAY;QAC7F,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,YAAY,CAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,sBAAsB,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvF,OAAO;QACL,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACpE,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9F,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { BlobByteSource } from './blob-source.js';
2
+ export declare function throwIfAborted(signal?: AbortSignal): void;
3
+ /** Read a bounded logical range from CRC-paged E57 storage.
4
+ *
5
+ * `BlobByteSource.read` silently clamps to the blob's actual size (see its
6
+ * doc comment) — a file whose header/XML declares a longer logical range
7
+ * than the body backs (a truncated download, an interrupted upload) yields
8
+ * a SHORT slice here with no error. Most callers tolerate that: the
9
+ * CompressedVector point-data window in `E57StreamingSource.next()` treats
10
+ * a short/empty window as "no more bytes for this scan" and trims its
11
+ * output instead of fabricating points — the same documented policy as an
12
+ * over-reported `recordCount` (see that class's `next()`). Passing
13
+ * `{ strict: true }` opts a caller OUT of that tolerance: it asserts the
14
+ * full requested range was actually read and throws, naming expected vs.
15
+ * actual byte counts, otherwise. Use it for control-plane reads (the XML
16
+ * metadata section) where a short read must be reported as truncation
17
+ * rather than silently absorbed — see `E57StreamingSource.open()` and
18
+ * `inspectE57SpatialMetadata`, the two callers that pass it.
19
+ */
20
+ export declare function readE57LogicalRange(src: BlobByteSource, logStart: number, logLength: number, pageSize: number, signal?: AbortSignal, options?: {
21
+ strict?: boolean;
22
+ }): Promise<Uint8Array>;
23
+ //# sourceMappingURL=e57-logical-range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e57-logical-range.d.ts","sourceRoot":"","sources":["../../src/streaming/e57-logical-range.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAEzD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,UAAU,CAAC,CA4BrB"}
@@ -0,0 +1,54 @@
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
+ import { stripPageCrc } from '../formats/e57-page.js';
5
+ export function throwIfAborted(signal) {
6
+ if (signal?.aborted)
7
+ throw new DOMException('Aborted', 'AbortError');
8
+ }
9
+ /** Read a bounded logical range from CRC-paged E57 storage.
10
+ *
11
+ * `BlobByteSource.read` silently clamps to the blob's actual size (see its
12
+ * doc comment) — a file whose header/XML declares a longer logical range
13
+ * than the body backs (a truncated download, an interrupted upload) yields
14
+ * a SHORT slice here with no error. Most callers tolerate that: the
15
+ * CompressedVector point-data window in `E57StreamingSource.next()` treats
16
+ * a short/empty window as "no more bytes for this scan" and trims its
17
+ * output instead of fabricating points — the same documented policy as an
18
+ * over-reported `recordCount` (see that class's `next()`). Passing
19
+ * `{ strict: true }` opts a caller OUT of that tolerance: it asserts the
20
+ * full requested range was actually read and throws, naming expected vs.
21
+ * actual byte counts, otherwise. Use it for control-plane reads (the XML
22
+ * metadata section) where a short read must be reported as truncation
23
+ * rather than silently absorbed — see `E57StreamingSource.open()` and
24
+ * `inspectE57SpatialMetadata`, the two callers that pass it.
25
+ */
26
+ export async function readE57LogicalRange(src, logStart, logLength, pageSize, signal, options) {
27
+ throwIfAborted(signal);
28
+ // A NaN offset or length compares false against every bound below, so it
29
+ // would fall through as a "successful" empty read, even in strict mode.
30
+ if (!Number.isFinite(logStart) || !Number.isFinite(logLength)) {
31
+ throw new Error(`E57: invalid logical range (offset ${logStart}, length ${logLength})`);
32
+ }
33
+ if (logLength <= 0)
34
+ return new Uint8Array(0);
35
+ const payloadPerPage = pageSize - 4;
36
+ const firstPage = Math.floor(logStart / payloadPerPage);
37
+ const logicalPageStart = firstPage * payloadPerPage;
38
+ const physicalStart = firstPage * pageSize;
39
+ const logEnd = logStart + logLength;
40
+ const lastPage = Math.floor((logEnd - 1) / payloadPerPage);
41
+ const physical = await src.read(physicalStart, (lastPage + 1) * pageSize);
42
+ throwIfAborted(signal);
43
+ const logical = physical.length === 0 ? new Uint8Array(0) : stripPageCrc(physical, pageSize);
44
+ const rel = logStart - logicalPageStart;
45
+ const result = rel >= logical.length
46
+ ? new Uint8Array(0)
47
+ : logical.subarray(rel, Math.min(rel + logLength, logical.length));
48
+ if (options?.strict && result.length < logLength) {
49
+ throw new Error(`E57: logical range read expects ${logLength} bytes at logical offset ${logStart}, `
50
+ + `got ${result.length} — file truncated?`);
51
+ }
52
+ return result;
53
+ }
54
+ //# sourceMappingURL=e57-logical-range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e57-logical-range.js","sourceRoot":"","sources":["../../src/streaming/e57-logical-range.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,IAAI,MAAM,EAAE,OAAO;QAAE,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAmB,EACnB,QAAgB,EAChB,SAAiB,EACjB,QAAgB,EAChB,MAAoB,EACpB,OAA8B;IAE9B,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,yEAAyE;IACzE,wEAAwE;IACxE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,sCAAsC,QAAQ,YAAY,SAAS,GAAG,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,SAAS,GAAG,cAAc,CAAC;IACpD,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC3C,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC1E,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7F,MAAM,GAAG,GAAG,QAAQ,GAAG,gBAAgB,CAAC;IACxC,MAAM,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM;QAClC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,IAAI,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACb,mCAAmC,SAAS,4BAA4B,QAAQ,IAAI;cAClF,OAAO,MAAM,CAAC,MAAM,oBAAoB,CAC3C,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { PointSourceSpatialMetadata } from './types.js';
2
+ /** XML is control-plane metadata; a larger section is rejected before allocation. */
3
+ export declare const MAX_E57_XML_METADATA_BYTES: number;
4
+ export declare function spatialMetadataFromE57Xml(xml: string): PointSourceSpatialMetadata | undefined;
5
+ /** Read only the header and bounded XML metadata; no point packet is decoded. */
6
+ export declare function inspectE57SpatialMetadata(blob: Blob, signal?: AbortSignal): Promise<PointSourceSpatialMetadata | undefined>;
7
+ export declare function assertE57XmlMetadataBounds(xmlLength: number, logicalSize: number): void;
8
+ //# sourceMappingURL=e57-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e57-metadata.d.ts","sourceRoot":"","sources":["../../src/streaming/e57-metadata.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7D,qFAAqF;AACrF,eAAO,MAAM,0BAA0B,QAAW,CAAC;AAEnD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,0BAA0B,GAAG,SAAS,CAI7F;AAWD,iFAAiF;AACjF,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC,CAgBjI;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAEvF"}
@@ -0,0 +1,44 @@
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
+ import { parseE57FileHeader, physicalToLogical } from '../formats/e57-page.js';
5
+ import { extractWktCrsIdentifiers } from '../spatial-wkt.js';
6
+ import { BlobByteSource } from './blob-source.js';
7
+ import { readE57LogicalRange, throwIfAborted } from './e57-logical-range.js';
8
+ /** XML is control-plane metadata; a larger section is rejected before allocation. */
9
+ export const MAX_E57_XML_METADATA_BYTES = 16 << 20;
10
+ export function spatialMetadataFromE57Xml(xml) {
11
+ const text = /<\s*(?:\w+:)?coordinateMetadata\b[^>]*>([\s\S]*?)<\/\s*(?:\w+:)?coordinateMetadata\s*>/i.exec(xml)?.[1];
12
+ if (!text)
13
+ return undefined;
14
+ return { ...extractWktCrsIdentifiers(text), wkt: text, provenance: 'E57 coordinateMetadata' };
15
+ }
16
+ function assertBoundedXml(xmlLength, logicalSize) {
17
+ if (!Number.isSafeInteger(xmlLength) || xmlLength < 0 || xmlLength > MAX_E57_XML_METADATA_BYTES) {
18
+ throw new Error(`E57: XML metadata length ${xmlLength} exceeds ${MAX_E57_XML_METADATA_BYTES} byte safety limit`);
19
+ }
20
+ if (!Number.isSafeInteger(logicalSize) || logicalSize < 0 || xmlLength > logicalSize) {
21
+ throw new Error('E57: XML metadata range exceeds declared logical file size');
22
+ }
23
+ }
24
+ /** Read only the header and bounded XML metadata; no point packet is decoded. */
25
+ export async function inspectE57SpatialMetadata(blob, signal) {
26
+ const bytes = new BlobByteSource(blob);
27
+ throwIfAborted(signal);
28
+ const headerBytes = await bytes.read(0, 64);
29
+ throwIfAborted(signal);
30
+ const header = parseE57FileHeader(headerBytes);
31
+ if (header.pageSize <= 4)
32
+ throw new Error(`E57: invalid pageSize ${header.pageSize}`);
33
+ const logicalSize = header.fileLogicalSize > 0 ? header.fileLogicalSize : physicalToLogical(bytes.size, header.pageSize);
34
+ assertBoundedXml(header.xmlLogicalLength, logicalSize);
35
+ // `strict: true` — a short read here must surface as truncation, not as
36
+ // "no CRS": see the cross-caller doc on `readE57LogicalRange`.
37
+ const xml = await readE57LogicalRange(bytes, header.xmlLogicalOffset, header.xmlLogicalLength, header.pageSize, signal, { strict: true });
38
+ throwIfAborted(signal);
39
+ return spatialMetadataFromE57Xml(new TextDecoder().decode(xml));
40
+ }
41
+ export function assertE57XmlMetadataBounds(xmlLength, logicalSize) {
42
+ assertBoundedXml(xmlLength, logicalSize);
43
+ }
44
+ //# sourceMappingURL=e57-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e57-metadata.js","sourceRoot":"","sources":["../../src/streaming/e57-metadata.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7E,qFAAqF;AACrF,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,IAAI,EAAE,CAAC;AAEnD,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,MAAM,IAAI,GAAG,yFAAyF,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtH,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,EAAE,GAAG,wBAAwB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,wBAAwB,EAAE,CAAC;AAChG,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB,EAAE,WAAmB;IAC9D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,0BAA0B,EAAE,CAAC;QAChG,MAAM,IAAI,KAAK,CAAC,4BAA4B,SAAS,YAAY,0BAA0B,oBAAoB,CAAC,CAAC;IACnH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,SAAS,GAAG,WAAW,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAAU,EAAE,MAAoB;IAC9E,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACvC,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5C,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtF,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzH,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;IACvD,wEAAwE;IACxE,+DAA+D;IAC/D,MAAM,GAAG,GAAG,MAAM,mBAAmB,CACnC,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CACnG,CAAC;IACF,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,yBAAyB,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,SAAiB,EAAE,WAAmB;IAC/E,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC3C,CAAC"}
@@ -20,6 +20,7 @@
20
20
  */
21
21
  import type { DecodedPointChunk } from '../types.js';
22
22
  import type { DownsampleHint, PointSourceInfo, StreamingPointSource } from './types.js';
23
+ export { inspectE57SpatialMetadata } from './e57-metadata.js';
23
24
  export declare class E57StreamingSource implements StreamingPointSource {
24
25
  private bytes;
25
26
  private downsample;
@@ -38,6 +39,7 @@ export declare class E57StreamingSource implements StreamingPointSource {
38
39
  private hasColor;
39
40
  private hasIntensity;
40
41
  private hasClassification;
42
+ private spatialMetadata?;
41
43
  private scanIdx;
42
44
  private logCursor;
43
45
  /** Records consumed of the CURRENT scan (resets at each scan boundary). */
@@ -1 +1 @@
1
- {"version":3,"file":"e57-source.d.ts","sourceRoot":"","sources":["../../src/streaming/e57-source.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAuBrD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,oBAAoB,EACrB,MAAM,YAAY,CAAC;AA4BpB,qBAAa,kBAAmB,YAAW,oBAAoB;IAC7D,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,yEAAyE;IACzE,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC;;yDAEqD;IACrD,OAAO,CAAC,YAAY,CAAC,CAAoC;IAEzD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,iBAAiB,CAAS;IAGlC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAK;IACtB,2EAA2E;IAC3E,OAAO,CAAC,cAAc,CAAK;IAC3B;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,CAAK;gBAGzB,IAAI,EAAE,IAAI,EACV,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,cAAc,CAAC;QAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KAC7C;IASF,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAwDpD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IA+HtF,KAAK,IAAI,IAAI;IASb;;;;OAIG;YACW,iBAAiB;IAwB/B,wEAAwE;IACxE,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,MAAM;CAiBf"}
1
+ {"version":3,"file":"e57-source.d.ts","sourceRoot":"","sources":["../../src/streaming/e57-source.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAwBrD,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEf,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AA6B9D,qBAAa,kBAAmB,YAAW,oBAAoB;IAC7D,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,yEAAyE;IACzE,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC;;yDAEqD;IACrD,OAAO,CAAC,YAAY,CAAC,CAAoC;IAEzD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAC,CAA6B;IAGrD,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAK;IACtB,2EAA2E;IAC3E,OAAO,CAAC,cAAc,CAAK;IAC3B;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,CAAK;gBAGzB,IAAI,EAAE,IAAI,EACV,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,cAAc,CAAC;QAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KAC7C;IASF,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAgEpD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IA+HtF,KAAK,IAAI,IAAI;IASb;;;;OAIG;YACW,iBAAiB;IAwB/B,wEAAwE;IACxE,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,MAAM;CAkBf"}
@@ -3,9 +3,12 @@
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
4
  import { computeBBox, decodeE57Packet, peekPacketHeader, resolveScanFields, } from '../formats/e57-decode.js';
5
5
  import { applyPoseInPlace } from '../formats/e57.js';
6
- import { parseE57FileHeader, physicalToLogical, readU64LE, stripPageCrc, } from '../formats/e57-page.js';
6
+ import { parseE57FileHeader, physicalToLogical, readU64LE, } from '../formats/e57-page.js';
7
7
  import { parseE57Xml, } from '../formats/e57-xml.js';
8
8
  import { BlobByteSource } from './blob-source.js';
9
+ import { assertE57XmlMetadataBounds, spatialMetadataFromE57Xml } from './e57-metadata.js';
10
+ import { readE57LogicalRange } from './e57-logical-range.js';
11
+ export { inspectE57SpatialMetadata } from './e57-metadata.js';
9
12
  /** 1 MiB — always ≥ any single packet (E57 packets are ≤ 64 KiB). */
10
13
  const MIN_WINDOW_BYTES = 1 << 20;
11
14
  /** 16 MiB — caps peak window memory per `next()`. */
@@ -28,6 +31,7 @@ export class E57StreamingSource {
28
31
  hasColor = false;
29
32
  hasIntensity = false;
30
33
  hasClassification = false;
34
+ spatialMetadata;
31
35
  // Streaming cursor.
32
36
  scanIdx = 0;
33
37
  logCursor = 0;
@@ -64,9 +68,16 @@ export class E57StreamingSource {
64
68
  this.fileLogicalSize = header.fileLogicalSize > 0
65
69
  ? header.fileLogicalSize
66
70
  : physicalToLogical(this.bytes.size, header.pageSize);
67
- const xmlLogical = await readLogicalRange(this.bytes, header.xmlLogicalOffset, header.xmlLogicalLength, header.pageSize);
71
+ assertE57XmlMetadataBounds(header.xmlLogicalLength, this.fileLogicalSize);
72
+ // `strict: true` — same hazard, same fix, as `inspectE57SpatialMetadata`:
73
+ // a truncated blob must not present as "no CRS". See the cross-caller
74
+ // doc on `readE57LogicalRange`. The point-data reads in `next()` below
75
+ // stay non-strict — they tolerate a short/empty window deliberately,
76
+ // the same documented policy as an over-reported `recordCount`.
77
+ const xmlLogical = await readE57LogicalRange(this.bytes, header.xmlLogicalOffset, header.xmlLogicalLength, header.pageSize, signal, { strict: true });
68
78
  abortIfAborted(signal);
69
79
  const xmlText = new TextDecoder().decode(xmlLogical);
80
+ this.spatialMetadata = spatialMetadataFromE57Xml(xmlText);
70
81
  const entries = parseE57Xml(xmlText);
71
82
  if (entries.length === 0) {
72
83
  throw new Error('E57: file contains no Data3D scans');
@@ -139,7 +150,7 @@ export class E57StreamingSource {
139
150
  this.recordsWritten = scan.recordCount;
140
151
  continue;
141
152
  }
142
- let window = await readLogicalRange(this.bytes, this.logCursor, windowLen, this.pageSize);
153
+ let window = await readE57LogicalRange(this.bytes, this.logCursor, windowLen, this.pageSize);
143
154
  abortIfAborted(signal);
144
155
  if (window.length === 0) {
145
156
  this.recordsWritten = scan.recordCount;
@@ -154,7 +165,7 @@ export class E57StreamingSource {
154
165
  const peek0 = peekPacketHeader(view, 0);
155
166
  const atEof = this.logCursor + window.length >= this.fileLogicalSize;
156
167
  if (peek0.packetLength > window.length && !atEof) {
157
- window = await readLogicalRange(this.bytes, this.logCursor, peek0.packetLength, this.pageSize);
168
+ window = await readE57LogicalRange(this.bytes, this.logCursor, peek0.packetLength, this.pageSize);
158
169
  abortIfAborted(signal);
159
170
  view = new DataView(window.buffer, window.byteOffset, window.byteLength);
160
171
  }
@@ -230,7 +241,7 @@ export class E57StreamingSource {
230
241
  */
231
242
  async resolveDataOffset(entry, pageSize, signal) {
232
243
  const sectionLogical = physicalToLogical(entry.binaryFileOffset, pageSize);
233
- const headerBytes = await readLogicalRange(this.bytes, sectionLogical, 32, pageSize);
244
+ const headerBytes = await readE57LogicalRange(this.bytes, sectionLogical, 32, pageSize);
234
245
  abortIfAborted(signal);
235
246
  if (headerBytes.length < 32) {
236
247
  throw new Error(`E57: CompressedVector section header at logical ${sectionLogical} runs past end of file`);
@@ -272,40 +283,16 @@ export class E57StreamingSource {
272
283
  hasClassification: this.hasClassification,
273
284
  hasIntensity: this.hasIntensity,
274
285
  label: this.label,
286
+ ...(this.spatialMetadata ? { spatialMetadata: this.spatialMetadata } : {}),
275
287
  };
276
288
  }
277
289
  }
278
290
  /**
279
- * Read a LOGICAL byte range [logStart, logStart+logLength) from a
280
- * CRC-paged E57 file. Reads the covering physical page span, strips the
281
- * 4-byte per-page CRC tails, and returns the requested logical slice.
282
- *
283
- * Returns fewer bytes than requested (or empty) near EOF — callers treat
284
- * a short read as "scan ends here".
291
+ * Read only the E57 file header and CRC-paged XML section to discover declared
292
+ * CRS metadata before a caller chooses a decode origin. This deliberately
293
+ * shares `readLogicalRange` with the streaming source: metadata inspection is
294
+ * not a second decoder and never reads point packets.
285
295
  */
286
- async function readLogicalRange(src, logStart, logLength, pageSize) {
287
- if (logLength <= 0)
288
- return new Uint8Array(0);
289
- const payloadPerPage = pageSize - 4;
290
- const firstPage = Math.floor(logStart / payloadPerPage);
291
- const logicalPageStart = firstPage * payloadPerPage;
292
- const physicalStart = firstPage * pageSize;
293
- const logEnd = logStart + logLength;
294
- // Page containing the last byte we need (inclusive).
295
- const lastPage = Math.floor((logEnd - 1) / payloadPerPage);
296
- const physicalEnd = (lastPage + 1) * pageSize; // exclusive; read() clamps to size
297
- const physical = await src.read(physicalStart, physicalEnd);
298
- if (physical.length === 0)
299
- return new Uint8Array(0);
300
- // `physical` starts on a page boundary, so stripPageCrc treats byte 0
301
- // as a page start correctly. A clamped (EOF) tail is handled by
302
- // stripPageCrc's partial-page logic.
303
- const logical = stripPageCrc(physical, pageSize);
304
- const rel = logStart - logicalPageStart;
305
- if (rel >= logical.length)
306
- return new Uint8Array(0);
307
- return logical.subarray(rel, Math.min(rel + logLength, logical.length));
308
- }
309
296
  /**
310
297
  * Take every `stride`-th record from a decoded packet (phased by the
311
298
  * file-global record index `base` — the record's position in the merged
@@ -1 +1 @@
1
- {"version":3,"file":"e57-source.js","sourceRoot":"","sources":["../../src/streaming/e57-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"e57-source.js","sourceRoot":"","sources":["../../src/streaming/e57-source.ts"],"names":[],"mappings":"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"}