@basemaps/config-loader 7.1.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.
Files changed (35) hide show
  1. package/LICENSE +21 -0
  2. package/build/index.d.ts +2 -0
  3. package/build/index.js +3 -0
  4. package/build/index.js.map +1 -0
  5. package/build/json/__tests__/config.loader.test.d.ts +1 -0
  6. package/build/json/__tests__/config.loader.test.js +105 -0
  7. package/build/json/__tests__/config.loader.test.js.map +1 -0
  8. package/build/json/__tests__/tiff.config.test.d.ts +1 -0
  9. package/build/json/__tests__/tiff.config.test.js +53 -0
  10. package/build/json/__tests__/tiff.config.test.js.map +1 -0
  11. package/build/json/__tests__/tiff.load.test.d.ts +1 -0
  12. package/build/json/__tests__/tiff.load.test.js +143 -0
  13. package/build/json/__tests__/tiff.load.test.js.map +1 -0
  14. package/build/json/imagery.config.cache.d.ts +7 -0
  15. package/build/json/imagery.config.cache.js +45 -0
  16. package/build/json/imagery.config.cache.js.map +1 -0
  17. package/build/json/json.config.d.ts +39 -0
  18. package/build/json/json.config.js +319 -0
  19. package/build/json/json.config.js.map +1 -0
  20. package/build/json/log.d.ts +17 -0
  21. package/build/json/log.js +2 -0
  22. package/build/json/log.js.map +1 -0
  23. package/build/json/parse.provider.d.ts +149 -0
  24. package/build/json/parse.provider.js +31 -0
  25. package/build/json/parse.provider.js.map +1 -0
  26. package/build/json/parse.style.d.ts +30 -0
  27. package/build/json/parse.style.js +13 -0
  28. package/build/json/parse.style.js.map +1 -0
  29. package/build/json/parse.tile.set.d.ts +252 -0
  30. package/build/json/parse.tile.set.js +47 -0
  31. package/build/json/parse.tile.set.js.map +1 -0
  32. package/build/json/tiff.config.d.ts +113 -0
  33. package/build/json/tiff.config.js +430 -0
  34. package/build/json/tiff.config.js.map +1 -0
  35. package/package.json +36 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Crown copyright (c), Toitū Te Whenua Land Information New Zealand on behalf of the New Zealand Government.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,2 @@
