@basemaps/cli-config 8.10.2 β†’ 8.11.3

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,409 @@
1
+ import { EpsgCode, Nztm2000QuadTms, TileMatrixSets } from '@basemaps/geo';
2
+ import { Env, getPreviewUrl } from '@basemaps/shared';
3
+ // useful for local testing of the markdown structure
4
+ const UsePlaceholderUrls = false;
5
+ const PublicUrlBase = Env.isProduction() ? 'https://basemaps.linz.govt.nz/' : 'https://dev.basemaps.linz.govt.nz/';
6
+ const EmojiProjection = {
7
+ [EpsgCode.Citm2000]: 'πŸŒ…',
8
+ [EpsgCode.Google]: '🌏',
9
+ [EpsgCode.Nztm2000]: 'πŸ—ΊοΈ',
10
+ [EpsgCode.Wgs84]: '🌐',
11
+ };
12
+ export const EmojiChange = {
13
+ updated: 'πŸ”„',
14
+ new: 'βž•',
15
+ removed: 'πŸ—‘οΈ',
16
+ };
17
+ const EmojiPipeline = {
18
+ 'color-ramp': '🎨',
19
+ extract: '🌈',
20
+ ndvi: '🌱',
21
+ 'terrain-rgb': '⛰️',
22
+ };
23
+ export function formatPath(change) {
24
+ if (change.path == null || change.path.length === 0)
25
+ return '';
26
+ return change.path.map((p) => `.${p}`).join('') + ': ';
27
+ }
28
+ function formatDiff(obj) {
29
+ if (typeof obj === 'object')
30
+ return '\n```json\n' + JSON.stringify(obj, null, 2) + '\n```';
31
+ return `\`${JSON.stringify(obj)}\``;
32
+ }
33
+ function changeDiff(change) {
34
+ if (change.kind === 'E') {
35
+ return `πŸ”„ ${formatPath(change)} \`${JSON.stringify(change.lhs)}\` -> \`${JSON.stringify(change.rhs)}\``;
36
+ }
37
+ else if (change.kind === 'N') {
38
+ return `βž• ${formatPath(change)} ${formatDiff(change.rhs)}`;
39
+ }
40
+ else if (change.kind === 'D') {
41
+ return `πŸ—‘οΈ ${formatPath(change)} ${formatDiff(change.lhs)}`;
42
+ }
43
+ // Array index change
44
+ if (change.kind === 'A') {
45
+ change.item.path = change.path;
46
+ change.item.path?.push(`[${change.index}]`);
47
+ return changeDiff(change.item);
48
+ }
49
+ throw new Error(`Unknown change kind ${JSON.stringify(change)}`);
50
+ }
51
+ const ProjectionLinkOrder = [EpsgCode.Google, EpsgCode.Nztm2000, EpsgCode.Citm2000];
52
+ /**
53
+ * @example 🌏
54
+ *
55
+ * @param projection
56
+ * @returns
57
+ */
58
+ function markdownProjectionText(projection) {
59
+ const tileMatrix = TileMatrixSets.get(projection);
60
+ return EmojiProjection[projection] ?? tileMatrix.identifier;
61
+ }
62
+ /**
63
+ * @example [🌏](https://... "WebMercatorQuad")
64
+ *
65
+ * @param projection
66
+ * @param url
67
+ * @returns
68
+ */
69
+ export function markdownProjectionLink(projection, url) {
70
+ const tileMatrix = projection === EpsgCode.Nztm2000 ? Nztm2000QuadTms : TileMatrixSets.get(projection);
71
+ return `[${markdownProjectionText(projection)}](${UsePlaceholderUrls ? 'url' : url.href} "${tileMatrix.identifier}")`;
72
+ }
73
+ /**
74
+ * @example `https://dev.basemaps.linz.govt.nz/?c=[config]&i=[tilesetName]&tileMatrix=[tileMatrix]&debug=true`
75
+ *
76
+ * @param configUrl
77
+ * @param configTileset
78
+ * @param tileMatrix
79
+ * @returns
80
+ */
81
+ function getTilesetBaseUrl(configUrl, configTileset, tileMatrix) {
82
+ const url = new URL(PublicUrlBase); // host
83
+ url.searchParams.set('config', configUrl.href);
84
+ url.searchParams.set('i', configTileset.name); // tileset name
85
+ url.searchParams.set('tileMatrix', tileMatrix.identifier);
86
+ url.searchParams.set('debug', 'true'); // debug mode
87
+ return url;
88
+ }
89
+ /**
90
+ * @example `https://dev.basemaps.linz.govt.nz/@[location]?c=[config]&i=[layerId]&tileMatrix=[tileMatrix]&debug=true`
91
+ *
92
+ * @param configUrl
93
+ * @param configImagery
94
+ * @returns
95
+ */
96
+ function getLayerBaseUrl(configUrl, configImagery) {
97
+ const center = getPreviewUrl({ imagery: configImagery });
98
+ const url = new URL(PublicUrlBase); // host
99
+ url.pathname = center.slug; // location
100
+ url.searchParams.set('config', configUrl.href);
101
+ url.searchParams.set('i', center.name); // layer id
102
+ url.searchParams.set('tileMatrix', configImagery.tileMatrix);
103
+ url.searchParams.set('debug', 'true'); // debug mode
104
+ return url;
105
+ }
106
+ /**
107
+ * single-line: no pipelines or one pipeline
108
+ *
109
+ * @example [🌏 WebMercatorQuad]() | [πŸ—ΊοΈ NZTM2000Quad]()
110
+ *
111
+ * multi-line: more than one pipeline
112
+ *
113
+ * @example \n
114
+ * - 🎨 color-ramp: [🌏 WebMercatorQuad]() | [πŸ—ΊοΈ NZTM2000Quad]()
115
+ * - ⛰️ terrain-rgb: [🌏 WebMercatorQuad]() | [πŸ—ΊοΈ NZTM2000Quad]()
116
+ *
117
+ * @param diff
118
+ * @param tileSet
119
+ * @param layer
120
+ * @param indent
121
+ * @returns
122
+ */
123
+ function markdownBasemapsLinks(diff, tileSet, layer, indent = '') {
124
+ const configUrl = diff.after.source;
125
+ if (configUrl == null)
126
+ throw new Error(`Failed to read config bundled file path. TileSet Id: ${tileSet.id}`);
127
+ const defaultLinks = {};
128
+ const pipelineLinks = {};
129
+ /**
130
+ * **Stage 1: Build links**
131
+ *
132
+ * First, we iterate over the layer by projection. This gives us access to imagery by layer ID.
133
+ * From that, we can extract each layer's pipelines (outputs) and formats.
134
+ *
135
+ * We don't render markdown yet. Since we're iterating by projections at the top level, generating
136
+ * the markdown inline is tricky. Instead, we only collect the data needed to render the links
137
+ * in the next stage.
138
+ */
139
+ // determine all of the projections for which the tileset's layers define imagery
140
+ const supportedEpsgs = new Set();
141
+ for (const layer of tileSet.layers) {
142
+ for (const epsg of ProjectionLinkOrder) {
143
+ const layerId = layer[epsg];
144
+ if (layerId != null)
145
+ supportedEpsgs.add(epsg);
146
+ }
147
+ }
148
+ for (const epsg of ProjectionLinkOrder.filter((epsg) => supportedEpsgs.has(epsg))) {
149
+ // generate base url
150
+ let baseUrl;
151
+ if (layer != null) {
152
+ const layerId = layer[epsg];
153
+ if (layerId == null)
154
+ continue;
155
+ const configImagery = diff.after.objects.get(diff.after.Imagery.id(layerId));
156
+ if (configImagery == null) {
157
+ throw new Error(`Failed to find imagery config from config bundle file. Layer Id: ${layerId}`);
158
+ }
159
+ baseUrl = getLayerBaseUrl(configUrl, configImagery);
160
+ }
161
+ else {
162
+ baseUrl = getTilesetBaseUrl(configUrl, tileSet, TileMatrixSets.get(epsg));
163
+ }
164
+ // grab outputs
165
+ const outputs = tileSet.outputs;
166
+ if (outputs == null) {
167
+ defaultLinks[epsg] = markdownProjectionLink(epsg, baseUrl);
168
+ continue;
169
+ }
170
+ // generate links by output
171
+ for (const output of outputs.sort((a, b) => a.name.localeCompare(b.name))) {
172
+ const pipelineName = output.name;
173
+ if (pipelineLinks[pipelineName] == null)
174
+ pipelineLinks[pipelineName] = {};
175
+ if (outputs.length === 1 || output.default === true) {
176
+ // single output, or default output, add to default links
177
+ defaultLinks[epsg] = markdownProjectionLink(epsg, baseUrl);
178
+ }
179
+ const formats = output.format;
180
+ if (formats == null) {
181
+ if (pipelineLinks[pipelineName]['default'] == null)
182
+ pipelineLinks[pipelineName]['default'] = {};
183
+ const url = new URL(baseUrl);
184
+ url.searchParams.set('pipeline', pipelineName);
185
+ pipelineLinks[output.name]['default'][epsg] = markdownProjectionLink(epsg, url);
186
+ continue;
187
+ }
188
+ // generate links by format
189
+ for (const format of formats.sort((a, b) => a.localeCompare(b))) {
190
+ if (pipelineLinks[output.name][format] == null)
191
+ pipelineLinks[output.name][format] = {};
192
+ const url = new URL(baseUrl);
193
+ url.searchParams.set('pipeline', pipelineName);
194
+ url.searchParams.set('format', format);
195
+ pipelineLinks[output.name][format][epsg] = markdownProjectionLink(epsg, url);
196
+ }
197
+ }
198
+ }
199
+ if (Object.keys(defaultLinks).length === 0 && Object.keys(pipelineLinks).length === 0) {
200
+ throw new Error(`Failed to capture any links. Tileset id: ${tileSet.id}`);
201
+ }
202
+ /**
203
+ * **Stage 2: Render markdown**
204
+ *
205
+ * With the pipelines (outputs) and formats collected, we can generate the markdown efficiently.
206
+ *
207
+ * - If the layer has no pipelines, or, exactly one pipeline, we render a single-line of links.
208
+ * - Otherwise, if the layer has multiple pipelines, we render one line per pipeline.
209
+ */
210
+ const text = [];
211
+ /**
212
+ * single-line: no pipelines
213
+ *
214
+ * @example [🌏 WebMercatorQuad]() | [πŸ—ΊοΈ NZTM2000Quad]()
215
+ */
216
+ if (Object.keys(defaultLinks).length > 0) {
217
+ const line = [];
218
+ for (const epsg of ProjectionLinkOrder) {
219
+ if (defaultLinks[epsg] == null)
220
+ continue;
221
+ const link = defaultLinks[epsg];
222
+ line.push(link);
223
+ }
224
+ text.push(line.join(' | '));
225
+ }
226
+ /**
227
+ * single-line: one pipeline
228
+ *
229
+ * @example [🌏 WebMercatorQuad]() | [πŸ—ΊοΈ NZTM2000Quad]()
230
+ *
231
+ * multi-line: more than one pipeline
232
+ *
233
+ * @example \n
234
+ * - 🎨 color-ramp: [🌏 WebMercatorQuad]() | [πŸ—ΊοΈ NZTM2000Quad]()
235
+ * - ⛰️ terrain-rgb: [🌏 WebMercatorQuad]() | [πŸ—ΊοΈ NZTM2000Quad]()
236
+ */
237
+ const numPipelines = Object.keys(pipelineLinks).length;
238
+ for (const [pipelineName, byFormat] of Object.entries(pipelineLinks)) {
239
+ const line = [];
240
+ if (numPipelines > 1) {
241
+ // pipelineName can be any human string, find the first actual pipeline type for the emoji
242
+ const pipeline = tileSet.outputs?.find((o) => o.name === pipelineName);
243
+ if (pipeline == null)
244
+ throw new Error(`Failed to find pipeline output for name ${pipelineName}`);
245
+ const pipelineType = pipeline.pipeline?.[0].type ?? 'extract';
246
+ const defaultText = pipeline.default ? '⭐' : '';
247
+ line.push(`\n${indent}- ${EmojiPipeline[pipelineType]}${defaultText} ${pipeline.title} (\`${pipeline.name}\`):`);
248
+ }
249
+ const numFormats = Object.keys(byFormat).length;
250
+ for (const [format, byEpsg] of Object.entries(byFormat)) {
251
+ const links = [];
252
+ for (const epsg of ProjectionLinkOrder) {
253
+ if (byEpsg[epsg] == null)
254
+ continue;
255
+ const link = byEpsg[epsg];
256
+ if (numFormats > 1 && format !== 'default') {
257
+ links.push(`${link} \`${format}\``);
258
+ }
259
+ else {
260
+ links.push(link);
261
+ }
262
+ }
263
+ line.push(links.join(' | '));
264
+ }
265
+ text.push(line.join(' '));
266
+ }
267
+ if (numPipelines > 1)
268
+ text.push('\n\n --- '); // add gap between pipelines and diff
269
+ return text.join('');
270
+ }
271
+ /**
272
+ * Generates markdown for the given Tileset's Layers.
273
+ *
274
+ * @param diff
275
+ * @param raster
276
+ * @returns
277
+ */
278
+ function markdownDiffRasterLayers(diff, raster) {
279
+ if (raster.layers.length === 0)
280
+ return [];
281
+ const indent = ' ';
282
+ const lines = [];
283
+ for (const change of raster.layers) {
284
+ const symbol = EmojiChange[change.type];
285
+ if (change.type === 'removed') {
286
+ lines.push(`- #### ${symbol} ${change.before.title} (\`${change.before.name}\`)`);
287
+ }
288
+ else {
289
+ // Only one layer, that is the same title as this layer
290
+ const showTitle = raster.after.layers.length !== 1 || raster.after.layers[0].title !== raster.after.title;
291
+ if (showTitle) {
292
+ const line = [];
293
+ line.push(`- #### ${symbol} ${change.after.title} (\`${change.after.name}\`)`);
294
+ line.push(markdownBasemapsLinks(diff, raster.after, change.after, indent));
295
+ lines.push(line.join(' '));
296
+ }
297
+ // changes
298
+ if (change.type === 'updated') {
299
+ for (const c of change.changes)
300
+ lines.push(`${indent}- ${changeDiff(c)}`);
301
+ }
302
+ }
303
+ }
304
+ return lines;
305
+ }
306
+ /** Find all the projections from a tileset */
307
+ function tileSetProjections(t) {
308
+ const projections = new Set();
309
+ for (const l of t.layers) {
310
+ if (l['3857'])
311
+ projections.add(EpsgCode.Google);
312
+ if (l['2193'])
313
+ projections.add(EpsgCode.Nztm2000);
314
+ }
315
+ return Array.from(projections);
316
+ }
317
+ /**
318
+ * Generates markdown for the given Tileset.
319
+ *
320
+ * @param diff
321
+ * @param raster
322
+ * @returns
323
+ */
324
+ function markdownDiffRaster(diff, raster) {
325
+ const lines = [];
326
+ const projections = raster.type === 'removed' ? tileSetProjections(raster.before) : tileSetProjections(raster.after);
327
+ const symbol = EmojiChange[raster.type];
328
+ if (raster.type === 'removed') {
329
+ const links = [...projections].map((m) => `~~${markdownProjectionText(m)}~~`);
330
+ lines.push(`#### ${symbol} ${raster.before.title} (\`${raster.id}\`) ` + links.join(' '));
331
+ }
332
+ else {
333
+ const line = [];
334
+ line.push(`#### ${symbol} ${raster.after.title} (\`${raster.id}\`)`);
335
+ line.push(markdownBasemapsLinks(diff, raster.after));
336
+ lines.push(line.join(' '));
337
+ // changes
338
+ if (raster.type === 'updated') {
339
+ // Changes to the top level config, eg name or title changes
340
+ for (const change of raster.changes ?? []) {
341
+ lines.push(`\n- ${changeDiff(change)}`);
342
+ }
343
+ const layersMarkdown = markdownDiffRasterLayers(diff, raster);
344
+ if (layersMarkdown.length > 0) {
345
+ lines.push('\n', layersMarkdown.join('\n'));
346
+ }
347
+ }
348
+ }
349
+ return lines.join('');
350
+ }
351
+ export function diffToMarkdown(diff) {
352
+ const lines = [];
353
+ // Aerial layer changes go first
354
+ const aerialLayer = diff.raster.find((l) => l.id === 'ts_aerial');
355
+ if (aerialLayer != null) {
356
+ lines.push('## Aerial layer\n');
357
+ lines.push('One or more changes has been detected on the primary aerial imagery layer\n');
358
+ if (aerialLayer.type === 'removed') {
359
+ lines.push(`# 🚨🚨 "ts_aerial" layer Removed 🚨🚨`);
360
+ }
361
+ else {
362
+ lines.push(markdownDiffRaster(diff, aerialLayer));
363
+ }
364
+ }
365
+ const changesByType = {
366
+ removed: [],
367
+ updated: [],
368
+ new: [],
369
+ };
370
+ for (const raster of diff.raster) {
371
+ // ts_all and ts_aerial are special cases that handled above
372
+ if (raster.id === 'ts_aerial')
373
+ continue;
374
+ if (raster.id === 'ts_all')
375
+ continue;
376
+ changesByType[raster.type].push(raster);
377
+ }
378
+ if (changesByType.new.length > 0 || changesByType.removed.length > 0 || changesByType.updated.length) {
379
+ if (lines.length > 0)
380
+ lines.push('\n');
381
+ lines.push('## Tilesets\n');
382
+ }
383
+ for (const changeType of ['removed', 'updated', 'new']) {
384
+ const changes = changesByType[changeType];
385
+ const e = EmojiChange[changeType];
386
+ if (changes.length > 0)
387
+ lines.push(`### ${e} ${changeType.slice(0, 1).toUpperCase()}${changeType.slice(1)} \n`);
388
+ const linesByTileset = [];
389
+ for (const raster of changes) {
390
+ linesByTileset.push(markdownDiffRaster(diff, raster));
391
+ }
392
+ // ensure a wider gap between tileset listings for clarity
393
+ lines.push(linesByTileset.join('\n\n<br />\n\n'));
394
+ }
395
+ // FIXME: todo add simple vector diff +
396
+ // IF vector layer has changed
397
+ /*
398
+ const featureChanges = await diffVectorUpdate(change, existingTileSet);
399
+ vectorUpdate.push(`## Feature updates for ${change.id}`);
400
+ vectorUpdate.push(...featureChanges);
401
+ const reportMarkdown = await outputAnalyseReports(change);
402
+ */
403
+ if (lines.length > 0) {
404
+ const configHeader = [`# Configuration changes detected`, '', `**Key**: βž• New | πŸ”„ Updated | πŸ—‘οΈ Deleted`];
405
+ lines.unshift(configHeader.join('\n') + '\n');
406
+ }
407
+ return lines.join('\n');
408
+ }
409
+ //# sourceMappingURL=config.diff.markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.diff.markdown.js","sourceRoot":"","sources":["../../../src/cli/diff/config.diff.markdown.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -22,11 +22,20 @@ export declare const ConfigCli: Partial<import("cmd-ts/dist/cjs/argparser.js").R
22
22
  args: {
23
23
  target: URL | undefined;
24
24
  concurrency: number;
25
- host: URL | undefined;
25
+ host: URL;
26
26
  path: URL;
27
27
  verbose: boolean;
28
28
  extraVerbose: boolean;
29
29
  };
