@basemaps/cli-config 8.10.2 → 8.11.2

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,2 +1,5 @@
1
1
  import { TileSetConfigSchema } from '@basemaps/config-loader/build/json/parse.tile.set.js';
2
2
  export declare const TsAerial: TileSetConfigSchema;
3
+ export declare const TsVector: TileSetConfigSchema;
4
+ export declare const TsIndividual: TileSetConfigSchema;
5
+ export declare const TsElevation: TileSetConfigSchema;
@@ -30,4 +30,81 @@ export const TsAerial = {
30
30
  },
31
31
  ],
32
32
  };
33
+ export const TsVector = {
34
+ type: 'vector',
35
+ id: 'ts_topographic-v2',
36
+ title: 'New Zealand Topographic Vector Map',
37
+ maxZoom: 15,
38
+ format: 'pbf',
39
+ layers: [
40
+ {
41
+ '2193': 's3://linz-basemaps/vector/2193/topographic/01K07MGSVMXKP39SVR4RF63NQ4/topographic-v2.tar.co',
42
+ '3857': 's3://linz-basemaps/vector/3857/topographic/01K07MN7NQR1WTBS5W9VW49EW2/topographic-v2.tar.co',
43
+ name: 'topographic-v2',
44
+ title: 'Topographic V2',
45
+ },
46
+ ],
47
+ };
48
+ export const TsIndividual = {
49
+ type: 'raster',
50
+ id: 'ts_top-of-the-south-flood-2022-0.15m',
51
+ title: 'Top of the South Flood 0.15m Aerial Photos (2022)',
52
+ category: 'Event',
53
+ layers: [
54
+ {
55
+ '2193': 's3://linz-basemaps/2193/top-of-the-south_flood_2022_0.15m/01GGDTRTDV2BA47P4TQ6CGWMFR/',
56
+ '3857': 's3://linz-basemaps/3857/top-of-the-south_flood_2022_0.15m/01GGDTSGRK0Z4C70WXBYMEXK4X/',
57
+ name: 'top-of-the-south-flood-2022-0.15m',
58
+ title: 'Top of the South Flood 0.15m Aerial Photos (2022)',
59
+ category: 'Event',
60
+ minZoom: 0,
61
+ maxZoom: 32,
62
+ },
63
+ ],
64
+ };
65
+ export const TsElevation = {
66
+ id: 'ts_elevation',
67
+ type: 'raster',
68
+ description: 'Elevation Basemap',
69
+ title: 'Elevation',
70
+ category: 'Elevation',
71
+ layers: [
72
+ {
73
+ '2193': 's3://nz-elevation/new-zealand/new-zealand-contour/dem_8m/2193/',
74
+ '3857': 's3://linz-basemaps/elevation/3857/new-zealand_2012_dem_8m/01HZ0YNQPGH5RJ01S5R5T2VAPM/',
75
+ title: 'New Zealand 8m DEM (2012)',
76
+ name: 'new-zealand_2012_dem_8m',
77
+ },
78
+ {
79
+ '2193': 's3://nz-elevation/wellington/wellington_2013-2014/dem_1m/2193/',
80
+ '3857': 's3://linz-basemaps/elevation/3857/wellington_2013-2014_dem_1m/01HZ67MBQJ8VASM6Z69PMATPHH/',
81
+ minZoom: 9,
82
+ title: 'Wellington LiDAR 1m DEM (2013-2014)',
83
+ name: 'wellington_2013-2014_dem_1m',
84
+ },
85
+ {
86
+ '2193': 's3://nz-elevation/manawatu-whanganui/manawatu-whanganui_2015-2016/dem_1m/2193/',
87
+ '3857': 's3://linz-basemaps/elevation/3857/manawatu-whanganui_2015-2016_dem_1m/01HZ65XSK73Z8GBSTWJ6SKYGGV/',
88
+ minZoom: 9,
89
+ title: 'Manawatū-Whanganui LiDAR 1m DEM (2015-2016)',
90
+ name: 'manawatu-whanganui_2015-2016_dem_1m',
91
+ },
92
+ ],
93
+ outputs: [
94
+ {
95
+ title: 'Terrain RGB',
96
+ name: 'terrain-rgb',
97
+ pipeline: [{ type: 'terrain-rgb' }],
98
+ format: ['png'],
99
+ background: { r: 1, g: 134, b: 160, alpha: 1 },
100
+ resizeKernel: { in: 'nearest', out: 'nearest' },
101
+ },
102
+ {
103
+ title: 'Color ramp',
104
+ name: 'color-ramp',
105
+ pipeline: [{ type: 'color-ramp' }],
106
+ background: { r: 172, g: 204, b: 226, alpha: 1 },
107
+ },
108
+ ],
109
+ };
33
110
  //# sourceMappingURL=config.diff.data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.diff.data.js","sourceRoot":"","sources":["../../src/__tests__/config.diff.data.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,QAAQ,GAAwB;IAC3C,IAAI,EAAE,QAA8B;IACpC,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,wBAAwB;IAC/B,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE;QACN;YACE,MAAM,EAAE,sEAAsE;YAC9E,MAAM,EAAE,sEAAsE;YAC9E,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,gDAAgD;YACvD,QAAQ,EAAE,qBAAqB;YAC/B,OAAO,EAAE,EAAE;SACZ;QACD;YACE,MAAM,EAAE,4EAA4E;YACpF,MAAM,EAAE,4EAA4E;YACpF,IAAI,EAAE,wBAAwB;YAC9B,KAAK,EAAE,8CAA8C;YACrD,QAAQ,EAAE,qBAAqB;YAC/B,OAAO,EAAE,EAAE;SACZ;QACD;YACE,MAAM,EAAE,2EAA2E;YACnF,MAAM,EAAE,2EAA2E;YACnF,IAAI,EAAE,uBAAuB;YAC7B,KAAK,EAAE,6CAA6C;YACpD,QAAQ,EAAE,qBAAqB;YAC/B,OAAO,EAAE,EAAE;SACZ;KACe;CACnB,CAAC"}
