@basemaps/cli-config 8.10.1 → 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.
@@ -0,0 +1,120 @@
1
+ import { ConfigId, ConfigPrefix, ConfigProviderMemory } from '@basemaps/config';
2
+ import { EpsgCode, GoogleTms, Nztm2000QuadTms } from '@basemaps/geo';
3
+ import { Env, fsa, getLogger, logArguments, Url } from '@basemaps/shared';
4
+ import { CliInfo } from '@basemaps/shared/build/cli/info.js';
5
+ import { command, option } from 'cmd-ts';
6
+ import { getVectorVersion } from '../util.js';
7
+ import { diffVectorUpdate } from './config.diff.js';
8
+ import { configTileSetDiff } from './diff/config.diff.js';
9
+ import { diffToMarkdown, EmojiChange, markdownProjectionLink } from './diff/config.diff.markdown.js';
10
+ const PublicUrlBase = Env.isProduction() ? 'https://basemaps.linz.govt.nz/' : 'https://dev.basemaps.linz.govt.nz/';
11
+ const VectorStyles = ['topographic', 'topolite']; // Vector styles that we want to review if vector data changes.
12
+ export const DiffCommand = command({
13
+ name: 'diff',
14
+ version: CliInfo.version,
15
+ description: 'Output the raster and vector differences between two config jsons as a markdown file.',
16
+ args: {
17
+ ...logArguments,
18
+ before: option({
19
+ type: Url,
20
+ long: 'before',
21
+ description: 'Path of config json, this can be both a local path or s3 location',
22
+ }),
23
+ after: option({
24
+ type: Url,
25
+ long: 'after',
26
+ description: 'Path of config json, this can be both a local path or s3 location',
27
+ }),
28
+ output: option({
29
+ type: Url,
30
+ long: 'output',
31
+ description: 'File name and path for saving the markdown file',
32
+ }),
33
+ },
34
+ async handler(args) {
35
+ const logger = getLogger(this, args, 'cli-config');
36
+ logger.info({ configBefore: args.before.href, configAfter: args.after.href }, 'Import:Start');
37
+ const beforeConfig = await fsa.readJson(args.before);
38
+ const beforeMem = ConfigProviderMemory.fromJson(beforeConfig, args.before);
39
+ const afterConfig = await fsa.readJson(args.after);
40
+ const afterMem = ConfigProviderMemory.fromJson(afterConfig, args.after);
41
+ logger.info('Import:Done');
42
+ const diff = configTileSetDiff(beforeMem, afterMem);
43
+ logger.info('Markdown:Start');
44
+ const rasterMarkdown = diffToMarkdown(diff);
45
+ if (afterMem.source == null)
46
+ throw new Error('Source URL not set for the new bundled config.');
47
+ const vectorMarkdown = await vectorDiffToMarkdown(afterMem.source, diff.vector);
48
+ const combinedMarkdown = [rasterMarkdown, vectorMarkdown].filter((s) => s != null).join('\n');
49
+ await fsa.write(args.output, combinedMarkdown);
50
+ logger.info({ markdown: args.output.href }, 'Markdown:Done');
51
+ },
52
+ });
53
+ /**
54
+ * Generates markdown for a list of changed vector tilesets.
55
+ *
56
+ * @param configUrl bundled config url
57
+ * @param diffs list of changed vector tilesets
58
+ */
59
+ async function vectorDiffToMarkdown(configUrl, diffs) {
60
+ if (diffs.length === 0)
61
+ return null;
62
+ // Output for vector config changes
63
+ const lines = [];
64
+ lines.push('# Vector Data Update');
65
+ lines.push('## Tilesets');
66
+ for (const diff of diffs) {
67
+ const id = ConfigId.unprefix(ConfigPrefix.TileSet, diff.id);
68
+ const version = getVectorVersion(id);
69
+ const projections = [EpsgCode.Google];
70
+ if (version != null)
71
+ projections.push(EpsgCode.Nztm2000); // topographic (v1) does not support 2193
72
+ const symbol = EmojiChange[diff.type];
73
+ lines.push(`### ${symbol} ${id}`);
74
+ if (diff.type === 'new' || diff.type === 'updated') {
75
+ // style previews
76
+ for (const style of VectorStyles) {
77
+ const styleId = version ? `${style}-${version}` : style;
78
+ const links = [];
79
+ for (const projection of projections) {
80
+ const url = new URL(PublicUrlBase);
81
+ url.searchParams.set('config', configUrl.href);
82
+ url.searchParams.set('i', id); // layer id
83
+ url.searchParams.set('style', styleId);
84
+ url.searchParams.set('projection', projection.toString());
85
+ url.searchParams.set('debug', 'true'); // debug mode
86
+ links.push(markdownProjectionLink(projection, url));
87
+ }
88
+ lines.push(`- ${styleId}: ${links.join(' | ')}`);
89
+ }
90
+ // feature changes
91
+ const featureChanges = await diffVectorUpdate(diff.after, diff.type === 'new' ? null : diff.before);
92
+ lines.push(`## Feature updates for \`${id}\``);
93
+ lines.push(...featureChanges);
94
+ const reportMarkdown = await outputAnalyseReports(diff.after);
95
+ if (reportMarkdown.length > 0)
96
+ lines.push(...reportMarkdown);
97
+ }
98
+ }
99
+ // FIXME: Re-introduce logic for capturing style config changes.
100
+ return lines.join('\n');
101
+ }
102
+ /**
103
+ * Prepares the vector tile analyse reports for markdown output.
104
+ */
105
+ async function outputAnalyseReports(diff) {
106
+ const reportMarkdown = [];
107
+ const layer = diff.layers[0];
108
+ for (const tms of [GoogleTms, Nztm2000QuadTms]) {
109
+ const layerPath = layer[tms.projection.code];
110
+ if (layerPath == null)
111
+ continue;
112
+ const reportPath = layerPath.substring(0, layerPath.lastIndexOf('/')) + '/report.md';
113
+ if (await fsa.exists(fsa.toUrl(reportPath))) {
114
+ const reportFile = await fsa.read(fsa.toUrl(reportPath));
115
+ reportMarkdown.push(`## Vector Tile Analyse Report for ${tms.identifier}`, `<details><summary>🟩 ${tms.identifier}(Click to Expand) 🟩</summary>`, reportFile.toString(), '</details>\n');
116
+ }
117
+ }
118
+ return reportMarkdown;
119
+ }
120
+ //# sourceMappingURL=action.diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.diff.js","sourceRoot":"","sources":["../../src/cli/action.diff.ts"],"names":[],"mappings":"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"}
@@ -367,7 +367,7 @@ async function outputAnalyseReports(change) {
367
367
  const reportPath = layerPath.substring(0, layerPath.lastIndexOf('/')) + '/report.md';
368
368
  if (await fsa.exists(fsa.toUrl(reportPath))) {
369
369
  const reportFile = await fsa.read(fsa.toUrl(reportPath));
370
- reportMarkdown.push(`## Vector Tile Anaylse Report for ${tms.identifier}`, `<details><summary>🟩 ${tms.identifier}(Click to Expand) 🟩</summary>`, reportFile.toString(), '</details>\n');
370
+ reportMarkdown.push(`## Vector Tile Analyse Report for ${tms.identifier}`, `<details><summary>🟩 ${tms.identifier}(Click to Expand) 🟩</summary>`, reportFile.toString(), '</details>\n');
371
371
  }
372
372
  }
