@loaders.gl/pmtiles 4.0.0-beta.2 → 4.0.0-beta.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.
Files changed (39) hide show
  1. package/dist/{dist.min.js → dist.dev.js} +3645 -3305
  2. package/dist/index.cjs +182 -0
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/lib/parse-pmtiles.d.ts +6 -6
  6. package/dist/lib/parse-pmtiles.d.ts.map +1 -1
  7. package/dist/{esm/lib → lib}/parse-pmtiles.js +5 -1
  8. package/dist/lib/parse-pmtiles.js.map +1 -0
  9. package/dist/pmtiles-source.d.ts +20 -24
  10. package/dist/pmtiles-source.d.ts.map +1 -1
  11. package/dist/{esm/pmtiles-source.js → pmtiles-source.js} +23 -8
  12. package/dist/pmtiles-source.js.map +1 -0
  13. package/package.json +18 -10
  14. package/src/lib/parse-pmtiles.ts +9 -7
  15. package/src/pmtiles-source.ts +32 -28
  16. package/dist/bundle.d.ts +0 -2
  17. package/dist/bundle.d.ts.map +0 -1
  18. package/dist/es5/bundle.js +0 -6
  19. package/dist/es5/bundle.js.map +0 -1
  20. package/dist/es5/index.js +0 -13
  21. package/dist/es5/index.js.map +0 -1
  22. package/dist/es5/lib/parse-pmtiles.js +0 -126
  23. package/dist/es5/lib/parse-pmtiles.js.map +0 -1
  24. package/dist/es5/lib/sources.js +0 -2
  25. package/dist/es5/lib/sources.js.map +0 -1
  26. package/dist/es5/pmtiles-source.js +0 -289
  27. package/dist/es5/pmtiles-source.js.map +0 -1
  28. package/dist/esm/bundle.js +0 -4
  29. package/dist/esm/bundle.js.map +0 -1
  30. package/dist/esm/index.js +0 -2
  31. package/dist/esm/index.js.map +0 -1
  32. package/dist/esm/lib/parse-pmtiles.js.map +0 -1
  33. package/dist/esm/lib/sources.js +0 -2
  34. package/dist/esm/lib/sources.js.map +0 -1
  35. package/dist/esm/pmtiles-source.js.map +0 -1
  36. package/dist/lib/sources.d.ts +0 -1
  37. package/dist/lib/sources.d.ts.map +0 -1
  38. package/src/bundle.ts +0 -4
  39. package/src/lib/sources.ts +0 -150
@@ -1,150 +0,0 @@
1
- /*
2
- import {fetchFile} from '@loaders.gl/core';
3
-
4
- import {Source as PMTilesSource, RangeResponse} from 'pmtiles';
5
-
6
- /** @note "source" here is a PMTiles library type, referring to *
7
- export function makeSource(data: string | Blob, fetch?) {
8
- if (typeof data === 'string') {
9
- return new FetchSource(data, fetch);
10
- }
11
- if (data instanceof Blob) {
12
- const url = '';
13
- return new BlobSource(data, url);
14
- }
15
- }
16
-
17
- export class BlobSource implements PMTilesSource {
18
- blob: Blob;
19
- key: string;
20
-
21
- constructor(blob: Blob, key: string) {
22
- this.blob = blob;
23
- this.key = key;
24
- }
25
-
26
- // TODO - how is this used?
27
- getKey() {
28
- return this.blob.url || '';
29
- }
30
-
31
- async getBytes(offset: number, length: number, signal?: AbortSignal): Promise<RangeResponse> {
32
- const data = await this.blob.arrayBuffer();
33
- return {
34
- data
35
- // etag: response.headers.get('ETag') || undefined,
36
- // cacheControl: response.headers.get('Cache-Control') || undefined,
37
- // expires: response.headers.get('Expires') || undefined
38
- };
39
- }
40
- }
41
-
42
- export class FetchSource implements PMTilesSource {
43
- url: string;
44
- fetch;
45
-
46
- constructor(url: string, fetch = fetchFile) {
47
- this.url = url;
48
- this.fetch = fetch;
49
- }
50
-
51
- // TODO - how is this used?
52
- getKey() {
53
- return this.url;
54
- }
55
-
56
- async getBytes(offset: number, length: number, signal?: AbortSignal): Promise<RangeResponse> {
57
- let controller;
58
- if (!signal) {
59
- // ToDO why is it so important to abort in case 200?
60
- // TODO check this works or assert 206
61
- controller = new AbortController();
62
- signal = controller.signal;
63
- }
64
-
65
- let response = await fetch(this.url, {
66
- signal,
67
- headers: {Range: `bytes=${offset}-${offset + length - 1}`}
68
- });
69
-
70
- switch (response.status) {
71
- case 206: // Partial Content success
72
- // This is the expected success code for a range request
73
- break;
74
-
75
- case 200:
76
- // some well-behaved backends, e.g. DigitalOcean CDN, respond with 200 instead of 206
77
- // but we also need to detect no support for Byte Serving which is returning the whole file
78
- const content_length = response.headers.get('Content-Length');
79
- if (!content_length || Number(content_length) > length) {
80
- if (controller) {
81
- controller.abort();
82
- }
83
- throw Error(
84
- 'content-length header missing or exceeding request. Server must support HTTP Byte Serving.'
85
- );
86
- }
87
-
88
- case 416: // "Range Not Satisfiable"
89
- // some HTTP servers don't accept ranges beyond the end of the resource.
90
- // Retry with the exact length
91
- // TODO: can return 416 with offset > 0 if content changed, which will have a blank etag.
92
- // See https://github.com/protomaps/PMTiles/issues/90
93
- if (offset === 0) {
94
- const content_range = response.headers.get('Content-Range');
95
- if (!content_range || !content_range.startsWith('bytes *')) {
96
- throw Error('Missing content-length on 416 response');
97
- }
98
- const actual_length = Number(content_range.substr(8));
99
- response = await fetch(this.url, {
100
- signal,
101
- headers: {Range: `bytes=0-${actual_length - 1}`}
102
- });
103
- }
104
- break;
105
-
106
- default:
107
- if (response.status >= 300) {
108
- throw Error(`Bad response code: ${response.status}`);
109
- }
110
- }
111
-
112
- const data = await response.arrayBuffer();
113
- return {
114
- data,
115
- etag: response.headers.get('ETag') || undefined,
116
- cacheControl: response.headers.get('Cache-Control') || undefined,
117
- expires: response.headers.get('Expires') || undefined
118
- };
119
- }
120
- }
121
-
122
- /*
123
- class TestNodeFileSource implements Source {
124
- buffer: ArrayBuffer;
125
- path: string;
126
- key: string;
127
- etag?: string;
128
-
129
- constructor(path: string, key: string) {
130
- this.path = path;
131
- this.buffer = fs.readFileSync(path);
132
- this.key = key;
133
- }
134
-
135
- getKey() {
136
- return this.key;
137
- }
138
-
139
- replaceData(path: string) {
140
- this.path = path;
141
- this.buffer = fs.readFileSync(path);
142
- }
143
-
144
- async getBytes(offset: number, length: number): Promise<RangeResponse> {
145
- const slice = new Uint8Array(this.buffer.slice(offset, offset + length))
146
- .buffer;
147
- return { data: slice, etag: this.etag };
148
- }
149
- }
150
- */