1
+ export { ConfigJson, isEmptyTiff } from './json/json.config.js';
2
+ export { ConfigImageryTiff, initConfigFromUrls, initImageryFromTiffUrl } from './json/tiff.config.js';
package/build/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { ConfigJson, isEmptyTiff } from './json/json.config.js';
2
+ export { initConfigFromUrls, initImageryFromTiffUrl } from './json/tiff.config.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAqB,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,105 @@
1
+ import assert from 'node:assert';
2
+ import { before, beforeEach, describe, it } from 'node:test';
3
+ import { ConfigProviderMemory } from '@basemaps/config';
4
+ import { fsa, FsMemory, SourceMemory, Tiff } from '@basemaps/shared';
5
+ import { getTiffTagSize, TiffTag } from '@cogeotiff/core';
6
+ import { matchUri } from '../json.config.js';
7
+ import { getImageryName, initConfigFromUrls } from '../tiff.config.js';
8
+ const simpleTiff = new URL('../../../../__tests__/static/rgba8_tiled.tiff', import.meta.url);
9
+ describe('config import', () => {
10
+ const fsMemory = new FsMemory();
11
+ before(() => fsa.register('memory://', fsMemory));
12
+ beforeEach(() => fsMemory.files.clear());
13
+ it('should load tiff from filesystem', async () => {
14
+ const buf = await fsa.read(simpleTiff);
15
+ await fsa.write(new URL('memory://tiffs/tile-tiff-name/tiff-a.tiff'), buf);
16
+ const cfg = new ConfigProviderMemory();
17
+ const ret = await initConfigFromUrls(cfg, [new URL('memory://tiffs/tile-tiff-name')]);
18
+ assert.equal(ret.imagery.length, 1);
19
+ const imagery = ret.imagery[0];
20
+ assert.equal(imagery.name, 'tile-tiff-name');
21
+ assert.deepEqual(imagery.files, [{ name: 'tiff-a.tiff', x: 0, y: -64, width: 64, height: 64 }]);
22
+ assert.deepEqual(imagery.bands, ['uint8', 'uint8', 'uint8', 'uint8']);
23
+ assert.equal(imagery.noData, undefined);
24
+ });
25
+ it('should skip empty tiffs from filesystem', async () => {
26
+ const buf = await fsa.read(simpleTiff);
27
+ await fsa.write(new URL('memory://tiffs/tile-tiff-name/tiff-a.tiff'), buf);
28
+ const tiff = await Tiff.create(new SourceMemory('memory://', buf));
29
+ // Fun tiff hacking, find all the tileOffset and tileByteCount arrays and set them all to 0!
30
+ const emptyTiff = Buffer.from(buf);
31
+ for (const tagId of [TiffTag.TileByteCounts, TiffTag.TileOffsets]) {
32
+ for (const img of tiff.images) {
33
+ await img.fetch(tagId);
34
+ const tagObj = img.tags.get(tagId);
35
+ if (tagObj == null)
36
+ throw new Error('Failed to load tag: ' + tagId);
37
+ const dataSize = getTiffTagSize(tagObj.dataType);
38
+ const dataOffset = tagObj.type === 'offset' ? tagObj.dataOffset : tagObj.tagOffset + 4 + tiff.ifdConfig.pointer;
39
+ for (let i = 0; i < tagObj.count * dataSize; i++)
40
+ emptyTiff[dataOffset + i] = 0;
41
+ }
42
+ }
43
+ const tiffB = await Tiff.create(new SourceMemory('memory://', emptyTiff));
44
+ // No images should have offsets
45
+ for (const img of tiffB.images) {
46
+ await img.fetch(TiffTag.TileOffsets);
47
+ const value = img.tileOffset.value.find((f) => f > 0);
48
+ assert.equal(value, undefined);
49
+ }
50
+ await fsa.write(new URL('memory://tiffs/tile-tiff-name/tiff-b.tiff'), emptyTiff);
51
+ const cfg = new ConfigProviderMemory();
52
+ const ret = await initConfigFromUrls(cfg, [new URL('memory://tiffs/tile-tiff-name')]);
53
+ assert.equal(ret.imagery.length, 1);
54
+ const imagery = ret.imagery[0];
55
+ assert.equal(imagery.name, 'tile-tiff-name');
56
+ assert.deepEqual(imagery.files, [{ name: 'tiff-a.tiff', x: 0, y: -64, width: 64, height: 64 }]);
57
+ });
58
+ it('should create multiple imagery layers from multiple folders', async () => {
59
+ const buf = await fsa.read(simpleTiff);
60
+ await fsa.write(new URL('memory://tiffs/tile-tiff-a/tiff-a.tiff'), buf);
61
+ await fsa.write(new URL('memory://tiffs/tile-tiff-b/tiff-b.tiff'), buf);
62
+ const cfg = new ConfigProviderMemory();
63
+ const ret = await initConfigFromUrls(cfg, [
64
+ new URL('memory://tiffs/tile-tiff-a'),
65
+ new URL('memory://tiffs/tile-tiff-b/'),
66
+ ]);
67
+ assert.equal(ret.imagery.length, 2);
68
+ assert.equal(ret.imagery[0].name, 'tile-tiff-a');
69
+ assert.deepEqual(ret.imagery[0].files, [{ name: 'tiff-a.tiff', x: 0, y: -64, width: 64, height: 64 }]);
70
+ assert.equal(ret.imagery[1].name, 'tile-tiff-b');
71
+ assert.deepEqual(ret.imagery[1].files, [{ name: 'tiff-b.tiff', x: 0, y: -64, width: 64, height: 64 }]);
72
+ assert.equal(ret.tileSet.layers.length, 2);
73
+ assert.equal(ret.tileSet.layers[0][3857], ret.imagery[0].id);
74
+ assert.equal(ret.tileSet.layers[0].name, ret.imagery[0].name);
75
+ assert.equal(ret.tileSet.layers[1][3857], ret.imagery[1].id);
76
+ assert.equal(ret.tileSet.layers[1].name, ret.imagery[1].name);
77
+ });
78
+ it('should load tiff from filesystem with projection and imagery type in name', async () => {
79
+ const buf = await fsa.read(simpleTiff);
80
+ await fsa.write(new URL('memory://tiffs/tile-tiff-name/2193/rgb/tiff-a.tiff'), buf);
81
+ const cfg = new ConfigProviderMemory();
82
+ const ret = await initConfigFromUrls(cfg, [new URL('memory://tiffs/tile-tiff-name/2193/rgb/')]);
83
+ assert.equal(ret.imagery.length, 1);
84
+ const imagery = ret.imagery[0];
85
+ assert.equal(imagery.name, 'tile-tiff-name');
86
+ assert.deepEqual(imagery.files, [{ name: 'tiff-a.tiff', x: 0, y: -64, width: 64, height: 64 }]);
87
+ });
88
+ it('should ignore 2193 and rgb from imagery names', () => {
89
+ assert.equal(getImageryName(new URL('s3://linz-imagery/auckland/auckland_sn5600_1979_0.375m/2193/rgb/')), 'auckland_sn5600_1979_0.375m');
90
+ assert.equal(getImageryName(new URL('s3://linz-imagery/auckland/auckland_sn5600_1979_0.375m/2193/rgbi/')), 'auckland_sn5600_1979_0.375m');
91
+ assert.equal(getImageryName(new URL('s3://linz-imagery/auckland/auckland_sn5600_1979_0.375m/2193/dem_1m/')), 'auckland_sn5600_1979_0.375m');
92
+ assert.equal(getImageryName(new URL('s3://linz-imagery/auckland/auckland_sn5600_1979_0.375m/2193/dsm_1m/')), 'auckland_sn5600_1979_0.375m');
93
+ assert.equal(getImageryName(new URL('s3://linz-imagery/auckland/auckland_sn5600_1979_0.375m/3857/dsm_1m/')), 'auckland_sn5600_1979_0.375m');
94
+ assert.equal(getImageryName(new URL('s3://linz-imagery/auckland/auckland_sn5600_1979_0.375m/3857/DSM_1m/')), 'auckland_sn5600_1979_0.375m');
95
+ });
96
+ it('should ignore argo folder names', () => {
97
+ assert.equal(getImageryName(new URL('s3://linz-workflow-artifacts/2023-09/05-ecan-banks-peninsula-original-9mjdj/flat/')), '05-ecan-banks-peninsula-original-9mjdj');
98
+ assert.equal(getImageryName(new URL('s3://linz-workflows-scratch/2023-09/05-ecan-banks-peninsula-original-9mjdj/flat/')), '05-ecan-banks-peninsula-original-9mjdj');
99
+ });
100
+ it('should match uris with trailing slashes or macros', () => {
101
+ assert(matchUri('s3://linz-basemaps/3857/ōtorohanga_urban_2021_0-1m_RGB/01FYWKATAEK2ZTJQ2PX44Y0XNT/', 's3://linz-basemaps/3857/%C5%8Dtorohanga_urban_2021_0-1m_RGB/01FYWKATAEK2ZTJQ2PX44Y0XNT/'));
102
+ assert(matchUri('s3://linz-basemaps/3857/ōtorohanga_urban_2021_0-1m_RGB/01FYWKATAEK2ZTJQ2PX44Y0XNT/', 's3://linz-basemaps/3857/ōtorohanga_urban_2021_0-1m_RGB/01FYWKATAEK2ZTJQ2PX44Y0XNT'));
103
+ });
104
+ });
105
+ //# sourceMappingURL=config.loader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.loader.test.js","sourceRoot":"","sources":["../../../src/json/__tests__/config.loader.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,53 @@
1
+ import assert from 'node:assert';
2
+ import { afterEach, beforeEach, describe, it } from 'node:test';
3
+ import { fsa, FsMemory } from '@basemaps/shared';
4
+ import { isRgbOrRgba, loadStacFromURL } from '../tiff.config.js';
5
+ describe('loadStacFromURL', () => {
6
+ const mem = new FsMemory();
7
+ beforeEach(() => fsa.register('memory://', mem));
8
+ afterEach(() => mem.files.clear());
9
+ it('should load a json document', async () => {
10
+ await mem.write(new URL('memory://foo/imagery/collection.json'), JSON.stringify({ hello: 'world' }));
11
+ const result = await loadStacFromURL(new URL('memory://foo/imagery/'));
12
+ assert.deepEqual(result, { hello: 'world' });
13
+ });
14
+ it('should load from trailing slash', async () => {
15
+ await mem.write(new URL('memory://foo/imagery/collection.json'), JSON.stringify({ hello: 'world' }));
16
+ const result = await loadStacFromURL(new URL('memory://foo/imagery'));
17
+ assert.deepEqual(result, { hello: 'world' });
18
+ });
19
+ it('should load from prefixes', async () => {
20
+ await mem.write(new URL('memory://foo/collection.json'), JSON.stringify({ foo: 'bar' }));
21
+ const result = await loadStacFromURL(new URL('memory://foo/imagery'));
22
+ assert.deepEqual(result, { foo: 'bar' });
23
+ });
24
+ it('should prioritize loading from more specific locations', async () => {
25
+ await mem.write(new URL('memory://foo/imagery/collection.json'), JSON.stringify({ hello: 'world' }));
26
+ await mem.write(new URL('memory://foo/collection.json'), JSON.stringify({ hello: 'Bar' }));
27
+ const result = await loadStacFromURL(new URL('memory://foo/imagery'));
28
+ assert.deepEqual(result, { hello: 'world' });
29
+ });
30
+ });
31
+ describe('isRgbOrRgba', () => {
32
+ const uint8 = 'uint8';
33
+ it('should allow imagery with no band information', () => {
34
+ assert.equal(isRgbOrRgba({}), true);
35
+ });
36
+ it('should allow 3 or 4 band imagery', () => {
37
+ assert.equal(isRgbOrRgba({ bands: [uint8, uint8, uint8] }), true);
38
+ assert.equal(isRgbOrRgba({ bands: [uint8, uint8, uint8, uint8] }), true);
39
+ });
40
+ it('should not allow 1,2,5,6 band imagery', () => {
41
+ assert.equal(isRgbOrRgba({ bands: [uint8] }), false);
42
+ assert.equal(isRgbOrRgba({ bands: [uint8, uint8] }), false);
43
+ assert.equal(isRgbOrRgba({ bands: [uint8, uint8, uint8, uint8, uint8] }), false);
44
+ assert.equal(isRgbOrRgba({ bands: [uint8, uint8, uint8, uint8, uint8, uint8] }), false);
45
+ });
46
+ it('should not allow float32 imagery', () => {
47
+ assert.equal(isRgbOrRgba({ bands: [uint8, uint8, uint8, 'float32'] }), false);
48
+ });
49
+ it('should not allow uint16', () => {
50
+ assert.equal(isRgbOrRgba({ bands: [uint8, uint8, uint8, 'uint16'] }), false);
51
+ });
52
+ });
53
+ //# sourceMappingURL=tiff.config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiff.config.test.js","sourceRoot":"","sources":["../../../src/json/__tests__/tiff.config.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEjE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC3B,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IACjD,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACnC,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,sCAAsC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAErG,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,SAAS,CAAC,MAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,sCAAsC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAErG,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,SAAS,CAAC,MAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,8BAA8B,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAEzF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,SAAS,CAAC,MAAiB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,sCAAsC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACrG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,8BAA8B,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAE3F,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,SAAS,CAAC,MAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC;IACtB,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAmB,CAAC,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAmB,CAAC,EAAE,IAAI,CAAC,CAAC;QACnF,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAmB,CAAC,EAAE,IAAI,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAmB,CAAC,EAAE,KAAK,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,EAAmB,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAmB,CAAC,EAAE,KAAK,CAAC,CAAC;QAClG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAmB,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAmB,CAAC,EAAE,KAAK,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAmB,CAAC,EAAE,KAAK,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,143 @@
1
+ import assert from 'node:assert';
2
+ import { before, describe, it } from 'node:test';
3
+ import { DefaultTerrainRgbOutput } from '@basemaps/config';
4
+ import { fsa, FsMemory, LogConfig } from '@basemaps/shared';
5
+ import pLimit from 'p-limit';
6
+ import { ConfigJson } from '../json.config.js';
7
+ describe('tiff-loader', () => {
8
+ const stac = {
9
+ id: 'stac_id',
10
+ title: 'stac_title',
11
+ };
12
+ before(async () => {
13
+ // Write some test tiffs
14
+ const mem = new FsMemory();
15
+ const tmp = new FsMemory();
16
+ fsa.register('source://', mem);
17
+ fsa.register('tmp://', tmp);
18
+ const rgbaTiff = new URL('../../../../__tests__/static/rgba8.google.tiff', import.meta.url);
19
+ await fsa.write(new URL('source://source/rgba8/google.tiff'), await fsa.read(rgbaTiff));
20
+ const demTiff = new URL('../../../../__tests__/static/abel-tasman-and-golden-bay_2016_dem_1m_BP25_10000_0404.tiff', import.meta.url);
21
+ await fsa.write(new URL('source://source/dem/google.tiff'), await fsa.read(demTiff));
22
+ await fsa.write(new URL('source://source/stac/01HQ99T8C965EXQM58WF6B6CJ0/collection.json'), JSON.stringify(stac));
23
+ await fsa.write(new URL('source://source/stac/01HQ99T8C965EXQM58WF6B6CJ0/google.tiff'), await fsa.read(rgbaTiff));
24
+ });
25
+ it('should load a config with a example image', async () => {
26
+ const ts = {
27
+ id: 'ts_google',
28
+ type: 'raster',
29
+ title: 'GoogleExample',
30
+ layers: [{ 3857: 'source://source/rgba8/', title: 'google_title', name: 'google_name' }],
31
+ };
32
+ const cfgUrl = new URL('tmp://config/ts_google.json');
33
+ await fsa.write(cfgUrl, JSON.stringify(ts));
34
+ const cfg = await ConfigJson.fromUrl(cfgUrl, pLimit(10), LogConfig.get());
35
+ assert.equal(cfg.objects.size, 2, [...cfg.objects.values()].map((m) => m.id).join(', ')); // Should be a im_ and ts_
36
+ const tsGoogle = await cfg.TileSet.get('ts_google');
37
+ assert.ok(tsGoogle);
38
+ assert.equal(tsGoogle.title, 'GoogleExample');
39
+ assert.equal(tsGoogle.format, 'webp');
40
+ assert.equal(tsGoogle.layers.length, 1);
41
+ const layerOne = tsGoogle?.layers[0];
42
+ assert.ok(layerOne);
43
+ const imgId = layerOne[3857];
44
+ assert.ok(imgId);
45
+ const img = await cfg.Imagery.get(imgId);
46
+ assert.ok(img);
47
+ assert.equal(img.files.length, 1);
48
+ assert.deepEqual(img.bands, ['uint8', 'uint8', 'uint8', 'uint8']);
49
+ });
50
+ it('should load a config with a stac collection', async () => {
51
+ const ts = {
52
+ id: 'ts_google',
53
+ type: 'raster',
54
+ title: 'GoogleExample',
55
+ layers: [
56
+ { 3857: 'source://source/stac/01HQ99T8C965EXQM58WF6B6CJ0/', title: 'google_title', name: 'google_name' },
57
+ ],
58
+ };
59
+ const cfgUrl = new URL('tmp://config/ts_google.json');
60
+ await fsa.write(cfgUrl, JSON.stringify(ts));
61
+ const cfg = await ConfigJson.fromUrl(cfgUrl, pLimit(10), LogConfig.get());
62
+ assert.equal(cfg.objects.size, 2, [...cfg.objects.values()].map((m) => m.id).join(', ')); // Should be a im_ and ts_
63
+ const tsGoogle = await cfg.TileSet.get('ts_google');
64
+ assert.ok(tsGoogle);
65
+ assert.equal(tsGoogle.title, 'GoogleExample');
66
+ assert.equal(tsGoogle.format, 'webp');
67
+ assert.equal(tsGoogle.layers.length, 1);
68
+ const layerOne = tsGoogle?.layers[0];
69
+ assert.ok(layerOne);
70
+ const imgId = layerOne[3857];
71
+ assert.ok(imgId);
72
+ assert.equal(imgId, 'im_01HQ99T8C965EXQM58WF6B6CJ0');
73
+ const img = await cfg.Imagery.get(imgId);
74
+ assert.ok(img);
75
+ assert.equal(img.files.length, 1);
76
+ assert.deepEqual(img.bands, ['uint8', 'uint8', 'uint8', 'uint8']);
77
+ });
78
+ it('should load a one band float32 collection', async () => {
79
+ const ts = {
80
+ id: 'ts_dem',
81
+ type: 'raster',
82
+ title: 'GoogleExample',
83
+ layers: [{ 3857: 'source://source/dem/', title: 'elevation-title', name: 'elevation-name' }],
84
+ outputs: [DefaultTerrainRgbOutput],
85
+ };
86
+ const cfgUrl = new URL('tmp://config/ts_google.json');
87
+ await fsa.write(cfgUrl, JSON.stringify(ts));
88
+ const cfg = await ConfigJson.fromUrl(cfgUrl, pLimit(10), LogConfig.get());
89
+ assert.equal(cfg.objects.size, 2, [...cfg.objects.values()].map((m) => m.id).join(', ')); // Should be a im_ and ts_
90
+ const tsGoogle = await cfg.TileSet.get('ts_dem');
91
+ assert.ok(tsGoogle);
92
+ assert.equal(tsGoogle.title, 'GoogleExample');
93
+ assert.equal(tsGoogle.format, 'webp');
94
+ assert.equal(tsGoogle.layers.length, 1);
95
+ assert.ok(tsGoogle.type === 'raster');
96
+ assert.equal(tsGoogle.outputs?.length, 1);
97
+ assert.deepEqual(tsGoogle.outputs, [DefaultTerrainRgbOutput]);
98
+ const layerOne = tsGoogle?.layers[0];
99
+ assert.ok(layerOne);
100
+ const imgId = layerOne[3857];
101
+ assert.ok(imgId);
102
+ const img = await cfg.Imagery.get(imgId);
103
+ assert.ok(img);
104
+ assert.equal(img.files.length, 1);
105
+ assert.deepEqual(img.bands, ['float32']);
106
+ cfg.createVirtualTileSets();
107
+ const ids = [imgId.replace('im_', 'ts_'), 'ts_' + img.name];
108
+ for (const id of ids) {
109
+ // Virtual tilesets should have outputs generated
110
+ const tsIm = await cfg.TileSet.get(id);
111
+ assert.ok(tsIm, id);
112
+ assert.ok(tsIm.type === 'raster', id);
113
+ assert.ok(tsIm.virtual, id);
114
+ assert.equal(tsIm.outputs?.length, 2, id);
115
+ assert.ok(tsIm.outputs?.find((f) => f.name === 'terrain-rgb'), id);
116
+ assert.ok(tsIm.outputs?.find((f) => f.name === 'color-ramp'), id);
117
+ }
118
+ const tsAll = await cfg.TileSet.get('ts_all');
119
+ assert.ok(tsAll, 'ts_all');
120
+ // DEM/DSM layers should not be present in `ts_all` (TODO: where should they be stored)
121
+ assert.equal(tsAll.layers.length, 0, 'ts_all');
122
+ });
123
+ it('should load a with a cache', async () => {
124
+ const ts = {
125
+ id: 'ts_dem',
126
+ type: 'raster',
127
+ title: 'GoogleExample',
128
+ layers: [{ 3857: 'source://source/dem/', title: 'elevation-title', name: 'elevation-name' }],
129
+ outputs: [DefaultTerrainRgbOutput],
130
+ };
131
+ const cfgUrl = new URL('tmp://config/ts_google.json');
132
+ await fsa.write(cfgUrl, JSON.stringify(ts));
133
+ await ConfigJson.fromUrl(cfgUrl, pLimit(10), LogConfig.get(), new URL('tmp://cache/'));
134
+ const files = await fsa.toArray(fsa.details(fsa.toUrl('tmp://cache/')));
135
+ assert.equal(files.length, 1);
136
+ const data = await fsa.readJson(files[0].url);
137
+ assert.equal(data.name, 'dem');
138
+ await ConfigJson.fromUrl(cfgUrl, pLimit(10), LogConfig.get(), new URL('tmp://cache/'));
139
+ const filesB = await fsa.toArray(fsa.details(fsa.toUrl('tmp://cache/')));
140
+ assert.equal(filesB.length, 1);
141
+ });
142
+ });
143
+ //# sourceMappingURL=tiff.load.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiff.load.test.js","sourceRoot":"","sources":["../../../src/json/__tests__/tiff.load.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { LogType } from '@basemaps/shared';
3
+ import { FileInfo } from '@chunkd/fs';
4
+ import { ConfigImageryTiff } from './tiff.config.js';
5
+ export declare const ConfigCacheVersion = "V1";
6
+ export declare function getCachedImageryConfig(sourceFiles: FileInfo[], cacheLocation?: URL, log?: LogType): Promise<ConfigImageryTiff | null>;
7
+ export declare function writeCachedImageryConfig(sourceFiles: FileInfo[], config: ConfigImageryTiff, cacheLocation?: URL): Promise<void>;
@@ -0,0 +1,45 @@
1
+ import { promisify } from 'node:util';
2
+ import { gzip } from 'node:zlib';
3
+ import { sha256base58 } from '@basemaps/config';
4
+ import { fsa } from '@basemaps/shared';
5
+ export const ConfigCacheVersion = `V1`; // TODO this could just be the config packageJson ?
6
+ const gzipPromise = promisify(gzip);
7
+ /**
8
+ * Create a config cache key based off the source files, location, size and last modified times
9
+ *
10
+ * @example
11
+ * ```
12
+ * YYYY-MM/proto_hostname/hashKey.json.gz
13
+ * 2034-04/s3_linz-imagery/Ci4chK59behxsGZq6TaUde5DoVb7jTxhyaZ44j4wBnCb.json.gz
14
+ * ```
15
+ *
16
+ * @param sourceFiles
17
+ * @param cacheLocation
18
+ *
19
+ * @returns a unique config location
20
+ */
21
+ function getCacheKey(sourceFiles, cacheLocation) {
22
+ const configKey = ConfigCacheVersion + sourceFiles.map((m) => `${m.url.href}::${m.size}::${m.lastModified}`).join('\n');
23
+ // create a config hash based on the YYYY-MM/proto_hostname/hashKey.json.gz
24
+ const datePart = new Date().toISOString().slice(0, 7);
25
+ const protoPart = cacheLocation.protocol.replace(':', ''); // convert file: into file
26
+ const configKeyHash = [datePart, `${protoPart}_${sha256base58(configKey)}_.json.gz`].join('/');
27
+ return new URL(configKeyHash, cacheLocation);
28
+ }
29
+ export async function getCachedImageryConfig(sourceFiles, cacheLocation, log) {
30
+ if (cacheLocation == null)
31
+ return null;
32
+ const cacheKey = getCacheKey(sourceFiles, cacheLocation);
33
+ const previousVersion = await fsa.readJson(cacheKey).catch(() => null);
34
+ if (previousVersion == null)
35
+ return null;
36
+ log?.info({ title: previousVersion.title, imageryName: previousVersion.name, files: previousVersion.files.length, cacheKey }, 'Tiff:Loaded:Cache');
37
+ return previousVersion;
38
+ }
39
+ export async function writeCachedImageryConfig(sourceFiles, config, cacheLocation) {
40
+ if (cacheLocation == null)
41
+ return;
42
+ const cacheKey = getCacheKey(sourceFiles, cacheLocation);
43
+ await fsa.write(cacheKey, await gzipPromise(JSON.stringify(config))).catch(() => null);
44
+ }
45
+ //# sourceMappingURL=imagery.config.cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imagery.config.cache.js","sourceRoot":"","sources":["../../src/json/imagery.config.cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,GAAG,EAAW,MAAM,kBAAkB,CAAC;AAKhD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,mDAAmD;AAE3F,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAEpC;;;;;;;;;;;;;GAaG;AACH,SAAS,WAAW,CAAC,WAAuB,EAAE,aAAkB;IAC9D,MAAM,SAAS,GACb,kBAAkB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxG,2EAA2E;IAE3E,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,0BAA0B;IACrF,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,GAAG,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/F,OAAO,IAAI,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAuB,EACvB,aAAmB,EACnB,GAAa;IAEb,IAAI,aAAa,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAoB,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAE1F,IAAI,eAAe,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACzC,GAAG,EAAE,IAAI,CACP,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,EAClH,mBAAmB,CACpB,CAAC;IACF,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,WAAuB,EACvB,MAAyB,EACzB,aAAmB;IAEnB,IAAI,aAAa,IAAI,IAAI;QAAE,OAAO;IAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACzD,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACzF,CAAC"}
@@ -0,0 +1,39 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ import { ConfigImagery, ConfigImageryOverview, ConfigProvider, ConfigProviderMemory, ConfigTileSet, ConfigVectorStyle } from '@basemaps/config';
3
+ import { TileMatrixSet } from '@basemaps/geo';
4
+ import { Tiff } from '@basemaps/shared';
5
+ import { LimitFunction } from 'p-limit';
6
+ import { LogType } from './log.js';
7
+ export declare function matchUri(a: string, b: string): boolean;
8
+ export declare function guessIdFromUri(uri: string): string | null;
9
+ /**
10
+ * Check to see if this tiff has any data
11
+ *
12
+ * This looks at tiff tile offset arrays see if any internal tiff tiles contain any data
13
+ *
14
+ * @param toCheck Path or tiff check
15
+ * @returns true if the tiff is empty, false otherwise
16
+ */
17
+ export declare function isEmptyTiff(toCheck: URL | Tiff): Promise<boolean>;
18
+ export declare class ConfigJson {
19
+ mem: ConfigProviderMemory;
20
+ url: URL;
21
+ cache: Map<string, Promise<ConfigImagery>>;
22
+ logger: LogType;
23
+ Q: LimitFunction;
24
+ imageryConfigCache?: URL;
25
+ constructor(url: URL, Q: LimitFunction, log: LogType, imageryConfigCache?: URL);
26
+ /** Import configuration from a base path */
27
+ static fromUrl(basePath: URL, Q: LimitFunction, log: LogType, imageryConfigCache?: URL): Promise<ConfigProviderMemory>;
28
+ provider(obj: unknown): Promise<ConfigProvider>;
29
+ style(obj: unknown): Promise<ConfigVectorStyle>;
30
+ tileSet(obj: unknown): Promise<ConfigTileSet>;
31
+ loadImagery(url: URL, name: string, title: string): Promise<ConfigImagery>;
32
+ _loadImagery(url: URL, name: string, title: string): Promise<ConfigImagery>;
33
+ static findImageryOverviews(cfg: ConfigImagery): Promise<ConfigImageryOverview | undefined>;
34
+ }
35
+ /** Attempt to parse a cotar WMTSCapabilties to figure out what zoom levels are applicable */
36
+ export declare function zoomLevelsFromWmts(wmts: string, tileMatrix: TileMatrixSet): {
37
+ minZoom: number;
38
+ maxZoom: number;
39
+ } | null;