@cogeotiff/cli 8.0.1 → 8.1.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.
- package/CHANGELOG.md +28 -0
- package/build/commands/info.d.ts +2 -2
- package/build/commands/info.js +16 -18
- package/build/commands/info.js.map +1 -1
- package/build/index.d.ts +2 -2
- package/package.json +3 -3
- package/src/commands/info.ts +17 -17
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [8.1.0](https://github.com/blacha/cogeotiff/compare/cli-v8.0.2...cli-v8.1.0) (2023-08-23)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **cli:** fetch all tiff tags with --fetch-tags ([#1155](https://github.com/blacha/cogeotiff/issues/1155)) ([4067751](https://github.com/blacha/cogeotiff/commit/406775184eed18ab10ae2816ecbedea9706b20f5))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @cogeotiff/core bumped from ^8.0.2 to ^8.1.0
|
|
16
|
+
|
|
17
|
+
## [8.0.2](https://github.com/blacha/cogeotiff/compare/cli-v8.0.1...cli-v8.0.2) (2023-08-05)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **core:** expose TiffTag and TiffTagGeo ([d538bdc](https://github.com/blacha/cogeotiff/commit/d538bdc833bf76ba8d730a1062156916715585b4))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Dependencies
|
|
26
|
+
|
|
27
|
+
* The following workspace dependencies were updated
|
|
28
|
+
* dependencies
|
|
29
|
+
* @cogeotiff/core bumped from ^8.0.1 to ^8.0.2
|
|
30
|
+
|
|
3
31
|
## [8.0.1](https://github.com/blacha/cogeotiff/compare/cli-v8.0.0...cli-v8.0.1) (2023-08-05)
|
|
4
32
|
|
|
5
33
|
|
package/build/commands/info.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export declare const commandInfo: Partial<import("cmd-ts/dist/cjs/argparser.js")
|
|
|
2
2
|
parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
|
|
3
3
|
path: URL | undefined;
|
|
4
4
|
tags: boolean;
|
|
5
|
-
|
|
5
|
+
fetchTags: boolean;
|
|
6
6
|
paths: URL[];
|
|
7
7
|
verbose: boolean;
|
|
8
8
|
extraVerbose: boolean;
|
|
@@ -10,7 +10,7 @@ export declare const commandInfo: Partial<import("cmd-ts/dist/cjs/argparser.js")
|
|
|
10
10
|
} & 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<{
|
|
11
11
|
path: URL | undefined;
|
|
12
12
|
tags: boolean;
|
|
13
|
-
|
|
13
|
+
fetchTags: boolean;
|
|
14
14
|
paths: URL[];
|
|
15
15
|
verbose: boolean;
|
|
16
16
|
extraVerbose: boolean;
|
package/build/commands/info.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fsa } from '@chunkd/fs';
|
|
2
|
-
import { CogTiff, TiffTagGeo,
|
|
2
|
+
import { CogTiff, TiffTagGeo, TiffTag, TiffTagValueType, TiffVersion, toHex } from '@cogeotiff/core';
|
|
3
3
|
import c from 'ansi-colors';
|
|
4
4
|
import { command, flag, option, optional, restPositionals } from 'cmd-ts';
|
|
5
5
|
import { ActionUtil } from '../action.util.js';
|
|
@@ -17,8 +17,8 @@ export const commandInfo = command({
|
|
|
17
17
|
args: {
|
|
18
18
|
...DefaultArgs,
|
|
19
19
|
path: option({ short: 'f', long: 'file', type: optional(Url) }),
|
|
20
|
-
tags: flag({ short: 't', long: 'tags', description: 'Dump tiff
|
|
21
|
-
|
|
20
|
+
tags: flag({ short: 't', long: 'tags', description: 'Dump tiff tags' }),
|
|
21
|
+
fetchTags: flag({ long: 'fetch-tags', description: 'Fetch extra tiff tag information' }),
|
|
22
22
|
paths: restPositionals({ type: Url, description: 'Files to process' }),
|
|
23
23
|
},
|
|
24
24
|
async handler(args) {
|
|
@@ -76,14 +76,8 @@ export const commandInfo = command({
|
|
|
76
76
|
if (args.tags) {
|
|
77
77
|
for (const img of tiff.images) {
|
|
78
78
|
const tiffTags = [...img.tags.values()];
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
for (const tag of tiffTags) {
|
|
82
|
-
if (tag.type !== 'offset')
|
|
83
|
-
continue;
|
|
84
|
-
// for (let i = 0; i < Math.min(tag.count, 100); i++) tag.getValueAt(i);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
79
|
+
if (args.fetchTags)
|
|
80
|
+
await Promise.all(tiffTags.map((t) => img.fetch(t.id)));
|
|
87
81
|
result.push({
|
|
88
82
|
title: `Image: ${img.id} - Tiff tags`,
|
|
89
83
|
keys: tiffTags.map(formatTag),
|
|
@@ -122,7 +116,7 @@ TiffImageInfoTable.add({
|
|
|
122
116
|
TiffImageInfoTable.add({
|
|
123
117
|
name: 'Strip Count',
|
|
124
118
|
width: 20,
|
|
125
|
-
get: (i) => `${i.tags.get(
|
|
119
|
+
get: (i) => `${i.tags.get(TiffTag.StripOffsets)?.count}`,
|
|
126
120
|
enabled: (i) => !i.isTiled(),
|
|
127
121
|
});
|
|
128
122
|
TiffImageInfoTable.add({
|
|
@@ -149,7 +143,7 @@ TiffImageInfoTable.add({
|
|
|
149
143
|
* @param img
|
|
150
144
|
*/
|
|
151
145
|
function parseGdalMetadata(img) {
|
|
152
|
-
const metadata = img.value(
|
|
146
|
+
const metadata = img.value(TiffTag.GdalMetadata);
|
|
153
147
|
if (typeof metadata !== 'string')
|
|
154
148
|
return null;
|
|
155
149
|
if (!metadata.startsWith('<GDALMetadata>'))
|
|
@@ -162,11 +156,17 @@ function parseGdalMetadata(img) {
|
|
|
162
156
|
.map((c) => c.trim());
|
|
163
157
|
}
|
|
164
158
|
function formatTag(tag) {
|
|
165
|
-
const tagName =
|
|
159
|
+
const tagName = TiffTag[tag.id];
|
|
166
160
|
const tagDebug = `(${TiffTagValueType[tag.dataType]}${tag.count > 1 ? ' x' + tag.count : ''}`;
|
|
167
161
|
const key = `${c.dim(toHex(tag.id)).padEnd(7, ' ')} ${String(tagName)} ${c.dim(tagDebug)})`.padEnd(50, ' ');
|
|
168
|
-
|
|
169
|
-
|
|
162
|
+
// Array of values that is not a string!
|
|
163
|
+
if (tag.count > 1 && tag.dataType !== TiffTagValueType.Ascii) {
|
|
164
|
+
if (tag.value == null || tag.isLoaded === false) {
|
|
165
|
+
return { key, value: c.dim('Tag not Loaded, use --fetch-tags to force load') };
|
|
166
|
+
}
|
|
167
|
+
const val = [...tag.value]; // Ensure the value is not a TypedArray
|
|
168
|
+
return { key, value: val.length > 25 ? val.slice(0, 25).join(', ') + '...' : val.join(', ') };
|
|
169
|
+
}
|
|
170
170
|
let tagString = JSON.stringify(tag.value) ?? c.dim('null');
|
|
171
171
|
if (tagString.length > 256)
|
|
172
172
|
tagString = tagString.slice(0, 250) + '...';
|
|
@@ -175,8 +175,6 @@ function formatTag(tag) {
|
|
|
175
175
|
function formatGeoTag(tagId, value) {
|
|
176
176
|
const tagName = TiffTagGeo[tagId];
|
|
177
177
|
const key = `${c.dim(toHex(tagId)).padEnd(7, ' ')} ${String(tagName).padEnd(30)}`;
|
|
178
|
-
if (Array.isArray(value))
|
|
179
|
-
return { key, value: JSON.stringify(value.slice(0, 250)) };
|
|
180
178
|
let tagString = JSON.stringify(value) ?? c.dim('null');
|
|
181
179
|
if (tagString.length > 256)
|
|
182
180
|
tagString = tagString.slice(0, 250) + '...';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export declare const cmd: Partial<import("cmd-ts/dist/cjs/argparser.js").Registe
|
|
|
4
4
|
args: {
|
|
5
5
|
path: URL | undefined;
|
|
6
6
|
tags: boolean;
|
|
7
|
-
|
|
7
|
+
fetchTags: boolean;
|
|
8
8
|
paths: URL[];
|
|
9
9
|
verbose: boolean;
|
|
10
10
|
extraVerbose: boolean;
|
|
@@ -25,7 +25,7 @@ export declare const cmd: Partial<import("cmd-ts/dist/cjs/argparser.js").Registe
|
|
|
25
25
|
args: {
|
|
26
26
|
path: URL | undefined;
|
|
27
27
|
tags: boolean;
|
|
28
|
-
|
|
28
|
+
fetchTags: boolean;
|
|
29
29
|
paths: URL[];
|
|
30
30
|
verbose: boolean;
|
|
31
31
|
extraVerbose: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cogeotiff/cli",
|
|
3
|
-
"version": "8.0
|
|
3
|
+
"version": "8.1.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/blacha/cogeotiff.git",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"@chunkd/fs-aws": "^11.0.2",
|
|
22
22
|
"@chunkd/middleware": "^11.0.0",
|
|
23
23
|
"@chunkd/source": "^11.0.0",
|
|
24
|
-
"@cogeotiff/core": "^8.0
|
|
24
|
+
"@cogeotiff/core": "^8.1.0",
|
|
25
25
|
"@linzjs/tracing": "^1.1.1",
|
|
26
26
|
"ansi-colors": "^4.1.1",
|
|
27
27
|
"cmd-ts": "^0.13.0",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"publishConfig": {
|
|
36
36
|
"access": "public"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "c19acc74a71f376ce52fea5270a247b723219baf"
|
|
39
39
|
}
|
package/src/commands/info.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fsa } from '@chunkd/fs';
|
|
2
|
-
import { CogTiff,
|
|
2
|
+
import { CogTiff, Tag, TiffTagGeo, TiffTag, TiffTagValueType, TiffVersion, toHex, TagOffset } from '@cogeotiff/core';
|
|
3
3
|
import { CogTiffImage } from '@cogeotiff/core/src/cog.tiff.image.js';
|
|
4
4
|
import c from 'ansi-colors';
|
|
5
5
|
import { command, flag, option, optional, restPositionals } from 'cmd-ts';
|
|
@@ -20,8 +20,8 @@ export const commandInfo = command({
|
|
|
20
20
|
args: {
|
|
21
21
|
...DefaultArgs,
|
|
22
22
|
path: option({ short: 'f', long: 'file', type: optional(Url) }),
|
|
23
|
-
tags: flag({ short: 't', long: 'tags', description: 'Dump tiff
|
|
24
|
-
|
|
23
|
+
tags: flag({ short: 't', long: 'tags', description: 'Dump tiff tags' }),
|
|
24
|
+
fetchTags: flag({ long: 'fetch-tags', description: 'Fetch extra tiff tag information' }),
|
|
25
25
|
paths: restPositionals({ type: Url, description: 'Files to process' }),
|
|
26
26
|
},
|
|
27
27
|
async handler(args) {
|
|
@@ -86,13 +86,8 @@ export const commandInfo = command({
|
|
|
86
86
|
if (args.tags) {
|
|
87
87
|
for (const img of tiff.images) {
|
|
88
88
|
const tiffTags = [...img.tags.values()];
|
|
89
|
-
|
|
90
|
-
if (args.
|
|
91
|
-
for (const tag of tiffTags) {
|
|
92
|
-
if (tag.type !== 'offset') continue;
|
|
93
|
-
// for (let i = 0; i < Math.min(tag.count, 100); i++) tag.getValueAt(i);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
89
|
+
|
|
90
|
+
if (args.fetchTags) await Promise.all(tiffTags.map((t) => img.fetch(t.id)));
|
|
96
91
|
|
|
97
92
|
result.push({
|
|
98
93
|
title: `Image: ${img.id} - Tiff tags`,
|
|
@@ -135,7 +130,7 @@ TiffImageInfoTable.add({
|
|
|
135
130
|
TiffImageInfoTable.add({
|
|
136
131
|
name: 'Strip Count',
|
|
137
132
|
width: 20,
|
|
138
|
-
get: (i) => `${i.tags.get(
|
|
133
|
+
get: (i) => `${i.tags.get(TiffTag.StripOffsets)?.count}`,
|
|
139
134
|
enabled: (i) => !i.isTiled(),
|
|
140
135
|
});
|
|
141
136
|
TiffImageInfoTable.add({
|
|
@@ -164,7 +159,7 @@ TiffImageInfoTable.add({
|
|
|
164
159
|
* @param img
|
|
165
160
|
*/
|
|
166
161
|
function parseGdalMetadata(img: CogTiffImage): string[] | null {
|
|
167
|
-
const metadata = img.value(
|
|
162
|
+
const metadata = img.value(TiffTag.GdalMetadata);
|
|
168
163
|
if (typeof metadata !== 'string') return null;
|
|
169
164
|
if (!metadata.startsWith('<GDALMetadata>')) return null;
|
|
170
165
|
return metadata
|
|
@@ -175,12 +170,19 @@ function parseGdalMetadata(img: CogTiffImage): string[] | null {
|
|
|
175
170
|
.map((c) => c.trim());
|
|
176
171
|
}
|
|
177
172
|
|
|
178
|
-
function formatTag(tag:
|
|
179
|
-
const tagName =
|
|
173
|
+
function formatTag(tag: Tag): { key: string; value: string } {
|
|
174
|
+
const tagName = TiffTag[tag.id];
|
|
180
175
|
const tagDebug = `(${TiffTagValueType[tag.dataType]}${tag.count > 1 ? ' x' + tag.count : ''}`;
|
|
181
176
|
const key = `${c.dim(toHex(tag.id)).padEnd(7, ' ')} ${String(tagName)} ${c.dim(tagDebug)})`.padEnd(50, ' ');
|
|
182
177
|
|
|
183
|
-
|
|
178
|
+
// Array of values that is not a string!
|
|
179
|
+
if (tag.count > 1 && tag.dataType !== TiffTagValueType.Ascii) {
|
|
180
|
+
if (tag.value == null || (tag as TagOffset).isLoaded === false) {
|
|
181
|
+
return { key, value: c.dim('Tag not Loaded, use --fetch-tags to force load') };
|
|
182
|
+
}
|
|
183
|
+
const val = [...(tag.value as number[])]; // Ensure the value is not a TypedArray
|
|
184
|
+
return { key, value: val.length > 25 ? val.slice(0, 25).join(', ') + '...' : val.join(', ') };
|
|
185
|
+
}
|
|
184
186
|
|
|
185
187
|
let tagString = JSON.stringify(tag.value) ?? c.dim('null');
|
|
186
188
|
if (tagString.length > 256) tagString = tagString.slice(0, 250) + '...';
|
|
@@ -191,8 +193,6 @@ function formatGeoTag(tagId: TiffTagGeo, value: string | number): { key: string;
|
|
|
191
193
|
const tagName = TiffTagGeo[tagId];
|
|
192
194
|
const key = `${c.dim(toHex(tagId)).padEnd(7, ' ')} ${String(tagName).padEnd(30)}`;
|
|
193
195
|
|
|
194
|
-
if (Array.isArray(value)) return { key, value: JSON.stringify(value.slice(0, 250)) };
|
|
195
|
-
|
|
196
196
|
let tagString = JSON.stringify(value) ?? c.dim('null');
|
|
197
197
|
if (tagString.length > 256) tagString = tagString.slice(0, 250) + '...';
|
|
198
198
|
return { key, value: tagString };
|