@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.
- package/build/__tests__/config.diff.data.d.ts +3 -0
- package/build/__tests__/config.diff.data.js +77 -0
- package/build/__tests__/config.diff.data.js.map +1 -1
- package/build/__tests__/config.diff.test.js +275 -65
- package/build/__tests__/config.diff.test.js.map +1 -1
- package/build/cli/action.diff.d.ts +17 -0
- package/build/cli/action.diff.js +120 -0
- package/build/cli/action.diff.js.map +1 -0
- package/build/cli/action.import.js +1 -1
- package/build/cli/config.diff.js +1 -1
- package/build/cli/config.diff.js.map +1 -1
- package/build/cli/diff/config.diff.d.ts +43 -0
- package/build/cli/diff/config.diff.js +100 -0
- package/build/cli/diff/config.diff.js.map +1 -0
- package/build/cli/diff/config.diff.markdown.d.ts +14 -0
- package/build/cli/diff/config.diff.markdown.js +368 -0
- package/build/cli/diff/config.diff.markdown.js.map +1 -0
- package/build/index.d.ts +24 -0
- package/build/index.js +3 -1
- package/build/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,368 @@
|
|
|
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 changeDiff(change) {
|
|
29
|
+
if (change.kind === 'E') {
|
|
30
|
+
return `π ${formatPath(change)} \`${JSON.stringify(change.lhs)}\` -> \`${JSON.stringify(change.rhs)}\``;
|
|
31
|
+
}
|
|
32
|
+
else if (change.kind === 'N') {
|
|
33
|
+
return `β ${formatPath(change)} \`${JSON.stringify(change.rhs)}\``;
|
|
34
|
+
}
|
|
35
|
+
else if (change.kind === 'D') {
|
|
36
|
+
return `ποΈ ${formatPath(change)} \`${JSON.stringify(change.lhs)}\``;
|
|
37
|
+
}
|
|
38
|
+
// Array index change
|
|
39
|
+
if (change.kind === 'A') {
|
|
40
|
+
change.item.path = change.path;
|
|
41
|
+
change.item.path?.push(`[${change.index}]`);
|
|
42
|
+
return changeDiff(change.item);
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`Unknown change kind ${JSON.stringify(change)}`);
|
|
45
|
+
}
|
|
46
|
+
const ProjectionLinkOrder = [EpsgCode.Google, EpsgCode.Nztm2000, EpsgCode.Citm2000];
|
|
47
|
+
/**
|
|
48
|
+
* @example π
|
|
49
|
+
*
|
|
50
|
+
* @param projection
|
|
51
|
+
* @returns
|
|
52
|
+
*/
|
|
53
|
+
function markdownProjectionText(projection) {
|
|
54
|
+
const tileMatrix = TileMatrixSets.get(projection);
|
|
55
|
+
return EmojiProjection[projection] ?? tileMatrix.identifier;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* @example [π](https://... "WebMercatorQuad")
|
|
59
|
+
*
|
|
60
|
+
* @param projection
|
|
61
|
+
* @param url
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
export function markdownProjectionLink(projection, url) {
|
|
65
|
+
const tileMatrix = projection === EpsgCode.Nztm2000 ? Nztm2000QuadTms : TileMatrixSets.get(projection);
|
|
66
|
+
return `[${markdownProjectionText(projection)}](${UsePlaceholderUrls ? 'url' : url.href} "${tileMatrix.identifier}")`;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @example π¨
|
|
70
|
+
* @example β°οΈ
|
|
71
|
+
*
|
|
72
|
+
* @param type
|
|
73
|
+
* @returns
|
|
74
|
+
*/
|
|
75
|
+
function markdownPipelineText(type) {
|
|
76
|
+
return `${EmojiPipeline[type]} ${type === 'extract' ? 'rgb' : type}`;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* @example https://dev.basemaps.linz.govt.nz/@[location]?c=[config]&i=[layerId]m&p=[projection]&debug=true
|
|
80
|
+
*
|
|
81
|
+
* @param configUrl
|
|
82
|
+
* @param projection
|
|
83
|
+
* @param configImagery
|
|
84
|
+
* @returns
|
|
85
|
+
*/
|
|
86
|
+
function getBaseUrl(configUrl, projection, configImagery) {
|
|
87
|
+
const center = getPreviewUrl({ imagery: configImagery });
|
|
88
|
+
const url = new URL(PublicUrlBase); // host
|
|
89
|
+
url.pathname = center.slug; // location
|
|
90
|
+
url.searchParams.set('c', configUrl.href); // config
|
|
91
|
+
url.searchParams.set('i', center.name); // layer id
|
|
92
|
+
url.searchParams.set('p', projection.toString()); // projection
|
|
93
|
+
url.searchParams.set('debug', 'true'); // debug mode
|
|
94
|
+
return url;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* single-line: no pipelines or one pipeline
|
|
98
|
+
*
|
|
99
|
+
* @example [π WebMercatorQuad]() | [πΊοΈ NZTM2000]()
|
|
100
|
+
*
|
|
101
|
+
* multi-line: more than one pipeline
|
|
102
|
+
*
|
|
103
|
+
* @example \n
|
|
104
|
+
* - π¨ color-ramp: [π WebMercatorQuad]() | [πΊοΈ NZTM2000]()
|
|
105
|
+
* - β°οΈ terrain-rgb: [π WebMercatorQuad]() | [πΊοΈ NZTM2000]()
|
|
106
|
+
*
|
|
107
|
+
* @param diff
|
|
108
|
+
* @param tileSet
|
|
109
|
+
* @param layer
|
|
110
|
+
* @returns
|
|
111
|
+
*/
|
|
112
|
+
function markdownBasemapsLinks(diff, tileSet, layer, indent = '') {
|
|
113
|
+
const configUrl = diff.after.source;
|
|
114
|
+
if (configUrl == null)
|
|
115
|
+
throw new Error(`Failed to read config bundled file path. TileSet Id: ${tileSet.id}`);
|
|
116
|
+
const defaultLinks = {};
|
|
117
|
+
const pipelineLinks = {};
|
|
118
|
+
/**
|
|
119
|
+
* **Stage 1: Build links**
|
|
120
|
+
*
|
|
121
|
+
* First, we iterate over the layer by projection. This gives us access to imagery by layer ID.
|
|
122
|
+
* From that, we can extract each layer's pipelines (outputs) and formats.
|
|
123
|
+
*
|
|
124
|
+
* We don't render markdown yet. Since we're iterating by projections at the top level, generating
|
|
125
|
+
* the markdown inline is tricky. Instead, we only collect the data needed to render the links
|
|
126
|
+
* in the next stage.
|
|
127
|
+
*/
|
|
128
|
+
// grab layer by epsg
|
|
129
|
+
for (const epsg of ProjectionLinkOrder) {
|
|
130
|
+
const layerId = layer[epsg];
|
|
131
|
+
if (layerId == null)
|
|
132
|
+
continue;
|
|
133
|
+
// grab imagery config
|
|
134
|
+
const configImagery = diff.after.objects.get(diff.after.Imagery.id(layerId));
|
|
135
|
+
if (configImagery == null)
|
|
136
|
+
throw new Error(`Failed to find imagery config from config bundle file. Id: ${layerId}`);
|
|
137
|
+
const baseUrl = getBaseUrl(configUrl, epsg, configImagery);
|
|
138
|
+
// grab outputs
|
|
139
|
+
const outputs = tileSet.outputs;
|
|
140
|
+
if (outputs == null) {
|
|
141
|
+
defaultLinks[epsg] = markdownProjectionLink(epsg, baseUrl);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
// generate links by output
|
|
145
|
+
for (const output of outputs.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
146
|
+
const pipeline = output.name;
|
|
147
|
+
if (pipelineLinks[pipeline] == null)
|
|
148
|
+
pipelineLinks[pipeline] = {};
|
|
149
|
+
const formats = output.format;
|
|
150
|
+
if (formats == null) {
|
|
151
|
+
if (pipelineLinks[pipeline]['default'] == null)
|
|
152
|
+
pipelineLinks[pipeline]['default'] = {};
|
|
153
|
+
const url = new URL(baseUrl);
|
|
154
|
+
url.searchParams.set('pipeline', pipeline);
|
|
155
|
+
pipelineLinks[output.name]['default'][epsg] = markdownProjectionLink(epsg, url);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
// generate links by format
|
|
159
|
+
for (const format of formats.sort((a, b) => a.localeCompare(b))) {
|
|
160
|
+
if (pipelineLinks[output.name][format] == null)
|
|
161
|
+
pipelineLinks[output.name][format] = {};
|
|
162
|
+
const url = new URL(baseUrl);
|
|
163
|
+
url.searchParams.set('pipeline', pipeline);
|
|
164
|
+
url.searchParams.set('format', format);
|
|
165
|
+
pipelineLinks[output.name][format][epsg] = markdownProjectionLink(epsg, url);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* **Stage 2: Render markdown**
|
|
171
|
+
*
|
|
172
|
+
* With the pipelines (outputs) and formats collected, we can generate the markdown efficiently.
|
|
173
|
+
*
|
|
174
|
+
* - If the layer has no pipelines, or, exactly one pipeline, we render a single-line of links.
|
|
175
|
+
* - Otherwise, if the layer has multiple pipelines, we render one line per pipeline.
|
|
176
|
+
*/
|
|
177
|
+
/**
|
|
178
|
+
* single-line: no pipelines
|
|
179
|
+
*
|
|
180
|
+
* @example [π WebMercatorQuad]() | [πΊοΈ NZTM2000]()
|
|
181
|
+
*/
|
|
182
|
+
if (Object.keys(defaultLinks).length > 0) {
|
|
183
|
+
const line = [];
|
|
184
|
+
for (const epsg of ProjectionLinkOrder) {
|
|
185
|
+
if (defaultLinks[epsg] == null)
|
|
186
|
+
continue;
|
|
187
|
+
const link = defaultLinks[epsg];
|
|
188
|
+
line.push(link);
|
|
189
|
+
}
|
|
190
|
+
return line.join(' | ');
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* single-line: one pipeline
|
|
194
|
+
*
|
|
195
|
+
* @example [π WebMercatorQuad]() | [πΊοΈ NZTM2000]()
|
|
196
|
+
*
|
|
197
|
+
* multi-line: more than one pipeline
|
|
198
|
+
*
|
|
199
|
+
* @example \n
|
|
200
|
+
* - π¨ color-ramp: [π WebMercatorQuad]() | [πΊοΈ NZTM2000]()
|
|
201
|
+
* - β°οΈ terrain-rgb: [π WebMercatorQuad]() | [πΊοΈ NZTM2000]()
|
|
202
|
+
*/
|
|
203
|
+
const numPipelines = Object.keys(pipelineLinks).length;
|
|
204
|
+
const lines = [];
|
|
205
|
+
for (const [pipeline, byFormat] of Object.entries(pipelineLinks)) {
|
|
206
|
+
const line = [];
|
|
207
|
+
if (numPipelines > 1) {
|
|
208
|
+
line.push(`\n${indent}- ${markdownPipelineText(pipeline)}:`);
|
|
209
|
+
}
|
|
210
|
+
const numFormats = Object.keys(byFormat).length;
|
|
211
|
+
for (const [format, byEpsg] of Object.entries(byFormat)) {
|
|
212
|
+
const links = [];
|
|
213
|
+
for (const epsg of ProjectionLinkOrder) {
|
|
214
|
+
if (byEpsg[epsg] == null)
|
|
215
|
+
continue;
|
|
216
|
+
const link = byEpsg[epsg];
|
|
217
|
+
if (numFormats > 1 && format !== 'default') {
|
|
218
|
+
links.push(`${link} \`${format}\``);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
links.push(link);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
line.push(links.join(' | '));
|
|
225
|
+
}
|
|
226
|
+
lines.push(line.join(' '));
|
|
227
|
+
}
|
|
228
|
+
return lines.join('');
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Generates markdown for the given Tileset's Layers.
|
|
232
|
+
*
|
|
233
|
+
* @param diff
|
|
234
|
+
* @param raster
|
|
235
|
+
* @returns
|
|
236
|
+
*/
|
|
237
|
+
function markdownDiffRasterLayers(diff, raster) {
|
|
238
|
+
if (raster.layers.length === 0)
|
|
239
|
+
return [];
|
|
240
|
+
const indent = ' ';
|
|
241
|
+
const lines = [];
|
|
242
|
+
for (const change of raster.layers) {
|
|
243
|
+
const symbol = EmojiChange[change.type];
|
|
244
|
+
if (change.type === 'removed') {
|
|
245
|
+
lines.push(`- #### ${symbol} ${change.before.title} (\`${change.before.name}\`)`);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
// Only one layer, that is the same title as this layer
|
|
249
|
+
const showTitle = raster.after.layers.length !== 1 || raster.after.layers[0].title !== raster.after.title;
|
|
250
|
+
if (showTitle) {
|
|
251
|
+
const line = [];
|
|
252
|
+
line.push(`- #### ${symbol} ${change.after.title} (\`${change.after.name}\`)`);
|
|
253
|
+
line.push(markdownBasemapsLinks(diff, raster.after, change.after, indent));
|
|
254
|
+
lines.push(line.join(' '));
|
|
255
|
+
}
|
|
256
|
+
// changes
|
|
257
|
+
if (change.type === 'updated') {
|
|
258
|
+
for (const c of change.changes)
|
|
259
|
+
lines.push(`${indent}- ${changeDiff(c)}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return lines;
|
|
264
|
+
}
|
|
265
|
+
/** Find all the projections from a tileset */
|
|
266
|
+
function tileSetProjections(t) {
|
|
267
|
+
const projections = new Set();
|
|
268
|
+
for (const l of t.layers) {
|
|
269
|
+
if (l['3857'])
|
|
270
|
+
projections.add(EpsgCode.Google);
|
|
271
|
+
if (l['2193'])
|
|
272
|
+
projections.add(EpsgCode.Nztm2000);
|
|
273
|
+
}
|
|
274
|
+
return Array.from(projections);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Generates markdown for the given Tileset.
|
|
278
|
+
*
|
|
279
|
+
* @param diff
|
|
280
|
+
* @param raster
|
|
281
|
+
* @returns
|
|
282
|
+
*/
|
|
283
|
+
function markdownDiffRaster(diff, raster) {
|
|
284
|
+
const lines = [];
|
|
285
|
+
const projections = raster.type === 'removed' ? tileSetProjections(raster.before) : tileSetProjections(raster.after);
|
|
286
|
+
const symbol = EmojiChange[raster.type];
|
|
287
|
+
if (raster.type === 'removed') {
|
|
288
|
+
const links = [...projections].map((m) => `~~${markdownProjectionText(m)}~~`);
|
|
289
|
+
lines.push(`#### ${symbol} ${raster.before.title} (\`${raster.id}\`) ` + links.join(' '));
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
const line = [];
|
|
293
|
+
line.push(`#### ${symbol} ${raster.after.title} (\`${raster.id}\`)`);
|
|
294
|
+
line.push(markdownBasemapsLinks(diff, raster.after, raster.after.layers[0]));
|
|
295
|
+
lines.push(line.join(' '));
|
|
296
|
+
// changes
|
|
297
|
+
if (raster.type === 'updated') {
|
|
298
|
+
// Changes to the top level config, eg name or title changes
|
|
299
|
+
for (const change of raster.changes ?? []) {
|
|
300
|
+
lines.push(`\n- ${changeDiff(change)}`);
|
|
301
|
+
}
|
|
302
|
+
const layersMarkdown = markdownDiffRasterLayers(diff, raster);
|
|
303
|
+
if (layersMarkdown.length > 0) {
|
|
304
|
+
lines.push('\n', layersMarkdown.join('\n'));
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return lines.join('');
|
|
309
|
+
}
|
|
310
|
+
export function diffToMarkdown(diff) {
|
|
311
|
+
const lines = [];
|
|
312
|
+
// Aerial layer changes go first
|
|
313
|
+
const aerialLayer = diff.raster.find((l) => l.id === 'ts_aerial');
|
|
314
|
+
if (aerialLayer != null) {
|
|
315
|
+
lines.push('## Aerial layer\n');
|
|
316
|
+
lines.push('One or more changes has been detected on the primary aerial imagery layer\n');
|
|
317
|
+
if (aerialLayer.type === 'removed') {
|
|
318
|
+
lines.push(`# π¨π¨ "ts_aerial" layer Removed π¨π¨`);
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
lines.push(markdownDiffRaster(diff, aerialLayer));
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
const changesByType = {
|
|
325
|
+
removed: [],
|
|
326
|
+
updated: [],
|
|
327
|
+
new: [],
|
|
328
|
+
};
|
|
329
|
+
for (const raster of diff.raster) {
|
|
330
|
+
// ts_all and ts_aerial are special cases that handled above
|
|
331
|
+
if (raster.id === 'ts_aerial')
|
|
332
|
+
continue;
|
|
333
|
+
if (raster.id === 'ts_all')
|
|
334
|
+
continue;
|
|
335
|
+
changesByType[raster.type].push(raster);
|
|
336
|
+
}
|
|
337
|
+
if (changesByType.new.length > 0 || changesByType.removed.length > 0 || changesByType.updated.length) {
|
|
338
|
+
if (lines.length > 0)
|
|
339
|
+
lines.push('\n');
|
|
340
|
+
lines.push('## Tilesets\n');
|
|
341
|
+
}
|
|
342
|
+
for (const changeType of ['removed', 'updated', 'new']) {
|
|
343
|
+
const changes = changesByType[changeType];
|
|
344
|
+
const e = EmojiChange[changeType];
|
|
345
|
+
if (changes.length > 0)
|
|
346
|
+
lines.push(`### ${e} ${changeType.slice(0, 1).toUpperCase()}${changeType.slice(1)} \n`);
|
|
347
|
+
const linesByTileset = [];
|
|
348
|
+
for (const raster of changes) {
|
|
349
|
+
linesByTileset.push(markdownDiffRaster(diff, raster));
|
|
350
|
+
}
|
|
351
|
+
// ensure a wider gap between tileset listings for clarity
|
|
352
|
+
lines.push(linesByTileset.join('\n\n<br />\n\n'));
|
|
353
|
+
}
|
|
354
|
+
// FIXME: todo add simple vector diff +
|
|
355
|
+
// IF vector layer has changed
|
|
356
|
+
/*
|
|
357
|
+
const featureChanges = await diffVectorUpdate(change, existingTileSet);
|
|
358
|
+
vectorUpdate.push(`## Feature updates for ${change.id}`);
|
|
359
|
+
vectorUpdate.push(...featureChanges);
|
|
360
|
+
const reportMarkdown = await outputAnalyseReports(change);
|
|
361
|
+
*/
|
|
362
|
+
if (lines.length > 0) {
|
|
363
|
+
const configHeader = [`# Configuration changes detected`, '', `**Key**: β New | π Updated | ποΈ Deleted`];
|
|
364
|
+
lines.unshift(configHeader.join('\n') + '\n');
|
|
365
|
+
}
|
|
366
|
+
return lines.join('\n');
|
|
367
|
+
}
|
|
368
|
+
//# 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
|
@@ -27,6 +27,15 @@ export declare const ConfigCli: Partial<import("cmd-ts/dist/cjs/argparser.js").R
|
|
|
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: {
|
|
@@ -66,6 +75,15 @@ export declare const ConfigCli: Partial<import("cmd-ts/dist/cjs/argparser.js").R
|
|
|
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
|
package/build/index.js.map
CHANGED
|
@@ -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,
|
|
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.
|
|
3
|
+
"version": "8.11.2",
|
|
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.
|
|
28
|
-
"@basemaps/config-loader": "^8.
|
|
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.
|
|
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": "
|
|
54
|
+
"gitHead": "8e7b083ad11f25ed8eb61a7d2382efe48d208bb5"
|
|
55
55
|
}
|