@ifc-lite/pointcloud 0.11.0 → 0.12.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/README.md +72 -0
- package/dist/copc/copc-hierarchy.d.ts +102 -0
- package/dist/copc/copc-hierarchy.d.ts.map +1 -0
- package/dist/copc/copc-hierarchy.js +210 -0
- package/dist/copc/copc-hierarchy.js.map +1 -0
- package/dist/copc/copc-info.d.ts +52 -0
- package/dist/copc/copc-info.d.ts.map +1 -0
- package/dist/copc/copc-info.js +147 -0
- package/dist/copc/copc-info.js.map +1 -0
- package/dist/copc/copc-reader.d.ts +60 -0
- package/dist/copc/copc-reader.d.ts.map +1 -0
- package/dist/copc/copc-reader.js +138 -0
- package/dist/copc/copc-reader.js.map +1 -0
- package/dist/copc/copc-worker-client.d.ts +37 -0
- package/dist/copc/copc-worker-client.d.ts.map +1 -0
- package/dist/copc/copc-worker-client.js +154 -0
- package/dist/copc/copc-worker-client.js.map +1 -0
- package/dist/copc/copc-worker-host.d.ts +11 -0
- package/dist/copc/copc-worker-host.d.ts.map +1 -0
- package/dist/copc/copc-worker-host.js +73 -0
- package/dist/copc/copc-worker-host.js.map +1 -0
- package/dist/formats/las.d.ts +1 -0
- package/dist/formats/las.d.ts.map +1 -1
- package/dist/formats/las.js +1 -1
- package/dist/formats/las.js.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/lod/copc-lod-tree.d.ts +15 -0
- package/dist/lod/copc-lod-tree.d.ts.map +1 -0
- package/dist/lod/copc-lod-tree.js +67 -0
- package/dist/lod/copc-lod-tree.js.map +1 -0
- package/dist/lod/frustum.d.ts +13 -0
- package/dist/lod/frustum.d.ts.map +1 -0
- package/dist/lod/frustum.js +38 -0
- package/dist/lod/frustum.js.map +1 -0
- package/dist/lod/pacer.d.ts +62 -0
- package/dist/lod/pacer.d.ts.map +1 -0
- package/dist/lod/pacer.js +56 -0
- package/dist/lod/pacer.js.map +1 -0
- package/dist/lod/select.d.ts +80 -0
- package/dist/lod/select.d.ts.map +1 -0
- package/dist/lod/select.js +155 -0
- package/dist/lod/select.js.map +1 -0
- package/dist/streaming/blob-source.d.ts +3 -2
- package/dist/streaming/blob-source.d.ts.map +1 -1
- package/dist/streaming/blob-source.js +2 -9
- package/dist/streaming/blob-source.js.map +1 -1
- package/dist/streaming/decode-worker.js +22 -0
- package/dist/streaming/decode-worker.js.map +1 -1
- package/dist/streaming/http-range-source.d.ts +47 -0
- package/dist/streaming/http-range-source.d.ts.map +1 -0
- package/dist/streaming/http-range-source.js +102 -0
- package/dist/streaming/http-range-source.js.map +1 -0
- package/dist/streaming/inline-worker.js +1 -1
- package/dist/streaming/laz-perf-loader.d.ts +58 -0
- package/dist/streaming/laz-perf-loader.d.ts.map +1 -0
- package/dist/streaming/laz-perf-loader.js +107 -0
- package/dist/streaming/laz-perf-loader.js.map +1 -0
- package/dist/streaming/laz-source.d.ts +0 -40
- package/dist/streaming/laz-source.d.ts.map +1 -1
- package/dist/streaming/laz-source.js +1 -94
- package/dist/streaming/laz-source.js.map +1 -1
- package/dist/streaming/protocol.d.ts +45 -0
- package/dist/streaming/protocol.d.ts.map +1 -1
- package/dist/streaming/protocol.js.map +1 -1
- package/dist/streaming/types.d.ts +14 -0
- package/dist/streaming/types.d.ts.map +1 -1
- package/dist/streaming/worker-client.d.ts +25 -0
- package/dist/streaming/worker-client.d.ts.map +1 -1
- package/dist/streaming/worker-client.js +12 -5
- package/dist/streaming/worker-client.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blob-source.js","sourceRoot":"","sources":["../../src/streaming/blob-source.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"blob-source.js","sourceRoot":"","sources":["../../src/streaming/blob-source.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAY/D,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,IAAU;QAAV,SAAI,GAAJ,IAAI,CAAM;IAAG,CAAC;IAE3C,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,GAAW,EAAE,MAAoB;QACzD,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,OAAO,IAAI,SAAS;YAAE,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;QACtC,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -20,8 +20,28 @@ self.onmessage = (event) => {
|
|
|
20
20
|
case 'abort':
|
|
21
21
|
handleAbort(msg.sourceId);
|
|
22
22
|
return;
|
|
23
|
+
case 'copc-open':
|
|
24
|
+
case 'copc-page':
|
|
25
|
+
case 'copc-node':
|
|
26
|
+
case 'copc-cancel':
|
|
27
|
+
void handleCopc(msg);
|
|
28
|
+
return;
|
|
23
29
|
}
|
|
24
30
|
};
|
|
31
|
+
/** COPC readers are closed by the same `close` message as stream sources. */
|
|
32
|
+
let closeCopcSource;
|
|
33
|
+
async function handleCopc(msg) {
|
|
34
|
+
try {
|
|
35
|
+
// Lazy like the format sources below: only COPC sessions load it.
|
|
36
|
+
const host = await import('../copc/copc-worker-host.js');
|
|
37
|
+
closeCopcSource = host.closeCopcSource;
|
|
38
|
+
await host.handleCopcRequest(msg, post, () => nextSourceId++);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
if (msg.kind !== 'copc-cancel')
|
|
42
|
+
post({ kind: 'error', requestId: msg.requestId, message: errMessage(err) });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
25
45
|
async function handleOpen(msg) {
|
|
26
46
|
// Hoisted so the catch below can release a source that was created
|
|
27
47
|
// (and possibly opened) but never made it into `sources` — see the
|
|
@@ -108,6 +128,8 @@ async function handleNext(msg) {
|
|
|
108
128
|
}
|
|
109
129
|
}
|
|
110
130
|
function handleClose(sourceId) {
|
|
131
|
+
if (closeCopcSource?.(sourceId))
|
|
132
|
+
return;
|
|
111
133
|
const open = sources.get(sourceId);
|
|
112
134
|
if (!open)
|
|
113
135
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode-worker.js","sourceRoot":"","sources":["../../src/streaming/decode-worker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"decode-worker.js","sourceRoot":"","sources":["../../src/streaming/decode-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `RangeByteSource` over HTTP Range requests (#6869).
|
|
3
|
+
*
|
|
4
|
+
* A COPC file is read a few kilobytes at a time: header, hierarchy pages,
|
|
5
|
+
* then only the octree nodes the camera needs. This source never falls back
|
|
6
|
+
* to downloading the whole file: a server that ignores `Range` (answers 200)
|
|
7
|
+
* is rejected, because silently streaming a multi-gigabyte body into memory
|
|
8
|
+
* is exactly what COPC exists to avoid.
|
|
9
|
+
*
|
|
10
|
+
* Every response is checked against what was asked: status 206, a
|
|
11
|
+
* `Content-Range` whose window matches the request, a body of that length,
|
|
12
|
+
* and a total size that does not change between requests (a file replaced
|
|
13
|
+
* mid-session would otherwise mix bytes from two versions).
|
|
14
|
+
*
|
|
15
|
+
* Cross-origin, `Content-Range` is readable only when the server lists it
|
|
16
|
+
* in `Access-Control-Expose-Headers`, and public buckets often do not (the
|
|
17
|
+
* PDAL/Hobu S3 samples, for one). Then the size comes from a HEAD request's
|
|
18
|
+
* `Content-Length` (CORS-safelisted) and each window is checked by status
|
|
19
|
+
* and exact body length instead.
|
|
20
|
+
*/
|
|
21
|
+
import type { RangeByteSource } from './types.js';
|
|
22
|
+
type FetchLike = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
23
|
+
export interface HttpRangeSourceOptions {
|
|
24
|
+
/** Defaults to the global `fetch`. */
|
|
25
|
+
fetch?: FetchLike;
|
|
26
|
+
/** Extra request headers (e.g. `Authorization`). `Range` is always set by the source. */
|
|
27
|
+
headers?: Record<string, string>;
|
|
28
|
+
/**
|
|
29
|
+
* Bytes fetched by `open()` and kept: the LAS header and leading VLRs of a
|
|
30
|
+
* COPC file fit in the default, so opening costs a single request.
|
|
31
|
+
*/
|
|
32
|
+
prefetchBytes?: number;
|
|
33
|
+
signal?: AbortSignal;
|
|
34
|
+
}
|
|
35
|
+
export declare class HttpRangeSource implements RangeByteSource {
|
|
36
|
+
private readonly url;
|
|
37
|
+
private readonly fetchImpl;
|
|
38
|
+
private readonly headers;
|
|
39
|
+
readonly size: number;
|
|
40
|
+
private readonly prefix;
|
|
41
|
+
private constructor();
|
|
42
|
+
/** Issue the first range request, learn the file size, keep the prefix. */
|
|
43
|
+
static open(url: string, options?: HttpRangeSourceOptions): Promise<HttpRangeSource>;
|
|
44
|
+
read(start: number, end: number, signal?: AbortSignal): Promise<Uint8Array>;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=http-range-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-range-source.d.ts","sourceRoot":"","sources":["../../src/streaming/http-range-source.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE1F,MAAM,WAAW,sBAAsB;IACrC,sCAAsC;IACtC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAkBD,qBAAa,eAAgB,YAAW,eAAe;IAEnD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO;IAQP,2EAA2E;WAC9D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,eAAe,CAAC;IAcxF,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CASlF"}
|
|
@@ -0,0 +1,102 @@
|
|
|
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
|
+
const DEFAULT_PREFETCH = 64 * 1024;
|
|
5
|
+
function parseContentRange(value) {
|
|
6
|
+
const m = value ? /^bytes (\d+)-(\d+)\/(\d+)$/i.exec(value.trim()) : null;
|
|
7
|
+
if (!m)
|
|
8
|
+
return null;
|
|
9
|
+
const [start, last, total] = [Number(m[1]), Number(m[2]), Number(m[3])];
|
|
10
|
+
if (![start, last, total].every(Number.isSafeInteger) || last < start || last >= total)
|
|
11
|
+
return null;
|
|
12
|
+
return { start, last, total };
|
|
13
|
+
}
|
|
14
|
+
export class HttpRangeSource {
|
|
15
|
+
url;
|
|
16
|
+
fetchImpl;
|
|
17
|
+
headers;
|
|
18
|
+
size;
|
|
19
|
+
prefix;
|
|
20
|
+
constructor(url, fetchImpl, headers, size, prefix) {
|
|
21
|
+
this.url = url;
|
|
22
|
+
this.fetchImpl = fetchImpl;
|
|
23
|
+
this.headers = headers;
|
|
24
|
+
this.size = size;
|
|
25
|
+
this.prefix = prefix;
|
|
26
|
+
}
|
|
27
|
+
/** Issue the first range request, learn the file size, keep the prefix. */
|
|
28
|
+
static async open(url, options = {}) {
|
|
29
|
+
const fetchImpl = options.fetch ?? ((input, init) => fetch(input, init));
|
|
30
|
+
const headers = options.headers ?? {};
|
|
31
|
+
const prefetch = Math.max(1, Math.floor(options.prefetchBytes ?? DEFAULT_PREFETCH));
|
|
32
|
+
const first = await rangeRequest(url, fetchImpl, headers, 0, prefetch, null, options.signal);
|
|
33
|
+
const total = first.total ?? await headContentLength(url, fetchImpl, headers, options.signal);
|
|
34
|
+
// Without Content-Range the prefix can only be trusted up to the size.
|
|
35
|
+
const expected = Math.min(prefetch, total);
|
|
36
|
+
if (first.bytes.length !== expected) {
|
|
37
|
+
throw new Error(`HTTP Range: body length ${first.bytes.length} does not match the requested ${expected} bytes`);
|
|
38
|
+
}
|
|
39
|
+
return new HttpRangeSource(url, fetchImpl, headers, total, first.bytes);
|
|
40
|
+
}
|
|
41
|
+
async read(start, end, signal) {
|
|
42
|
+
signal?.throwIfAborted();
|
|
43
|
+
const safeStart = Math.max(0, start);
|
|
44
|
+
const safeEnd = Math.min(end, this.size);
|
|
45
|
+
if (!(safeEnd > safeStart))
|
|
46
|
+
return new Uint8Array(0);
|
|
47
|
+
if (safeEnd <= this.prefix.length)
|
|
48
|
+
return this.prefix.slice(safeStart, safeEnd);
|
|
49
|
+
const res = await rangeRequest(this.url, this.fetchImpl, this.headers, safeStart, safeEnd, this.size, signal);
|
|
50
|
+
return res.bytes;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async function rangeRequest(url, fetchImpl, headers, start, end, expectedTotal, signal) {
|
|
54
|
+
signal?.throwIfAborted();
|
|
55
|
+
const response = await fetchImpl(url, {
|
|
56
|
+
headers: { ...headers, Range: `bytes=${start}-${end - 1}` },
|
|
57
|
+
signal,
|
|
58
|
+
});
|
|
59
|
+
if (response.status !== 206) {
|
|
60
|
+
// Cancel rather than drain: a 200 would otherwise stream the whole file.
|
|
61
|
+
await response.body?.cancel().catch((err) => {
|
|
62
|
+
console.warn('[HttpRangeSource] body cancel failed:', err);
|
|
63
|
+
});
|
|
64
|
+
throw new Error(`HTTP Range request for bytes ${start}-${end - 1} answered ${response.status}; `
|
|
65
|
+
+ 'the server must support Range requests (206 Partial Content) to stream this file');
|
|
66
|
+
}
|
|
67
|
+
const rawRange = response.headers.get('Content-Range');
|
|
68
|
+
if (rawRange === null) {
|
|
69
|
+
// Hidden by CORS (see the file header): fall back to an exact length check.
|
|
70
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
71
|
+
if (expectedTotal !== null && bytes.length !== end - start) {
|
|
72
|
+
throw new Error(`HTTP Range: body length ${bytes.length} does not match the requested ${end - start} bytes`);
|
|
73
|
+
}
|
|
74
|
+
return { bytes, total: null };
|
|
75
|
+
}
|
|
76
|
+
const range = parseContentRange(rawRange);
|
|
77
|
+
if (!range) {
|
|
78
|
+
throw new Error(`HTTP Range response has an invalid Content-Range header (${rawRange})`);
|
|
79
|
+
}
|
|
80
|
+
if (expectedTotal !== null && range.total !== expectedTotal) {
|
|
81
|
+
throw new Error(`HTTP Range: remote file size changed from ${expectedTotal} to ${range.total} bytes`);
|
|
82
|
+
}
|
|
83
|
+
// The server may only shorten the window at end of file.
|
|
84
|
+
const expectedLast = Math.min(end - 1, range.total - 1);
|
|
85
|
+
if (range.start !== start || range.last !== expectedLast) {
|
|
86
|
+
throw new Error(`HTTP Range: asked for bytes ${start}-${expectedLast}, Content-Range says ${range.start}-${range.last}`);
|
|
87
|
+
}
|
|
88
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
89
|
+
if (bytes.length !== range.last - range.start + 1) {
|
|
90
|
+
throw new Error(`HTTP Range: body length ${bytes.length} does not match Content-Range ${range.start}-${range.last}`);
|
|
91
|
+
}
|
|
92
|
+
return { bytes, total: range.total };
|
|
93
|
+
}
|
|
94
|
+
async function headContentLength(url, fetchImpl, headers, signal) {
|
|
95
|
+
const response = await fetchImpl(url, { method: 'HEAD', headers, signal });
|
|
96
|
+
const length = Number(response.headers.get('Content-Length'));
|
|
97
|
+
if (!response.ok || !Number.isSafeInteger(length) || length <= 0) {
|
|
98
|
+
throw new Error('HTTP Range: cannot determine the file size (no readable Content-Range or Content-Length)');
|
|
99
|
+
}
|
|
100
|
+
return length;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=http-range-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-range-source.js","sourceRoot":"","sources":["../../src/streaming/http-range-source.ts"],"names":[],"mappings":"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"}
|