@basemaps/lambda-tiler 6.24.2 → 6.27.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 (52) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/build/__test__/tile.cache.key.test.js +2 -3
  3. package/build/__test__/wmts.capability.test.js +36 -9
  4. package/build/__test__/xyz.test.js +51 -28
  5. package/build/__test__/xyz.util.d.ts +4 -0
  6. package/build/__test__/xyz.util.d.ts.map +1 -1
  7. package/build/__test__/xyz.util.js +8 -1
  8. package/build/cli/dump.js +2 -3
  9. package/build/index.d.ts +3 -1
  10. package/build/index.d.ts.map +1 -1
  11. package/build/index.js +2 -1
  12. package/build/routes/__test__/attribution.test.js +1 -0
  13. package/build/routes/__test__/health.test.js +1 -2
  14. package/build/routes/__test__/wmts.test.d.ts +2 -0
  15. package/build/routes/__test__/wmts.test.d.ts.map +1 -0
  16. package/build/routes/__test__/wmts.test.js +31 -0
  17. package/build/routes/health.d.ts.map +1 -1
  18. package/build/routes/health.js +3 -4
  19. package/build/routes/tile.json.d.ts +0 -7
  20. package/build/routes/tile.json.d.ts.map +1 -1
  21. package/build/routes/tile.json.js +26 -18
  22. package/build/routes/tile.wmts.d.ts +2 -0
  23. package/build/routes/tile.wmts.d.ts.map +1 -1
  24. package/build/routes/tile.wmts.js +23 -1
  25. package/build/tile.set.cache.js +2 -2
  26. package/build/tile.set.raster.d.ts +3 -1
  27. package/build/tile.set.raster.d.ts.map +1 -1
  28. package/build/tile.set.raster.js +8 -4
  29. package/build/tile.set.vector.d.ts +4 -1
  30. package/build/tile.set.vector.d.ts.map +1 -1
  31. package/build/tile.set.vector.js +11 -1
  32. package/build/wmts.capability.d.ts +15 -5
  33. package/build/wmts.capability.d.ts.map +1 -1
  34. package/build/wmts.capability.js +11 -12
  35. package/package.json +10 -10
  36. package/src/__test__/tile.cache.key.test.ts +3 -3
  37. package/src/__test__/wmts.capability.test.ts +39 -8
  38. package/src/__test__/xyz.test.ts +55 -28
  39. package/src/__test__/xyz.util.ts +10 -2
  40. package/src/cli/dump.ts +2 -3
  41. package/src/index.ts +2 -1
  42. package/src/routes/__test__/attribution.test.ts +1 -0
  43. package/src/routes/__test__/health.test.ts +1 -3
  44. package/src/routes/__test__/wmts.test.ts +40 -0
  45. package/src/routes/health.ts +3 -4
  46. package/src/routes/tile.json.ts +26 -27
  47. package/src/routes/tile.wmts.ts +23 -2
  48. package/src/tile.set.cache.ts +2 -2
  49. package/src/tile.set.raster.ts +8 -4
  50. package/src/tile.set.vector.ts +12 -2
  51. package/src/wmts.capability.ts +20 -15
  52. package/tsconfig.tsbuildinfo +1 -1
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import { ConfigImagery, ConfigTileSetRaster, TileSetNameComponents, TileSetType } from '@basemaps/config';
3
- import { Bounds, Tile, TileMatrixSet } from '@basemaps/geo';
3
+ import { Bounds, ImageFormat, Tile, TileMatrixSet } from '@basemaps/geo';
4
4
  import { LogType, TileDataXyz } from '@basemaps/shared';
5
5
  import { Tiler } from '@basemaps/tiler';
6
6
  import { TileMakerSharp } from '@basemaps/tiler-sharp';