1
+ {"version":3,"file":"config.diff.data.js","sourceRoot":"","sources":["../../src/__tests__/config.diff.data.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,QAAQ,GAAwB;IAC3C,IAAI,EAAE,QAA8B;IACpC,EAAE,EAAE,WAAW;IACf,KAAK,EAAE,wBAAwB;IAC/B,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE;QACN;YACE,MAAM,EAAE,sEAAsE;YAC9E,MAAM,EAAE,sEAAsE;YAC9E,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,gDAAgD;YACvD,QAAQ,EAAE,qBAAqB;YAC/B,OAAO,EAAE,EAAE;SACZ;QACD;YACE,MAAM,EAAE,4EAA4E;YACpF,MAAM,EAAE,4EAA4E;YACpF,IAAI,EAAE,wBAAwB;YAC9B,KAAK,EAAE,8CAA8C;YACrD,QAAQ,EAAE,qBAAqB;YAC/B,OAAO,EAAE,EAAE;SACZ;QACD;YACE,MAAM,EAAE,2EAA2E;YACnF,MAAM,EAAE,2EAA2E;YACnF,IAAI,EAAE,uBAAuB;YAC7B,KAAK,EAAE,6CAA6C;YACpD,QAAQ,EAAE,qBAAqB;YAC/B,OAAO,EAAE,EAAE;SACZ;KACF;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,QAAQ,GAAwB;IAC3C,IAAI,EAAE,QAA8B;IACpC,EAAE,EAAE,mBAAmB;IACvB,KAAK,EAAE,oCAAoC;IAC3C,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,KAAK;IACb,MAAM,EAAE;QACN;YACE,MAAM,EAAE,6FAA6F;YACrG,MAAM,EAAE,6FAA6F;YACrG,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,gBAAgB;SACxB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAwB;IAC/C,IAAI,EAAE,QAA8B;IACpC,EAAE,EAAE,sCAAsC;IAC1C,KAAK,EAAE,mDAAmD;IAC1D,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE;QACN;YACE,MAAM,EAAE,uFAAuF;YAC/F,MAAM,EAAE,uFAAuF;YAC/F,IAAI,EAAE,mCAAmC;YACzC,KAAK,EAAE,mDAAmD;YAC1D,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,EAAE;SACZ;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAwB;IAC9C,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,QAA8B;IACpC,WAAW,EAAE,mBAAmB;IAChC,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,WAAW;IACrB,MAAM,EAAE;QACN;YACE,MAAM,EAAE,gEAAgE;YACxE,MAAM,EAAE,uFAAuF;YAC/F,KAAK,EAAE,2BAA2B;YAClC,IAAI,EAAE,yBAAyB;SAChC;QACD;YACE,MAAM,EAAE,gEAAgE;YACxE,MAAM,EAAE,2FAA2F;YACnG,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,qCAAqC;YAC5C,IAAI,EAAE,6BAA6B;SACpC;QACD;YACE,MAAM,EAAE,gFAAgF;YACxF,MAAM,EAAE,mGAAmG;YAC3G,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,6CAA6C;YACpD,IAAI,EAAE,qCAAqC;SAC5C;KACF;IACD,OAAO,EAAE;QACP;YACE,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;YACnC,MAAM,EAAE,CAAC,KAAK,CAAC;YACf,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;YAC9C,YAAY,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE;SAChD;QACD;YACE,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YAClC,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;SACjD;KACF;CACF,CAAC"}
@@ -1,40 +1,80 @@
1
1
  import assert from 'node:assert';
2
- import { before, describe, it } from 'node:test';
2
+ import { before, beforeEach, describe, it } from 'node:test';
3
3
  import { getAllImagery, sha256base58 } from '@basemaps/config';
4
4
  import { ConfigJson } from '@basemaps/config-loader';
5
5
  import { Epsg, TileMatrixSets } from '@basemaps/geo';
6
6
  import { fsa, FsMemory, LogConfig } from '@basemaps/shared';
7
7
  import pLimit from 'p-limit';
8
- import { outputChange } from '../cli/action.import.js';
9
- import { TsAerial } from './config.diff.data.js';
10
- import { configDiff } from './config.diff.js';
8
+ import { configTileSetDiff, } from '../cli/diff/config.diff.js';
9
+ import { diffToMarkdown } from '../cli/diff/config.diff.markdown.js';
10
+ import { TsAerial, TsElevation, TsIndividual } from './config.diff.data.js';
11
+ function splitUrlIntoParts(e) {
12
+ const parts = e.pathname.slice(1).split('/');
13
+ if (e.hostname === 'linz-basemaps') {
14
+ // /3857/:name/:id/
15
+ let partOffset = 0;
16
+ // /elevation/3857/:name/:id/
17
+ if (parts[0] === 'elevation')
18
+ partOffset++;
19
+ return {
20
+ tileMatrix: TileMatrixSets.get(Epsg.parseCode(parts[partOffset])),
21
+ name: parts[partOffset + 1],
22
+ gsd: parseFloat(parts[partOffset + 1].split('_').at(-1) ?? '0'),
23
+ };
24
+ }
25
+ if (e.hostname === 'nz-imagery' || e.hostname === 'nz-elevation') {
26
+ return {
27
+ tileMatrix: TileMatrixSets.get(Epsg.parseCode(parts[3])),
28
+ name: parts[1],
29
+ gsd: 1,
30
+ };
31
+ }
32
+ throw new Error('Unable to parse path: ' + e.href);
33
+ }
34
+ function formatJson(url, bytes) {
35
+ if (url.pathname.endsWith('.json'))
36
+ return JSON.stringify(JSON.parse(String(bytes)), null, 2);
37
+ return bytes;
38
+ }
39
+ const ShouldDumpState = false;
40
+ async function dumpState(name, diff, markdown = diffToMarkdown(diff)) {
41
+ if (ShouldDumpState === false)
42
+ return;
43
+ const testName = `${name.replaceAll(' > ', '/')}`;
44
+ const output = fsa.toUrl(`./configs/${testName}/`);
45
+ for (const loc of ['before', 'after']) {
46
+ for await (const f of fsa.list(fsa.toUrl(`${loc}://`))) {
47
+ const bytes = await fsa.read(f);
48
+ await fsa.write(new URL(`${loc}/` + f.pathname.slice(1), output), formatJson(f, bytes));
49
+ }
50
+ }
51
+ await fsa.write(new URL('before/config.json', output), JSON.stringify(diff.before.toJson(), null, 2));
52
+ await fsa.write(new URL('after/config.json', output), JSON.stringify(diff.after.toJson(), null, 2));
53
+ await fsa.write(new URL(name + '.md', output), markdown);
54
+ }
11
55
  describe('config.diff', () => {
12
56
  const fsMem = new FsMemory();
57
+ const aerialJson = JSON.stringify(TsAerial);
13
58
  before(() => {
14
59
  // Imagery is linked from s3, overwrite s3 links to just use memory
15
60
  fsa.register('s3://', fsMem);
16
61
  fsa.register('source://', fsMem);
17
62
  fsa.register('before://', fsMem);
18
63
  fsa.register('after://', fsMem);
19
- fsMem.files.clear();
20
- fsa.write(fsa.toUrl('before://config/tileset/aerial.json'), JSON.stringify(TsAerial));
64
+ LogConfig.get().level = 'silent';
21
65
  });
22
66
  async function stubLoadConfig(t, source) {
23
67
  t.mock.method(ConfigJson.prototype, 'initImageryFromTiffUrl', (url) => {
24
- // const imageryName = getImageryName(url);
25
- const parts = url.pathname.split('/');
26
- const projection = TileMatrixSets.get(Epsg.parseCode(parts[1]));
27
- const imageryName = parts[2];
28
- const gsd = imageryName.split('_').at(-1);
68
+ const parts = splitUrlIntoParts(url);
29
69
  const imagery = {
30
70
  v: 2,
31
71
  id: `im_${sha256base58(url.href)}`,
32
- name: imageryName,
33
- title: imageryName,
72
+ name: parts.name,
73
+ title: parts.name,
34
74
  updatedAt: Date.now(),
35
- projection: projection?.projection.code,
36
- tileMatrix: projection?.identifier ?? 'none',
37
- gsd: parseFloat(gsd ?? '100'),
75
+ projection: parts.tileMatrix.projection.code,
76
+ tileMatrix: parts.tileMatrix.identifier ?? 'none',
77
+ gsd: parts.gsd,
38
78
  uri: url.href,
39
79
  url: url,
40
80
  bounds: { x: 0, y: 0, width: 0, height: 0 },
@@ -49,10 +89,11 @@ describe('config.diff', () => {
49
89
  return Promise.resolve(imagery);
50
90
  });
51
91
  const mem = await ConfigJson.fromUrl(new URL(source), pLimit(1), LogConfig.get());
52
- mem.createVirtualTileSets(false);
92
+ mem.source = fsa.toUrl('s3://fake-source.json.gz');
93
+ mem.createVirtualTileSets();
53
94
  return mem;
54
95
  }
55
- it('should load the aerial config', async (t) => {
96
+ it.skip('should load the aerial config', async (t) => {
56
97
  const cfg = await stubLoadConfig(t, 'before://config/');
57
98
  const tsAerial = await cfg.TileSet.get('aerial');
58
99
  assert.ok(tsAerial, 'Should have loaded the aerial tile set');
@@ -67,58 +108,216 @@ describe('config.diff', () => {
67
108
  it('should not have any changes when nothing has changed', async (t) => {
68
109
  const before = await stubLoadConfig(t, 'before://config/');
69
110
  const after = await stubLoadConfig(t, 'before://config/');
70
- const diff = configDiff(before, after);
71
- assert.deepEqual(diff, { raster: [] }, 'Should not have any changes when nothing has changed');
111
+ const diff = configTileSetDiff(before, after);
112
+ await dumpState(t.fullName, diff);
113
+ assert.deepEqual(diff.raster, [], 'Should not have any changes when nothing has changed');
114
+ assert.deepEqual(diff.vector, [], 'Should not have any changes when nothing has changed');
72
115
  });
73
- it('should diff when a layer is removed', async (t) => {
74
- const before = await stubLoadConfig(t, 'before://config/');
75
- const tsAfter = structuredClone(TsAerial);
76
- tsAfter.layers.shift(); // Remove the first layer
77
- await fsa.write(fsa.toUrl('after://config/tileset/aerial.json'), JSON.stringify(tsAfter));
78
- const after = await stubLoadConfig(t, 'after://config/');
79
- const diff = configDiff(before, after);
80
- assert.equal(diff.raster.length, 1, 'Should only have one diff');
81
- const firstDiff = diff.raster[0];
82
- assert.equal(firstDiff.type, 'removed');
83
- assert.equal(firstDiff.before.id, 'ts_grey-2025-0.075m');
116
+ describe('aerial', () => {
117
+ beforeEach(async () => {
118
+ fsMem.files.clear();
119
+ await fsa.write(fsa.toUrl('before://config/tileset/aerial.json'), aerialJson);
120
+ });
121
+ it('should diff when a layer is removed', async (t) => {
122
+ const before = await stubLoadConfig(t, 'before://config/');
123
+ const tsAfter = structuredClone(TsAerial);
124
+ const rem = tsAfter.layers.shift(); // Remove the first layer
125
+ await fsa.write(fsa.toUrl('after://config/tileset/aerial.json'), JSON.stringify(tsAfter));
126
+ const after = await stubLoadConfig(t, 'after://config/');
127
+ const diff = configTileSetDiff(before, after);
128
+ await dumpState(t.fullName, diff);
129
+ const diffAll = diff.raster.find((f) => f.id === 'ts_all');
130
+ const diffAerial = diff.raster.find((f) => f.id === 'ts_aerial');
131
+ const diffLayer = diff.raster.find((f) => f.id === 'ts_' + rem?.name);
132
+ assert.equal(diffAll?.type, 'updated');
133
+ assert.equal(diffAerial?.type, 'updated');
134
+ assert.equal(diffLayer?.type, 'removed');
135
+ // Both all and aerial will have one change removing the one tile set
136
+ assert.deepEqual(diffAll.layers.map((m) => [m.type, m.id].join(':')), ['removed:grey-2025-0.075m']);
137
+ assert.deepEqual(diffAerial.layers.map((m) => [m.type, m.id].join(':')), ['removed:grey-2025-0.075m']);
138
+ });
139
+ it('should diff when a layer is added', async (t) => {
140
+ const before = await stubLoadConfig(t, 'before://config/');
141
+ const tsAfter = structuredClone(TsAerial);
142
+ tsAfter.layers.push(fakeLayerConfig('test-layer', 'Test layer')); // Remove the first layer
143
+ await fsa.write(fsa.toUrl('after://config/tileset/aerial.json'), JSON.stringify(tsAfter));
144
+ const after = await stubLoadConfig(t, 'after://config/');
145
+ const diff = configTileSetDiff(before, after);
146
+ await dumpState(t.fullName, diff);
147
+ const diffAll = diff.raster.find((f) => f.id === 'ts_all');
148
+ const diffAerial = diff.raster.find((f) => f.id === 'ts_aerial');
149
+ const diffLayer = diff.raster.find((f) => f.id === 'ts_test-layer');
150
+ assert.equal(diffAll?.type, 'updated');
151
+ assert.equal(diffAerial?.type, 'updated');
152
+ assert.equal(diffLayer?.type, 'new');
153
+ // Both all and aerial will have one new layer
154
+ assert.deepEqual(diffAll.layers.map((m) => [m.type, m.id].join(':')), ['new:test-layer']);
155
+ assert.deepEqual(diffAerial.layers.map((m) => [m.type, m.id].join(':')), ['new:test-layer']);
156
+ });
157
+ it("should show a change when a layer's source is updated", async (t) => {
158
+ const before = await stubLoadConfig(t, 'before://config/');
159
+ // Change the layer location for the after to new-layer-id
160
+ const tsAfter = structuredClone(TsAerial);
161
+ const layer = tsAfter.layers[0];
162
+ const newLayerId = 'new-layer-id';
163
+ layer[2193] = layer[2193]?.replace(layer[2193]?.split('/').at(-2) ?? '', newLayerId + '-2193');
164
+ layer[3857] = layer[3857]?.replace(layer[3857]?.split('/').at(-2) ?? '', newLayerId + '-3857');
165
+ await fsa.write(fsa.toUrl('after://config/tileset/aerial.json'), JSON.stringify(tsAfter));
166
+ const after = await stubLoadConfig(t, 'after://config/');
167
+ const diff = configTileSetDiff(before, after);
168
+ await dumpState(t.fullName, diff);
169
+ const allDiff = diff.raster.find((m) => m.id === 'ts_all');
170
+ const aerialDiff = diff.raster.find((m) => m.id === 'ts_aerial');
171
+ const layerDiff = diff.raster.find((m) => m.id === 'ts_' + layer.name);
172
+ assert.equal(allDiff?.type, 'updated', 'ts_all should have updated');
173
+ assert.equal(aerialDiff?.type, 'updated', 'ts_aerial should have updated');
174
+ assert.equal(layerDiff?.type, 'updated', `ts_${layer.name} should have updated`);
175
+ // No tile set level changes
176
+ assert.equal(allDiff.changes, undefined);
177
+ assert.equal(aerialDiff.changes, undefined);
178
+ assert.equal(layerDiff.changes, undefined);
179
+ assert.equal(allDiff.layers.length, 1);
180
+ assert.equal(allDiff.layers[0].type, 'updated');
181
+ assert.equal(allDiff.layers[0].id, 'grey-2025-0.075m');
182
+ assert.equal(layerDiff.layers.length, 1);
183
+ assert.equal(layerDiff.layers[0].type, 'updated');
184
+ assert.equal(layerDiff.layers[0].id, 'grey-2025-0.075m');
185
+ assert.equal(aerialDiff.layers.length, 1);
186
+ assert.equal(aerialDiff.layers[0].type, 'updated');
187
+ assert.equal(aerialDiff.layers[0].id, 'grey-2025-0.075m');
188
+ });
189
+ it('should show no layer diffs when a layer is removed then added as a separate config', async (t) => {
190
+ const before = await stubLoadConfig(t, 'before://config/');
191
+ const tsAfter = structuredClone(TsAerial);
192
+ // Remove the first layer then store it as a separate tile set config file
193
+ const removed = tsAfter.layers.shift(); // Remove the first layer
194
+ await fsa.write(fsa.toUrl('after://config/tileset/aerial.json'), JSON.stringify(tsAfter));
195
+ await fsa.write(fsa.toUrl(`after://config/tileset/imagery/${removed.title}.json`), JSON.stringify(fakeLayerConfigFile(removed)));
196
+ const after = await stubLoadConfig(t, 'after://config/');
197
+ const diff = configTileSetDiff(before, after);
198
+ await dumpState(t.fullName, diff);
199
+ const firstDiff = diff.raster[0];
200
+ assert.ok(firstDiff, 'should have a diff');
201
+ // Aerial Layer should be updated
202
+ assert.equal(firstDiff.id, 'ts_aerial');
203
+ assert.equal(firstDiff.type, 'updated');
204
+ // Layer removed
205
+ assert.equal(firstDiff.layers[0].id, 'grey-2025-0.075m');
206
+ assert.equal(firstDiff.layers[0].type, 'removed');
207
+ // **FIXME There really shouldn't be any changes here
208
+ // Virtual layers do not add a default "format: webp"
209
+ // When reading a tileset it adds the default of "format: webp"
210
+ // so it triggers a diff
211
+ const secondDiff = diff.raster[1];
212
+ assert.equal(secondDiff.id, 'ts_grey-2025-0.075m');
213
+ assert.equal(secondDiff.type, 'updated');
214
+ assert.deepEqual(secondDiff.changes.map((m) => m.path?.join('.')), ['format', 'aliases']);
215
+ });
216
+ it('should show a removal when the config is miss labeled', async (t) => {
217
+ const before = await stubLoadConfig(t, 'before://config/');
218
+ const tsAfter = structuredClone(TsAerial);
219
+ // Remove the first layer then store it as a seperate tile set config file
220
+ const removed = tsAfter.layers.shift(); // Remove the first layer
221
+ await fsa.write(fsa.toUrl('after://config/tileset/aerial.json'), JSON.stringify(tsAfter));
222
+ await fsa.write(fsa.toUrl(`after://config/tileset/imagery/${removed.title}`), JSON.stringify(fakeLayerConfigFile(removed)));
223
+ const after = await stubLoadConfig(t, 'after://config/');
224
+ const diff = configTileSetDiff(before, after);
225
+ await dumpState(t.fullName, diff);
226
+ const diffAll = diff.raster.find((m) => m.id === 'ts_all');
227
+ const diffAerial = diff.raster.find((m) => m.id === 'ts_aerial');
228
+ const diffLayer = diff.raster.find((m) => m.id === 'ts_' + removed.name);
229
+ assert.equal(diffAll?.type, 'updated', 'ts_all should have updated');
230
+ assert.equal(diffAerial?.type, 'updated', 'ts_aerial should have updated');
231
+ assert.equal(diffLayer?.type, 'removed', `ts_${removed.name} should have updated`);
232
+ assert.deepEqual(diffAll.layers.map((m) => [m.type, m.id].join(':')), ['removed:' + removed.name]);
233
+ assert.deepEqual(diffAerial.layers.map((m) => [m.type, m.id].join(':')), ['removed:' + removed.name]);
234
+ });
84
235
  });
85
- it('should diff when a layer is added', async (t) => {
86
- const before = await stubLoadConfig(t, 'before://config/');
87
- const tsAfter = structuredClone(TsAerial);
88
- tsAfter.layers.push(layerConfig('test-layer', 'Test layer')); // Remove the first layer
89
- await fsa.write(fsa.toUrl('after://config/tileset/aerial.json'), JSON.stringify(tsAfter));
90
- const after = await stubLoadConfig(t, 'after://config/');
91
- const diff = configDiff(before, after);
92
- assert.equal(diff.raster.length, 1, 'Should only have one diff');
93
- const firstDiff = diff.raster[0];
94
- assert.equal(firstDiff.type, 'new');
95
- assert.equal(firstDiff.after.id, 'ts_test-layer');
236
+ describe('individual', () => {
237
+ beforeEach(async () => {
238
+ fsMem.files.clear();
239
+ await fsa.write(fsa.toUrl('before://config/tileset/aerial.json'), aerialJson);
240
+ await fsa.write(fsa.toUrl('after://config/tileset/aerial.json'), aerialJson);
241
+ });
242
+ it('should do show a diff when a new individual dataset is added', async (t) => {
243
+ const before = await stubLoadConfig(t, 'before://config/');
244
+ await fsa.write(fsa.toUrl('after://config/tileset/' + TsIndividual.layers[0].name + '.json'), JSON.stringify(TsIndividual));
245
+ const after = await stubLoadConfig(t, 'after://config/');
246
+ const diff = configTileSetDiff(before, after);
247
+ await dumpState(t.fullName, diff);
248
+ const diffAll = diff.raster.find((m) => m.id === 'ts_all');
249
+ const diffAerial = diff.raster.find((m) => m.id === 'ts_aerial');
250
+ const diffLayer = diff.raster.find((m) => m.id === TsIndividual.id);
251
+ assert.equal(diffAerial, undefined); // No changes to aerial layer
252
+ assert.equal(diffLayer.type, 'new');
253
+ assert.deepEqual(diffAll.layers.map((m) => [m.type, m.id].join(':')), ['new:top-of-the-south-flood-2022-0.15m']);
254
+ });
255
+ it('should show a diff when a individual layer is removed', async (t) => {
256
+ await fsa.write(fsa.toUrl('before://config/tileset/' + TsIndividual.layers[0].name + '.json'), JSON.stringify(TsIndividual));
257
+ const before = await stubLoadConfig(t, 'before://config/');
258
+ const after = await stubLoadConfig(t, 'after://config/');
259
+ const diff = configTileSetDiff(before, after);
260
+ await dumpState(t.fullName, diff);
261
+ const diffAll = diff.raster.find((m) => m.id === 'ts_all');
262
+ const diffAerial = diff.raster.find((m) => m.id === 'ts_aerial');
263
+ const diffLayer = diff.raster.find((m) => m.id === TsIndividual.id);
264
+ assert.equal(diffAerial, undefined); // No changes to aerial layer
265
+ assert.equal(diffLayer.type, 'removed');
266
+ assert.deepEqual(diffAll.layers.map((m) => [m.type, m.id].join(':')), ['removed:top-of-the-south-flood-2022-0.15m']);
267
+ });
96
268
  });
97
- it('should show no layer diffs when a layer is removed then added as a seperate config', async (t) => {
98
- const before = await stubLoadConfig(t, 'before://config/');
99
- const tsAfter = structuredClone(TsAerial);
100
- // Remove the first layer then store it as a seperate tile set config file
101
- const removed = tsAfter.layers.shift(); // Remove the first layer
102
- await fsa.write(fsa.toUrl('after://config/tileset/aerial.json'), JSON.stringify(tsAfter));
103
- await fsa.write(fsa.toUrl(`after://config/tileset/imagery/${removed.title}.json`), JSON.stringify({
104
- type: 'raster',
105
- id: `ts_${removed.name}`,
106
- name: removed.name,
107
- title: removed.title,
108
- category: removed.category,
109
- layers: [removed],
110
- minZoom: removed.minZoom,
111
- }));
112
- const after = await stubLoadConfig(t, 'after://config/');
113
- const diff = configDiff(before, after);
114
- assert.equal(diff.raster.length, 0, 'should have no diff');
115
- const doc = await outputChange(after, before, 'after://config/tileset/aerial.json', []);
116
- const lines = doc.split('\n');
117
- // TODO this is the bug that needs to be fixed.
118
- assert.ok(lines.find((f) => f.includes('Aerial Imagery Deletes')));
269
+ describe('pipeline', () => {
270
+ beforeEach(async () => {
271
+ fsMem.files.clear();
272
+ await fsa.write(fsa.toUrl('before://config/tileset/aerial.json'), aerialJson);
273
+ await fsa.write(fsa.toUrl('after://config/tileset/aerial.json'), aerialJson);
274
+ });
275
+ it('should show creation for raster pipelines', async (t) => {
276
+ const before = await stubLoadConfig(t, 'before://config/');
277
+ await fsa.write(fsa.toUrl('after://config/tileset/elevation.json'), JSON.stringify(TsElevation));
278
+ const after = await stubLoadConfig(t, 'after://config/');
279
+ const diff = configTileSetDiff(before, after);
280
+ const allDiff = diff.raster.find((f) => f.id === 'ts_all');
281
+ // Three new layers added to the all layer
282
+ assert.equal(allDiff?.type, 'updated');
283
+ assert.deepEqual(allDiff.layers.map((m) => `${m.type}:${m.id}`), ['new:manawatu-whanganui-2015-2016-dem-1m', 'new:new-zealand-2012-dem-8m', 'new:wellington-2013-2014-dem-1m']);
284
+ const elevationDiff = diff.raster.find((f) => f.id === 'ts_elevation');
285
+ assert.equal(elevationDiff.type, 'new');
286
+ await dumpState(t.fullName, diff);
287
+ });
288
+ it('should show diffs when a pipeline output is removed', async (t) => {
289
+ await fsa.write(fsa.toUrl('before://config/tileset/elevation.json'), JSON.stringify(TsElevation));
290
+ const before = await stubLoadConfig(t, 'before://config/');
291
+ const newElevation = structuredClone(TsElevation);
292
+ newElevation.outputs?.pop();
293
+ // await fsa.write(fsa.toUrl('after://config/tileset/aerial.json'), aerialJson);
294
+ await fsa.write(fsa.toUrl('after://config/tileset/elevation.json'), JSON.stringify(newElevation));
295
+ const after = await stubLoadConfig(t, 'after://config/');
296
+ const diff = configTileSetDiff(before, after);
297
+ assert.equal(diff.raster.length, 1);
298
+ assert.equal(diff.raster[0].id, 'ts_elevation');
299
+ assert.equal(diff.raster[0].type, 'updated');
300
+ const rasterDiff = diff.raster[0];
301
+ assert.equal(rasterDiff.layers.length, 0); // No layers changed
302
+ // One change to the outputs
303
+ assert.deepEqual(rasterDiff.changes.map((m) => m.path?.join('.')), ['outputs']);
304
+ await dumpState(t.fullName, diff);
305
+ });
306
+ it('should show diffs for when output format changes', async (t) => {
307
+ await fsa.write(fsa.toUrl('before://config/tileset/elevation.json'), JSON.stringify(TsElevation));
308
+ const before = await stubLoadConfig(t, 'before://config/');
309
+ // Changing output format to webp
310
+ const newElevation = structuredClone(TsElevation);
311
+ newElevation.outputs[0].format = ['webp'];
312
+ // await fsa.write(fsa.toUrl('after://config/tileset/aerial.json'), aerialJson);
313
+ await fsa.write(fsa.toUrl('after://config/tileset/elevation.json'), JSON.stringify(newElevation));
314
+ const after = await stubLoadConfig(t, 'after://config/');
315
+ const diff = configTileSetDiff(before, after);
316
+ await dumpState(t.fullName, diff);
317
+ });
119
318
  });
120
319
  });
121
- function layerConfig(name, title) {
320
+ function fakeLayerConfig(name, title) {
122
321
  return {
123
322
  '2193': `source://linz-basemaps/2193/${name}/${sha256base58(name + '2193')}/`,
124
323
  '3857': `source://linz-basemaps/3857/${name}/${sha256base58(name + '3857')}/`,
@@ -128,4 +327,15 @@ function layerConfig(name, title) {
128
327
  minZoom: 14,
129
328
  };
130
329
  }
330
+ function fakeLayerConfigFile(removed) {
331
+ return {
332
+ type: 'raster',
333
+ id: `ts_${removed.name}`,
334
+ name: removed.name,
335
+ title: removed.title,
336
+ category: removed.category,
337
+ layers: [{ ...removed, minZoom: 0, maxZoom: 32, category: undefined }],
338
+ background: { r: 0, g: 0, b: 0, alpha: 0 },
339
+ };
340
+ }
131
341
  //# sourceMappingURL=config.diff.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.diff.test.js","sourceRoot":"","sources":["../../src/__tests__/config.diff.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAe,MAAM,WAAW,CAAC;AAE9D,OAAO,EAA0D,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EAAE,IAAI,EAAY,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,MAAM,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAwB,MAAM,kBAAkB,CAAC;AAEpE,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,MAAM,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC;IAE7B,MAAM,CAAC,GAAG,EAAE;QACV,mEAAmE;QACnE,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE7B,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAEhC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACpB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,cAAc,CAAC,CAAc,EAAE,MAAc;QAC1D,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,wBAAwB,EAAE,CAAC,GAAQ,EAAE,EAAE;YACzE,2CAA2C;YAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAa,CAAC,CAAC;YAC5E,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAE7B,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAsB;gBACjC,CAAC,EAAE,CAAC;gBACJ,EAAE,EAAE,MAAM,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAClC,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,WAAW;gBAClB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI;gBACvC,UAAU,EAAE,UAAU,EAAE,UAAU,IAAI,MAAM;gBAC5C,GAAG,EAAE,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC;gBAC7B,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBAC3C,KAAK,EAAE;oBACL,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;oBAC/B,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;oBACjC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;oBAChC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;iBAClC;gBACD,KAAK,EAAE,EAAE;aACV,CAAC;YACF,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;QAClF,GAAG,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,EAAE,CAAC,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC9C,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,wCAAwC,CAAC,CAAC;QAE9D,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAExC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAEzE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,2CAA2C,CAAC,CAAC;QAC3E,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,8BAA8B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACrE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAE1D,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEvC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,sDAAsD,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAE3D,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,yBAAyB;QACjD,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1F,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEvC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,2BAA2B,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAqC,CAAC;QACrE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAE3D,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,yBAAyB;QACvF,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1F,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEvC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,2BAA2B,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAiC,CAAC;QACjE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACnG,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAE1C,0EAA0E;QAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAA8B,CAAC,CAAC,yBAAyB;QAC7F,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1F,MAAM,GAAG,CAAC,KAAK,CACb,GAAG,CAAC,KAAK,CAAC,kCAAkC,OAAO,CAAC,KAAK,OAAO,CAAC,EACjE,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,CAAC,OAAO,CAAC;YACjB,OAAO,EAAE,OAAO,CAAC,OAAO;SACF,CAAC,CAC1B,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEvC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAE3D,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,oCAAoC,EAAE,EAAE,CAAC,CAAC;QACxF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE9B,+CAA+C;QAC/C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC9C,OAAO;QACL,MAAM,EAAE,+BAA+B,IAAI,IAAI,YAAY,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG;QAC7E,MAAM,EAAE,+BAA+B,IAAI,IAAI,YAAY,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG;QAC7E,IAAI;QACJ,KAAK;QACL,QAAQ,EAAE,qBAAqB;QAC/B,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.diff.test.js","sourceRoot":"","sources":["../../src/__tests__/config.diff.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare const DiffCommand: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
2
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
3
+ before: URL;
4
+ after: URL;
5
+ output: URL;
6
+ verbose: boolean;
7
+ extraVerbose: boolean;
8
+ }>>;
9
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
10
+ before: URL;
11
+ after: URL;
12
+ output: URL;
13
+ verbose: boolean;
14
+ extraVerbose: boolean;
15
+ }, Promise<void>> & {
16
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
17
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;