@basemaps/lambda-tiler 7.1.1 → 7.2.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.
@@ -1 +0,0 @@
1
- export {};
@@ -1,65 +0,0 @@
1
- import assert from 'node:assert';
2
- import { describe, it } from 'node:test';
3
- import { mockUrlRequest } from '../../__tests__/xyz.util.js';
4
- import { filterLayers } from '../filter.js';
5
- describe('filterLayers', () => {
6
- const sourceLayers = [
7
- {
8
- name: 'waikato-0_625m-snc12836-2004',
9
- title: 'Waikato 0.625m SNC12836 (2004-2008)',
10
- },
11
- {
12
- name: 'hawkes-bay--manawat-whanganui-0_75m-snc30001-2002',
13
- title: 'Hawkes Bay / Manawatū-Whanganui 0.75m SNC30001 (2002)',
14
- },
15
- {
16
- name: 'canterbury-0_75m-snc25054-2000-2001',
17
- title: 'Canterbury 0.75m SNC25054 (2000-2001)',
18
- },
19
- {
20
- name: 'otago-0_375m-sn3806-1975',
21
- title: 'Otago 0.375m SN3806 (1975)',
22
- },
23
- ];
24
- it('should not filter with empty parameters', () => {
25
- const layers = filterLayers(mockUrlRequest('/foo/bar,js'), sourceLayers);
26
- assert.deepEqual(layers, sourceLayers);
27
- });
28
- it('should filter date[after]', () => {
29
- const dateAfter = '2003-12-31T23:59:59.999';
30
- const layers = filterLayers(mockUrlRequest('/foo/bar,js', `?date[after]=${dateAfter}`), sourceLayers);
31
- assert.deepEqual(layers, [sourceLayers[0]]);
32
- });
33
- it('should filter date[before]', () => {
34
- const dateBefore = '2003-01-01T00:00:00.000Z';
35
- const layers = filterLayers(mockUrlRequest('/foo/bar,js', `?date[before]=${dateBefore}`), sourceLayers);
36
- assert.deepEqual(layers, sourceLayers.slice(1));
37
- });
38
- it('should filter date[before] in between years', () => {
39
- const dateBefore = '2026-01-01T00:00:00.000Z';
40
- const layer = [{ name: '', title: 'Waikato 0.625m SNC12836 (2020-2028)' }];
41
- const layers = filterLayers(mockUrlRequest('/foo/bar,js', `?date[before]=${dateBefore}`), layer);
42
- assert.deepEqual(layers, layer);
43
- });
44
- it('should filter date[after] in between years', () => {
45
- const dateAfter = '2026-12-31T23:59:59.999Z';
46
- const layer = [{ name: '', title: 'Waikato 0.625m SNC12836 (2020-2028)' }];
47
- const layers = filterLayers(mockUrlRequest('/foo/bar,js', `?date[after]=${dateAfter}`), layer);
48
- assert.deepEqual(layers, layer);
49
- });
50
- it('should filter date[after] and date[before] in between years', () => {
51
- const dateAfter = '2026-12-31T23:59:59.999Z';
52
- const dateBefore = '2028-01-01T00:00:00.000Z';
53
- const layer = [{ name: '', title: 'Waikato 0.625m SNC12836 (2020-2028)' }];
54
- const layers = filterLayers(mockUrlRequest('/foo/bar,js', `?date[after]=${dateAfter}&date[before]=${dateBefore}`), layer);
55
- assert.deepEqual(layers, layer);
56
- });
57
- it('should filter date[after] and date[before] in between years with single year', () => {
58
- const dateAfter = '2026-12-31T23:59:59.999Z';
59
- const dateBefore = '2028-01-01T00:00:00.000Z';
60
- const layer = [{ name: '', title: 'Waikato 0.625m SNC12836 (2028)' }];
61
- const layers = filterLayers(mockUrlRequest('/foo/bar,js', `?date[after]=${dateAfter}&date[before]=${dateBefore}`), layer);
62
- assert.deepEqual(layers, layer);
63
- });
64
- });
65
- //# sourceMappingURL=filter.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filter.test.js","sourceRoot":"","sources":["../../../src/util/__test__/filter.test.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import { ConfigLayer } from '@basemaps/config';
2
- import { LambdaHttpRequest } from '@linzjs/lambda';
3
- export declare const FilterNames: {
4
- DateBefore: string;
5
- DateAfter: string;
6
- };
7
- export declare function getFilters(req: LambdaHttpRequest): Record<string, string | undefined>;
8
- /**
9
- * Convert the year range into full ISO date year range
10
- *
11
- * Expand to the full year of jan 1st 00:00 -> Dec 31st 23:59
12
- */
13
- export declare function yearRangeToInterval(x: [number] | [number, number]): [Date, Date];
14
- export declare function filterLayers(req: LambdaHttpRequest, layers: ConfigLayer[]): ConfigLayer[];
@@ -1,58 +0,0 @@
1
- import { extractYearRangeFromTitle } from '@basemaps/shared';
2
- import { LambdaHttpResponse } from '@linzjs/lambda';
3
- export const FilterNames = {
4
- DateBefore: 'date[before]',
5
- DateAfter: 'date[after]',
6
- };
7
- export function getFilters(req) {
8
- return {
9
- [FilterNames.DateBefore]: req.query.get(FilterNames.DateBefore) ?? undefined,
10
- [FilterNames.DateAfter]: req.query.get(FilterNames.DateAfter) ?? undefined,
11
- };
12
- }
13
- /**
14
- * Convert the year range into full ISO date year range
15
- *
16
- * Expand to the full year of jan 1st 00:00 -> Dec 31st 23:59
17
- */
18
- export function yearRangeToInterval(x) {
19
- if (x.length === 1)
20
- return [new Date(`${x[0]}-01-01T00:00:00.000Z`), new Date(`${x[0]}-12-31T23:59:59.999Z`)];
21
- return [new Date(`${x[0]}-01-01T00:00:00.000Z`), new Date(`${x[1]}-12-31T23:59:59.999Z`)];
22
- }
23
- function parseDateAsIso(s) {
24
- if (s == null)
25
- return null;
26
- const date = new Date(s);
27
- if (isNaN(date.getTime()))
28
- throw new LambdaHttpResponse(400, `Invalid date format: "${s}"`);
29
- return date;
30
- }
31
- export function filterLayers(req, layers) {
32
- const dateAfterQuery = req.query.get(FilterNames.DateAfter);
33
- const dateBeforeQuery = req.query.get(FilterNames.DateBefore);
34
- if (dateAfterQuery == null && dateBeforeQuery == null)
35
- return layers;
36
- const dateAfter = parseDateAsIso(dateAfterQuery);
37
- const dateBefore = parseDateAsIso(dateBeforeQuery);
38
- const filtered = layers.filter((l) => {
39
- if (l.title == null)
40
- return false;
41
- const yearRange = extractYearRangeFromTitle(l.title);
42
- if (yearRange == null)
43
- return false;
44
- const ranges = yearRangeToInterval(yearRange);
45
- const startYear = ranges[0];
46
- const endYear = ranges[1];
47
- return (dateAfter == null || endYear >= dateAfter) && (dateBefore == null || startYear <= dateBefore);
48
- });
49
- // Trace that layers have been filtered
50
- req.set('layerFilter', {
51
- [FilterNames.DateBefore]: dateBefore?.toISOString(),
52
- [FilterNames.DateAfter]: dateAfter?.toISOString(),
53
- layerCount: layers.length,
54
- filterCount: filtered.length,
55
- });
56
- return filtered;
57
- }
58
- //# sourceMappingURL=filter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/util/filter.ts"],"names":[],"mappings":"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"}
@@ -1,83 +0,0 @@
1
- import assert from 'node:assert';
2
- import { describe, it } from 'node:test';
3
-
4
- import { ConfigLayer } from '@basemaps/config';
5
-
6
- import { mockUrlRequest } from '../../__tests__/xyz.util.js';
7
- import { filterLayers } from '../filter.js';
8
-
9
- describe('filterLayers', () => {
10
- const sourceLayers: ConfigLayer[] = [
11
- {
12
- name: 'waikato-0_625m-snc12836-2004',
13
- title: 'Waikato 0.625m SNC12836 (2004-2008)',
14
- },
15
- {
16
- name: 'hawkes-bay--manawat-whanganui-0_75m-snc30001-2002',
17
- title: 'Hawkes Bay / Manawatū-Whanganui 0.75m SNC30001 (2002)',
18
- },
19
- {
20
- name: 'canterbury-0_75m-snc25054-2000-2001',
21
- title: 'Canterbury 0.75m SNC25054 (2000-2001)',
22
- },
23
- {
24
- name: 'otago-0_375m-sn3806-1975',
25
- title: 'Otago 0.375m SN3806 (1975)',
26
- },
27
- ];
28
-
29
- it('should not filter with empty parameters', () => {
30
- const layers = filterLayers(mockUrlRequest('/foo/bar,js'), sourceLayers);
31
- assert.deepEqual(layers, sourceLayers);
32
- });
33
-
34
- it('should filter date[after]', () => {
35
- const dateAfter = '2003-12-31T23:59:59.999';
36
- const layers = filterLayers(mockUrlRequest('/foo/bar,js', `?date[after]=${dateAfter}`), sourceLayers);
37
- assert.deepEqual(layers, [sourceLayers[0]]);
38
- });
39
-
40
- it('should filter date[before]', () => {
41
- const dateBefore = '2003-01-01T00:00:00.000Z';
42
- const layers = filterLayers(mockUrlRequest('/foo/bar,js', `?date[before]=${dateBefore}`), sourceLayers);
43
- assert.deepEqual(layers, sourceLayers.slice(1));
44
- });
45
-
46
- it('should filter date[before] in between years', () => {
47
- const dateBefore = '2026-01-01T00:00:00.000Z';
48
- const layer = [{ name: '', title: 'Waikato 0.625m SNC12836 (2020-2028)' }];
49
- const layers = filterLayers(mockUrlRequest('/foo/bar,js', `?date[before]=${dateBefore}`), layer);
50
- assert.deepEqual(layers, layer);
51
- });
52
-
53
- it('should filter date[after] in between years', () => {
54
- const dateAfter = '2026-12-31T23:59:59.999Z';
55
- const layer = [{ name: '', title: 'Waikato 0.625m SNC12836 (2020-2028)' }];
56
- const layers = filterLayers(mockUrlRequest('/foo/bar,js', `?date[after]=${dateAfter}`), layer);
57
- assert.deepEqual(layers, layer);
58
- });
59
-
60
- it('should filter date[after] and date[before] in between years', () => {
61
- const dateAfter = '2026-12-31T23:59:59.999Z';
62
- const dateBefore = '2028-01-01T00:00:00.000Z';
63
-
64
- const layer = [{ name: '', title: 'Waikato 0.625m SNC12836 (2020-2028)' }];
65
- const layers = filterLayers(
66
- mockUrlRequest('/foo/bar,js', `?date[after]=${dateAfter}&date[before]=${dateBefore}`),
67
- layer,
68
- );
69
- assert.deepEqual(layers, layer);
70
- });
71
-
72
- it('should filter date[after] and date[before] in between years with single year', () => {
73
- const dateAfter = '2026-12-31T23:59:59.999Z';
74
- const dateBefore = '2028-01-01T00:00:00.000Z';
75
-
76
- const layer = [{ name: '', title: 'Waikato 0.625m SNC12836 (2028)' }];
77
- const layers = filterLayers(
78
- mockUrlRequest('/foo/bar,js', `?date[after]=${dateAfter}&date[before]=${dateBefore}`),
79
- layer,
80
- );
81
- assert.deepEqual(layers, layer);
82
- });
83
- });
@@ -1,60 +0,0 @@
1
- import { ConfigLayer } from '@basemaps/config';
2
- import { extractYearRangeFromTitle } from '@basemaps/shared';
3
- import { LambdaHttpRequest, LambdaHttpResponse } from '@linzjs/lambda';
4
-
5
- export const FilterNames = {
6
- DateBefore: 'date[before]',
7
- DateAfter: 'date[after]',
8
- };
9
-
10
- export function getFilters(req: LambdaHttpRequest): Record<string, string | undefined> {
11
- return {
12
- [FilterNames.DateBefore]: req.query.get(FilterNames.DateBefore) ?? undefined,
13
- [FilterNames.DateAfter]: req.query.get(FilterNames.DateAfter) ?? undefined,
14
- };
15
- }
16
- /**
17
- * Convert the year range into full ISO date year range
18
- *
19
- * Expand to the full year of jan 1st 00:00 -> Dec 31st 23:59
20
- */
21
- export function yearRangeToInterval(x: [number] | [number, number]): [Date, Date] {
22
- if (x.length === 1) return [new Date(`${x[0]}-01-01T00:00:00.000Z`), new Date(`${x[0]}-12-31T23:59:59.999Z`)];
23
- return [new Date(`${x[0]}-01-01T00:00:00.000Z`), new Date(`${x[1]}-12-31T23:59:59.999Z`)];
24
- }
25
-
26
- function parseDateAsIso(s: string | null): Date | null {
27
- if (s == null) return null;
28
- const date = new Date(s);
29
- if (isNaN(date.getTime())) throw new LambdaHttpResponse(400, `Invalid date format: "${s}"`);
30
- return date;
31
- }
32
-
33
- export function filterLayers(req: LambdaHttpRequest, layers: ConfigLayer[]): ConfigLayer[] {
34
- const dateAfterQuery = req.query.get(FilterNames.DateAfter);
35
- const dateBeforeQuery = req.query.get(FilterNames.DateBefore);
36
-
37
- if (dateAfterQuery == null && dateBeforeQuery == null) return layers;
38
- const dateAfter = parseDateAsIso(dateAfterQuery);
39
- const dateBefore = parseDateAsIso(dateBeforeQuery);
40
-
41
- const filtered = layers.filter((l) => {
42
- if (l.title == null) return false;
43
- const yearRange = extractYearRangeFromTitle(l.title);
44
- if (yearRange == null) return false;
45
-
46
- const ranges = yearRangeToInterval(yearRange);
47
- const startYear = ranges[0];
48
- const endYear = ranges[1];
49
- return (dateAfter == null || endYear >= dateAfter) && (dateBefore == null || startYear <= dateBefore);
50
- });
51
-
52
- // Trace that layers have been filtered
53
- req.set('layerFilter', {
54
- [FilterNames.DateBefore]: dateBefore?.toISOString(),
55
- [FilterNames.DateAfter]: dateAfter?.toISOString(),
56
- layerCount: layers.length,
57
- filterCount: filtered.length,
58
- });
59
- return filtered;
60
- }