@basemaps/cli-vector 8.1.0 → 8.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.
Files changed (94) hide show
  1. package/build/bin.js +2 -2
  2. package/build/cli/cli.analyse.d.ts +34 -0
  3. package/build/cli/cli.analyse.js +152 -0
  4. package/build/cli/cli.analyse.js.map +1 -0
  5. package/build/cli/cli.create.d.ts +39 -0
  6. package/build/cli/cli.create.js +207 -0
  7. package/build/cli/cli.create.js.map +1 -0
  8. package/build/cli/cli.extract.d.ts +8 -17
  9. package/build/cli/cli.extract.js +43 -33
  10. package/build/cli/cli.extract.js.map +1 -1
  11. package/build/cli/cli.join.d.ts +44 -0
  12. package/build/cli/cli.join.js +149 -0
  13. package/build/cli/cli.join.js.map +1 -0
  14. package/build/extract.js.map +1 -0
  15. package/build/generalization/generalization.d.ts +9 -0
  16. package/build/generalization/generalization.js +159 -0
  17. package/build/generalization/generalization.js.map +1 -0
  18. package/build/generalization/simplify.d.ts +2 -0
  19. package/build/generalization/simplify.js +80 -0
  20. package/build/generalization/simplify.js.map +1 -0
  21. package/build/index.d.ts +83 -5
  22. package/build/index.js +7 -1
  23. package/build/index.js.map +1 -1
  24. package/build/modify/consts.d.ts +1 -0
  25. package/build/modify/consts.js +23 -0
  26. package/build/modify/consts.js.map +1 -0
  27. package/build/modify/layers/__test__/contours.test.d.ts +1 -0
  28. package/build/modify/layers/__test__/contours.test.js +59 -0
  29. package/build/modify/layers/__test__/contours.test.js.map +1 -0
  30. package/build/modify/layers/contours.d.ts +28 -0
  31. package/build/modify/layers/contours.js +90 -0
  32. package/build/modify/layers/contours.js.map +1 -0
  33. package/build/modify/layers/place_labels.d.ts +18 -0
  34. package/build/modify/layers/place_labels.js +122 -0
  35. package/build/modify/layers/place_labels.js.map +1 -0
  36. package/build/modify/layers/pois.d.ts +11 -0
  37. package/build/modify/layers/pois.js +27 -0
  38. package/build/modify/layers/pois.js.map +1 -0
  39. package/build/modify/layers/public_transport.d.ts +12 -0
  40. package/build/modify/layers/public_transport.js +53 -0
  41. package/build/modify/layers/public_transport.js.map +1 -0
  42. package/build/modify/layers/street_labels.d.ts +12 -0
  43. package/build/modify/layers/street_labels.js +34 -0
  44. package/build/modify/layers/street_labels.js.map +1 -0
  45. package/build/modify/layers/streets.d.ts +12 -0
  46. package/build/modify/layers/streets.js +72 -0
  47. package/build/modify/layers/streets.js.map +1 -0
  48. package/build/modify/layers/water_polygons.d.ts +13 -0
  49. package/build/modify/layers/water_polygons.js +85 -0
  50. package/build/modify/layers/water_polygons.js.map +1 -0
  51. package/build/modify/modify.d.ts +11 -0
  52. package/build/modify/modify.js +48 -0
  53. package/build/modify/modify.js.map +1 -0
  54. package/build/modify/parser.d.ts +47 -0
  55. package/build/modify/parser.js +24 -0
  56. package/build/modify/parser.js.map +1 -0
  57. package/build/modify/schema.d.ts +17 -0
  58. package/build/modify/schema.js +2 -0
  59. package/build/modify/schema.js.map +1 -0
  60. package/build/modify/shared.d.ts +4 -0
  61. package/build/modify/shared.js +38 -0
  62. package/build/modify/shared.js.map +1 -0
  63. package/build/schema-loader/parser.d.ts +8 -0
  64. package/build/schema-loader/parser.js +1 -0
  65. package/build/schema-loader/parser.js.map +1 -1
  66. package/build/schema-loader/schema.d.ts +19 -5
  67. package/build/schema-loader/schema.loader.js +10 -5
  68. package/build/schema-loader/schema.loader.js.map +1 -1
  69. package/build/stac.d.ts +41 -0
  70. package/build/stac.js +185 -0
  71. package/build/stac.js.map +1 -0
  72. package/build/transform/covt.d.ts +5 -0
  73. package/build/transform/covt.js +23 -0
  74. package/build/transform/covt.js.map +1 -0
  75. package/build/transform/mbtiles.to.ttiles.d.ts +14 -0
  76. package/build/transform/mbtiles.to.ttiles.js +60 -0
  77. package/build/transform/mbtiles.to.ttiles.js.map +1 -0
  78. package/build/transform/ogr2ogr.d.ts +7 -0
  79. package/build/transform/ogr2ogr.js +20 -0
  80. package/build/transform/ogr2ogr.js.map +1 -0
  81. package/build/transform/tippecanoe.d.ts +14 -0
  82. package/build/transform/tippecanoe.js +68 -0
  83. package/build/transform/tippecanoe.js.map +1 -0
  84. package/build/types/VectorGeoFeature.d.ts +9 -0
  85. package/build/types/VectorGeoFeature.js +2 -0
  86. package/build/types/VectorGeoFeature.js.map +1 -0
  87. package/build/util.d.ts +35 -0
  88. package/build/util.js +43 -0
  89. package/build/util.js.map +1 -0
  90. package/dist/index.cjs +20753 -9551
  91. package/package.json +23 -8
  92. package/build/extract/extract.js.map +0 -1
  93. /package/build/{extract/extract.d.ts → extract.d.ts} +0 -0
  94. /package/build/{extract/extract.js → extract.js} +0 -0