30
+ } | {
31
+ command: "diff";
32
+ args: {
33
+ before: URL;
34
+ after: URL;
35
+ output: URL;
36
+ verbose: boolean;
37
+ extraVerbose: boolean;
38
+ };
30
39
  } | {
31
40
  command: "import";
32
41
  args: {
@@ -61,11 +70,20 @@ export declare const ConfigCli: Partial<import("cmd-ts/dist/cjs/argparser.js").R
61
70
  args: {
62
71
  target: URL | undefined;
63
72
  concurrency: number;
64
- host: URL | undefined;
73
+ host: URL;
65
74
  path: URL;
66
75
  verbose: boolean;
67
76
  extraVerbose: boolean;
68
77
  };
78
+ } | {
79
+ command: "diff";
80
+ args: {
81
+ before: URL;
82
+ after: URL;
83
+ output: URL;
84
+ verbose: boolean;
85
+ extraVerbose: boolean;
86
+ };
69
87
  } | {
70
88
  command: "import";
71
89
  args: {
@@ -85,6 +103,9 @@ export declare const ConfigCli: Partial<import("cmd-ts/dist/cjs/argparser.js").R
85
103
  } | {
86
104
  command: "create-config";
87
105
  value: Promise<void>;
106
+ } | {
107
+ command: "diff";
108
+ value: Promise<void>;
88
109
  } | {
89
110
  command: "import";
90
111
  value: Promise<void>;
@@ -98,6 +119,9 @@ export declare const ConfigCli: Partial<import("cmd-ts/dist/cjs/argparser.js").R
98
119
  } | {
99
120
  command: "create-config";
100
121
  value: Promise<void>;
122
+ } | {
123
+ command: "diff";
124
+ value: Promise<void>;
101
125
  } | {
102
126
  command: "import";
103
127
  value: Promise<void>;
package/build/index.js CHANGED
@@ -2,14 +2,16 @@ import { subcommands } from 'cmd-ts';
2
2
  import { BundleAssetsCommand } from './cli/action.bundle.assets.js';
3
3
  import { BundleCommand } from './cli/action.bundle.js';
4
4
  import { CreateConfigCommand } from './cli/action.create.config.js';
5
+ import { DiffCommand } from './cli/action.diff.js';
5
6
  import { ImportCommand } from './cli/action.import.js';
6
7
  export const ConfigCli = subcommands({
7
8
  name: 'config',
8
9
  cmds: {
9
10
  bundle: BundleCommand,
10
11
  'bundle-assets': BundleAssetsCommand,
11
- import: ImportCommand,
12
12
  'create-config': CreateConfigCommand,
13
+ diff: DiffCommand,
14
+ import: ImportCommand,
13
15
  },
14
16
  });
15
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;IACnC,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE;QACJ,MAAM,EAAE,aAAa;QACrB,eAAe,EAAE,mBAAmB;QACpC,MAAM,EAAE,aAAa;QACrB,eAAe,EAAE,mBAAmB;KACrC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;IACnC,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE;QACJ,MAAM,EAAE,aAAa;QACrB,eAAe,EAAE,mBAAmB;QACpC,eAAe,EAAE,mBAAmB;QACpC,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,aAAa;KACtB;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@basemaps/cli-config",
3
- "version": "8.10.2",
3
+ "version": "8.11.3",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,10 +24,10 @@
24
24
  "test": "node --test \"build/**/*.test.js\""
25
25
  },
26
26
  "dependencies": {
27
- "@basemaps/config": "^8.11.0",
28
- "@basemaps/config-loader": "^8.11.0",
27
+ "@basemaps/config": "^8.13.1",
28
+ "@basemaps/config-loader": "^8.12.2",
29
29
  "@basemaps/geo": "^8.9.0",
30
- "@basemaps/shared": "^8.9.3",
30
+ "@basemaps/shared": "^8.9.6",
31
31
  "@cotar/builder": "^6.0.1",
32
32
  "@cotar/core": "^6.0.1",
33
33
  "@cotar/tar": "^6.0.1",
@@ -51,5 +51,5 @@
51
51
  "files": [
52
52
  "build/"
53
53
  ],
54
- "gitHead": "eb807c6d0f091b41e4d6d972b77c24f584cec230"
54
+ "gitHead": "add3b8736b52707b0feb33c3ba9257b793637556"
55
55
  }