@basemaps/lambda-tiler 6.46.0 → 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.
- package/CHANGELOG.md +42 -0
- package/README.md +93 -1
- package/build/__tests__/config.data.d.ts +0 -1
- package/build/__tests__/config.data.js +2 -6
- package/build/__tests__/config.data.js.map +1 -1
- package/build/__tests__/index.test.d.ts +0 -1
- package/build/__tests__/index.test.js +28 -27
- package/build/__tests__/index.test.js.map +1 -1
- package/build/__tests__/tile.style.json.test.d.ts +0 -1
- package/build/__tests__/tile.style.json.test.js +38 -37
- package/build/__tests__/tile.style.json.test.js.map +1 -1
- package/build/__tests__/wmts.capability.test.d.ts +0 -1
- package/build/__tests__/wmts.capability.test.js +111 -122
- package/build/__tests__/wmts.capability.test.js.map +1 -1
- package/build/__tests__/xyz.util.d.ts +0 -1
- package/build/cli/render.preview.d.ts +0 -1
- package/build/cli/render.preview.js +13 -9
- package/build/cli/render.preview.js.map +1 -1
- package/build/cli/render.tile.d.ts +0 -1
- package/build/cli/render.tile.js +25 -17
- package/build/cli/render.tile.js.map +1 -1
- package/build/index.d.ts +0 -1
- package/build/index.js +27 -31
- package/build/index.js.map +1 -1
- package/build/routes/__tests__/attribution.test.d.ts +0 -1
- package/build/routes/__tests__/attribution.test.js +38 -37
- package/build/routes/__tests__/attribution.test.js.map +1 -1
- package/build/routes/__tests__/fonts.test.d.ts +0 -1
- package/build/routes/__tests__/fonts.test.js +61 -63
- package/build/routes/__tests__/fonts.test.js.map +1 -1
- package/build/routes/__tests__/health.test.d.ts +0 -1
- package/build/routes/__tests__/health.test.js +16 -16
- package/build/routes/__tests__/health.test.js.map +1 -1
- package/build/routes/__tests__/imagery.test.d.ts +0 -1
- package/build/routes/__tests__/imagery.test.js +10 -9
- package/build/routes/__tests__/imagery.test.js.map +1 -1
- package/build/routes/__tests__/memory.fs.d.ts +2 -3
- package/build/routes/__tests__/preview.index.test.d.ts +0 -1
- package/build/routes/__tests__/preview.index.test.js +88 -42
- package/build/routes/__tests__/preview.index.test.js.map +1 -1
- package/build/routes/__tests__/sprites.test.d.ts +0 -1
- package/build/routes/__tests__/sprites.test.js +34 -34
- package/build/routes/__tests__/sprites.test.js.map +1 -1
- package/build/routes/__tests__/tile.json.test.d.ts +0 -1
- package/build/routes/__tests__/tile.json.test.js +45 -51
- package/build/routes/__tests__/tile.json.test.js.map +1 -1
- package/build/routes/__tests__/tile.style.json.test.d.ts +0 -1
- package/build/routes/__tests__/tile.style.json.test.js +49 -50
- package/build/routes/__tests__/tile.style.json.test.js.map +1 -1
- package/build/routes/__tests__/wmts.test.d.ts +0 -1
- package/build/routes/__tests__/wmts.test.js +27 -20
- package/build/routes/__tests__/wmts.test.js.map +1 -1
- package/build/routes/__tests__/xyz.test.d.ts +0 -1
- package/build/routes/__tests__/xyz.test.js +97 -49
- package/build/routes/__tests__/xyz.test.js.map +1 -1
- package/build/routes/attribution.d.ts +1 -1
- package/build/routes/attribution.js +4 -5
- package/build/routes/attribution.js.map +1 -1
- package/build/routes/config.d.ts +0 -1
- package/build/routes/config.js +1 -2
- package/build/routes/config.js.map +1 -1
- package/build/routes/fonts.d.ts +0 -1
- package/build/routes/fonts.js +2 -3
- package/build/routes/fonts.js.map +1 -1
- package/build/routes/health.d.ts +1 -2
- package/build/routes/health.js +5 -15
- package/build/routes/health.js.map +1 -1
- package/build/routes/imagery.d.ts +0 -1
- package/build/routes/imagery.js +1 -1
- package/build/routes/imagery.js.map +1 -1
- package/build/routes/ping.d.ts +0 -1
- package/build/routes/ping.js +1 -1
- package/build/routes/ping.js.map +1 -1
- package/build/routes/preview.d.ts +6 -5
- package/build/routes/preview.index.d.ts +0 -1
- package/build/routes/preview.index.js +6 -5
- package/build/routes/preview.index.js.map +1 -1
- package/build/routes/preview.js +35 -10
- package/build/routes/preview.js.map +1 -1
- package/build/routes/sprites.d.ts +0 -1
- package/build/routes/sprites.js +2 -4
- package/build/routes/sprites.js.map +1 -1
- package/build/routes/tile.json.d.ts +0 -1
- package/build/routes/tile.json.js +10 -5
- package/build/routes/tile.json.js.map +1 -1
- package/build/routes/tile.style.json.d.ts +1 -1
- package/build/routes/tile.style.json.js +79 -16
- package/build/routes/tile.style.json.js.map +1 -1
- package/build/routes/tile.wmts.d.ts +0 -1
- package/build/routes/tile.wmts.js +8 -9
- package/build/routes/tile.wmts.js.map +1 -1
- package/build/routes/tile.xyz.d.ts +0 -1
- package/build/routes/tile.xyz.js.map +1 -1
- package/build/routes/tile.xyz.raster.d.ts +7 -8
- package/build/routes/tile.xyz.raster.js +17 -13
- package/build/routes/tile.xyz.raster.js.map +1 -1
- package/build/routes/tile.xyz.vector.d.ts +0 -1
- package/build/routes/tile.xyz.vector.js +4 -3
- package/build/routes/tile.xyz.vector.js.map +1 -1
- package/build/routes/version.d.ts +0 -1
- package/build/routes/version.js +3 -4
- package/build/routes/version.js.map +1 -1
- package/build/util/__test__/config.loader.test.d.ts +0 -1
- package/build/util/__test__/config.loader.test.js +35 -34
- package/build/util/__test__/config.loader.test.js.map +1 -1
- package/build/util/__test__/filter.test.d.ts +0 -1
- package/build/util/__test__/filter.test.js +17 -16
- package/build/util/__test__/filter.test.js.map +1 -1
- package/build/util/__test__/validate.test.d.ts +0 -1
- package/build/util/__test__/validate.test.js +26 -43
- package/build/util/__test__/validate.test.js.map +1 -1
- package/build/util/assets.provider.d.ts +5 -5
- package/build/util/assets.provider.js +8 -8
- package/build/util/assets.provider.js.map +1 -1
- package/build/util/config.cache.d.ts +2 -2
- package/build/util/config.cache.js +14 -3
- package/build/util/config.cache.js.map +1 -1
- package/build/util/config.loader.d.ts +0 -1
- package/build/util/config.loader.js +18 -13
- package/build/util/config.loader.js.map +1 -1
- package/build/util/cotar.serve.d.ts +3 -3
- package/build/util/cotar.serve.js +2 -2
- package/build/util/cotar.serve.js.map +1 -1
- package/build/util/etag.d.ts +0 -1
- package/build/util/etag.js.map +1 -1
- package/build/util/filter.d.ts +0 -1
- package/build/util/filter.js +4 -5
- package/build/util/filter.js.map +1 -1
- package/build/util/response.d.ts +0 -1
- package/build/util/source.cache.d.ts +8 -9
- package/build/util/source.cache.js +27 -24
- package/build/util/source.cache.js.map +1 -1
- package/build/util/swapping.lru.d.ts +0 -1
- package/build/util/swapping.lru.js +48 -7
- package/build/util/swapping.lru.js.map +1 -1
- package/build/util/validate.d.ts +17 -5
- package/build/util/validate.js +51 -15
- package/build/util/validate.js.map +1 -1
- package/build/wmts.capability.d.ts +1 -2
- package/build/wmts.capability.js +81 -12
- package/build/wmts.capability.js.map +1 -1
- package/bundle.sh +2 -2
- package/package.json +16 -18
- package/scripts/create.deployment.package.mjs +4 -11
- package/src/__tests__/config.data.ts +2 -6
- package/src/__tests__/index.test.ts +29 -27
- package/src/__tests__/tile.style.json.test.ts +40 -37
- package/src/__tests__/wmts.capability.test.ts +139 -120
- package/src/cli/render.preview.ts +14 -9
- package/src/cli/render.tile.ts +27 -18
- package/src/index.ts +31 -35
- package/src/routes/__tests__/attribution.test.ts +40 -37
- package/src/routes/__tests__/fonts.test.ts +68 -64
- package/src/routes/__tests__/health.test.ts +18 -17
- package/src/routes/__tests__/imagery.test.ts +11 -9
- package/src/routes/__tests__/preview.index.test.ts +114 -40
- package/src/routes/__tests__/sprites.test.ts +39 -34
- package/src/routes/__tests__/tile.json.test.ts +41 -39
- package/src/routes/__tests__/tile.style.json.test.ts +49 -46
- package/src/routes/__tests__/wmts.test.ts +28 -20
- package/src/routes/__tests__/xyz.test.ts +134 -55
- package/src/routes/attribution.ts +2 -2
- package/src/routes/config.ts +1 -0
- package/src/routes/fonts.ts +3 -3
- package/src/routes/health.ts +7 -13
- package/src/routes/imagery.ts +2 -1
- package/src/routes/ping.ts +1 -1
- package/src/routes/preview.index.ts +9 -5
- package/src/routes/preview.ts +44 -15
- package/src/routes/sprites.ts +4 -5
- package/src/routes/tile.json.ts +9 -2
- package/src/routes/tile.style.json.ts +89 -13
- package/src/routes/tile.wmts.ts +4 -3
- package/src/routes/tile.xyz.raster.ts +26 -22
- package/src/routes/tile.xyz.ts +1 -0
- package/src/routes/tile.xyz.vector.ts +5 -3
- package/src/routes/version.ts +3 -3
- package/src/util/__test__/config.loader.test.ts +38 -34
- package/src/util/__test__/filter.test.ts +19 -16
- package/src/util/__test__/validate.test.ts +28 -43
- package/src/util/assets.provider.ts +10 -9
- package/src/util/config.cache.ts +4 -3
- package/src/util/config.loader.ts +20 -14
- package/src/util/cotar.serve.ts +3 -2
- package/src/util/source.cache.ts +15 -26
- package/src/util/validate.ts +61 -14
- package/src/wmts.capability.ts +3 -3
- package/tsconfig.json +1 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/typedoc.json +4 -0
- package/build/__tests__/config.data.d.ts.map +0 -1
- package/build/__tests__/index.test.d.ts.map +0 -1
- package/build/__tests__/tile.style.json.test.d.ts.map +0 -1
- package/build/__tests__/wmts.capability.test.d.ts.map +0 -1
- package/build/__tests__/xyz.util.d.ts.map +0 -1
- package/build/arcgis/__tests__/arcgis.style.json.test.d.ts +0 -2
- package/build/arcgis/__tests__/arcgis.style.json.test.d.ts.map +0 -1
- package/build/arcgis/__tests__/arcgis.style.json.test.js +0 -131
- package/build/arcgis/__tests__/arcgis.style.json.test.js.map +0 -1
- package/build/arcgis/__tests__/vector.tiler.server.test.d.ts +0 -2
- package/build/arcgis/__tests__/vector.tiler.server.test.d.ts.map +0 -1
- package/build/arcgis/__tests__/vector.tiler.server.test.js +0 -54
- package/build/arcgis/__tests__/vector.tiler.server.test.js.map +0 -1
- package/build/arcgis/arcgis.info.d.ts +0 -3
- package/build/arcgis/arcgis.info.d.ts.map +0 -1
- package/build/arcgis/arcgis.info.js +0 -25
- package/build/arcgis/arcgis.info.js.map +0 -1
- package/build/arcgis/arcgis.style.json.d.ts +0 -9
- package/build/arcgis/arcgis.style.json.d.ts.map +0 -1
- package/build/arcgis/arcgis.style.json.js +0 -75
- package/build/arcgis/arcgis.style.json.js.map +0 -1
- package/build/arcgis/vector.tile.server.d.ts +0 -8
- package/build/arcgis/vector.tile.server.d.ts.map +0 -1
- package/build/arcgis/vector.tile.server.js +0 -73
- package/build/arcgis/vector.tile.server.js.map +0 -1
- package/build/cli/render.preview.d.ts.map +0 -1
- package/build/cli/render.tile.d.ts.map +0 -1
- package/build/index.d.ts.map +0 -1
- package/build/routes/__tests__/attribution.test.d.ts.map +0 -1
- package/build/routes/__tests__/fonts.test.d.ts.map +0 -1
- package/build/routes/__tests__/health.test.d.ts.map +0 -1
- package/build/routes/__tests__/imagery.test.d.ts.map +0 -1
- package/build/routes/__tests__/memory.fs.d.ts.map +0 -1
- package/build/routes/__tests__/preview.index.test.d.ts.map +0 -1
- package/build/routes/__tests__/sprites.test.d.ts.map +0 -1
- package/build/routes/__tests__/tile.json.test.d.ts.map +0 -1
- package/build/routes/__tests__/tile.style.json.test.d.ts.map +0 -1
- package/build/routes/__tests__/wmts.test.d.ts.map +0 -1
- package/build/routes/__tests__/xyz.test.d.ts.map +0 -1
- package/build/routes/attribution.d.ts.map +0 -1
- package/build/routes/config.d.ts.map +0 -1
- package/build/routes/fonts.d.ts.map +0 -1
- package/build/routes/health.d.ts.map +0 -1
- package/build/routes/imagery.d.ts.map +0 -1
- package/build/routes/ping.d.ts.map +0 -1
- package/build/routes/preview.d.ts.map +0 -1
- package/build/routes/preview.index.d.ts.map +0 -1
- package/build/routes/sprites.d.ts.map +0 -1
- package/build/routes/tile.json.d.ts.map +0 -1
- package/build/routes/tile.style.json.d.ts.map +0 -1
- package/build/routes/tile.wmts.d.ts.map +0 -1
- package/build/routes/tile.xyz.d.ts.map +0 -1
- package/build/routes/tile.xyz.raster.d.ts.map +0 -1
- package/build/routes/tile.xyz.vector.d.ts.map +0 -1
- package/build/routes/version.d.ts.map +0 -1
- package/build/util/__test__/config.loader.test.d.ts.map +0 -1
- package/build/util/__test__/filter.test.d.ts.map +0 -1
- package/build/util/__test__/validate.test.d.ts.map +0 -1
- package/build/util/assets.provider.d.ts.map +0 -1
- package/build/util/config.cache.d.ts.map +0 -1
- package/build/util/config.loader.d.ts.map +0 -1
- package/build/util/cotar.serve.d.ts.map +0 -1
- package/build/util/etag.d.ts.map +0 -1
- package/build/util/filter.d.ts.map +0 -1
- package/build/util/response.d.ts.map +0 -1
- package/build/util/source.cache.d.ts.map +0 -1
- package/build/util/source.tracer.d.ts +0 -18
- package/build/util/source.tracer.d.ts.map +0 -1
- package/build/util/source.tracer.js +0 -26
- package/build/util/source.tracer.js.map +0 -1
- package/build/util/swapping.lru.d.ts.map +0 -1
- package/build/util/validate.d.ts.map +0 -1
- package/build/wmts.capability.d.ts.map +0 -1
- package/src/arcgis/__tests__/arcgis.style.json.test.ts +0 -157
- package/src/arcgis/__tests__/vector.tiler.server.test.ts +0 -70
- package/src/arcgis/arcgis.info.ts +0 -26
- package/src/arcgis/arcgis.style.json.ts +0 -83
- package/src/arcgis/vector.tile.server.ts +0 -81
- package/src/util/source.tracer.ts +0 -38
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filter.test.d.ts","sourceRoot":"","sources":["../../../src/util/__test__/filter.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.test.d.ts","sourceRoot":"","sources":["../../../src/util/__test__/validate.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assets.provider.d.ts","sourceRoot":"","sources":["../../src/util/assets.provider.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAc,MAAM,gBAAgB,CAAC;AAOnF,qBAAa,aAAa;IACxB;;;;;;;OAOG;IAEG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAc3D,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAM1E;;;;;;OAMG;IACG,KAAK,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAepG;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.cache.d.ts","sourceRoot":"","sources":["../../src/util/config.cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,cAAM,SAAS;IACb,cAAc,EAAE,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;gBAEzC,MAAM,EAAE,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAcjD,IAAI,IAAI,IAAI,MAAM,CAGjB;CACF;AAED,qBAAa,WAAW;IACtB,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;gBAClB,OAAO,EAAE,MAAM;IAI3B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;CAU5D;AAED,iDAAiD;AACjD,eAAO,MAAM,YAAY,aAAsB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.loader.d.ts","sourceRoot":"","sources":["../../src/util/config.loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,sBAAsB,EAAY,MAAM,kBAAkB,CAAC;AAG5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAQnD,qBAAa,YAAY;IACvB,0BAA0B;WACb,gBAAgB,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAShE,+EAA+E;IAC/E,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI;WAOxC,IAAI,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAwB3E"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cotar.serve.d.ts","sourceRoot":"","sources":["../../src/util/cotar.serve.ts"],"names":[],"mappings":";AAAA,OAAO,EAAc,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAKnF;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,iBAAiB,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAgB7B;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAEzC"}
|
package/build/util/etag.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"etag.d.ts","sourceRoot":"","sources":["../../src/util/etag.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,eAAO,MAAM,IAAI;aACN,OAAO,GAAG,MAAM;uBAKN,iBAAiB,YAAY,MAAM,GAAG,OAAO;CAUjE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/util/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAsB,MAAM,gBAAgB,CAAC;AAEvE,eAAO,MAAM,WAAW;;;CAGvB,CAAC;AAEF,wBAAgB,UAAU,CAAC,GAAG,EAAE,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAKrF;AACD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAGhF;AASD,wBAAgB,YAAY,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CA2BzF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/util/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEvE,eAAO,MAAM,QAAQ,QAAO,kBAA8D,CAAC;AAC3F,eAAO,MAAM,WAAW,QAAO,kBAAiE,CAAC;AACjG,eAAO,MAAM,SAAS,QAAO,kBAA+D,CAAC;AAC7F,eAAO,MAAM,UAAU,QAAS,iBAAiB,KAAG,kBACqD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"source.cache.d.ts","sourceRoot":"","sources":["../../src/util/source.cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,WAAW,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACtB,MAAM,CAAC,EAAE,KAAK,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,cAAM,WAAW,CAAC,CAAC,SAAS,QAAQ;IAClC,EAAE,EAAE,CAAC,CAAC;gBACM,EAAE,EAAE,CAAC;IAKjB,IAAI,IAAI,IAAI,MAAM,CAIjB;CACF;AAED,qBAAa,WAAW;IACtB,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC;gBACjD,OAAO,EAAE,MAAM;IAI3B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;CAa3C;AAED,oCAAoC;AACpC,eAAO,MAAM,SAAS,aAAqC,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { ChunkSource } from '@chunkd/core';
|
|
2
|
-
interface SourceRequest {
|
|
3
|
-
id?: string;
|
|
4
|
-
offset: number;
|
|
5
|
-
length?: number;
|
|
6
|
-
source: string;
|
|
7
|
-
duration?: number;
|
|
8
|
-
}
|
|
9
|
-
export declare class SourceTracer {
|
|
10
|
-
requests: SourceRequest[];
|
|
11
|
-
/** Reset the request tracer */
|
|
12
|
-
reset(): void;
|
|
13
|
-
/** Override the fetchByte function to trace all requests for this source */
|
|
14
|
-
trace(source: ChunkSource): void;
|
|
15
|
-
}
|
|
16
|
-
export declare const St: SourceTracer;
|
|
17
|
-
export {};
|
|
18
|
-
//# sourceMappingURL=source.tracer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"source.tracer.d.ts","sourceRoot":"","sources":["../../src/util/source.tracer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,UAAU,aAAa;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,YAAY;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAM;IAE/B,+BAA+B;IAC/B,KAAK,IAAI,IAAI;IAIb,6EAA6E;IAC7E,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;CAejC;AAED,eAAO,MAAM,EAAE,cAAqB,CAAC"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { sha256base58 } from '@basemaps/config';
|
|
2
|
-
export class SourceTracer {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.requests = [];
|
|
5
|
-
}
|
|
6
|
-
/** Reset the request tracer */
|
|
7
|
-
reset() {
|
|
8
|
-
this.requests = [];
|
|
9
|
-
}
|
|
10
|
-
/** Override the fetchByte function to trace all requests for this source */
|
|
11
|
-
trace(source) {
|
|
12
|
-
const originFetch = source.fetchBytes;
|
|
13
|
-
source.fetchBytes = async (offset, length) => {
|
|
14
|
-
const request = { source: source.uri, offset, length };
|
|
15
|
-
const traceId = sha256base58(`${request.source}:${request.offset}:${request.length}`);
|
|
16
|
-
request.id = traceId;
|
|
17
|
-
this.requests.push(request);
|
|
18
|
-
const startTime = Date.now();
|
|
19
|
-
const ret = await originFetch.apply(source, [offset, length]);
|
|
20
|
-
request.duration = Date.now() - startTime;
|
|
21
|
-
return ret;
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
export const St = new SourceTracer();
|
|
26
|
-
//# sourceMappingURL=source.tracer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"source.tracer.js","sourceRoot":"","sources":["../../src/util/source.tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAWhD,MAAM,OAAO,YAAY;IAAzB;QACE,aAAQ,GAAoB,EAAE,CAAC;IAuBjC,CAAC;IArBC,+BAA+B;IAC/B,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,MAAmB;QACvB,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QACtC,MAAM,CAAC,UAAU,GAAG,KAAK,EAAE,MAAc,EAAE,MAAe,EAAwB,EAAE;YAClF,MAAM,OAAO,GAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACtE,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAE9D,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAC1C,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"swapping.lru.d.ts","sourceRoot":"","sources":["../../src/util/swapping.lru.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAW,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;IACjD,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAa;IACnC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAa;IACnC,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,SAAK;IACT,MAAM,SAAK;IACX,MAAM,SAAK;IACX,MAAM,SAAK;IAEX,cAAc,SAAM;gBAER,OAAO,EAAE,MAAM;IAI3B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAoBzB,sBAAsB;IACtB,KAAK,IAAI,IAAI;IAMb,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;IAK9B,sDAAsD;IACtD,KAAK,IAAI,IAAI;IAcb,6DAA6D;IAC7D,IAAI,WAAW,IAAI,MAAM,CAIxB;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/util/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAc,aAAa,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7G,OAAO,EAAE,iBAAiB,EAAsB,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,aAAa,CAAC;IAC1B,QAAQ,EAAE,YAAY,GAAG,WAAW,CAAC;CACtC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACjC;AAED,eAAO,MAAM,QAAQ;IACnB;;;OAGG;gBACS,iBAAiB,GAAG,MAAM;2BAUf,MAAM,GAAG,aAAa,GAAG,IAAI;IAIpD,2FAA2F;6BAClE,iBAAiB,GAAG,WAAW,EAAE,GAAG,IAAI;4BAczC,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,IAAI;IAOlE,kEAAkE;uBAC/C,MAAM,SAAS,MAAM,GAAG,MAAM,GAAG,IAAI;IAOxD;;;;;;;;;OASG;aACM,kBAAkB,UAAU,CAAC,GAAG,OAAO;CAiCjD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wmts.capability.d.ts","sourceRoot":"","sources":["../src/wmts.capability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import { BaseConfig, ConfigProviderMemory, StyleJson } from '@basemaps/config';
|
|
2
|
-
import { Env } from '@basemaps/shared';
|
|
3
|
-
import o from 'ospec';
|
|
4
|
-
import { createSandbox } from 'sinon';
|
|
5
|
-
import { handler } from '../../index.js';
|
|
6
|
-
import { ConfigLoader } from '../../util/config.loader.js';
|
|
7
|
-
import { FakeData } from '../../__tests__/config.data.js';
|
|
8
|
-
import { Api, mockRequest, mockUrlRequest } from '../../__tests__/xyz.util.js';
|
|
9
|
-
|
|
10
|
-
o.spec('arcgis/stylejson', () => {
|
|
11
|
-
const host = 'https://tiles.test';
|
|
12
|
-
const sandbox = createSandbox();
|
|
13
|
-
const config = new ConfigProviderMemory();
|
|
14
|
-
|
|
15
|
-
o.before(() => {
|
|
16
|
-
process.env[Env.PublicUrlBase] = host;
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
o.beforeEach(() => {
|
|
20
|
-
sandbox.stub(ConfigLoader, 'getDefaultConfig').resolves(config);
|
|
21
|
-
config.objects.clear();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
o.afterEach(() => {
|
|
25
|
-
sandbox.restore();
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
o('should not found tile set', async () => {
|
|
29
|
-
const request = mockRequest('/v1/arcgis/rest/services/topographic/VectorTileServer/root.json', 'get', Api.header);
|
|
30
|
-
|
|
31
|
-
const res = await handler.router.handle(request);
|
|
32
|
-
o(res.status).equals(404);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
o('should not found style', async () => {
|
|
36
|
-
const request = mockRequest('/v1/arcgis/rest/services/topographic/VectorTileServer/root.json', 'get', Api.header);
|
|
37
|
-
config.put(FakeData.tileSetVector('topographic'));
|
|
38
|
-
|
|
39
|
-
const res = await handler.router.handle(request);
|
|
40
|
-
o(res.status).equals(404);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
const fakeStyle: StyleJson = {
|
|
44
|
-
version: 8,
|
|
45
|
-
id: 'test',
|
|
46
|
-
name: 'topographic',
|
|
47
|
-
sources: {
|
|
48
|
-
basemaps_vector: {
|
|
49
|
-
type: 'vector',
|
|
50
|
-
url: `/vector`,
|
|
51
|
-
},
|
|
52
|
-
basemaps_raster: {
|
|
53
|
-
type: 'raster',
|
|
54
|
-
tiles: [`/raster`],
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
layers: [
|
|
58
|
-
{
|
|
59
|
-
source: 'basemaps_vector',
|
|
60
|
-
layout: {
|
|
61
|
-
visibility: 'visible',
|
|
62
|
-
},
|
|
63
|
-
paint: {
|
|
64
|
-
'background-color': 'rgba(206, 229, 242, 1)',
|
|
65
|
-
},
|
|
66
|
-
id: 'Background-vector',
|
|
67
|
-
type: 'background',
|
|
68
|
-
minzoom: 0,
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
source: 'basemaps_raster',
|
|
72
|
-
layout: {
|
|
73
|
-
visibility: 'visible',
|
|
74
|
-
},
|
|
75
|
-
paint: {
|
|
76
|
-
'background-color': 'rgba(222, 229, 132, 1)',
|
|
77
|
-
},
|
|
78
|
-
id: 'Background-raster',
|
|
79
|
-
type: 'background',
|
|
80
|
-
minzoom: 0,
|
|
81
|
-
},
|
|
82
|
-
],
|
|
83
|
-
glyphs: '/glyphs',
|
|
84
|
-
sprite: '/sprite',
|
|
85
|
-
metadata: { id: 'test' },
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
const fakeRecord = {
|
|
89
|
-
id: 'st_topographic',
|
|
90
|
-
name: 'topographic',
|
|
91
|
-
style: fakeStyle,
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
o('should serve style json and remove the raster source and layers, then replace the vector url', async () => {
|
|
95
|
-
const request = mockRequest('/v1/arcgis/rest/services/topographic/VectorTileServer/root.json', 'get', Api.header);
|
|
96
|
-
|
|
97
|
-
config.put(FakeData.tileSetVector('topographic'));
|
|
98
|
-
config.put(fakeRecord);
|
|
99
|
-
|
|
100
|
-
const res = await handler.router.handle(request);
|
|
101
|
-
o(res.status).equals(200);
|
|
102
|
-
o(res.header('content-type')).equals('application/json');
|
|
103
|
-
o(res.header('cache-control')).equals('no-store');
|
|
104
|
-
|
|
105
|
-
const body = Buffer.from(res.body ?? '', 'base64').toString();
|
|
106
|
-
fakeStyle.sources.basemaps_vector = {
|
|
107
|
-
type: 'vector',
|
|
108
|
-
url: `${host}/v1/arcgis/rest/services/topographic/VectorTileServer?api=${Api.key}&f=json`,
|
|
109
|
-
};
|
|
110
|
-
delete fakeStyle.sources.basemaps_raster;
|
|
111
|
-
fakeStyle.layers = [fakeStyle.layers[0]];
|
|
112
|
-
|
|
113
|
-
fakeStyle.sprite = `${host}/sprite`;
|
|
114
|
-
fakeStyle.glyphs = `${host}/glyphs`;
|
|
115
|
-
|
|
116
|
-
o(JSON.parse(body)).deepEquals(fakeStyle);
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
o('should not found for raster tileset', async () => {
|
|
120
|
-
const request = mockRequest('/v1/arcgis/rest/services/raster/VectorTileServer/root.json', 'get', Api.header);
|
|
121
|
-
|
|
122
|
-
config.put(FakeData.tileSetRaster('raster'));
|
|
123
|
-
config.put(fakeRecord);
|
|
124
|
-
|
|
125
|
-
const res = await handler.router.handle(request);
|
|
126
|
-
o(res.status).equals(404);
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
o('should fine the new style with url query', async () => {
|
|
130
|
-
const request = mockUrlRequest(
|
|
131
|
-
'/v1/arcgis/rest/services/topographic/VectorTileServer/root.json',
|
|
132
|
-
'style=topolite',
|
|
133
|
-
Api.header,
|
|
134
|
-
);
|
|
135
|
-
|
|
136
|
-
config.put({ id: 'st_topolite', name: 'topographic', style: fakeStyle } as BaseConfig);
|
|
137
|
-
config.put(FakeData.tileSetVector('topographic'));
|
|
138
|
-
|
|
139
|
-
const res = await handler.router.handle(request);
|
|
140
|
-
o(res.status).equals(200);
|
|
141
|
-
o(res.header('content-type')).equals('application/json');
|
|
142
|
-
o(res.header('cache-control')).equals('no-store');
|
|
143
|
-
|
|
144
|
-
const body = Buffer.from(res.body ?? '', 'base64').toString();
|
|
145
|
-
fakeStyle.sources.basemaps_vector = {
|
|
146
|
-
type: 'vector',
|
|
147
|
-
url: `${host}/v1/arcgis/rest/services/topographic/VectorTileServer?api=${Api.key}&f=json`,
|
|
148
|
-
};
|
|
149
|
-
delete fakeStyle.sources.basemaps_raster;
|
|
150
|
-
fakeStyle.layers = [fakeStyle.layers[0]];
|
|
151
|
-
|
|
152
|
-
fakeStyle.sprite = `${host}/sprite`;
|
|
153
|
-
fakeStyle.glyphs = `${host}/glyphs`;
|
|
154
|
-
|
|
155
|
-
o(JSON.parse(body)).deepEquals(fakeStyle);
|
|
156
|
-
});
|
|
157
|
-
});
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { ConfigProviderMemory } from '@basemaps/config';
|
|
2
|
-
import { Env } from '@basemaps/shared';
|
|
3
|
-
import o from 'ospec';
|
|
4
|
-
import { createSandbox } from 'sinon';
|
|
5
|
-
import { handler } from '../../index.js';
|
|
6
|
-
import { ConfigLoader } from '../../util/config.loader.js';
|
|
7
|
-
import { FakeData } from '../../__tests__/config.data.js';
|
|
8
|
-
import { Api, mockRequest, mockUrlRequest } from '../../__tests__/xyz.util.js';
|
|
9
|
-
|
|
10
|
-
o.spec('arcgis/VectorTileServer', () => {
|
|
11
|
-
const host = 'https://tiles.test';
|
|
12
|
-
const sandbox = createSandbox();
|
|
13
|
-
const config = new ConfigProviderMemory();
|
|
14
|
-
|
|
15
|
-
o.before(() => {
|
|
16
|
-
process.env[Env.PublicUrlBase] = host;
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
o.beforeEach(() => {
|
|
20
|
-
sandbox.stub(ConfigLoader, 'getDefaultConfig').resolves(config);
|
|
21
|
-
config.objects.clear();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
o.afterEach(() => {
|
|
25
|
-
sandbox.restore();
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
o('should not found tile set', async () => {
|
|
29
|
-
const request = mockUrlRequest('/v1/arcgis/rest/services/topographic/VectorTileServer', 'f=json', Api.header);
|
|
30
|
-
|
|
31
|
-
const res = await handler.router.handle(request);
|
|
32
|
-
o(res.status).equals(404);
|
|
33
|
-
});
|
|
34
|
-
o('should return the vector tile server', async () => {
|
|
35
|
-
const request = mockUrlRequest('/v1/arcgis/rest/services/topographic/VectorTileServer', 'f=json', Api.header);
|
|
36
|
-
|
|
37
|
-
config.put(FakeData.tileSetVector('topographic'));
|
|
38
|
-
|
|
39
|
-
const res = await handler.router.handle(request);
|
|
40
|
-
o(res.status).equals(200);
|
|
41
|
-
o(res.header('content-type')).equals('application/json');
|
|
42
|
-
o(res.header('cache-control')).equals('no-store');
|
|
43
|
-
|
|
44
|
-
const body = JSON.parse(Buffer.from(res.body ?? '', 'base64').toString());
|
|
45
|
-
o(body.tiles[0]).equals(`${host}/v1/tiles/topographic/WebMercatorQuad/{z}/{x}/{y}.pbf?api=${Api.key}`);
|
|
46
|
-
o(body.tileInfo.lods.length).equals(17);
|
|
47
|
-
});
|
|
48
|
-
o('should not return with no f=json query', async () => {
|
|
49
|
-
const request = mockRequest('/v1/arcgis/rest/services/topographic/VectorTileServer', 'get', Api.header);
|
|
50
|
-
|
|
51
|
-
config.put(FakeData.tileSetVector('topographic'));
|
|
52
|
-
|
|
53
|
-
const res = await handler.router.handle(request);
|
|
54
|
-
o(res.status).equals(404);
|
|
55
|
-
});
|
|
56
|
-
o('should return ok for post request', async () => {
|
|
57
|
-
const request = mockUrlRequest(
|
|
58
|
-
'/v1/arcgis/rest/services/topographic/VectorTileServer',
|
|
59
|
-
'f=json',
|
|
60
|
-
Api.header,
|
|
61
|
-
'POST',
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
config.put(FakeData.tileSetVector('topographic'));
|
|
65
|
-
|
|
66
|
-
const res = await handler.router.handle(request);
|
|
67
|
-
o(res.status).equals(200);
|
|
68
|
-
o(res.body).deepEquals(`{"id":"${request.id}","correlationId":"${request.correlationId}","message":"ok"}`);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Env } from '@basemaps/shared';
|
|
2
|
-
import { HttpHeader, LambdaHttpRequest, LambdaHttpResponse } from '@linzjs/lambda';
|
|
3
|
-
import { Etag } from '../util/etag.js';
|
|
4
|
-
import { NotFound, NotModified } from '../util/response.js';
|
|
5
|
-
|
|
6
|
-
export async function arcgisInfoGet(req: LambdaHttpRequest): Promise<LambdaHttpResponse> {
|
|
7
|
-
const host = Env.get(Env.PublicUrlBase);
|
|
8
|
-
if (host == null) return NotFound();
|
|
9
|
-
const info = {
|
|
10
|
-
currentVersion: 10.1,
|
|
11
|
-
fullVersion: '10.1',
|
|
12
|
-
owningSystemUrl: host,
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const json = JSON.stringify(info);
|
|
16
|
-
const data = Buffer.from(json);
|
|
17
|
-
|
|
18
|
-
const cacheKey = Etag.key(data);
|
|
19
|
-
if (Etag.isNotModified(req, cacheKey)) return NotModified();
|
|
20
|
-
|
|
21
|
-
const response = new LambdaHttpResponse(200, 'ok');
|
|
22
|
-
response.header(HttpHeader.CacheControl, 'public, max-age=604800, stale-while-revalidate=86400');
|
|
23
|
-
response.buffer(data, 'application/json');
|
|
24
|
-
req.set('bytes', data.byteLength);
|
|
25
|
-
return response;
|
|
26
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { Sources, StyleJson, TileSetType } from '@basemaps/config';
|
|
2
|
-
import { Env, fsa } from '@basemaps/shared';
|
|
3
|
-
import { HttpHeader, LambdaHttpRequest, LambdaHttpResponse } from '@linzjs/lambda';
|
|
4
|
-
import { convertRelativeUrl } from '../routes/tile.style.json.js';
|
|
5
|
-
import { ConfigLoader } from '../util/config.loader.js';
|
|
6
|
-
import { Etag } from '../util/etag.js';
|
|
7
|
-
import { NotFound, NotModified } from '../util/response.js';
|
|
8
|
-
import { Validate } from '../util/validate.js';
|
|
9
|
-
|
|
10
|
-
interface StyleGet {
|
|
11
|
-
Params: {
|
|
12
|
-
tileSet: string;
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function tileserverUrl(tileSet: string, apiKey: string): string {
|
|
17
|
-
const host = Env.get(Env.PublicUrlBase) ?? '';
|
|
18
|
-
const url = `/v1/arcgis/rest/services/${tileSet}/VectorTileServer`;
|
|
19
|
-
const fullUrl = new URL(fsa.join(host, url));
|
|
20
|
-
fullUrl.searchParams.set('api', apiKey);
|
|
21
|
-
fullUrl.searchParams.set('f', 'json');
|
|
22
|
-
return fullUrl.toString().replace(/%7B/g, '{').replace(/%7D/g, '}');
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function convertStyleJson(tileSet: string, style: StyleJson, apiKey: string): StyleJson {
|
|
26
|
-
const sources: Sources = JSON.parse(JSON.stringify(style.sources));
|
|
27
|
-
// Only keep the vector layer and update the source url
|
|
28
|
-
for (const [key, value] of Object.entries(sources)) {
|
|
29
|
-
if (value.type === 'vector') {
|
|
30
|
-
value.url = tileserverUrl(tileSet, apiKey);
|
|
31
|
-
sources[key] = value;
|
|
32
|
-
} else {
|
|
33
|
-
delete sources[key];
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Remove all the not vector layers.
|
|
38
|
-
const layers = [];
|
|
39
|
-
for (const layer of style.layers) {
|
|
40
|
-
if (layer.source != null && !sources.hasOwnProperty(layer.source)) continue;
|
|
41
|
-
layers.push(layer);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return {
|
|
45
|
-
version: 8,
|
|
46
|
-
id: style.id,
|
|
47
|
-
name: style.name,
|
|
48
|
-
sources,
|
|
49
|
-
layers,
|
|
50
|
-
metadata: style.metadata ?? {},
|
|
51
|
-
glyphs: convertRelativeUrl(style.glyphs),
|
|
52
|
-
sprite: convertRelativeUrl(style.sprite),
|
|
53
|
-
} as StyleJson;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export async function arcgisStyleJsonGet(req: LambdaHttpRequest<StyleGet>): Promise<LambdaHttpResponse> {
|
|
57
|
-
const apiKey = Validate.apiKey(req);
|
|
58
|
-
const config = await ConfigLoader.load(req);
|
|
59
|
-
const tileSet = await config.TileSet.get(config.TileSet.id(req.params.tileSet));
|
|
60
|
-
if (tileSet?.type !== TileSetType.Vector) return NotFound();
|
|
61
|
-
|
|
62
|
-
const style = req.query.get('style');
|
|
63
|
-
const styleName = style ? style : 'topographic'; // Defalut to topographic style
|
|
64
|
-
|
|
65
|
-
// Get style Config from db
|
|
66
|
-
const dbId = config.Style.id(styleName);
|
|
67
|
-
const styleConfig = await config.Style.get(dbId);
|
|
68
|
-
if (styleConfig == null) return NotFound();
|
|
69
|
-
|
|
70
|
-
// Prepare sources and add linz source
|
|
71
|
-
const styleJson = convertStyleJson(tileSet.name, styleConfig.style, apiKey);
|
|
72
|
-
const data = Buffer.from(JSON.stringify(styleJson));
|
|
73
|
-
|
|
74
|
-
const cacheKey = Etag.key(data);
|
|
75
|
-
if (Etag.isNotModified(req, cacheKey)) return NotModified();
|
|
76
|
-
|
|
77
|
-
const response = new LambdaHttpResponse(200, 'ok');
|
|
78
|
-
response.header(HttpHeader.ETag, cacheKey);
|
|
79
|
-
response.header(HttpHeader.CacheControl, 'no-store');
|
|
80
|
-
response.buffer(data, 'application/json');
|
|
81
|
-
req.set('bytes', data.byteLength);
|
|
82
|
-
return response;
|
|
83
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { TileSetType } from '@basemaps/config';
|
|
2
|
-
import { GoogleTms } from '@basemaps/geo';
|
|
3
|
-
import { HttpHeader, LambdaHttpRequest, LambdaHttpResponse } from '@linzjs/lambda';
|
|
4
|
-
import { convertRelativeUrl } from '../routes/tile.style.json.js';
|
|
5
|
-
import { ConfigLoader } from '../util/config.loader.js';
|
|
6
|
-
import { NotFound } from '../util/response.js';
|
|
7
|
-
import { Validate } from '../util/validate.js';
|
|
8
|
-
|
|
9
|
-
/** Zoom level for the tilematrix which will be slice by 1 during the covertion to arcgis tileserve lods */
|
|
10
|
-
const MaxTileMatrixZoom = 18;
|
|
11
|
-
const MinTileMatrixZoom = 1;
|
|
12
|
-
|
|
13
|
-
export interface VectorTileServer {
|
|
14
|
-
Params: {
|
|
15
|
-
tileSet: string;
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export async function arcgisTileServerGet(req: LambdaHttpRequest<VectorTileServer>): Promise<LambdaHttpResponse> {
|
|
20
|
-
const config = await ConfigLoader.load(req);
|
|
21
|
-
|
|
22
|
-
const tileSet = await config.TileSet.get(config.TileSet.id(req.params.tileSet));
|
|
23
|
-
if (tileSet?.type !== TileSetType.Vector) return NotFound();
|
|
24
|
-
const apiKey = Validate.apiKey(req);
|
|
25
|
-
const f = req.query.get('f');
|
|
26
|
-
if (f !== 'json') return NotFound();
|
|
27
|
-
const extent = {
|
|
28
|
-
xmin: GoogleTms.extent.x,
|
|
29
|
-
ymin: GoogleTms.extent.y,
|
|
30
|
-
xmax: GoogleTms.extent.right,
|
|
31
|
-
ymax: GoogleTms.extent.bottom,
|
|
32
|
-
// TODO where is wkid from
|
|
33
|
-
spatialReference: { wkid: 102100, latestWkid: GoogleTms.projection.code },
|
|
34
|
-
};
|
|
35
|
-
const vectorTileServer = {
|
|
36
|
-
currentVersion: 10.81,
|
|
37
|
-
name: tileSet.name,
|
|
38
|
-
capabilities: 'TilesOnly',
|
|
39
|
-
type: 'indexedVector',
|
|
40
|
-
defaultStyles: '',
|
|
41
|
-
tiles: [convertRelativeUrl(`/v1/tiles/${tileSet.name}/WebMercatorQuad/{z}/{x}/{y}.pbf`, apiKey)],
|
|
42
|
-
exportTilesAllowed: false,
|
|
43
|
-
maxExportTilesCount: 0,
|
|
44
|
-
initialExtent: extent,
|
|
45
|
-
fullExtent: extent,
|
|
46
|
-
minScale: 0.0,
|
|
47
|
-
maxScale: 0.0,
|
|
48
|
-
tileInfo: {
|
|
49
|
-
rows: 512,
|
|
50
|
-
cols: 512,
|
|
51
|
-
dpi: 96,
|
|
52
|
-
format: 'pbf',
|
|
53
|
-
origin: { x: GoogleTms.extent.x, y: GoogleTms.extent.bottom },
|
|
54
|
-
spatialReference: { wkid: 102100, latestWkid: GoogleTms.projection.code },
|
|
55
|
-
lods: GoogleTms.zooms.slice(MinTileMatrixZoom, MaxTileMatrixZoom).map((c, i) => {
|
|
56
|
-
return {
|
|
57
|
-
level: i,
|
|
58
|
-
resolution: c.scaleDenominator * 0.28e-3,
|
|
59
|
-
scale: c.scaleDenominator,
|
|
60
|
-
};
|
|
61
|
-
}),
|
|
62
|
-
},
|
|
63
|
-
maxzoom: 22,
|
|
64
|
-
minLOD: 0,
|
|
65
|
-
maxLOD: 15,
|
|
66
|
-
resourceInfo: {
|
|
67
|
-
styleVersion: 8,
|
|
68
|
-
tileCompression: 'gzip',
|
|
69
|
-
cacheInfo: { storageInfo: { packetSize: 128, storageFormat: 'compactV2' } },
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
const json = JSON.stringify(vectorTileServer, null, 2);
|
|
74
|
-
const data = Buffer.from(json);
|
|
75
|
-
|
|
76
|
-
const response = new LambdaHttpResponse(200, 'ok');
|
|
77
|
-
response.header(HttpHeader.CacheControl, 'no-store');
|
|
78
|
-
response.buffer(data, 'application/json');
|
|
79
|
-
req.set('bytes', data.byteLength);
|
|
80
|
-
return response;
|
|
81
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { sha256base58 } from '@basemaps/config';
|
|
2
|
-
import { ChunkSource } from '@chunkd/core';
|
|
3
|
-
|
|
4
|
-
interface SourceRequest {
|
|
5
|
-
id?: string;
|
|
6
|
-
offset: number;
|
|
7
|
-
length?: number;
|
|
8
|
-
source: string;
|
|
9
|
-
duration?: number;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export class SourceTracer {
|
|
13
|
-
requests: SourceRequest[] = [];
|
|
14
|
-
|
|
15
|
-
/** Reset the request tracer */
|
|
16
|
-
reset(): void {
|
|
17
|
-
this.requests = [];
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/** Override the fetchByte function to trace all requests for this source */
|
|
21
|
-
trace(source: ChunkSource): void {
|
|
22
|
-
const originFetch = source.fetchBytes;
|
|
23
|
-
source.fetchBytes = async (offset: number, length?: number): Promise<ArrayBuffer> => {
|
|
24
|
-
const request: SourceRequest = { source: source.uri, offset, length };
|
|
25
|
-
const traceId = sha256base58(`${request.source}:${request.offset}:${request.length}`);
|
|
26
|
-
request.id = traceId;
|
|
27
|
-
this.requests.push(request);
|
|
28
|
-
const startTime = Date.now();
|
|
29
|
-
|
|
30
|
-
const ret = await originFetch.apply(source, [offset, length]);
|
|
31
|
-
|
|
32
|
-
request.duration = Date.now() - startTime;
|
|
33
|
-
return ret;
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export const St = new SourceTracer();
|