package/build/bin.js CHANGED
@@ -1,8 +1,8 @@
1
1
  Error.stackTraceLimit = 100;
2
2
  import { LogConfig } from '@basemaps/shared';
3
3
  import { run } from 'cmd-ts';
4
- import { vectorCli } from './index.js';
5
- run(vectorCli, process.argv.slice(2)).catch((err) => {
4
+ import { VectorCli } from './index.js';
5
+ run(VectorCli, process.argv.slice(2)).catch((err) => {
6
6
  const logger = LogConfig.get();
7
7
  logger.fatal({ err }, 'Command:Failed');
8
8
  // Give the logger some time to flush before exiting
@@ -0,0 +1,34 @@
1
+ export declare const AnalyseArgs: {
2
+ path: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
3
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<URL>>;
4
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
5
+ template: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
6
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<string>>;
7
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
8
+ target: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
9
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<URL>>;
10
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
11
+ verbose: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
12
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<boolean>>;
13
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/argparser.js").Register & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
14
+ extraVerbose: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
15
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<boolean>>;
16
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/argparser.js").Register & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
17
+ };
18
+ export declare const AnalyseCommand: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
19
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
20
+ path: URL;
21
+ template: string;
22
+ target: URL;
23
+ verbose: boolean;
24
+ extraVerbose: boolean;
25
+ }>>;
26
+ } & 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<{
27
+ path: URL;
28
+ template: string;
29
+ target: URL;
30
+ verbose: boolean;
31
+ extraVerbose: boolean;
32
+ }, Promise<void>> & {
33
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
34
+ } & 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>;
@@ -0,0 +1,152 @@
1
+ import sq from 'node:sqlite';
2
+ import { fsa, Url } from '@basemaps/shared';
3
+ import { CliInfo } from '@basemaps/shared/build/cli/info.js';
4
+ import { getLogger, logArguments } from '@basemaps/shared/build/cli/log.js';
5
+ import { VectorTile } from '@mapbox/vector-tile';
6
+ import { command, option } from 'cmd-ts';
7
+ import { readFileSync } from 'fs';
8
+ import Mustache from 'mustache';
9
+ import sizeof from 'object-sizeof';
10
+ import { basename } from 'path';
11
+ import Protobuf from 'pbf';
12
+ import { gunzip } from 'zlib';
13
+ function distribution(size) {
14
+ if (size <= 10000)
15
+ return '0-10KB';
16
+ if (size <= 50000)
17
+ return '10-50KB';
18
+ if (size <= 100000)
19
+ return '50-100KB';
20
+ if (size <= 200000)
21
+ return '100-200KB';
22
+ if (size <= 500000)
23
+ return '200-500KB';
24
+ return '>500KB';
25
+ }
26
+ export const AnalyseArgs = {
27
+ ...logArguments,
28
+ path: option({
29
+ long: 'path',
30
+ type: Url,
31
+ description: 'Path to mbtiles',
32
+ }),
33
+ template: option({
34
+ long: 'template',
35
+ defaultValue: () => 'analysis/template.md',
36
+ defaultValueIsSerializable: true,
37
+ description: 'Path of analysis template',
38
+ }),
39
+ target: option({
40
+ long: 'target',
41
+ type: Url,
42
+ description: 'Target location for the result file',
43
+ }),
44
+ };
45
+ export const AnalyseCommand = command({
46
+ name: 'analyse',
47
+ version: CliInfo.version,
48
+ description: 'Analyse vector mbtiles',
49
+ args: AnalyseArgs,
50
+ async handler(args) {
51
+ const logger = getLogger(this, args, 'cli-vector');
52
+ logger.info('AnalyseMbTiles: Start');
53
+ const analysisData = [];
54
+ let mbtilesFile = args.path.pathname;
55
+ if (args.path.protocol !== 'file:') {
56
+ logger.info('Download Start');
57
+ const fileName = basename(args.path.pathname);
58
+ const localFile = fsa.toUrl(`tmp/${fileName}`);
59
+ await fsa.head(args.path);
60
+ const stream = fsa.readStream(args.path);
61
+ await fsa.write(localFile, stream);
62
+ mbtilesFile = localFile.pathname;
63
+ logger.info('Download End');
64
+ }
65
+ logger.info({ mbtilesFile }, 'Read mbtiles');
66
+ const db = new sq.DatabaseSync(mbtilesFile);
67
+ const MaxZoom = 15;
68
+ for (let i = 0; i <= MaxZoom; i++) {
69
+ const result = db
70
+ .prepare('SELECT tile_column as x, ((1 << zoom_level) - 1 - tile_row) as y, zoom_level as z, tile_data FROM tiles WHERE zoom_level=?')
71
+ .all(i);
72
+ let maxTile = { x: 0, y: 0, z: 0, max: 0 };
73
+ const layersSum = new Map();
74
+ const distributionSum = new Map();
75
+ for (const row of result) {
76
+ const buffer = await new Promise((resolve) => {
77
+ gunzip(row.tile_data, (_, buffer) => resolve(buffer));
78
+ });
79
+ const tile = new VectorTile(new Protobuf(buffer));
80
+ if (buffer.length > maxTile.max)
81
+ maxTile = {
82
+ x: row.x,
83
+ y: row.y,
84
+ z: row.z,
85
+ max: buffer.length,
86
+ link: `https://basemaps.linz.govt.nz/v1/tiles/topographic/WebMercatorQuad/${row.z}/${row.z}/${row.y}.pbf`,
87
+ };
88
+ // Prepare distribution
89
+ const dis = distribution(buffer.length);
90
+ const value = distributionSum.get(dis);
91
+ if (value == null) {
92
+ distributionSum.set(dis, 1);
93
+ }
94
+ else {
95
+ distributionSum.set(dis, value + 1);
96
+ }
97
+ // Prepare layer information
98
+ for (const [name, layer] of Object.entries(tile.layers)) {
99
+ let features = layer.length;
100
+ // Calculate the total features size
101
+ let totalGeometry = 0;
102
+ let totalAttributes = 0;
103
+ for (let i = 0; i < layer.length; i++) {
104
+ const feature = layer.feature(i);
105
+ const properties = sizeof(feature.properties);
106
+ const geometry = sizeof(feature.loadGeometry());
107
+ totalGeometry += properties;
108
+ totalAttributes += geometry;
109
+ }
110
+ // Cumulative total features and sizes
111
+ const layerInfo = layersSum.get(name);
112
+ if (layerInfo) {
113
+ features += layerInfo.features;
114
+ totalGeometry += layerInfo.totalGeometry;
115
+ totalAttributes += layerInfo.totalAttributes;
116
+ }
117
+ layersSum.set(name, { features, totalGeometry, totalAttributes });
118
+ }
119
+ }
120
+ // Prepare printable max tile
121
+ maxTile.size = `${(maxTile.max / 1000).toFixed(1)}KB`;
122
+ // Prepare printable distributions
123
+ const distributions = [];
124
+ for (const [distribution, tiles] of distributionSum) {
125
+ const percentage = `${((tiles * 100) / result.length).toFixed(1)}%`;
126
+ distributions.push({ distribution, tiles, percentage });
127
+ }
128
+ // Prepare printable layers
129
+ const layers = [];
130
+ for (const [name, layerInfo] of layersSum) {
131
+ const features = layerInfo.features;
132
+ const totalGeometry = `${(layerInfo.totalGeometry / 1000).toFixed(1)}KB`;
133
+ const totalAttributes = `${(layerInfo.totalAttributes / 1000).toFixed(1)}KB`;
134
+ const totalSize = `${((layerInfo.totalGeometry + layerInfo.totalAttributes) / 1000).toFixed(1)}KB`;
135
+ layers.push({ name, features, totalGeometry, totalAttributes, totalSize });
136
+ }
137
+ const data = {
138
+ zoom: i,
139
+ maxTile,
140
+ distributions,
141
+ layers,
142
+ };
143
+ analysisData.push(data);
144
+ }
145
+ db.close();
146
+ logger.info('Finished reading mbtiles');
147
+ const template = readFileSync(args.template).toString();
148
+ const output = Mustache.render(template, { data: analysisData });
149
+ await fsa.write(new URL('report.md', args.target), Buffer.from(output, 'utf8'));
150
+ },
151
+ });
152
+ //# sourceMappingURL=cli.analyse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.analyse.js","sourceRoot":"","sources":["../../src/cli/cli.analyse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,QAAQ,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAsC9B,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,IAAI,IAAI,KAAK;QAAE,OAAO,QAAQ,CAAC;IACnC,IAAI,IAAI,IAAI,KAAK;QAAE,OAAO,SAAS,CAAC;IACpC,IAAI,IAAI,IAAI,MAAM;QAAE,OAAO,UAAU,CAAC;IACtC,IAAI,IAAI,IAAI,MAAM;QAAE,OAAO,WAAW,CAAC;IACvC,IAAI,IAAI,IAAI,MAAM;QAAE,OAAO,WAAW,CAAC;IACvC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG,YAAY;IACf,IAAI,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,iBAAiB;KAC/B,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,UAAU;QAChB,YAAY,EAAE,GAAG,EAAE,CAAC,sBAAsB;QAC1C,0BAA0B,EAAE,IAAI;QAChC,WAAW,EAAE,2BAA2B;KACzC,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,qCAAqC;KACnD,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;IACpC,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,WAAW,EAAE,wBAAwB;IACrC,IAAI,EAAE,WAAW;IACjB,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAErC,MAAM,YAAY,GAAmB,EAAE,CAAC;QAExC,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACrC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAC;YAC/C,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACnC,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,cAAc,CAAC,CAAC;QAE7C,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,EAAE;iBACd,OAAO,CACN,4HAA4H,CAC7H;iBACA,GAAG,CAAC,CAAC,CAA6D,CAAC;YAEtE,IAAI,OAAO,GAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;YACrD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;YAC9C,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;YAElD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAW,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBACnD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxD,CAAC,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBAElD,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG;oBAC7B,OAAO,GAAG;wBACR,CAAC,EAAE,GAAG,CAAC,CAAC;wBACR,CAAC,EAAE,GAAG,CAAC,CAAC;wBACR,CAAC,EAAE,GAAG,CAAC,CAAC;wBACR,GAAG,EAAE,MAAM,CAAC,MAAM;wBAClB,IAAI,EAAE,sEAAsE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM;qBAC1G,CAAC;gBAEJ,uBAAuB;gBACvB,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACxC,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;oBAClB,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBACtC,CAAC;gBAED,4BAA4B;gBAC5B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxD,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;oBAE5B,oCAAoC;oBACpC,IAAI,aAAa,GAAG,CAAC,CAAC;oBACtB,IAAI,eAAe,GAAG,CAAC,CAAC;oBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBACjC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;wBAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;wBAChD,aAAa,IAAI,UAAU,CAAC;wBAC5B,eAAe,IAAI,QAAQ,CAAC;oBAC9B,CAAC;oBAED,sCAAsC;oBACtC,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACtC,IAAI,SAAS,EAAE,CAAC;wBACd,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC;wBAC/B,aAAa,IAAI,SAAS,CAAC,aAAa,CAAC;wBACzC,eAAe,IAAI,SAAS,CAAC,eAAe,CAAC;oBAC/C,CAAC;oBACD,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;YAED,6BAA6B;YAC7B,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YAEtD,kCAAkC;YAClC,MAAM,aAAa,GAAmB,EAAE,CAAC;YACzC,KAAK,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC;gBACpD,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;gBACpE,aAAa,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1D,CAAC;YAED,2BAA2B;YAC3B,MAAM,MAAM,GAAgB,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;gBACpC,MAAM,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzE,MAAM,eAAe,GAAG,GAAG,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC7E,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7E,CAAC;YAED,MAAM,IAAI,GAAiB;gBACzB,IAAI,EAAE,CAAC;gBACP,OAAO;gBACP,aAAa;gBACb,MAAM;aACP,CAAC;YACF,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,EAAE,CAAC,KAAK,EAAE,CAAC;QAEX,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAExC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QACjE,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClF,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,39 @@
1
+ export declare const CreateArgs: {
2
+ path: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
3
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<URL[]>>;
4
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp;
5
+ fromFile: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
6
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<URL[] | undefined>>;
7
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
8
+ concurrency: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
9
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<number>>;
10
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
11
+ join: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
12
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<boolean>>;
13
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/argparser.js").Register & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
14
+ verbose: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
15
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<boolean>>;
16
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/argparser.js").Register & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
17
+ extraVerbose: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
18
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<boolean>>;
19
+ } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/argparser.js").Register & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
20
+ };
21
+ export declare const CreateCommand: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
22
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
23
+ path: URL[];
24
+ fromFile: URL[] | undefined;
25
+ concurrency: number;
26
+ join: boolean;
27
+ verbose: boolean;
28
+ extraVerbose: boolean;
29
+ }>>;
30
+ } & 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<{
31
+ path: URL[];
32
+ fromFile: URL[] | undefined;
33
+ concurrency: number;
34
+ join: boolean;
35
+ verbose: boolean;
36
+ extraVerbose: boolean;
37
+ }, Promise<void>> & {
38
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
39
+ } & 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>;
@@ -0,0 +1,207 @@
1
+ import { fsa, Url, UrlArrayJsonFile } from '@basemaps/shared';
2
+ import { CliInfo } from '@basemaps/shared/build/cli/info.js';
3
+ import { getLogger, logArguments } from '@basemaps/shared/build/cli/log.js';
4
+ import { command, flag, number, option, optional, restPositionals } from 'cmd-ts';
5
+ import PLimit from 'p-limit';
6
+ import { createGunzip } from 'zlib';
7
+ import { generalize } from '../generalization/generalization.js';
8
+ import { ogr2ogrNDJson } from '../transform/ogr2ogr.js';
9
+ import { tileJoin, tippecanoe } from '../transform/tippecanoe.js';
10
+ import { ContentType, prepareTmpPaths } from '../util.js';
11
+ const TmpPath = fsa.toUrl('tmp/create/');
12
+ export const CreateArgs = {
13
+ ...logArguments,
14
+ path: restPositionals({ type: Url, displayName: 'path', description: 'Path to vector Stac Item' }),
15
+ fromFile: option({
16
+ type: optional(UrlArrayJsonFile),
17
+ long: 'from-file',
18
+ description: 'Path to JSON file containing array of paths to mbtiles stac json.',
19
+ }),
20
+ concurrency: option({
21
+ type: number,
22
+ long: 'concurrency',
23
+ defaultValue: () => 1,
24
+ defaultValueIsSerializable: true,
25
+ description: 'Number of items to process concurrently when downloading source files or generating mbtiles.',
26
+ }),
27
+ join: flag({
28
+ long: 'join',
29
+ description: 'TODO: new parameter to join multiple mbtiles for local test only, because tile-join is not access to aws',
30
+ defaultValue: () => false,
31
+ defaultValueIsSerializable: true,
32
+ }),
33
+ };
34
+ export const CreateCommand = command({
35
+ name: 'create',
36
+ version: CliInfo.version,
37
+ description: 'Create individual vector mbtiles.',
38
+ args: CreateArgs,
39
+ async handler(args) {
40
+ const logger = getLogger(this, args, 'cli-vector');
41
+ const paths = args.fromFile != null ? args.path.concat(args.fromFile) : args.path;
42
+ // parse files as vector stac items and prepare tmp file paths
43
+ logger.info({ files: paths.length }, 'Parse Vector Stac Items: Start');
44
+ const items = await Promise.all(paths.map((path) => prepareItem(path, logger)));
45
+ logger.info({ items: items.length }, 'Parse Vector Stac Items: End');
46
+ const q = PLimit(args.concurrency);
47
+ // download source files
48
+ logger.info({ items: items.length }, 'Download Source Files: Start');
49
+ await Promise.all(items.map((item) => q(() => downloadSourceFile(item, logger))));
50
+ logger.info({ items: items.length }, 'Download Source Files: End');
51
+ // generate ndjsons and mbtiles
52
+ logger.info({ items: items.length }, 'Create Mbtiles Files: Start');
53
+ await Promise.all(items.map((item) => q(() => createMbtilesFile(item, logger))));
54
+ logger.info({ items: items.length }, 'Create Mbtiles Files: End');
55
+ // if applicable, combine all mbtiles files into a single mbtiles file
56
+ if (args.join === true) {
57
+ const mbtileFiles = items.map((item) => item.tmpPaths.mbtiles);
58
+ logger.info({ joining: mbtileFiles.length }, 'JoinMbtiles:Start');
59
+ const joinedFile = new URL(`joined.mbtiles`, TmpPath);
60
+ await tileJoin(mbtileFiles, joinedFile.pathname, logger);
61
+ if (!(await fsa.exists(joinedFile)))
62
+ throw new Error(`Failed to create joined mbtiles ${joinedFile.href}`);
63
+ logger.info({ output: joinedFile.href }, 'JoinMbtiles:End');
64
+ }
65
+ },
66
+ });
67
+ /**
68
+ * Parses the given filepath into a runtime VectorStacItem object and prepares temporary paths for upcoming local files.
69
+ *
70
+ * @param path - the path to the file to parse
71
+ * @param logger - a logger instance
72
+ * @returns an object containing a VectorStacItem and TmpPaths object
73
+ */
74
+ async function prepareItem(path, logger) {
75
+ logger.info({ source: path }, 'PrepareItem: Start');
76
+ // parse Vector Stac Item file
77
+ const stac = await fsa.readJson(path);
78
+ const options = stac.properties['linz_basemaps:options'];
79
+ if (options == null)
80
+ throw new Error(`Stac file missing linz_basemaps:options ${stac.id}`);
81
+ const layer = options.layer;
82
+ const shortbreadLayer = options.name;
83
+ // check properties
84
+ const cache = layer.cache;
85
+ if (cache == null)
86
+ throw new Error(`Failed to read cache path from stac ${path.href}`);
87
+ const format = layer.source.split('.').pop();
88
+ if (format == null)
89
+ throw new Error(`Failed to parse source file format ${layer.source}`);
90
+ if (!(format in ContentType))
91
+ throw new Error(`Unsupported source file format ${layer.source}`);
92
+ // prepare tmp paths for local files
93
+ const tmpPaths = prepareTmpPaths(TmpPath, path, layer.id, format, shortbreadLayer);
94
+ logger.info({ shortbreadLayer, dataset: layer.name }, 'PrepareItem: End');
95
+ return { stac, tmpPaths };
96
+ }
97
+ /**
98
+ * Downloads the given VectorStacItem's source file locally.
99
+ *
100
+ * @param stac - the VectorStacItem object for which to download its source file
101
+ * @param tmpPaths - the TmpPaths object denoting where to save the downloaded file
102
+ * @param logger - a logger instance
103
+ */
104
+ async function downloadSourceFile({ stac, tmpPaths }, logger) {
105
+ const options = stac.properties['linz_basemaps:options'];
106
+ if (options == null)
107
+ throw new Error(`Stac file missing linz_basemaps:options ${stac.id}`);
108
+ const layer = options.layer;
109
+ logger.info({ source: layer.source, id: layer.id, name: layer.name }, 'DownloadSourceFile: Start');
110
+ if (!(await fsa.exists(tmpPaths.source.path))) {
111
+ // TODO: We don't acturally need to head file from lds-cache here.
112
+ // As the fsa.stream doesn't retry to register roles, we need head to register it.
113
+ // We could delete this once that is fixed.
114
+ const stats = await fsa.head(new URL(layer.source));
115
+ logger.debug({ size: stats?.size, ContentType: stats?.contentType, LastModified: stats?.lastModified }, 'DownloadSourceFile: stats');
116
+ const stream = fsa.readStream(new URL(layer.source));
117
+ await fsa.write(tmpPaths.source.path, stream.pipe(createGunzip()), {
118
+ contentType: tmpPaths.source.contentType,
119
+ });
120
+ }
121
+ logger.info({ destination: tmpPaths.source.path, id: layer.id, name: layer.name }, 'DownloadSourceFile: End');
122
+ }
123
+ /**
124
+ * Generates an Mbtiles file from the given VectorStacItem's source file. Steps:
125
+ *
126
+ * 1. Converts the source file into an ndjson
127
+ * 2. Parses the ndjson file and applies the generalization options
128
+ * 3. Transforms the generalized ndjson file to an mbtiles file
129
+ * 4. Copies the mbtiles file to the same directory as the Vector Stac Item file
130
+ * 5. Updates the Vector Stac Item file
131
+ *
132
+ * @param stac - the VectorStacItem object from which to generate an Mbtiles file
133
+ * @param tmpPaths - the TmpPaths object denoting where to save temporary files for each step
134
+ * @param logger - a logger instance
135
+ */
136
+ async function createMbtilesFile({ stac, tmpPaths }, logger) {
137
+ const options = stac.properties['linz_basemaps:options'];
138
+ if (options == null)
139
+ throw new Error(`Stac file missing linz_basemaps:options ${stac.id}`);
140
+ const layer = options.layer;
141
+ const shortbreadLayer = options.name;
142
+ logger.info({ shortbreadLayer, dataset: layer.name }, 'CreateMbtilesFile: Start');
143
+ /**
144
+ * Convert the source file into an ndjson
145
+ */
146
+ logger.info({ source: tmpPaths.source.path, dataset: layer.name }, '[1/5] Convert source file to ndjson: Start');
147
+ if (!(await fsa.exists(tmpPaths.ndjson))) {
148
+ await ogr2ogrNDJson(tmpPaths.source.path, tmpPaths.ndjson, logger);
149
+ }
150
+ logger.info({ destination: tmpPaths.ndjson, dataset: layer.name }, '[1/5] Convert source file to ndjson: End');
151
+ /**
152
+ * Parse the ndjson file and apply the generalization options
153
+ */
154
+ logger.info({ source: tmpPaths.ndjson, dataset: layer.name }, '[2/5] Generalise ndjson features: Start');
155
+ let metrics = null;
156
+ if (!(await fsa.exists(tmpPaths.genNdjson))) {
157
+ metrics = await generalize(tmpPaths.ndjson, tmpPaths.genNdjson, options, logger);
158
+ if (metrics.output === 0)
159
+ throw new Error(`Failed to generalize ndjson file ${tmpPaths.ndjson.href}`);
160
+ }
161
+ logger.info({ destination: tmpPaths.genNdjson, dataset: layer.name }, '[2/5] Generalise ndjson features: End');
162
+ /**
163
+ * Transform the generalized ndjson file to an mbtiles file
164
+ */
165
+ logger.info({ source: tmpPaths.genNdjson, dataset: layer.name }, '[3/5] Transform generalised ndjson into mbtiles: Start');
166
+ if (!(await fsa.exists(tmpPaths.mbtiles))) {
167
+ await tippecanoe(tmpPaths.genNdjson, tmpPaths.mbtiles, layer, logger);
168
+ }
169
+ logger.info({ destination: tmpPaths.mbtiles, dataset: layer.name }, '[3/5] Transform generalised ndjson into mbtiles: End');
170
+ /**
171
+ * Copy the mbtiles file to the same directory as the Vector Stac Item file
172
+ */
173
+ logger.info({ source: tmpPaths.mbtiles, dataset: layer.name }, '[4/5] Copy mbtiles to stac location: Start');
174
+ if (!(await fsa.exists(tmpPaths.mbtilesCopy))) {
175
+ await fsa.write(tmpPaths.mbtilesCopy, fsa.readStream(tmpPaths.mbtiles));
176
+ // Ensure the mbtiles file was copied successfully
177
+ if (!(await fsa.exists(tmpPaths.mbtilesCopy))) {
178
+ throw new Error(`Failed to write the mbtiles file to ${tmpPaths.mbtilesCopy.href}`);
179
+ }
180
+ }
181
+ logger.info({ destination: tmpPaths.mbtilesCopy, dataset: layer.name }, '[4/5] Copy mbtiles to stac location: End');
182
+ /**
183
+ * Update the Vector Stac Item file
184
+ */
185
+ logger.info({ source: tmpPaths.origin, dataset: layer.name }, '[5/5] Update stac: Start');
186
+ // Update 'cache' flag to 'true' now that the mbtiles file exists
187
+ layer.cache.exists = true;
188
+ // Assign the 'lds:feature_count' property
189
+ const links = stac.links;
190
+ const ldsLayerIndex = links.findIndex((stacLink) => stacLink.rel === 'lds:layer');
191
+ if (ldsLayerIndex === -1)
192
+ throw new Error('Failed to locate `lds:layer` link object');
193
+ if (links[ldsLayerIndex]['lds:feature_count'] == null) {
194
+ // the 'metrics' variable is only ever null if the gen-ndjson file already exists, i.e.
195
+ // generated in a previous run. In such case, that run would have written the
196
+ // 'lds:feature_count' property to the Vector Stac Item file. If the following error occurs,
197
+ // then the previous run must have failed after creating the gen-ndjson file, but before
198
+ // updating the Vector Stac Item file.
199
+ if (metrics == null)
200
+ throw new Error('Metrics object does not exist');
201
+ links[ldsLayerIndex]['lds:feature_count'] = metrics.input;
202
+ }
203
+ // Overwrite the Vector Stac Item file
204
+ await fsa.write(tmpPaths.origin, JSON.stringify(stac, null, 2));
205
+ logger.info({ destination: tmpPaths.origin }, '[5/5] Update stac: End');
206
+ }
207
+ //# sourceMappingURL=cli.create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.create.js","sourceRoot":"","sources":["../../src/cli/cli.create.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,12 @@
1
- import { Layer, SchemaMetadata } from '../schema-loader/schema.js';
2
- export interface Task {
3
- name: string;
4
- metadata: SchemaMetadata;
5
- layer: Layer;
6
- }
7
- export interface ToProcess {
8
- tasks: Task[];
9
- }
10
1
  export declare const ExtractArgs: {
11
- path: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
12
- parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<string>>;
2
+ schema: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
3
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<URL>>;
13
4
  } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
14
5
  cache: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
15
6
  parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<string>>;
16
7
  } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
17
- group: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
18
- parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<number>>;
8
+ tileMatrix: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
9
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<string>>;
19
10
  } & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive>;
20
11
  verbose: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
21
12
  parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<boolean>>;
@@ -26,16 +17,16 @@ export declare const ExtractArgs: {
26
17
  };
27
18
  export declare const ExtractCommand: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
28
19
  parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
29
- path: string;
20
+ schema: URL;
30
21
  cache: string;
31
- group: number;
22
+ tileMatrix: string;
32
23
  verbose: boolean;
33
24
  extraVerbose: boolean;
34
25
  }>>;
35
26
  } & 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<{
36
- path: string;
27
+ schema: URL;
37
28
  cache: string;
38
- group: number;
29
+ tileMatrix: string;
39
30
  verbose: boolean;
40
31
  extraVerbose: boolean;
41
32
  }, Promise<void>> & {