373
373
  return reportMarkdown;
@@ -2,7 +2,7 @@ import { Epsg } from '@basemaps/geo';
2
2
  import { fsa } from '@basemaps/shared';
3
3
  import c from 'ansi-colors';
4
4
  import diff from 'deep-diff';
5
- export const IgnoredProperties = new Set(['id', 'createdAt', 'updatedAt', 'year', 'resolution']);
5
+ export const IgnoredProperties = new Set(['id', 'createdAt', 'updatedAt', 'year', 'resolution', 'virtual']);
6
6
  export class ConfigDiff {
7
7
  static getDiff(changes) {
8
8
  let output = '';
@@ -1 +1 @@
1
- {"version":3,"file":"config.diff.js","sourceRoot":"","sources":["../../src/cli/config.diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.diff.js","sourceRoot":"","sources":["../../src/cli/config.diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { ConfigLayer, ConfigProviderMemory, ConfigTileSetRaster, ConfigTileSetVector } from '@basemaps/config';
2
+ import diff from 'deep-diff';
3
+ export type DiffTileSetUpdated<T> = DiffUpdated<T> & {
4
+ layers: Diff<ConfigLayer>[];
5
+ };
6
+ export type DiffTileSet<T> = DiffNew<T> | DiffRemoved<T> | DiffTileSetUpdated<T>;
7
+ export interface DiffTileSetResult {
8
+ /** List of raster layers that have changed */
9
+ raster: DiffTileSet<ConfigTileSetRaster>[];
10
+ /** List of vector layers that have changed */
11
+ vector: DiffTileSet<ConfigTileSetVector>[];
12
+ /** Old Configuration that was used for the comparison */
13
+ before: ConfigProviderMemory;
14
+ /** New configuration that was used for the comparison */
15
+ after: ConfigProviderMemory;
16
+ }
17
+ /**
18
+ * Diff All the tile sets between two configs an out put a summary of the changes
19
+ *
20
+ * @param before the previous configuration
21
+ * @param after the new configuration
22
+ * @returns
23
+ */
24
+ export declare function configTileSetDiff(before: ConfigProviderMemory, after: ConfigProviderMemory): DiffTileSetResult;
25
+ export type DiffNew<T> = {
26
+ type: 'new';
27
+ id: string;
28
+ after: T;
29
+ };
30
+ export type DiffRemoved<T> = {
31
+ type: 'removed';
32
+ id: string;
33
+ before: T;
34
+ };
35
+ export type DiffUpdated<T> = {
36
+ type: 'updated';
37
+ id: string;
38
+ before: T;
39
+ after: T;
40
+ changes: diff.Diff<T>[];
41
+ };
42
+ export type Diff<T> = DiffNew<T> | DiffRemoved<T> | DiffUpdated<T>;
43
+ export type DiffType = Diff<unknown>['type'];
@@ -0,0 +1,100 @@
1
+ import { TileSetType, } from '@basemaps/config';
2
+ import diff from 'deep-diff';
3
+ import { IgnoredProperties } from '../config.diff.js';
4
+ function getAllTileSets(cfg) {
5
+ const tileSets = new Map();
6
+ for (const obj of cfg.objects.values()) {
7
+ if (!cfg.TileSet.is(obj))
8
+ continue;
9
+ if (tileSets.has(obj.id))
10
+ throw new Error(`Duplicate tileSet id ${obj.id}`);
11
+ tileSets.set(obj.id, obj);
12
+ }
13
+ return tileSets;
14
+ }
15
+ function tileSetDiffLayers(before, after) {
16
+ const layerChanges = [];
17
+ const beforeLayers = [...before.layers];
18
+ for (const layer of after.layers) {
19
+ // There are duplicates layers inside the config this makes it hard to know what has changed
20
+ // so only allow comparisons to one layer at a time
21
+ const index = beforeLayers.findIndex((l) => l.name === layer.name);
22
+ if (index > -1) {
23
+ const [el] = beforeLayers.splice(index, 1);
24
+ const layerDiff = diff.diff(el, layer);
25
+ if (layerDiff)
26
+ layerChanges.push({ type: 'updated', id: el.name, before: el, after: layer, changes: layerDiff });
27
+ }
28
+ else {
29
+ layerChanges.push({ type: 'new', id: layer.name, after: layer });
30
+ }
31
+ }
32
+ for (const beforeLayer of beforeLayers) {
33
+ layerChanges.push({ type: 'removed', id: beforeLayer.name, before: beforeLayer });
34
+ }
35
+ return layerChanges.length > 0 ? layerChanges : null;
36
+ }
37
+ function tileSetDiff(before, after) {
38
+ if (before == null || after == null) {
39
+ if (after != null)
40
+ return { type: 'new', id: after.id, after };
41
+ if (before != null)
42
+ return { type: 'removed', id: before.id, before };
43
+ return null;
44
+ }
45
+ // Layers are diffed further down so ignore them from a top level diff
46
+ const topLevelChanges = diff.diff({ ...before, layers: undefined }, { ...after, layers: undefined }, (_path, key) => IgnoredProperties.has(key));
47
+ const layerChanges = tileSetDiffLayers(before, after);
48
+ if (topLevelChanges == null && layerChanges == null)
49
+ return null;
50
+ return {
51
+ type: 'updated',
52
+ id: before.id,
53
+ before,
54
+ after,
55
+ changes: topLevelChanges,
56
+ layers: tileSetDiffLayers(before, after) ?? [],
57
+ };
58
+ }
59
+ /**
60
+ * Diff All the tile sets between two configs an out put a summary of the changes
61
+ *
62
+ * @param before the previous configuration
63
+ * @param after the new configuration
64
+ * @returns
65
+ */
66
+ export function configTileSetDiff(before, after) {
67
+ const tileSetBefore = getAllTileSets(before);
68
+ const tileSetAfter = getAllTileSets(after);
69
+ const seen = new Set();
70
+ const rasterDiffs = [];
71
+ const vectorDiffs = [];
72
+ function addDiff(before, after) {
73
+ const type = before?.type ?? after?.type;
74
+ const diff = tileSetDiff(before, after);
75
+ if (diff == null)
76
+ return;
77
+ if (type === TileSetType.Raster)
78
+ rasterDiffs.push(diff);
79
+ else if (type === TileSetType.Vector)
80
+ vectorDiffs.push(diff);
81
+ else
82
+ throw new Error(`Tileset: ${after?.id ?? before?.id} type: ${type} not supported.`);
83
+ }
84
+ for (const tsBefore of tileSetBefore.values()) {
85
+ seen.add(tsBefore.id);
86
+ const tsAfter = tileSetAfter.get(tsBefore.id);
87
+ // Changing from raster to vector or vector to raster
88
+ if (tsAfter != null && tsAfter.type !== tsBefore.type) {
89
+ throw new Error(`TileSet type conversion not allowed: ${tsAfter.id} ${tsBefore.type} -> ${tsAfter.type}`);
90
+ }
91
+ addDiff(tsBefore, tsAfter);
92
+ }
93
+ for (const tsAfter of tileSetAfter.values()) {
94
+ if (seen.has(tsAfter.id))
95
+ continue;
96
+ addDiff(undefined, tsAfter);
97
+ }
98
+ return { raster: rasterDiffs, vector: vectorDiffs, before, after };
99
+ }
100
+ //# sourceMappingURL=config.diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.diff.js","sourceRoot":"","sources":["../../../src/cli/diff/config.diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { EpsgCode } from '@basemaps/geo';
2
+ import { Diff } from 'deep-diff';
3
+ import { DiffTileSetResult, DiffType } from './config.diff.js';
4
+ export declare const EmojiChange: Record<DiffType, string>;
5
+ export declare function formatPath(change: Diff<unknown>): string;
6
+ /**
7
+ * @example [🌏](https://... "WebMercatorQuad")
8
+ *
9
+ * @param projection
10
+ * @param url
11
+ * @returns
12
+ */
13
+ export declare function markdownProjectionLink(projection: EpsgCode, url: URL): string;
14
+ export declare function diffToMarkdown(diff: DiffTileSetResult): string;