@@ -35,6 +35,8 @@ export declare class TileSetRaster {
35
35
  get title(): string;
36
36
  get description(): string;
37
37
  get extent(): Bounds;
38
+ /** Preferred default imagery format */
39
+ get format(): ImageFormat;
38
40
  init(record: ConfigTileSetRaster): Promise<void>;
39
41
  initTiffs(tile: Tile, log: LogType): Promise<CogTiff[]>;
40
42
  tile(req: LambdaHttpRequest, xyz: TileDataXyz): Promise<LambdaHttpResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"tile.set.raster.d.ts","sourceRoot":"","sources":["../src/tile.set.raster.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EAEb,mBAAmB,EACnB,qBAAqB,EAErB,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAQ,IAAI,EAAE,aAAa,EAAkB,MAAM,eAAe,CAAC;AAClF,OAAO,EAAoB,OAAO,EAAE,WAAW,EAAqC,MAAM,kBAAkB,CAAC;AAC7G,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAc,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAU1C,eAAO,MAAM,YAAY,gBAA0B,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD,qBAAa,aAAa;IACxB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAsB;IAE9C,UAAU,EAAE,aAAa,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;IAEvB,UAAU,EAAE,qBAAqB,CAAC;IAClC,OAAO,EAAE,mBAAmB,CAAC;IAE7B;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;gBAMjD,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa;IAMnD,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAEK,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAmBhD,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8BxF;;;;OAIG;IACI,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE;IAgC5D,OAAO,CAAC,cAAc;IAwBtB,oDAAoD;IACpD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAShD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;CAqB3C"}
1
+ {"version":3,"file":"tile.set.raster.d.ts","sourceRoot":"","sources":["../src/tile.set.raster.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EAEb,mBAAmB,EACnB,qBAAqB,EAErB,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAQ,WAAW,EAAE,IAAI,EAAE,aAAa,EAAgC,MAAM,eAAe,CAAC;AAC7G,OAAO,EAAoB,OAAO,EAAE,WAAW,EAAuB,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAc,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAU1C,eAAO,MAAM,YAAY,gBAA0B,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD,qBAAa,aAAa;IACxB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAsB;IAE9C,UAAU,EAAE,aAAa,CAAC;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;IAEvB,UAAU,EAAE,qBAAqB,CAAC;IAClC,OAAO,EAAE,mBAAmB,CAAC;IAE7B;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;gBAMjD,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa;IAMnD,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,uCAAuC;IACvC,IAAI,MAAM,IAAI,WAAW,CAExB;IAEK,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAmBhD,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8BxF;;;;OAIG;IACI,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE;IA+B5D,OAAO,CAAC,cAAc;IAwBtB,oDAAoD;IACpD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAShD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;CAqB3C"}
@@ -1,6 +1,6 @@
1
1
  import { TileSetNameParser, TileSetType, } from '@basemaps/config';
2
- import { Bounds, Epsg, TileMatrixSet, TileMatrixSets } from '@basemaps/geo';
3
- import { Config, Env, fsa, titleizeImageryName, VectorFormat } from '@basemaps/shared';
2
+ import { Bounds, Epsg, ImageFormat, TileMatrixSet, TileMatrixSets, VectorFormat } from '@basemaps/geo';
3
+ import { Config, Env, fsa, titleizeImageryName } from '@basemaps/shared';
4
4
  import { Tiler } from '@basemaps/tiler';
5
5
  import { TileMakerSharp } from '@basemaps/tiler-sharp';
6
6
  import { CogTiff } from '@cogeotiff/core';
@@ -11,7 +11,7 @@ import { TileEtag } from './routes/tile.etag.js';
11
11
  import { St } from './source.tracer.js';
12
12
  import { TiffCache } from './tiff.cache.js';
13
13
  import { TileSets } from './tile.set.cache.js';
14
- const LoadingQueue = pLimit(Env.getNumber(Env.TiffConcurrency, 5));
14
+ const LoadingQueue = pLimit(Env.getNumber(Env.TiffConcurrency, 25));
15
15
  export const TileComposer = new TileMakerSharp(256);
16
16
  const DefaultResizeKernel = { in: 'lanczos3', out: 'lanczos3' };
17
17
  const DefaultBackground = { r: 0, g: 0, b: 0, alpha: 0 };
@@ -52,6 +52,11 @@ export class TileSetRaster {
52
52
  var _a;
53
53
  return (_a = this.extentOverride) !== null && _a !== void 0 ? _a : this.tileMatrix.extent;
54
54
  }
55
+ /** Preferred default imagery format */
56
+ get format() {
57
+ var _a;
58
+ return (_a = this.tileSet.format) !== null && _a !== void 0 ? _a : ImageFormat.Webp;
59
+ }
55
60
  async init(record) {
56
61
  this.tileSet = record;
57
62
  this.imagery = await Config.getAllImagery(this.tileSet.layers, this.tileMatrix.projection);
@@ -126,7 +131,6 @@ export class TileSetRaster {
126
131
  }
127
132
  const imagery = this.imagery.get(imgId);
128
133
  if (imagery == null) {
129
- console.log('Failed', { imagery, i: this.imagery, ts: this.tileSet.layers });
130
134
  log === null || log === void 0 ? void 0 : log.warn({ layer: layer.name, projection: this.tileMatrix.projection.code, imgId }, 'Failed to lookup imagery');
131
135
  continue;
132
136
  }
@@ -1,5 +1,5 @@
1
1
  import { ConfigTileSetVector, TileSetNameComponents, TileSetType } from '@basemaps/config';
2
- import { TileMatrixSet } from '@basemaps/geo';
2
+ import { TileMatrixSet, VectorFormat } from '@basemaps/geo';
3
3
  import { TileDataXyz } from '@basemaps/shared';
4
4
  import { Cotar } from '@cotar/core';
5
5
  import { LambdaHttpRequest, LambdaHttpResponse } from '@linzjs/lambda';
@@ -14,6 +14,9 @@ export declare class TileSetVector {
14
14
  tileMatrix: TileMatrixSet;
15
15
  tileSet: ConfigTileSetVector;
16
16
  constructor(name: string, tileMatrix: TileMatrixSet);
17
+ init(record: ConfigTileSetVector): Promise<void>;
18
+ /** What format does tile set use */
19
+ get format(): VectorFormat;
17
20
  get id(): string;
18
21
  get fullName(): string;
19
22
  tile(req: LambdaHttpRequest, xyz: TileDataXyz): Promise<LambdaHttpResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"tile.set.vector.d.ts","sourceRoot":"","sources":["../src/tile.set.vector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAqB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC9G,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAO,WAAW,EAAgB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAc,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAKnF,cAAM,UAAU;IACd,KAAK,qCAA4C;IAEjD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAUxC;AAED,eAAO,MAAM,MAAM,YAAmB,CAAC;AAEvC,qBAAa,aAAa;IACxB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAsB;IAC9C,UAAU,EAAE,qBAAqB,CAAC;IAClC,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,mBAAmB,CAAC;gBACjB,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa;IAKnD,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAEK,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAwBlF"}
1
+ {"version":3,"file":"tile.set.vector.d.ts","sourceRoot":"","sources":["../src/tile.set.vector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAqB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC9G,OAAO,EAAa,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAO,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAc,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAKnF,cAAM,UAAU;IACd,KAAK,qCAA4C;IAEjD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAUxC;AAED,eAAO,MAAM,MAAM,YAAmB,CAAC;AAEvC,qBAAa,aAAa;IACxB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAsB;IAC9C,UAAU,EAAE,qBAAqB,CAAC;IAClC,UAAU,EAAE,aAAa,CAAC;IAC1B,OAAO,EAAE,mBAAmB,CAAC;gBACjB,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa;IAK7C,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,oCAAoC;IACpC,IAAI,MAAM,IAAI,YAAY,CAEzB;IAED,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAEK,IAAI,CAAC,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAyBlF"}
@@ -1,5 +1,6 @@
1
1
  import { TileSetNameParser, TileSetType } from '@basemaps/config';
2
- import { fsa, VectorFormat } from '@basemaps/shared';
2
+ import { GoogleTms, VectorFormat } from '@basemaps/geo';
3
+ import { fsa } from '@basemaps/shared';
3
4
  import { Cotar } from '@cotar/core';
4
5
  import { HttpHeader, LambdaHttpResponse } from '@linzjs/lambda';
5
6
  import { NotFound } from './routes/response.js';
@@ -27,6 +28,13 @@ export class TileSetVector {
27
28
  this.components = TileSetNameParser.parse(name);
28
29
  this.tileMatrix = tileMatrix;
29
30
  }
31
+ async init(record) {
32
+ this.tileSet = record;
33
+ }
34
+ /** What format does tile set use */
35
+ get format() {
36
+ return VectorFormat.MapboxVectorTiles;
37
+ }
30
38
  get id() {
31
39
  return TileSets.id(this.fullName, this.tileMatrix);
32
40
  }
@@ -36,6 +44,8 @@ export class TileSetVector {
36
44
  async tile(req, xyz) {
37
45
  if (xyz.ext !== VectorFormat.MapboxVectorTiles)
38
46
  return NotFound;
47
+ if (xyz.tileMatrix.identifier !== GoogleTms.identifier)
48
+ return NotFound;
39
49
  if (this.tileSet.layers.length > 1)
40
50
  return new LambdaHttpResponse(500, 'Too many layers in tileset');
41
51
  const [layer] = this.tileSet.layers;
@@ -1,14 +1,25 @@
1
- import { ConfigProvider } from '@basemaps/config';
2
- import { Bounds, TileMatrixSet, WmtsProvider } from '@basemaps/geo';
1
+ import { Bounds, ImageFormat, TileMatrixSet, WmtsProvider } from '@basemaps/geo';
3
2
  import { VNodeElement } from '@basemaps/shared';
4
3
  import { TileSetRaster } from './tile.set.raster.js';
4
+ /**
5
+ * Default the tile matrix id to the projection of the TileMatrixSet
6
+ */
7
+ export declare function getTileMatrixId(tileMatrix: TileMatrixSet): string;
8
+ export interface WmtsCapabilitiesParams {
9
+ httpBase: string;
10
+ provider: WmtsProvider;
11
+ layers: TileSetRaster[];
12
+ apiKey?: string;
13
+ formats?: ImageFormat[];
14
+ }
5
15
  export declare class WmtsCapabilities {
6
16
  httpBase: string;
7
17
  provider: WmtsProvider;
8
18
  layers: Map<string, TileSetRaster[]>;
9
19
  apiKey?: string;
10
20
  tileMatrixSets: Map<string, TileMatrixSet>;
11
- constructor(httpBase: string, provider: WmtsProvider, layers: TileSetRaster[], apiKey?: string);
21
+ formats: ImageFormat[];
22
+ constructor(params: WmtsCapabilitiesParams);
12
23
  buildWgs84BoundingBox(layers: TileSetRaster[], tagName?: string): VNodeElement;
13
24
  buildBoundingBox(tms: TileMatrixSet, extent: Bounds): VNodeElement;
14
25
  buildProvider(): VNodeElement[];
@@ -18,7 +29,6 @@ export declare class WmtsCapabilities {
18
29
  buildStyle(): VNodeElement;
19
30
  buildTileMatrixSet(tms: TileMatrixSet): VNodeElement;
20
31
  toVNode(): VNodeElement;
21
- toString(): string;
22
- static toXml(httpBase: string, provider: ConfigProvider, tileSet: TileSetRaster[], apiKey?: string): string;
32
+ toXml(): string;
23
33
  }
24
34
  //# sourceMappingURL=wmts.capability.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wmts.capability.d.ts","sourceRoot":"","sources":["../src/wmts.capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAmB,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAiB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA0BrD,qBAAa,gBAAgB;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IAEvB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAa;IAEjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,6BAAoC;gBAEtC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM;IAmB9F,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,OAAO,SAAyB,GAAG,YAAY;IAe9F,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY;IAQlE,aAAa,IAAI,YAAY,EAAE;IAkC/B,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAc5D,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY;IAQtE,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY;IAuBjD,UAAU,IAAI,YAAY;IAI1B,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY;IAoBpD,OAAO,IAAI,YAAY;IAUvB,QAAQ,IAAI,MAAM;IAIlB,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;CAG5G"}
1
+ {"version":3,"file":"wmts.capability.d.ts","sourceRoot":"","sources":["../src/wmts.capability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAmB,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClG,OAAO,EAAiB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiBrD;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,aAAa,GAAG,MAAM,CAIjE;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IAEvB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAa;IAEjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,6BAAoC;IAClD,OAAO,EAAE,WAAW,EAAE,CAAC;gBAEX,MAAM,EAAE,sBAAsB;IAoB1C,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,OAAO,SAAyB,GAAG,YAAY;IAe9F,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY;IAQlE,aAAa,IAAI,YAAY,EAAE;IAkC/B,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAc5D,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY;IAQtE,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY;IAuBjD,UAAU,IAAI,YAAY;IAI1B,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY;IAoBpD,OAAO,IAAI,YAAY;IAUvB,KAAK,IAAI,MAAM;CAGhB"}
@@ -17,19 +17,20 @@ function wgs84Extent(layer) {
17
17
  /**
18
18
  * Default the tile matrix id to the projection of the TileMatrixSet
19
19
  */
20
- function getTileMatrixId(tileMatrix) {
20
+ export function getTileMatrixId(tileMatrix) {
21
21
  // TODO this should really change everything to identifier
22
22
  if (tileMatrix.identifier === Nztm2000QuadTms.identifier)
23
23
  return Nztm2000QuadTms.identifier;
24
24
  return tileMatrix.projection.toEpsgString();
25
25
  }
26
26
  export class WmtsCapabilities {
27
- constructor(httpBase, provider, layers, apiKey) {
27
+ constructor(params) {
28
+ var _a;
28
29
  this.layers = new Map();
29
30
  this.tileMatrixSets = new Map();
30
- this.httpBase = httpBase;
31
- this.provider = provider;
32
- for (const layer of layers) {
31
+ this.httpBase = params.httpBase;
32
+ this.provider = params.provider;
33
+ for (const layer of params.layers) {
33
34
  // TODO is grouping by name the best option
34
35
  let existing = this.layers.get(layer.fullName);
35
36
  if (existing == null) {
@@ -40,7 +41,8 @@ export class WmtsCapabilities {
40
41
  existing.push(layer);
41
42
  this.tileMatrixSets.set(layer.tileMatrix.identifier, layer.tileMatrix);
42
43
  }
43
- this.apiKey = apiKey;
44
+ this.apiKey = params.apiKey;
45
+ this.formats = (_a = params.formats) !== null && _a !== void 0 ? _a : ImageFormatOrder;
44
46
  }
45
47
  buildWgs84BoundingBox(layers, tagName = 'ows:WGS84BoundingBox') {
46
48
  let bbox = wgs84Extent(layers[0]);
@@ -127,9 +129,9 @@ export class WmtsCapabilities {
127
129
  ...layers.map((layer) => this.buildBoundingBox(layer.tileMatrix, layer.extent)),
128
130
  this.buildWgs84BoundingBox(layers),
129
131
  this.buildStyle(),
130
- ...ImageFormatOrder.map((fmt) => V('Format', 'image/' + fmt)),
132
+ ...this.formats.map((fmt) => V('Format', 'image/' + fmt)),
131
133
  ...matrixSetNodes,
132
- ...ImageFormatOrder.map((fmt) => this.buildResourceUrl(firstLayer, fmt)),
134
+ ...this.formats.map((fmt) => this.buildResourceUrl(firstLayer, fmt)),
133
135
  ]);
134
136
  }
135
137
  buildStyle() {
@@ -164,10 +166,7 @@ export class WmtsCapabilities {
164
166
  layers.push(this.buildTileMatrixSet(tms));
165
167
  return V('Capabilities', CapabilitiesAttrs, [...this.buildProvider(), V('Contents', layers)]);
166
168
  }
167
- toString() {
169
+ toXml() {
168
170
  return '<?xml version="1.0"?>\n' + this.toVNode().toString();
169
171
  }
170
- static toXml(httpBase, provider, tileSet, apiKey) {
171
- return new WmtsCapabilities(httpBase, provider, tileSet, apiKey).toString();
172
- }
173
172
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@basemaps/lambda-tiler",
3
- "version": "6.24.2",
3
+ "version": "6.27.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/linz/basemaps.git",
@@ -22,17 +22,17 @@
22
22
  "types": "./build/index.d.ts",
23
23
  "license": "MIT",
24
24
  "dependencies": {
25
- "@basemaps/config": "^6.24.2",
26
- "@basemaps/geo": "^6.24.2",
25
+ "@basemaps/config": "^6.27.0",
26
+ "@basemaps/geo": "^6.26.0",
27
27
  "@basemaps/lambda": "^6.7.0",
28
- "@basemaps/shared": "^6.24.2",
29
- "@basemaps/tiler": "^6.24.2",
30
- "@basemaps/tiler-sharp": "^6.24.2",
28
+ "@basemaps/shared": "^6.27.0",
29
+ "@basemaps/tiler": "^6.26.0",
30
+ "@basemaps/tiler-sharp": "^6.26.0",
31
31
  "@chunkd/fs": "^8.1.0",
32
32
  "@cogeotiff/core": "^7.0.0",
33
33
  "@cotar/core": "^5.3.0",
34
34
  "@linzjs/geojson": "^6.21.1",
35
- "@linzjs/lambda": "^2.0.0",
35
+ "@linzjs/lambda": "^3.0.1",
36
36
  "p-limit": "^4.0.0",
37
37
  "path-to-regexp": "^6.1.0",
38
38
  "pixelmatch": "^5.1.0",
@@ -52,12 +52,12 @@
52
52
  "bundle": "./bundle.sh"
53
53
  },
54
54
  "devDependencies": {
55
- "@basemaps/attribution": "^6.24.2",
55
+ "@basemaps/attribution": "^6.26.0",
56
56
  "@types/aws-lambda": "^8.10.75",
57
- "@types/node": "^14.11.2",
57
+ "@types/node": "^17.0.34",
58
58
  "@types/pixelmatch": "^5.0.0",
59
59
  "@types/sharp": "^0.29.3",
60
60
  "pretty-json-log": "^1.0.0"
61
61
  },
62
- "gitHead": "12826558ede6a4e6ecdc0c250afc9a784b9cb40e"
62
+ "gitHead": "c6aa61c20503cbc7f04cf31927f4e2b95aed34cb"
63
63
  }
@@ -1,7 +1,7 @@
1
- import { GoogleTms, Nztm2000Tms } from '@basemaps/geo';
1
+ import { GoogleTms, Nztm2000Tms, ImageFormat } from '@basemaps/geo';
2
2
  import { TileDataXyz, TileType } from '@basemaps/shared';
3
3
  import { TestTiff } from '@basemaps/test';
4
- import { Composition, ImageFormat } from '@basemaps/tiler';
4
+ import { Composition } from '@basemaps/tiler';
5
5
  import o from 'ospec';
6
6
  import { TileEtag } from '../routes/tile.etag.js';
7
7
 
@@ -14,7 +14,7 @@ o.spec('TileCacheKey', () => {
14
14
  z: 0,
15
15
  tileMatrix: GoogleTms,
16
16
  name: 'foo',
17
- ext: ImageFormat.PNG,
17
+ ext: ImageFormat.Png,
18
18
  type: TileType.Tile,
19
19
  };
20
20
 
@@ -1,4 +1,4 @@
1
- import { Bounds, Epsg, GoogleTms, Nztm2000QuadTms, Nztm2000Tms } from '@basemaps/geo';
1
+ import { Bounds, Epsg, GoogleTms, ImageFormat, Nztm2000QuadTms, Nztm2000Tms } from '@basemaps/geo';
2
2
  import { TileSetName, V, VNodeElement } from '@basemaps/shared';
3
3
  import { roundNumbersInString } from '@basemaps/test/build/rounding.js';
4
4
  import { createHash } from 'crypto';
@@ -21,8 +21,30 @@ o.spec('WmtsCapabilities', () => {
21
21
  const tileSet = new FakeTileSet(TileSetName.aerial, GoogleTms);
22
22
  const tileSetImagery = new FakeTileSet('01E7PJFR9AMQFJ05X9G7FQ3XMW', GoogleTms);
23
23
 
24
+ o('should output the requested formats', () => {
25
+ const wmts = new WmtsCapabilities({
26
+ httpBase: 'https://basemaps.test',
27
+ provider: Provider,
28
+ layers: [tileSet],
29
+ apiKey,
30
+ formats: [ImageFormat.Avif],
31
+ }).toVNode();
32
+
33
+ const urls = tags(wmts, 'ResourceURL');
34
+ o(urls.length).equals(1);
35
+ o(urls[0].attrs.format).equals('image/avif');
36
+ o(urls[0].attrs.template).equals(
37
+ 'https://basemaps.test/v1/tiles/aerial/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.avif?api=secret1234',
38
+ );
39
+ });
40
+
24
41
  o('should build capability xml for tileset and projection', () => {
25
- const wmts = new WmtsCapabilities('https://basemaps.test', Provider, [tileSet], apiKey);
42
+ const wmts = new WmtsCapabilities({
43
+ httpBase: 'https://basemaps.test',
44
+ provider: Provider,
45
+ layers: [tileSet],
46
+ apiKey,
47
+ });
26
48
 
27
49
  const raw = wmts.toVNode();
28
50
  const serviceId = raw.find('ows:ServiceIdentification');
@@ -102,7 +124,12 @@ o.spec('WmtsCapabilities', () => {
102
124
  compareMatrix(tileMatrices[0], '0', 1, 559082264.028717);
103
125
  compareMatrix(tileMatrices[10], '10', 1024, 545978.773465544);
104
126
 
105
- const xml = WmtsCapabilities.toXml('https://basemaps.test', Provider, [tileSet], apiKey) ?? '';
127
+ const xml = new WmtsCapabilities({
128
+ httpBase: 'https://basemaps.test',
129
+ provider: Provider,
130
+ layers: [tileSet],
131
+ apiKey,
132
+ }).toXml();
106
133
 
107
134
  o(xml).deepEquals('<?xml version="1.0"?>\n' + raw?.toString());
108
135
 
@@ -112,7 +139,11 @@ o.spec('WmtsCapabilities', () => {
112
139
  });
113
140
 
114
141
  o('should allow individual imagery sets', () => {
115
- const raw = new WmtsCapabilities('https://basemaps.test', Provider, [tileSetImagery]).toVNode();
142
+ const raw = new WmtsCapabilities({
143
+ httpBase: 'https://basemaps.test',
144
+ provider: Provider,
145
+ layers: [tileSetImagery],
146
+ }).toVNode();
116
147
 
117
148
  const tms = raw?.find('TileMatrixSet', 'ows:Identifier');
118
149
 
@@ -128,7 +159,7 @@ o.spec('WmtsCapabilities', () => {
128
159
 
129
160
  o('should support multiple projections', () => {
130
161
  const ts = [new FakeTileSet(TileSetName.aerial, Nztm2000Tms), new FakeTileSet(TileSetName.aerial, GoogleTms)];
131
- const xml = new WmtsCapabilities('basemaps.test', Provider, ts);
162
+ const xml = new WmtsCapabilities({ httpBase: 'basemaps.test', provider: Provider, layers: ts });
132
163
  const nodes = xml.toVNode();
133
164
 
134
165
  const layers = tags(nodes, 'Layer');
@@ -175,7 +206,7 @@ o.spec('WmtsCapabilities', () => {
175
206
  new FakeTileSet(TileSetName.aerial, Nztm2000Tms, 'aerial-title'),
176
207
  new FakeTileSet('01E7PJFR9AMQFJ05X9G7FQ3XMW', Nztm2000Tms, 'imagery-title'),
177
208
  ];
178
- const nodes = new WmtsCapabilities('basemaps.test', Provider, ts).toVNode();
209
+ const nodes = new WmtsCapabilities({ httpBase: 'basemaps.test', provider: Provider, layers: ts }).toVNode();
179
210
  const layers = tags(nodes, 'Layer');
180
211
  o(layers.length).equals(2);
181
212
 
@@ -199,7 +230,7 @@ o.spec('WmtsCapabilities', () => {
199
230
  'west-coast_rural_2016-17_0-3m',
200
231
  ),
201
232
  ];
202
- const nodes = new WmtsCapabilities('basemaps.test', Provider, ts).toVNode();
233
+ const nodes = new WmtsCapabilities({ httpBase: 'basemaps.test', provider: Provider, layers: ts }).toVNode();
203
234
  const layers = tags(nodes, 'Layer');
204
235
 
205
236
  o(layers.length).equals(2);
@@ -223,7 +254,7 @@ o.spec('WmtsCapabilities', () => {
223
254
  ts[1].extentOverride = new Bounds(1, 2, 2, 2);
224
255
 
225
256
  ts[2].tileSet.title = 'aerial_dunedin_urban';
226
- const nodes = new WmtsCapabilities('basemaps.test', Provider, ts).toVNode();
257
+ const nodes = new WmtsCapabilities({ httpBase: 'basemaps.test', provider: Provider, layers: ts }).toVNode();
227
258
 
228
259
  const allMatrixes = tags(nodes, 'TileMatrixSet');
229
260
 
@@ -1,5 +1,5 @@
1
1
  import { ConfigProvider, StyleJson } from '@basemaps/config';
2
- import { TileMatrixSets } from '@basemaps/geo';
2
+ import { GoogleTms, Nztm2000QuadTms, TileMatrixSets } from '@basemaps/geo';
3
3
  import { Config, Env, LogConfig, VNodeParser } from '@basemaps/shared';
4
4
  import { round } from '@basemaps/test/build/rounding.js';
5
5
  import o from 'ospec';
@@ -8,7 +8,7 @@ import { handleRequest } from '../index.js';
8
8
  import { TileEtag } from '../routes/tile.etag.js';
9
9
  import { TileSets } from '../tile.set.cache.js';
10
10
  import { TileComposer } from '../tile.set.raster.js';
11
- import { FakeTileSet, mockRequest, Provider } from './xyz.util.js';
11
+ import { FakeTileSet, FakeTileSetVector, mockRequest, Provider } from './xyz.util.js';
12
12
 
13
13
  const sandbox = sinon.createSandbox();
14
14
 
@@ -53,6 +53,8 @@ o.spec('LambdaXyz', () => {
53
53
  }
54
54
  }
55
55
 
56
+ TileSets.add(new FakeTileSetVector('topographic', GoogleTms));
57
+
56
58
  (Config.Provider as any).get = async (): Promise<ConfigProvider> => Provider;
57
59
  });
58
60
 
@@ -186,51 +188,76 @@ o.spec('LambdaXyz', () => {
186
188
  });
187
189
 
188
190
  o.spec('tileJson', () => {
189
- o('should 304 if a json is not modified', async () => {
190
- // delete process.env[Env.PublicUrlBase];
191
+ o('should 404 if invalid url is given', async () => {
192
+ const request = mockRequest('/v1/tiles/tile.json', 'get', apiKeyHeader);
191
193
 
192
- const key = 'BBfQpNXA3Q90jlFrLSOZhxbvfOh7OpN1OEE+BylpbHw=';
193
- const request = mockRequest('/v1/tiles/tile.json', 'get', { 'if-none-match': key, ...apiKeyHeader });
194
+ const res = await handleRequest(request);
195
+ o(res.status).equals(404);
196
+ });
197
+
198
+ o('should serve tile json for tile_set', async () => {
199
+ const request = mockRequest('/v1/tiles/aerial/NZTM2000Quad/tile.json', 'get', apiKeyHeader);
194
200
 
195
201
  const res = await handleRequest(request);
196
- if (res.status === 200) {
197
- o(res.header('eTaG')).equals(key); // this line is useful for discovering the new etag
198
- return;
199
- }
202
+ o(res.status).equals(200);
203
+ o(res.header('cache-control')).equals('no-store');
200
204
 
201
- o(res.status).equals(304);
202
- o(rasterMock.calls.length).equals(0);
205
+ const body = Buffer.from(res.body ?? '', 'base64').toString();
206
+ o(JSON.parse(body)).deepEquals({
207
+ tiles: [`https://tiles.test/v1/tiles/aerial/NZTM2000Quad/{z}/{x}/{y}.webp?api=${apiKey}`],
208
+ tilejson: '3.0.0',
209
+ });
210
+ });
203
211
 
204
- o(request.logContext['cache']).deepEquals({ key, match: key, hit: true });
212
+ o('should serve vector tiles', async () => {
213
+ const request = mockRequest('/v1/tiles/topographic/WebMercatorQuad/tile.json', 'get', apiKeyHeader);
214
+
215
+ const res = await handleRequest(request);
216
+ o(res.status).equals(200);
217
+
218
+ const body = Buffer.from(res.body ?? '', 'base64').toString();
219
+ o(JSON.parse(body)).deepEquals({
220
+ tiles: [`https://tiles.test/v1/tiles/topographic/EPSG:3857/{z}/{x}/{y}.pbf?api=${apiKey}`],
221
+ tilejson: '3.0.0',
222
+ });
205
223
  });
206
224
 
207
- o('should 200 if a invalid etag is given', async () => {
208
- const key = 'ABCXecTdbcdjCyzB1MHOOQbrOkD2TTJ0ORh4JuXqhxXEE0=';
209
- const request = mockRequest('/v1/tiles/tile.json', 'get', { 'if-none-match': key, ...apiKeyHeader });
225
+ o('should serve vector tiles with min/max zoom', async () => {
226
+ const fakeTileSet = new FakeTileSetVector('fake-vector', GoogleTms);
227
+ fakeTileSet.tileSet.maxZoom = 15;
228
+ fakeTileSet.tileSet.minZoom = 3;
229
+ TileSets.add(fakeTileSet);
230
+ const request = mockRequest('/v1/tiles/fake-vector/WebMercatorQuad/tile.json', 'get', apiKeyHeader);
210
231
 
211
232
  const res = await handleRequest(request);
212
233
  o(res.status).equals(200);
213
- o(res.header('etag')).equals('BBfQpNXA3Q90jlFrLSOZhxbvfOh7OpN1OEE+BylpbHw=');
214
- const out = JSON.parse(Buffer.from(res.body ?? '', 'base64').toString());
215
- o(out.tiles[0].startsWith('https://tiles.test/v1/tiles/tile.json/undefined/{z}/{x}/{y}.pbf?api=')).equals(true);
216
- o(request.logContext['cache']).deepEquals(undefined);
234
+
235
+ const body = Buffer.from(res.body ?? '', 'base64').toString();
236
+ o(JSON.parse(body)).deepEquals({
237
+ tiles: [`https://tiles.test/v1/tiles/fake-vector/EPSG:3857/{z}/{x}/{y}.pbf?api=${apiKey}`],
238
+ maxzoom: 15,
239
+ minzoom: 3,
240
+ tilejson: '3.0.0',
241
+ });
217
242
  });
218
243
 
219
- o('should serve tile json for tile_set', async () => {
220
- const request = mockRequest('/v1/tiles/topographic/Google/tile.json', 'get', apiKeyHeader);
244
+ o('should serve convert zoom to tile matrix', async () => {
245
+ const fakeTileSet = new FakeTileSetVector('fake-vector', Nztm2000QuadTms);
246
+ fakeTileSet.tileSet.maxZoom = 15;
247
+ fakeTileSet.tileSet.minZoom = 1;
248
+ TileSets.add(fakeTileSet);
249
+
250
+ const request = mockRequest('/v1/tiles/fake-vector/NZTM2000Quad/tile.json', 'get', apiKeyHeader);
221
251
 
222
252
  const res = await handleRequest(request);
223
253
  o(res.status).equals(200);
224
- o(res.header('content-type')).equals('application/json');
225
- o(res.header('cache-control')).equals('max-age=120');
226
254
 
227
255
  const body = Buffer.from(res.body ?? '', 'base64').toString();
228
256
  o(JSON.parse(body)).deepEquals({
229
- tiles: [`https://tiles.test/v1/tiles/topographic/Google/{z}/{x}/{y}.pbf?api=${apiKey}`],
257
+ tiles: [`https://tiles.test/v1/tiles/fake-vector/NZTM2000Quad/{z}/{x}/{y}.pbf?api=${apiKey}`],
258
+ maxzoom: 13,
230
259
  minzoom: 0,
231
- maxzoom: 15,
232
- format: 'pbf',
233
- tilejson: '2.0.0',
260
+ tilejson: '3.0.0',
234
261
  });
235
262
  });
236
263
  });
@@ -1,9 +1,10 @@
1
1
  import { ConfigProvider } from '@basemaps/config';
2
2
  import { TileMatrixSet } from '@basemaps/geo';
3
- import { LambdaHttpRequest, LambdaAlbRequest } from '@linzjs/lambda';
4
3
  import { LogConfig } from '@basemaps/shared';
5
- import { TileSetRaster } from '../tile.set.raster.js';
4
+ import { LambdaAlbRequest, LambdaHttpRequest } from '@linzjs/lambda';
6
5
  import { Context } from 'aws-lambda';
6
+ import { TileSetRaster } from '../tile.set.raster.js';
7
+ import { TileSetVector } from '../tile.set.vector.js';
7
8
 
8
9
  export function mockRequest(path: string, method = 'get', headers: Record<string, string> = {}): LambdaHttpRequest {
9
10
  return new LambdaAlbRequest(
@@ -27,6 +28,13 @@ export class FakeTileSet extends TileSetRaster {
27
28
  }
28
29
  }
29
30
 
31
+ export class FakeTileSetVector extends TileSetVector {
32
+ constructor(name: string, tileMatrix: TileMatrixSet) {
33
+ super(name, tileMatrix);
34
+ this.tileSet = {} as any;
35
+ }
36
+ }
37
+
30
38
  export const Provider: ConfigProvider = {
31
39
  createdAt: Date.now(),
32
40
  name: 'main',
package/src/cli/dump.ts CHANGED
@@ -1,6 +1,5 @@
1
- import { Nztm2000Tms } from '@basemaps/geo';
1
+ import { Nztm2000Tms, ImageFormat } from '@basemaps/geo';
2
2
  import { LogConfig } from '@basemaps/shared';
3
- import { ImageFormat } from '@basemaps/tiler';
4
3
  import { LambdaAlbRequest } from '@linzjs/lambda';
5
4
  import { Context } from 'aws-lambda';
6
5
  import { promises as fs } from 'fs';
@@ -12,7 +11,7 @@ import { TileSetLocal } from './tile.set.local.js';
12
11
  const xyz = { x: 0, y: 0, z: 0 };
13
12
  const tileMatrix = Nztm2000Tms;
14
13
  const tileSetName = 'aerial';
15
- const ext = ImageFormat.PNG;
14
+ const ext = ImageFormat.Png;
16
15
 
17
16
  /** Load a tileset form a file path otherwise default to the hard coded one from AWS */
18
17
  async function getTileSet(filePath?: string): Promise<TileSet> {
package/src/index.ts CHANGED
@@ -48,4 +48,5 @@ export async function handleRequest(req: LambdaHttpRequest): Promise<LambdaHttpR
48
48
  }
49
49
  }
50
50
 
51
- export const handler = lf.http(handleRequest, LogConfig.get());
51
+ export const handler = lf.http(LogConfig.get());
52
+ handler.router.get('*', handleRequest);
@@ -268,6 +268,7 @@ function makeImageRecord(id: string, name: string, x = 10): ConfigImagery {
268
268
  id,
269
269
  name,
270
270
  projection: EpsgCode.Google,
271
+ tileMatrix: 'WebMercatorQuad',
271
272
  uri: 's3://bucket/path/' + name,
272
273
  bounds: GoogleTms.tileToSourceBounds({ x, y: 10, z: 5 }),
273
274
  files: [0, 1].map((i) => {
@@ -21,6 +21,7 @@ const ctx: LambdaHttpRequest = new LambdaAlbRequest(
21
21
  );
22
22
 
23
23
  o.spec('health', async () => {
24
+ o.specTimeout(1000);
24
25
  const sandbox = sinon.createSandbox();
25
26
 
26
27
  const tileSet = new TileSetRaster('health', GoogleTms);
@@ -57,8 +58,6 @@ o.spec('health', async () => {
57
58
  // Prepare mock test tile response based on the static test tiles
58
59
 
59
60
  o('Should give a 200 response', async () => {
60
- o.timeout(500);
61
-
62
61
  // Given ... a series good get tile response
63
62
  const callback = sandbox.stub(tileSet, 'tile');
64
63
  callback.onCall(0).resolves(Response1);
@@ -73,7 +72,6 @@ o.spec('health', async () => {
73
72
  });
74
73
 
75
74
  o('Should return mis-match tile response', async () => {
76
- o.timeout(500);
77
75
  // Given ... a bad get tile response for second get tile
78
76
  const callback = sandbox.stub(tileSet, 'tile');
79
77
  callback.onCall(0).resolves(Response1);