@cogeotiff/cli 8.1.0 → 9.0.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 +44 -0
- package/build/__test__/exports.test.d.ts +1 -0
- package/build/__test__/exports.test.js +19 -0
- package/build/__test__/exports.test.js.map +1 -0
- package/build/action.util.js.map +1 -1
- package/build/bin.js +1 -1
- package/build/bin.js.map +1 -1
- package/build/cli.table.d.ts +1 -2
- package/build/cli.table.js +13 -8
- package/build/cli.table.js.map +1 -1
- package/build/commands/dump.js +13 -8
- package/build/commands/dump.js.map +1 -1
- package/build/commands/info.d.ts +5 -0
- package/build/commands/info.js +70 -10
- package/build/commands/info.js.map +1 -1
- package/build/common.js.map +1 -1
- package/build/fs.js.map +1 -1
- package/build/index.d.ts +18 -16
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/log.js +1 -1
- package/build/log.js.map +1 -1
- package/build/tags.d.ts +3 -0
- package/build/tags.js +25 -0
- package/build/tags.js.map +1 -0
- package/build/util.bytes.js +2 -0
- package/build/util.bytes.js.map +1 -1
- package/build/util.tile.d.ts +2 -2
- package/build/util.tile.js +2 -2
- package/build/util.tile.js.map +1 -1
- package/package.json +3 -3
- package/src/__test__/exports.test.ts +31 -0
- package/src/bin.ts +2 -1
- package/src/cli.table.ts +16 -9
- package/src/commands/dump.ts +20 -12
- package/src/commands/info.ts +78 -15
- package/src/common.ts +1 -1
- package/src/fs.ts +1 -0
- package/src/index.ts +2 -1
- package/src/log.ts +2 -1
- package/src/tags.ts +41 -0
- package/src/util.bytes.ts +1 -0
- package/src/util.tile.ts +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [9.0.0](https://github.com/blacha/cogeotiff/compare/cli-v8.1.1...cli-v9.0.0) (2023-12-11)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### ⚠ BREAKING CHANGES
|
|
7
|
+
|
|
8
|
+
* rename all type from CogTiff to just Tiff ([#1227](https://github.com/blacha/cogeotiff/issues/1227))
|
|
9
|
+
* modify structure of tiff tags ([#1225](https://github.com/blacha/cogeotiff/issues/1225))
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **cli:** expose stats on tiles, empty, avg and overview size ([62bc6a7](https://github.com/blacha/cogeotiff/commit/62bc6a727615907c318fc8b4b06375b81bc17a00))
|
|
14
|
+
* **cli:** include file size if known ([5e90764](https://github.com/blacha/cogeotiff/commit/5e907640022953d396a14d4023633dfe8e14289e))
|
|
15
|
+
* color more output and add more tags ([fe4088b](https://github.com/blacha/cogeotiff/commit/fe4088b3f1f88a1248d803c29a563872aab4205c))
|
|
16
|
+
* export all tag value constants ([#1229](https://github.com/blacha/cogeotiff/issues/1229)) ([44757e5](https://github.com/blacha/cogeotiff/commit/44757e5ba5c98e992bb9fd72eb9993c727648b74))
|
|
17
|
+
* modify structure of tiff tags ([#1225](https://github.com/blacha/cogeotiff/issues/1225)) ([049e0bc](https://github.com/blacha/cogeotiff/commit/049e0bc3c4e15f8c095a3da4442ef144d372cf60))
|
|
18
|
+
* rename all type from CogTiff to just Tiff ([#1227](https://github.com/blacha/cogeotiff/issues/1227)) ([872263b](https://github.com/blacha/cogeotiff/commit/872263b11f1ab06853cb872de54a9d9dd745b647))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* **cli:** if the tiff is fully sparse dont print NaN ([368aad2](https://github.com/blacha/cogeotiff/commit/368aad2d9ed80508195fd3700934e026d1106ed3))
|
|
24
|
+
* **cli:** remove console.log ([b4f22cb](https://github.com/blacha/cogeotiff/commit/b4f22cb47c3e64f523ad4955bc5389f341ada207))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Dependencies
|
|
28
|
+
|
|
29
|
+
* The following workspace dependencies were updated
|
|
30
|
+
* dependencies
|
|
31
|
+
* @cogeotiff/core bumped from ^8.1.1 to ^9.0.0
|
|
32
|
+
|
|
33
|
+
## [8.1.1](https://github.com/blacha/cogeotiff/compare/cli-v8.1.0...cli-v8.1.1) (2023-11-14)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Bug Fixes
|
|
37
|
+
|
|
38
|
+
* **cli:** correct html creation ([7156d63](https://github.com/blacha/cogeotiff/commit/7156d63626c56f868b694e8124fdd96fd83f09be))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
### Dependencies
|
|
42
|
+
|
|
43
|
+
* The following workspace dependencies were updated
|
|
44
|
+
* dependencies
|
|
45
|
+
* @cogeotiff/core bumped from ^8.1.0 to ^8.1.1
|
|
46
|
+
|
|
3
47
|
## [8.1.0](https://github.com/blacha/cogeotiff/compare/cli-v8.0.2...cli-v8.1.0) (2023-08-23)
|
|
4
48
|
|
|
5
49
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as assert from 'node:assert';
|
|
2
|
+
import { describe, it } from 'node:test';
|
|
3
|
+
import { AngularUnit, Compression, LinearUnit, OldSubFileType, Orientation, Photometric, PlanarConfiguration, RasterTypeKey, SampleFormat, SubFileType, } from '@cogeotiff/core';
|
|
4
|
+
// Ensure the tag constants are exported
|
|
5
|
+
describe('Exports', () => {
|
|
6
|
+
it('should export constants', () => {
|
|
7
|
+
assert.equal(Photometric.Rgb, 2);
|
|
8
|
+
assert.equal(SampleFormat.Float, 3);
|
|
9
|
+
assert.equal(RasterTypeKey.PixelIsArea, 1);
|
|
10
|
+
assert.equal(SubFileType.ReducedImage, 1);
|
|
11
|
+
assert.equal(OldSubFileType.ReducedImage, 2);
|
|
12
|
+
assert.equal(Compression.Lzw, 5);
|
|
13
|
+
assert.equal(AngularUnit.Degree, 9102);
|
|
14
|
+
assert.equal(LinearUnit.Metre, 9001);
|
|
15
|
+
assert.equal(PlanarConfiguration.Contig, 1);
|
|
16
|
+
assert.equal(Orientation.TopLeft, 1);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=exports.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exports.test.js","sourceRoot":"","sources":["../../src/__test__/exports.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EACL,WAAW,EACX,WAAW,EACX,UAAU,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAEzB,wCAAwC;AACxC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/build/action.util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.util.js","sourceRoot":"","sources":["../src/action.util.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,aAAa,CAAC;AAa5B,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,YAAY,CAAC,KAAa,EAAE,MAAsB;QAChD,MAAM,GAAG,GAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"action.util.js","sourceRoot":"","sources":["../src/action.util.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,aAAa,CAAC;AAa5B,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,YAAY,CAAC,KAAa,EAAE,MAAsB;QAChD,MAAM,GAAG,GAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK;gBAAE,SAAS;YACtC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,KAAK,CAAC,KAAK;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,EAAE,IAAI,IAAI;oBAAE,SAAS;gBACzB,IAAI,EAAE,CAAC,OAAO,KAAK,KAAK;oBAAE,SAAS;gBACnC,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;oBACjF,SAAS;gBACX,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAC"}
|
package/build/bin.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Ensure connection reuse is enabled
|
|
2
2
|
process.env['AWS_NODEJS_CONNECTION_REUSE_ENABLED'] = '1';
|
|
3
|
+
import { otError } from '@linzjs/tracing';
|
|
3
4
|
import { run } from 'cmd-ts';
|
|
4
5
|
import { cmd } from './index.js';
|
|
5
6
|
import { logger } from './log.js';
|
|
6
|
-
import { otError } from '@linzjs/tracing';
|
|
7
7
|
run(cmd, process.argv.slice(2)).catch((err) => {
|
|
8
8
|
logger.fatal('Command:Failed', { ...otError(err) });
|
|
9
9
|
logger.pino.flush();
|
package/build/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,GAAG,GAAG,CAAC;AAEzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,GAAG,GAAG,CAAC;AAEzD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC5C,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,iDAAiD;IACjD,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC"}
|
package/build/cli.table.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
interface CliTableInfo<T> {
|
|
1
|
+
export interface CliTableInfo<T> {
|
|
2
2
|
/** Header for the table */
|
|
3
3
|
name: string;
|
|
4
4
|
/** Pad the field out to this width */
|
|
@@ -16,4 +16,3 @@ export declare class CliTable<T> {
|
|
|
16
16
|
add(fields: CliTableInfo<T>): void;
|
|
17
17
|
print(data: T[], rowPadding?: string): string[];
|
|
18
18
|
}
|
|
19
|
-
export {};
|
package/build/cli.table.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import c from 'ansi-colors';
|
|
1
2
|
export class CliTable {
|
|
2
3
|
constructor() {
|
|
3
4
|
Object.defineProperty(this, "fields", {
|
|
@@ -12,14 +13,18 @@ export class CliTable {
|
|
|
12
13
|
}
|
|
13
14
|
print(data, rowPadding = '') {
|
|
14
15
|
const fields = this.fields.filter((f) => data.every((d) => f.enabled?.(d) ?? true));
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
const values = fields.map((f) => data.map((d, i) => f.get(d, i)));
|
|
17
|
+
const sizes = values.map((val) => val.reduce((v, c) => Math.max(v, c?.length ?? 0), 0));
|
|
18
|
+
const rows = [rowPadding + fields.map((f, i) => c.bold(f.name.padEnd(sizes[i] + 2))).join('\t')];
|
|
19
|
+
for (let i = 0; i < data.length; i++) {
|
|
20
|
+
const row = [];
|
|
21
|
+
for (let f = 0; f < fields.length; f++) {
|
|
22
|
+
const fValue = values[f][i];
|
|
23
|
+
const fSize = sizes[f];
|
|
24
|
+
row.push((fValue ?? '').padEnd(fSize + 2));
|
|
25
|
+
}
|
|
26
|
+
rows.push(rowPadding + row.join('\t'));
|
|
27
|
+
}
|
|
23
28
|
return rows;
|
|
24
29
|
}
|
|
25
30
|
}
|
package/build/cli.table.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.table.js","sourceRoot":"","sources":["../src/cli.table.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.table.js","sourceRoot":"","sources":["../src/cli.table.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,aAAa,CAAC;AAgB5B,MAAM,OAAO,QAAQ;IAArB;QACE;;;;mBAA4B,EAAE;WAAC;IAuBjC,CAAC;IAtBC,GAAG,CAAC,MAAuB;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,IAAS,EAAE,UAAU,GAAG,EAAE;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExF,MAAM,IAAI,GAAa,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3G,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
package/build/commands/dump.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { fsa } from '@chunkd/fs';
|
|
2
|
-
import { CogTiff, TiffMimeType } from '@cogeotiff/core';
|
|
3
|
-
import { command, number, option, optional, restPositionals } from 'cmd-ts';
|
|
4
1
|
import { promises as fs } from 'node:fs';
|
|
5
2
|
import { basename } from 'node:path';
|
|
6
3
|
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { fsa } from '@chunkd/fs';
|
|
5
|
+
import { Tiff, TiffMimeType } from '@cogeotiff/core';
|
|
6
|
+
import { command, number, option, optional, restPositionals } from 'cmd-ts';
|
|
7
7
|
import pLimit from 'p-limit';
|
|
8
8
|
import { DefaultArgs, Url } from '../common.js';
|
|
9
9
|
import { ensureS3fs, setupLogger } from '../log.js';
|
|
@@ -45,7 +45,7 @@ export const commandDump = command({
|
|
|
45
45
|
if (path.protocol === 's3:')
|
|
46
46
|
await ensureS3fs();
|
|
47
47
|
const source = fsa.source(path);
|
|
48
|
-
const tiff = await new
|
|
48
|
+
const tiff = await new Tiff(source).init();
|
|
49
49
|
const img = tiff.images[args.image];
|
|
50
50
|
if (!img.isTiled())
|
|
51
51
|
throw Error(`Tiff: ${path.href} file is not tiled.`);
|
|
@@ -101,9 +101,13 @@ async function dumpTiles(tiff, target, index, logger) {
|
|
|
101
101
|
return 0;
|
|
102
102
|
logger.info('Tiff:Info', { source: tiff.source.url, ...img.tileSize, ...img.tileCount });
|
|
103
103
|
const { tileCount, tileSize } = img;
|
|
104
|
-
const html = [
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
const html = [
|
|
105
|
+
'<html>',
|
|
106
|
+
'<head>',
|
|
107
|
+
`\t<style>.c { min-width: ${tileSize.width}px; min-height: ${tileSize.height}px; outline: 1px #ff00fff0 }</style>`,
|
|
108
|
+
'</head>',
|
|
109
|
+
'<body>',
|
|
110
|
+
];
|
|
107
111
|
for (let y = 0; y < tileCount.y; y++) {
|
|
108
112
|
for (let x = 0; x < tileCount.x; x++) {
|
|
109
113
|
const promise = TileQueue(() => writeTile(tiff, x, y, index, target, logger));
|
|
@@ -116,15 +120,16 @@ async function dumpTiles(tiff, target, index, logger) {
|
|
|
116
120
|
html.push('\t<div style="display:flex;">');
|
|
117
121
|
for (let x = 0; x < tileCount.x; x++) {
|
|
118
122
|
const fileName = result[i];
|
|
123
|
+
i++;
|
|
119
124
|
if (fileName == null) {
|
|
120
125
|
html.push(`\t\t<div class="c"></div>`);
|
|
121
126
|
continue;
|
|
122
127
|
}
|
|
123
128
|
html.push(`\t\t<img class="c" src="./${fileName}" >`);
|
|
124
|
-
i++;
|
|
125
129
|
}
|
|
126
130
|
html.push('\t</div>');
|
|
127
131
|
}
|
|
132
|
+
html.push('</body>');
|
|
128
133
|
html.push('</html>');
|
|
129
134
|
await fs.writeFile(new URL('index.html', target), html.join('\n'));
|
|
130
135
|
return promises.length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dump.js","sourceRoot":"","sources":["../../src/commands/dump.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dump.js","sourceRoot":"","sources":["../../src/commands/dump.ts"],"names":[],"mappings":"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"}
|
package/build/commands/info.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { TiffImage } from '@cogeotiff/core';
|
|
2
|
+
import { CliTableInfo } from '../cli.table.js';
|
|
1
3
|
export declare const commandInfo: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
|
|
2
4
|
parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
|
|
3
5
|
path: URL | undefined;
|
|
4
6
|
tags: boolean;
|
|
5
7
|
fetchTags: boolean;
|
|
8
|
+
tileStats: boolean;
|
|
6
9
|
paths: URL[];
|
|
7
10
|
verbose: boolean;
|
|
8
11
|
extraVerbose: boolean;
|
|
@@ -11,9 +14,11 @@ export declare const commandInfo: Partial<import("cmd-ts/dist/cjs/argparser.js")
|
|
|
11
14
|
path: URL | undefined;
|
|
12
15
|
tags: boolean;
|
|
13
16
|
fetchTags: boolean;
|
|
17
|
+
tileStats: boolean;
|
|
14
18
|
paths: URL[];
|
|
15
19
|
verbose: boolean;
|
|
16
20
|
extraVerbose: boolean;
|
|
17
21
|
}, Promise<void>> & {
|
|
18
22
|
run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
|
|
19
23
|
} & 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>;
|
|
24
|
+
export declare const tiffTileStats: CliTableInfo<TiffImage>;
|
package/build/commands/info.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fsa } from '@chunkd/fs';
|
|
2
|
-
import {
|
|
2
|
+
import { Tiff, TiffTag, TiffTagGeo, TiffTagValueType, TiffVersion } 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';
|
|
@@ -7,6 +7,7 @@ import { CliTable } from '../cli.table.js';
|
|
|
7
7
|
import { DefaultArgs, Url } from '../common.js';
|
|
8
8
|
import { FetchLog } from '../fs.js';
|
|
9
9
|
import { ensureS3fs, setupLogger } from '../log.js';
|
|
10
|
+
import { TagFormatters, TagGeoFormatters } from '../tags.js';
|
|
10
11
|
import { toByteSizeString } from '../util.bytes.js';
|
|
11
12
|
function round(num) {
|
|
12
13
|
const opt = 10 ** 4;
|
|
@@ -19,6 +20,10 @@ export const commandInfo = command({
|
|
|
19
20
|
path: option({ short: 'f', long: 'file', type: optional(Url) }),
|
|
20
21
|
tags: flag({ short: 't', long: 'tags', description: 'Dump tiff tags' }),
|
|
21
22
|
fetchTags: flag({ long: 'fetch-tags', description: 'Fetch extra tiff tag information' }),
|
|
23
|
+
tileStats: flag({
|
|
24
|
+
long: 'tile-stats',
|
|
25
|
+
description: 'Fetch tile information, like size [this can fetch a lot of data]',
|
|
26
|
+
}),
|
|
22
27
|
paths: restPositionals({ type: Url, description: 'Files to process' }),
|
|
23
28
|
},
|
|
24
29
|
async handler(args) {
|
|
@@ -30,22 +35,35 @@ export const commandInfo = command({
|
|
|
30
35
|
logger.debug('Tiff:load', { path: path?.href });
|
|
31
36
|
FetchLog.reset();
|
|
32
37
|
const source = fsa.source(path);
|
|
33
|
-
const tiff = await new
|
|
38
|
+
const tiff = await new Tiff(source).init();
|
|
39
|
+
if (args.tileStats) {
|
|
40
|
+
await Promise.all(tiff.images.map((img) => img.fetch(TiffTag.TileByteCounts)));
|
|
41
|
+
TiffImageInfoTable.add(tiffTileStats);
|
|
42
|
+
}
|
|
34
43
|
const header = [
|
|
35
44
|
{ key: 'Tiff type', value: `${TiffVersion[tiff.version]} (v${String(tiff.version)})` },
|
|
36
45
|
{
|
|
37
46
|
key: 'Bytes read',
|
|
38
47
|
value: `${toByteSizeString(FetchLog.bytesRead)} (${FetchLog.fetches.length} Chunk${FetchLog.fetches.length === 1 ? '' : 's'})`,
|
|
39
48
|
},
|
|
49
|
+
tiff.source.metadata?.size
|
|
50
|
+
? {
|
|
51
|
+
key: 'Size',
|
|
52
|
+
value: toByteSizeString(tiff.source.metadata.size),
|
|
53
|
+
}
|
|
54
|
+
: null,
|
|
40
55
|
];
|
|
41
56
|
const firstImage = tiff.images[0];
|
|
42
57
|
const isGeoLocated = firstImage.isGeoLocated;
|
|
58
|
+
const compression = firstImage.value(TiffTag.Compression);
|
|
43
59
|
const images = [
|
|
44
|
-
{ key: 'Compression', value: firstImage.compression },
|
|
60
|
+
{ key: 'Compression', value: `${compression} - ${c.magenta(firstImage.compression ?? '??')}` },
|
|
45
61
|
isGeoLocated ? { key: 'Origin', value: firstImage.origin.map(round).join(', ') } : null,
|
|
46
62
|
isGeoLocated ? { key: 'Resolution', value: firstImage.resolution.map(round).join(', ') } : null,
|
|
47
63
|
isGeoLocated ? { key: 'BoundingBox', value: firstImage.bbox.map(round).join(', ') } : null,
|
|
48
|
-
firstImage.epsg
|
|
64
|
+
firstImage.epsg
|
|
65
|
+
? { key: 'EPSG', value: `EPSG:${firstImage.epsg} ${c.underline('https://epsg.io/' + firstImage.epsg)}` }
|
|
66
|
+
: null,
|
|
49
67
|
{ key: 'Images', value: '\n' + TiffImageInfoTable.print(tiff.images, '\t').join('\n') },
|
|
50
68
|
];
|
|
51
69
|
const ghostOptions = [...(tiff.options?.options.entries() ?? [])];
|
|
@@ -110,7 +128,13 @@ TiffImageInfoTable.add({
|
|
|
110
128
|
TiffImageInfoTable.add({
|
|
111
129
|
name: 'Tile Count',
|
|
112
130
|
width: 20,
|
|
113
|
-
get: (i) =>
|
|
131
|
+
get: (i) => {
|
|
132
|
+
let tileCount = i.tileCount.x * i.tileCount.y;
|
|
133
|
+
const offsets = i.value(TiffTag.TileByteCounts) ?? i.value(TiffTag.TileOffsets);
|
|
134
|
+
if (offsets)
|
|
135
|
+
tileCount = offsets.length;
|
|
136
|
+
return `${i.tileCount.x}x${i.tileCount.y} (${tileCount})`;
|
|
137
|
+
},
|
|
114
138
|
enabled: (i) => i.isTiled(),
|
|
115
139
|
});
|
|
116
140
|
TiffImageInfoTable.add({
|
|
@@ -136,6 +160,31 @@ TiffImageInfoTable.add({
|
|
|
136
160
|
return formats.size > 1;
|
|
137
161
|
},
|
|
138
162
|
});
|
|
163
|
+
export const tiffTileStats = {
|
|
164
|
+
name: 'Tile Stats',
|
|
165
|
+
width: 20,
|
|
166
|
+
get: (i) => {
|
|
167
|
+
const sizes = i.value(TiffTag.TileByteCounts);
|
|
168
|
+
if (sizes == null)
|
|
169
|
+
return 'N/A';
|
|
170
|
+
const stats = {
|
|
171
|
+
size: 0,
|
|
172
|
+
empty: 0,
|
|
173
|
+
};
|
|
174
|
+
for (const st of sizes) {
|
|
175
|
+
if (st === 0)
|
|
176
|
+
stats.empty++;
|
|
177
|
+
console.log(st, stats);
|
|
178
|
+
stats.size += st;
|
|
179
|
+
}
|
|
180
|
+
if (stats.size === 0)
|
|
181
|
+
return `${c.red('empty')} x${stats.empty}`;
|
|
182
|
+
const empty = stats.empty > 0 ? ` (${c.red('empty')} x${stats.empty})` : '';
|
|
183
|
+
const avg = stats.size === 0 ? 0 : stats.size / (sizes.length - stats.empty);
|
|
184
|
+
return toByteSizeString(stats.size) + ` (${c.blue('avg:')} ${toByteSizeString(avg)})` + empty;
|
|
185
|
+
},
|
|
186
|
+
enabled: () => true,
|
|
187
|
+
};
|
|
139
188
|
/**
|
|
140
189
|
* Parse out the GDAL Metadata to be more friendly to read
|
|
141
190
|
*
|
|
@@ -158,26 +207,37 @@ function parseGdalMetadata(img) {
|
|
|
158
207
|
function formatTag(tag) {
|
|
159
208
|
const tagName = TiffTag[tag.id];
|
|
160
209
|
const tagDebug = `(${TiffTagValueType[tag.dataType]}${tag.count > 1 ? ' x' + tag.count : ''}`;
|
|
161
|
-
const key = `${c.dim(
|
|
210
|
+
const key = `${c.dim(String(tag.id)).padEnd(7, ' ')} ${String(tagName)} ${c.dim(tagDebug)})`.padEnd(52, ' ');
|
|
211
|
+
let complexType = '';
|
|
162
212
|
// Array of values that is not a string!
|
|
163
213
|
if (tag.count > 1 && tag.dataType !== TiffTagValueType.Ascii) {
|
|
164
214
|
if (tag.value == null || tag.isLoaded === false) {
|
|
165
215
|
return { key, value: c.dim('Tag not Loaded, use --fetch-tags to force load') };
|
|
166
216
|
}
|
|
167
217
|
const val = [...tag.value]; // Ensure the value is not a TypedArray
|
|
168
|
-
|
|
218
|
+
if (TagFormatters[tag.id]) {
|
|
219
|
+
complexType = ` - ${c.magenta(TagFormatters[tag.id](val) ?? '??')}`;
|
|
220
|
+
}
|
|
221
|
+
return { key, value: (val.length > 25 ? val.slice(0, 25).join(', ') + '...' : val.join(', ')) + complexType };
|
|
169
222
|
}
|
|
170
223
|
let tagString = JSON.stringify(tag.value) ?? c.dim('null');
|
|
171
224
|
if (tagString.length > 256)
|
|
172
225
|
tagString = tagString.slice(0, 250) + '...';
|
|
173
|
-
|
|
226
|
+
if (TagFormatters[tag.id]) {
|
|
227
|
+
complexType = ` - ${c.magenta(TagFormatters[tag.id]([tag.value]) ?? '??')}`;
|
|
228
|
+
}
|
|
229
|
+
return { key, value: tagString + complexType };
|
|
174
230
|
}
|
|
175
231
|
function formatGeoTag(tagId, value) {
|
|
176
232
|
const tagName = TiffTagGeo[tagId];
|
|
177
|
-
const key = `${c.dim(
|
|
233
|
+
const key = `${c.dim(String(tagId)).padEnd(7, ' ')} ${String(tagName).padEnd(30)}`;
|
|
234
|
+
let complexType = '';
|
|
235
|
+
if (TagGeoFormatters[tagId]) {
|
|
236
|
+
complexType = ` - ${c.magenta(TagGeoFormatters[tagId]([value]) ?? '??')}`;
|
|
237
|
+
}
|
|
178
238
|
let tagString = JSON.stringify(value) ?? c.dim('null');
|
|
179
239
|
if (tagString.length > 256)
|
|
180
240
|
tagString = tagString.slice(0, 250) + '...';
|
|
181
|
-
return { key, value: tagString };
|
|
241
|
+
return { key, value: tagString + complexType };
|
|
182
242
|
}
|
|
183
243
|
//# sourceMappingURL=info.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAkB,IAAI,EAAa,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtH,OAAO,CAAC,MAAM,aAAa,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAgB,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAgB,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,SAAS,KAAK,CAAC,GAAW;IACxB,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;IACjC,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE;QACJ,GAAG,WAAW;QACd,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/D,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;QACvE,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC;QACxF,SAAS,EAAE,IAAI,CAAC;YACd,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,kEAAkE;SAChF,CAAC;QACF,KAAK,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;KACvE;IACD,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAU,CAAC;QAE3E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;gBAAE,MAAM,UAAU,EAAE,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,QAAQ,CAAC,KAAK,EAAE,CAAC;YAEjB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAE3C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC/E,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACxC,CAAC;YAED,MAAM,MAAM,GAAG;gBACb,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;gBACtF;oBACE,GAAG,EAAE,YAAY;oBACjB,KAAK,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,MAAM,SACxE,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GACvC,GAAG;iBACJ;gBACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI;oBACxB,CAAC,CAAC;wBACE,GAAG,EAAE,MAAM;wBACX,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;qBACnD;oBACH,CAAC,CAAC,IAAI;aACT,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;YAC7C,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG;gBACb,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,WAAW,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,EAAE;gBAC9F,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;gBACvF,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;gBAC/F,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;gBAC1F,UAAU,CAAC,IAAI;oBACb,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE;oBACxG,CAAC,CAAC,IAAI;gBACR,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACxF,CAAC;YAEF,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAClE,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG;gBACX;oBACE,GAAG,EAAE,eAAe;oBACpB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;oBAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI;iBAC/C;gBACD,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,EAAE;gBACtG;oBACE,GAAG,EAAE,eAAe;oBACpB,KAAK,EAAE,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBACzE,OAAO,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC;iBACjC;gBACD;oBACE,GAAG,EAAE,UAAU;oBACf,KAAK,EAAE,IAAI,GAAG,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC7D,OAAO,EAAE,YAAY,IAAI,IAAI;iBAC9B;aACF,CAAC;YAEF,MAAM,MAAM,GAAmB;gBAC7B,EAAE,IAAI,EAAE,MAAM,EAAE;gBAChB,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;gBACjC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;aACtG,CAAC;YACF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC9B,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;oBAExC,IAAI,IAAI,CAAC,SAAS;wBAAE,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAE5E,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,UAAU,GAAG,CAAC,EAAE,cAAc;wBACrC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;qBAC9B,CAAC,CAAC;oBACH,MAAM,GAAG,CAAC,eAAe,EAAE,CAAC;oBAC5B,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;wBACzB,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;wBACzE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACpB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,GAAG,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;wBACnE,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACnG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAE5B,MAAM,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,IAAI,QAAQ,EAAa,CAAC;AACrD,kBAAkB,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACpF,kBAAkB,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACpG,kBAAkB,CAAC,GAAG,CAAC;IACrB,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE;IACtD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;CAC5B,CAAC,CAAC;AACH,kBAAkB,CAAC,GAAG,CAAC;IACrB,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QACT,IAAI,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChF,IAAI,OAAO;YAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;QAExC,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,SAAS,GAAG,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;CAC5B,CAAC,CAAC;AACH,kBAAkB,CAAC,GAAG,CAAC;IACrB,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE;IACxD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;CAC7B,CAAC,CAAC;AACH,kBAAkB,CAAC,GAAG,CAAC;IACrB,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;IACvC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY;CAC/B,CAAC,CAAC;AAEH,oDAAoD;AACpD,kBAAkB,CAAC,GAAG,CAAC;IACrB,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW;IACzB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACb,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QACzD,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IAC1B,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAA4B;IACpD,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC9C,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC;QAEhC,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;SACT,CAAC;QACF,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,EAAE,KAAK,CAAC;gBAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACvB,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;QAEjE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5E,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7E,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC;IAChG,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;CACpB,CAAC;AAEF;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,GAAc;IACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACjD,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,OAAO,QAAQ;SACZ,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;SAC/B,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC;SAChC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,SAAS,CAAC,GAAQ;IACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC9F,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAE7G,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,wCAAwC;IACxC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC7D,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,IAAK,GAAiB,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC/D,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,gDAAgD,CAAC,EAAE,CAAC;QACjF,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,GAAI,GAAG,CAAC,KAAkB,CAAC,CAAC,CAAC,uCAAuC;QACjF,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,WAAW,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;QACtE,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC;IAChH,CAAC;IAED,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG;QAAE,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IACxE,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1B,WAAW,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAA0B,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;IACnG,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,GAAG,WAAW,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB,EAAE,KAAiC;IACxE,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IAEnF,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,WAAW,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,KAA0B,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;IACjG,CAAC;IAED,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG;QAAE,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IACxE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,GAAG,WAAW,EAAE,CAAC;AACjD,CAAC"}
|
package/build/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAQ,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAC7F,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAE9G,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,OAAO;IACP,YAAY;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,GAAG,GAAsB;IACpC,KAAK,CAAC,IAAI,CAAC,CAAS;QAClB,IAAI,CAAC;YACH,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF,CAAC"}
|
package/build/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,CAAC,MAAM,QAAQ,GAAsF;IACzG,IAAI,EAAE,YAAY;IAClB,KAAK,CAAC,GAAkB,EAAE,IAAoB;QAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACjG,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,CAAC;CACb,CAAC"}
|
package/build/index.d.ts
CHANGED
|
@@ -1,57 +1,59 @@
|
|
|
1
1
|
export declare const cmd: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
|
|
2
2
|
parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
|
|
3
|
-
command: "
|
|
3
|
+
command: "dump";
|
|
4
4
|
args: {
|
|
5
5
|
path: URL | undefined;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
image: number;
|
|
7
|
+
output: URL | undefined;
|
|
8
8
|
paths: URL[];
|
|
9
9
|
verbose: boolean;
|
|
10
10
|
extraVerbose: boolean;
|
|
11
11
|
};
|
|
12
12
|
} | {
|
|
13
|
-
command: "
|
|
13
|
+
command: "info";
|
|
14
14
|
args: {
|
|
15
15
|
path: URL | undefined;
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
tags: boolean;
|
|
17
|
+
fetchTags: boolean;
|
|
18
|
+
tileStats: boolean;
|
|
18
19
|
paths: URL[];
|
|
19
20
|
verbose: boolean;
|
|
20
21
|
extraVerbose: boolean;
|
|
21
22
|
};
|
|
22
23
|
}>>;
|
|
23
24
|
} & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & 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<{
|
|
24
|
-
command: "
|
|
25
|
+
command: "dump";
|
|
25
26
|
args: {
|
|
26
27
|
path: URL | undefined;
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
image: number;
|
|
29
|
+
output: URL | undefined;
|
|
29
30
|
paths: URL[];
|
|
30
31
|
verbose: boolean;
|
|
31
32
|
extraVerbose: boolean;
|
|
32
33
|
};
|
|
33
34
|
} | {
|
|
34
|
-
command: "
|
|
35
|
+
command: "info";
|
|
35
36
|
args: {
|
|
36
37
|
path: URL | undefined;
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
tags: boolean;
|
|
39
|
+
fetchTags: boolean;
|
|
40
|
+
tileStats: boolean;
|
|
39
41
|
paths: URL[];
|
|
40
42
|
verbose: boolean;
|
|
41
43
|
extraVerbose: boolean;
|
|
42
44
|
};
|
|
43
45
|
}, {
|
|
44
|
-
command: "
|
|
46
|
+
command: "dump";
|
|
45
47
|
value: Promise<void>;
|
|
46
48
|
} | {
|
|
47
|
-
command: "
|
|
49
|
+
command: "info";
|
|
48
50
|
value: Promise<void>;
|
|
49
51
|
}> & {
|
|
50
52
|
run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
|
|
51
|
-
command: "
|
|
53
|
+
command: "dump";
|
|
52
54
|
value: Promise<void>;
|
|
53
55
|
} | {
|
|
54
|
-
command: "
|
|
56
|
+
command: "info";
|
|
55
57
|
value: Promise<void>;
|
|
56
58
|
}>>;
|
|
57
59
|
};
|
package/build/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { subcommands } from 'cmd-ts';
|
|
2
|
-
import { commandInfo } from './commands/info.js';
|
|
3
2
|
import { commandDump } from './commands/dump.js';
|
|
3
|
+
import { commandInfo } from './commands/info.js';
|
|
4
4
|
export const cmd = subcommands({
|
|
5
5
|
name: 'cogeotiff',
|
|
6
6
|
description: 'COG utilities',
|
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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,GAAG,GAAG,WAAW,CAAC;IAC7B,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,eAAe;IAC5B,IAAI,EAAE;QACJ,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,WAAW;KAClB;CACF,CAAC,CAAC"}
|
package/build/log.js
CHANGED
package/build/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;AACvE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAEhE,MAAM,UAAU,WAAW,CAAC,GAAkD;IAC5E,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC;IACtB,CAAC;SAAM,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,MAAM,EAAE,CAAC,CAAC;IACtC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,MAAM,EAAE,CAAC,CAAC;IAEvC,sCAAsC;IACtC,sCAAsC;IACtC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,0CAA0C;IAC1C,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEjC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE9B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAC;AAE1B,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO;IAE/D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE/C,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC"}
|
package/build/tags.d.ts
ADDED
package/build/tags.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AngularUnit, Compression, LinearUnit, ModelTypeCode, Orientation, Photometric, PlanarConfiguration, RasterTypeKey, SampleFormat, SubFileType, TiffTag, TiffTagGeo, } from '@cogeotiff/core';
|
|
2
|
+
/** Convert enum values back to strings */
|
|
3
|
+
export const TagGeoFormatters = {
|
|
4
|
+
[TiffTagGeo.GTRasterTypeGeoKey]: (v) => RasterTypeKey[v],
|
|
5
|
+
[TiffTagGeo.GTModelTypeGeoKey]: (v) => ModelTypeCode[v],
|
|
6
|
+
[TiffTagGeo.GeogAngularUnitsGeoKey]: (v) => AngularUnit[v],
|
|
7
|
+
[TiffTagGeo.ProjLinearUnitsGeoKey]: (v) => LinearUnit[v],
|
|
8
|
+
[TiffTagGeo.VerticalUnitsGeoKey]: (v) => LinearUnit[v],
|
|
9
|
+
};
|
|
10
|
+
export const TagFormatters = {
|
|
11
|
+
[TiffTag.LercParameters]: (value) => {
|
|
12
|
+
return `v${value[0]} - ${Compression[value[1]] ?? '??'}`;
|
|
13
|
+
},
|
|
14
|
+
[TiffTag.SubFileType]: (value) => SubFileType[value],
|
|
15
|
+
[TiffTag.Compression]: (value) => Compression[value],
|
|
16
|
+
[TiffTag.Orientation]: (value) => Orientation[value],
|
|
17
|
+
[TiffTag.SampleFormat]: (value) => {
|
|
18
|
+
return value.map((m) => SampleFormat[m]).join(', ');
|
|
19
|
+
},
|
|
20
|
+
[TiffTag.Photometric]: (value) => Photometric[value],
|
|
21
|
+
[TiffTag.PlanarConfiguration]: (value) => {
|
|
22
|
+
return PlanarConfiguration[value];
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,OAAO,EACP,UAAU,GAGX,MAAM,iBAAiB,CAAC;AAEzB,0CAA0C;AAC1C,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAgD,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACvG,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAA+C,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACrG,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAoD,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7G,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAmD,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1G,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAiD,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;CACnD,CAAC;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,KAA0C,EAAU,EAAE;QAC/E,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAC3D,CAAC;IACD,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,KAAuC,EAAU,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;IAC9F,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,KAAuC,EAAU,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;IAC9F,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,KAAuC,EAAU,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;IAC9F,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,KAAwC,EAAU,EAAE;QAC3E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,KAAuC,EAAU,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC;IAC9F,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAA+C,EAAU,EAAE;QACzF,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;CACkD,CAAC"}
|
package/build/util.bytes.js
CHANGED
|
@@ -7,6 +7,8 @@ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
|
|
|
7
7
|
* @param bytes byte count to convert
|
|
8
8
|
*/
|
|
9
9
|
export function toByteSizeString(bytes) {
|
|
10
|
+
if (bytes === 0)
|
|
11
|
+
return '0';
|
|
10
12
|
if (bytes === 1)
|
|
11
13
|
return '1 Byte';
|
|
12
14
|
const i = Math.floor(Math.log(bytes) / Math.log(1024));
|
package/build/util.bytes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.bytes.js","sourceRoot":"","sources":["../src/util.bytes.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;IACxD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;AACzD,CAAC"}
|
|
1
|
+
{"version":3,"file":"util.bytes.js","sourceRoot":"","sources":["../src/util.bytes.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAC5B,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;IACxD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,QAAQ,EAAE,CAAC;AACzD,CAAC"}
|
package/build/util.tile.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Tiff } from '@cogeotiff/core';
|
|
2
2
|
import { log } from '@linzjs/tracing';
|
|
3
3
|
/**
|
|
4
4
|
* Get a human readable tile name
|
|
@@ -11,4 +11,4 @@ import { log } from '@linzjs/tracing';
|
|
|
11
11
|
* @returns tile name eg `001_002_12.png`
|
|
12
12
|
*/
|
|
13
13
|
export declare function getTileName(mimeType: string, index: number, x: number, y: number): string;
|
|
14
|
-
export declare function writeTile(tiff:
|
|
14
|
+
export declare function writeTile(tiff: Tiff, x: number, y: number, index: number, outputPath: URL, logger: typeof log): Promise<string | null>;
|
package/build/util.tile.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { TiffMimeType } from '@cogeotiff/core';
|
|
2
1
|
import { promises as fs } from 'node:fs';
|
|
2
|
+
import { TiffMimeType } from '@cogeotiff/core';
|
|
3
3
|
const FileExtension = {
|
|
4
4
|
[TiffMimeType.Jpeg]: 'jpeg',
|
|
5
|
-
[TiffMimeType.
|
|
5
|
+
[TiffMimeType.Jp2000]: 'jp2',
|
|
6
6
|
[TiffMimeType.Webp]: 'webp',
|
|
7
7
|
[TiffMimeType.Lzw]: 'lzw',
|
|
8
8
|
[TiffMimeType.Deflate]: 'deflate',
|
package/build/util.tile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.tile.js","sourceRoot":"","sources":["../src/util.tile.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"util.tile.js","sourceRoot":"","sources":["../src/util.tile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,EAAQ,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGrD,MAAM,aAAa,GAA2B;IAC5C,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM;IAC3B,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,KAAK;IAC5B,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM;IAC3B,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,KAAK;IACzB,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,SAAS;IACjC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK;IAC1B,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM;IAC7B,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM;IAC3B,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM;IAC3B,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM;CAC5B,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,KAAa,EAAE,CAAS,EAAE,CAAS;IAC/E,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;IACrD,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAU,EACV,CAAS,EACT,CAAS,EACT,KAAa,EACb,UAAe,EACf,MAAkB;IAElB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAClH,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cogeotiff/cli",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.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": "^
|
|
24
|
+
"@cogeotiff/core": "^9.0.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": "7e83b76e5089791667a81df7c77e6d361ad1ccb8"
|
|
39
39
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as assert from 'node:assert';
|
|
2
|
+
import { describe, it } from 'node:test';
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
AngularUnit,
|
|
6
|
+
Compression,
|
|
7
|
+
LinearUnit,
|
|
8
|
+
OldSubFileType,
|
|
9
|
+
Orientation,
|
|
10
|
+
Photometric,
|
|
11
|
+
PlanarConfiguration,
|
|
12
|
+
RasterTypeKey,
|
|
13
|
+
SampleFormat,
|
|
14
|
+
SubFileType,
|
|
15
|
+
} from '@cogeotiff/core';
|
|
16
|
+
|
|
17
|
+
// Ensure the tag constants are exported
|
|
18
|
+
describe('Exports', () => {
|
|
19
|
+
it('should export constants', () => {
|
|
20
|
+
assert.equal(Photometric.Rgb, 2);
|
|
21
|
+
assert.equal(SampleFormat.Float, 3);
|
|
22
|
+
assert.equal(RasterTypeKey.PixelIsArea, 1);
|
|
23
|
+
assert.equal(SubFileType.ReducedImage, 1);
|
|
24
|
+
assert.equal(OldSubFileType.ReducedImage, 2);
|
|
25
|
+
assert.equal(Compression.Lzw, 5);
|
|
26
|
+
assert.equal(AngularUnit.Degree, 9102);
|
|
27
|
+
assert.equal(LinearUnit.Metre, 9001);
|
|
28
|
+
assert.equal(PlanarConfiguration.Contig, 1);
|
|
29
|
+
assert.equal(Orientation.TopLeft, 1);
|
|
30
|
+
});
|
|
31
|
+
});
|
package/src/bin.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
// Ensure connection reuse is enabled
|
|
2
2
|
process.env['AWS_NODEJS_CONNECTION_REUSE_ENABLED'] = '1';
|
|
3
3
|
|
|
4
|
+
import { otError } from '@linzjs/tracing';
|
|
4
5
|
import { run } from 'cmd-ts';
|
|
6
|
+
|
|
5
7
|
import { cmd } from './index.js';
|
|
6
8
|
import { logger } from './log.js';
|
|
7
|
-
import { otError } from '@linzjs/tracing';
|
|
8
9
|
|
|
9
10
|
run(cmd, process.argv.slice(2)).catch((err) => {
|
|
10
11
|
logger.fatal('Command:Failed', { ...otError(err) });
|
package/src/cli.table.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import c from 'ansi-colors';
|
|
2
|
+
|
|
3
|
+
export interface CliTableInfo<T> {
|
|
2
4
|
/** Header for the table */
|
|
3
5
|
name: string;
|
|
4
6
|
/** Pad the field out to this width */
|
|
@@ -20,15 +22,20 @@ export class CliTable<T> {
|
|
|
20
22
|
|
|
21
23
|
print(data: T[], rowPadding = ''): string[] {
|
|
22
24
|
const fields = this.fields.filter((f) => data.every((d) => f.enabled?.(d) ?? true));
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
const values = fields.map((f) => data.map((d, i) => f.get(d, i)));
|
|
26
|
+
const sizes = values.map((val) => val.reduce((v, c) => Math.max(v, c?.length ?? 0), 0));
|
|
27
|
+
|
|
28
|
+
const rows: string[] = [rowPadding + fields.map((f, i) => c.bold(f.name.padEnd(sizes[i] + 2))).join('\t')];
|
|
29
|
+
for (let i = 0; i < data.length; i++) {
|
|
30
|
+
const row: string[] = [];
|
|
31
|
+
for (let f = 0; f < fields.length; f++) {
|
|
32
|
+
const fValue = values[f][i];
|
|
33
|
+
const fSize = sizes[f];
|
|
34
|
+
row.push((fValue ?? '').padEnd(fSize + 2));
|
|
35
|
+
}
|
|
36
|
+
rows.push(rowPadding + row.join('\t'));
|
|
37
|
+
}
|
|
30
38
|
|
|
31
|
-
rows.unshift(rowPadding + fields.map((f) => f.name.padEnd(f.width)).join('\t'));
|
|
32
39
|
return rows;
|
|
33
40
|
}
|
|
34
41
|
}
|
package/src/commands/dump.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { fsa } from '@chunkd/fs';
|
|
2
|
-
import { CogTiff, TiffMimeType } from '@cogeotiff/core';
|
|
3
|
-
import { log } from '@linzjs/tracing';
|
|
4
|
-
import { command, number, option, optional, restPositionals } from 'cmd-ts';
|
|
5
1
|
import { promises as fs } from 'node:fs';
|
|
6
2
|
import { basename } from 'node:path';
|
|
7
3
|
import { pathToFileURL } from 'node:url';
|
|
4
|
+
|
|
5
|
+
import { fsa } from '@chunkd/fs';
|
|
6
|
+
import { Tiff, TiffMimeType } from '@cogeotiff/core';
|
|
7
|
+
import { log } from '@linzjs/tracing';
|
|
8
|
+
import { command, number, option, optional, restPositionals } from 'cmd-ts';
|
|
8
9
|
import pLimit from 'p-limit';
|
|
10
|
+
|
|
9
11
|
import { DefaultArgs, Url } from '../common.js';
|
|
10
12
|
import { ensureS3fs, setupLogger } from '../log.js';
|
|
11
13
|
import { getTileName, writeTile } from '../util.tile.js';
|
|
@@ -57,7 +59,7 @@ export const commandDump = command({
|
|
|
57
59
|
if (path == null) continue;
|
|
58
60
|
if (path.protocol === 's3:') await ensureS3fs();
|
|
59
61
|
const source = fsa.source(path);
|
|
60
|
-
const tiff = await new
|
|
62
|
+
const tiff = await new Tiff(source).init();
|
|
61
63
|
const img = tiff.images[args.image];
|
|
62
64
|
if (!img.isTiled()) throw Error(`Tiff: ${path.href} file is not tiled.`);
|
|
63
65
|
const output = new URL(`${basename(path.href)}-i${args.image}/`, args.output ?? cwd);
|
|
@@ -69,7 +71,7 @@ export const commandDump = command({
|
|
|
69
71
|
},
|
|
70
72
|
});
|
|
71
73
|
|
|
72
|
-
async function dumpBounds(tiff:
|
|
74
|
+
async function dumpBounds(tiff: Tiff, target: URL, index: number): Promise<void> {
|
|
73
75
|
const img = tiff.images[index];
|
|
74
76
|
if (!img.isTiled() || !img.isGeoLocated) return;
|
|
75
77
|
|
|
@@ -113,7 +115,7 @@ async function dumpBounds(tiff: CogTiff, target: URL, index: number): Promise<vo
|
|
|
113
115
|
await fs.writeFile(new URL(`i${index}.bounds.geojson`, target), JSON.stringify(featureCollection, null, 2));
|
|
114
116
|
}
|
|
115
117
|
|
|
116
|
-
async function dumpTiles(tiff:
|
|
118
|
+
async function dumpTiles(tiff: Tiff, target: URL, index: number, logger: typeof log): Promise<number> {
|
|
117
119
|
const promises: Promise<string | null>[] = [];
|
|
118
120
|
const img = tiff.images[index];
|
|
119
121
|
if (!img.isTiled()) return 0;
|
|
@@ -121,9 +123,14 @@ async function dumpTiles(tiff: CogTiff, target: URL, index: number, logger: type
|
|
|
121
123
|
logger.info('Tiff:Info', { source: tiff.source.url, ...img.tileSize, ...img.tileCount });
|
|
122
124
|
const { tileCount, tileSize } = img;
|
|
123
125
|
|
|
124
|
-
const html = [
|
|
125
|
-
|
|
126
|
-
|
|
126
|
+
const html = [
|
|
127
|
+
'<html>',
|
|
128
|
+
'<head>',
|
|
129
|
+
`\t<style>.c { min-width: ${tileSize.width}px; min-height: ${tileSize.height}px; outline: 1px #ff00fff0 }</style>`,
|
|
130
|
+
'</head>',
|
|
131
|
+
'<body>',
|
|
132
|
+
];
|
|
133
|
+
|
|
127
134
|
for (let y = 0; y < tileCount.y; y++) {
|
|
128
135
|
for (let x = 0; x < tileCount.x; x++) {
|
|
129
136
|
const promise = TileQueue(() => writeTile(tiff, x, y, index, target, logger));
|
|
@@ -138,17 +145,18 @@ async function dumpTiles(tiff: CogTiff, target: URL, index: number, logger: type
|
|
|
138
145
|
|
|
139
146
|
for (let x = 0; x < tileCount.x; x++) {
|
|
140
147
|
const fileName = result[i];
|
|
148
|
+
i++;
|
|
149
|
+
|
|
141
150
|
if (fileName == null) {
|
|
142
151
|
html.push(`\t\t<div class="c"></div>`);
|
|
143
152
|
continue;
|
|
144
153
|
}
|
|
145
154
|
html.push(`\t\t<img class="c" src="./${fileName}" >`);
|
|
146
|
-
|
|
147
|
-
i++;
|
|
148
155
|
}
|
|
149
156
|
html.push('\t</div>');
|
|
150
157
|
}
|
|
151
158
|
|
|
159
|
+
html.push('</body>');
|
|
152
160
|
html.push('</html>');
|
|
153
161
|
await fs.writeFile(new URL('index.html', target), html.join('\n'));
|
|
154
162
|
|
package/src/commands/info.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { fsa } from '@chunkd/fs';
|
|
2
|
-
import {
|
|
3
|
-
import { CogTiffImage } from '@cogeotiff/core/src/cog.tiff.image.js';
|
|
2
|
+
import { Tag, TagOffset, Tiff, TiffImage, TiffTag, TiffTagGeo, TiffTagValueType, TiffVersion } from '@cogeotiff/core';
|
|
4
3
|
import c from 'ansi-colors';
|
|
5
4
|
import { command, flag, option, optional, restPositionals } from 'cmd-ts';
|
|
5
|
+
|
|
6
6
|
import { ActionUtil, CliResultMap } from '../action.util.js';
|
|
7
|
-
import { CliTable } from '../cli.table.js';
|
|
7
|
+
import { CliTable, CliTableInfo } from '../cli.table.js';
|
|
8
8
|
import { DefaultArgs, Url } from '../common.js';
|
|
9
9
|
import { FetchLog } from '../fs.js';
|
|
10
10
|
import { ensureS3fs, setupLogger } from '../log.js';
|
|
11
|
+
import { TagFormatters, TagGeoFormatters } from '../tags.js';
|
|
11
12
|
import { toByteSizeString } from '../util.bytes.js';
|
|
12
13
|
|
|
13
14
|
function round(num: number): number {
|
|
@@ -22,6 +23,10 @@ export const commandInfo = command({
|
|
|
22
23
|
path: option({ short: 'f', long: 'file', type: optional(Url) }),
|
|
23
24
|
tags: flag({ short: 't', long: 'tags', description: 'Dump tiff tags' }),
|
|
24
25
|
fetchTags: flag({ long: 'fetch-tags', description: 'Fetch extra tiff tag information' }),
|
|
26
|
+
tileStats: flag({
|
|
27
|
+
long: 'tile-stats',
|
|
28
|
+
description: 'Fetch tile information, like size [this can fetch a lot of data]',
|
|
29
|
+
}),
|
|
25
30
|
paths: restPositionals({ type: Url, description: 'Files to process' }),
|
|
26
31
|
},
|
|
27
32
|
async handler(args) {
|
|
@@ -34,7 +39,12 @@ export const commandInfo = command({
|
|
|
34
39
|
FetchLog.reset();
|
|
35
40
|
|
|
36
41
|
const source = fsa.source(path);
|
|
37
|
-
const tiff = await new
|
|
42
|
+
const tiff = await new Tiff(source).init();
|
|
43
|
+
|
|
44
|
+
if (args.tileStats) {
|
|
45
|
+
await Promise.all(tiff.images.map((img) => img.fetch(TiffTag.TileByteCounts)));
|
|
46
|
+
TiffImageInfoTable.add(tiffTileStats);
|
|
47
|
+
}
|
|
38
48
|
|
|
39
49
|
const header = [
|
|
40
50
|
{ key: 'Tiff type', value: `${TiffVersion[tiff.version]} (v${String(tiff.version)})` },
|
|
@@ -44,16 +54,25 @@ export const commandInfo = command({
|
|
|
44
54
|
FetchLog.fetches.length === 1 ? '' : 's'
|
|
45
55
|
})`,
|
|
46
56
|
},
|
|
57
|
+
tiff.source.metadata?.size
|
|
58
|
+
? {
|
|
59
|
+
key: 'Size',
|
|
60
|
+
value: toByteSizeString(tiff.source.metadata.size),
|
|
61
|
+
}
|
|
62
|
+
: null,
|
|
47
63
|
];
|
|
48
64
|
|
|
49
65
|
const firstImage = tiff.images[0];
|
|
50
66
|
const isGeoLocated = firstImage.isGeoLocated;
|
|
67
|
+
const compression = firstImage.value(TiffTag.Compression);
|
|
51
68
|
const images = [
|
|
52
|
-
{ key: 'Compression', value: firstImage.compression },
|
|
69
|
+
{ key: 'Compression', value: `${compression} - ${c.magenta(firstImage.compression ?? '??')}` },
|
|
53
70
|
isGeoLocated ? { key: 'Origin', value: firstImage.origin.map(round).join(', ') } : null,
|
|
54
71
|
isGeoLocated ? { key: 'Resolution', value: firstImage.resolution.map(round).join(', ') } : null,
|
|
55
72
|
isGeoLocated ? { key: 'BoundingBox', value: firstImage.bbox.map(round).join(', ') } : null,
|
|
56
|
-
firstImage.epsg
|
|
73
|
+
firstImage.epsg
|
|
74
|
+
? { key: 'EPSG', value: `EPSG:${firstImage.epsg} ${c.underline('https://epsg.io/' + firstImage.epsg)}` }
|
|
75
|
+
: null,
|
|
57
76
|
{ key: 'Images', value: '\n' + TiffImageInfoTable.print(tiff.images, '\t').join('\n') },
|
|
58
77
|
];
|
|
59
78
|
|
|
@@ -112,7 +131,7 @@ export const commandInfo = command({
|
|
|
112
131
|
},
|
|
113
132
|
});
|
|
114
133
|
|
|
115
|
-
const TiffImageInfoTable = new CliTable<
|
|
134
|
+
const TiffImageInfoTable = new CliTable<TiffImage>();
|
|
116
135
|
TiffImageInfoTable.add({ name: 'Id', width: 4, get: (_i, index) => String(index) });
|
|
117
136
|
TiffImageInfoTable.add({ name: 'Size', width: 20, get: (i) => `${i.size.width}x${i.size.height}` });
|
|
118
137
|
TiffImageInfoTable.add({
|
|
@@ -124,7 +143,13 @@ TiffImageInfoTable.add({
|
|
|
124
143
|
TiffImageInfoTable.add({
|
|
125
144
|
name: 'Tile Count',
|
|
126
145
|
width: 20,
|
|
127
|
-
get: (i) =>
|
|
146
|
+
get: (i) => {
|
|
147
|
+
let tileCount = i.tileCount.x * i.tileCount.y;
|
|
148
|
+
const offsets = i.value(TiffTag.TileByteCounts) ?? i.value(TiffTag.TileOffsets);
|
|
149
|
+
if (offsets) tileCount = offsets.length;
|
|
150
|
+
|
|
151
|
+
return `${i.tileCount.x}x${i.tileCount.y} (${tileCount})`;
|
|
152
|
+
},
|
|
128
153
|
enabled: (i) => i.isTiled(),
|
|
129
154
|
});
|
|
130
155
|
TiffImageInfoTable.add({
|
|
@@ -152,13 +177,39 @@ TiffImageInfoTable.add({
|
|
|
152
177
|
},
|
|
153
178
|
});
|
|
154
179
|
|
|
180
|
+
export const tiffTileStats: CliTableInfo<TiffImage> = {
|
|
181
|
+
name: 'Tile Stats',
|
|
182
|
+
width: 20,
|
|
183
|
+
get: (i) => {
|
|
184
|
+
const sizes = i.value(TiffTag.TileByteCounts);
|
|
185
|
+
if (sizes == null) return 'N/A';
|
|
186
|
+
|
|
187
|
+
const stats = {
|
|
188
|
+
size: 0,
|
|
189
|
+
empty: 0,
|
|
190
|
+
};
|
|
191
|
+
for (const st of sizes) {
|
|
192
|
+
if (st === 0) stats.empty++;
|
|
193
|
+
console.log(st, stats);
|
|
194
|
+
stats.size += st;
|
|
195
|
+
}
|
|
196
|
+
if (stats.size === 0) return `${c.red('empty')} x${stats.empty}`;
|
|
197
|
+
|
|
198
|
+
const empty = stats.empty > 0 ? ` (${c.red('empty')} x${stats.empty})` : '';
|
|
199
|
+
|
|
200
|
+
const avg = stats.size === 0 ? 0 : stats.size / (sizes.length - stats.empty);
|
|
201
|
+
return toByteSizeString(stats.size) + ` (${c.blue('avg:')} ${toByteSizeString(avg)})` + empty;
|
|
202
|
+
},
|
|
203
|
+
enabled: () => true,
|
|
204
|
+
};
|
|
205
|
+
|
|
155
206
|
/**
|
|
156
207
|
* Parse out the GDAL Metadata to be more friendly to read
|
|
157
208
|
*
|
|
158
209
|
* TODO using a XML Parser will make this even better
|
|
159
210
|
* @param img
|
|
160
211
|
*/
|
|
161
|
-
function parseGdalMetadata(img:
|
|
212
|
+
function parseGdalMetadata(img: TiffImage): string[] | null {
|
|
162
213
|
const metadata = img.value(TiffTag.GdalMetadata);
|
|
163
214
|
if (typeof metadata !== 'string') return null;
|
|
164
215
|
if (!metadata.startsWith('<GDALMetadata>')) return null;
|
|
@@ -173,27 +224,39 @@ function parseGdalMetadata(img: CogTiffImage): string[] | null {
|
|
|
173
224
|
function formatTag(tag: Tag): { key: string; value: string } {
|
|
174
225
|
const tagName = TiffTag[tag.id];
|
|
175
226
|
const tagDebug = `(${TiffTagValueType[tag.dataType]}${tag.count > 1 ? ' x' + tag.count : ''}`;
|
|
176
|
-
const key = `${c.dim(
|
|
227
|
+
const key = `${c.dim(String(tag.id)).padEnd(7, ' ')} ${String(tagName)} ${c.dim(tagDebug)})`.padEnd(52, ' ');
|
|
177
228
|
|
|
229
|
+
let complexType = '';
|
|
178
230
|
// Array of values that is not a string!
|
|
179
231
|
if (tag.count > 1 && tag.dataType !== TiffTagValueType.Ascii) {
|
|
180
232
|
if (tag.value == null || (tag as TagOffset).isLoaded === false) {
|
|
181
233
|
return { key, value: c.dim('Tag not Loaded, use --fetch-tags to force load') };
|
|
182
234
|
}
|
|
183
235
|
const val = [...(tag.value as number[])]; // Ensure the value is not a TypedArray
|
|
184
|
-
|
|
236
|
+
if (TagFormatters[tag.id]) {
|
|
237
|
+
complexType = ` - ${c.magenta(TagFormatters[tag.id](val) ?? '??')}`;
|
|
238
|
+
}
|
|
239
|
+
return { key, value: (val.length > 25 ? val.slice(0, 25).join(', ') + '...' : val.join(', ')) + complexType };
|
|
185
240
|
}
|
|
186
241
|
|
|
187
242
|
let tagString = JSON.stringify(tag.value) ?? c.dim('null');
|
|
188
243
|
if (tagString.length > 256) tagString = tagString.slice(0, 250) + '...';
|
|
189
|
-
|
|
244
|
+
if (TagFormatters[tag.id]) {
|
|
245
|
+
complexType = ` - ${c.magenta(TagFormatters[tag.id]([tag.value as unknown as number]) ?? '??')}`;
|
|
246
|
+
}
|
|
247
|
+
return { key, value: tagString + complexType };
|
|
190
248
|
}
|
|
191
249
|
|
|
192
|
-
function formatGeoTag(tagId: TiffTagGeo, value: string | number): { key: string; value: string } {
|
|
250
|
+
function formatGeoTag(tagId: TiffTagGeo, value: string | number | number[]): { key: string; value: string } {
|
|
193
251
|
const tagName = TiffTagGeo[tagId];
|
|
194
|
-
const key = `${c.dim(
|
|
252
|
+
const key = `${c.dim(String(tagId)).padEnd(7, ' ')} ${String(tagName).padEnd(30)}`;
|
|
253
|
+
|
|
254
|
+
let complexType = '';
|
|
255
|
+
if (TagGeoFormatters[tagId]) {
|
|
256
|
+
complexType = ` - ${c.magenta(TagGeoFormatters[tagId]([value as unknown as number]) ?? '??')}`;
|
|
257
|
+
}
|
|
195
258
|
|
|
196
259
|
let tagString = JSON.stringify(value) ?? c.dim('null');
|
|
197
260
|
if (tagString.length > 256) tagString = tagString.slice(0, 250) + '...';
|
|
198
|
-
return { key, value: tagString };
|
|
261
|
+
return { key, value: tagString + complexType };
|
|
199
262
|
}
|
package/src/common.ts
CHANGED
package/src/fs.ts
CHANGED
package/src/index.ts
CHANGED
package/src/log.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { fsa, FsHttp } from '@chunkd/fs';
|
|
2
2
|
import { SourceCache, SourceChunk } from '@chunkd/middleware';
|
|
3
3
|
import { log } from '@linzjs/tracing';
|
|
4
|
+
|
|
4
5
|
import { FetchLog } from './fs.js';
|
|
5
6
|
|
|
6
7
|
// Cache the last 10MB of chunks for reuse
|
package/src/tags.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AngularUnit,
|
|
3
|
+
Compression,
|
|
4
|
+
LinearUnit,
|
|
5
|
+
ModelTypeCode,
|
|
6
|
+
Orientation,
|
|
7
|
+
Photometric,
|
|
8
|
+
PlanarConfiguration,
|
|
9
|
+
RasterTypeKey,
|
|
10
|
+
SampleFormat,
|
|
11
|
+
SubFileType,
|
|
12
|
+
TiffTag,
|
|
13
|
+
TiffTagGeo,
|
|
14
|
+
TiffTagGeoType,
|
|
15
|
+
TiffTagType,
|
|
16
|
+
} from '@cogeotiff/core';
|
|
17
|
+
|
|
18
|
+
/** Convert enum values back to strings */
|
|
19
|
+
export const TagGeoFormatters = {
|
|
20
|
+
[TiffTagGeo.GTRasterTypeGeoKey]: (v: TiffTagGeoType[TiffTagGeo.GTRasterTypeGeoKey]) => RasterTypeKey[v],
|
|
21
|
+
[TiffTagGeo.GTModelTypeGeoKey]: (v: TiffTagGeoType[TiffTagGeo.GTModelTypeGeoKey]) => ModelTypeCode[v],
|
|
22
|
+
[TiffTagGeo.GeogAngularUnitsGeoKey]: (v: TiffTagGeoType[TiffTagGeo.GeogAngularUnitsGeoKey]) => AngularUnit[v],
|
|
23
|
+
[TiffTagGeo.ProjLinearUnitsGeoKey]: (v: TiffTagGeoType[TiffTagGeo.ProjLinearUnitsGeoKey]) => LinearUnit[v],
|
|
24
|
+
[TiffTagGeo.VerticalUnitsGeoKey]: (v: TiffTagGeoType[TiffTagGeo.VerticalUnitsGeoKey]) => LinearUnit[v],
|
|
25
|
+
} as Record<number, (v: number | number[]) => string>;
|
|
26
|
+
|
|
27
|
+
export const TagFormatters = {
|
|
28
|
+
[TiffTag.LercParameters]: (value: TiffTagType[TiffTag.LercParameters]): string => {
|
|
29
|
+
return `v${value[0]} - ${Compression[value[1]] ?? '??'}`;
|
|
30
|
+
},
|
|
31
|
+
[TiffTag.SubFileType]: (value: TiffTagType[TiffTag.SubFileType]): string => SubFileType[value],
|
|
32
|
+
[TiffTag.Compression]: (value: TiffTagType[TiffTag.Compression]): string => Compression[value],
|
|
33
|
+
[TiffTag.Orientation]: (value: TiffTagType[TiffTag.Orientation]): string => Orientation[value],
|
|
34
|
+
[TiffTag.SampleFormat]: (value: TiffTagType[TiffTag.SampleFormat]): string => {
|
|
35
|
+
return value.map((m) => SampleFormat[m]).join(', ');
|
|
36
|
+
},
|
|
37
|
+
[TiffTag.Photometric]: (value: TiffTagType[TiffTag.Photometric]): string => Photometric[value],
|
|
38
|
+
[TiffTag.PlanarConfiguration]: (value: TiffTagType[TiffTag.PlanarConfiguration]): string => {
|
|
39
|
+
return PlanarConfiguration[value];
|
|
40
|
+
},
|
|
41
|
+
} as Record<number, (v: number | number[]) => string>;
|
package/src/util.bytes.ts
CHANGED
|
@@ -8,6 +8,7 @@ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
|
|
|
8
8
|
* @param bytes byte count to convert
|
|
9
9
|
*/
|
|
10
10
|
export function toByteSizeString(bytes: number): string {
|
|
11
|
+
if (bytes === 0) return '0';
|
|
11
12
|
if (bytes === 1) return '1 Byte';
|
|
12
13
|
const i = Math.floor(Math.log(bytes) / Math.log(1024));
|
|
13
14
|
const output = bytes / Math.pow(1024, i);
|
package/src/util.tile.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { CogTiff, TiffMimeType } from '@cogeotiff/core';
|
|
2
|
-
import { log } from '@linzjs/tracing';
|
|
3
1
|
import { promises as fs } from 'node:fs';
|
|
4
2
|
|
|
3
|
+
import { Tiff, TiffMimeType } from '@cogeotiff/core';
|
|
4
|
+
import { log } from '@linzjs/tracing';
|
|
5
|
+
|
|
5
6
|
const FileExtension: Record<string, string> = {
|
|
6
7
|
[TiffMimeType.Jpeg]: 'jpeg',
|
|
7
|
-
[TiffMimeType.
|
|
8
|
+
[TiffMimeType.Jp2000]: 'jp2',
|
|
8
9
|
[TiffMimeType.Webp]: 'webp',
|
|
9
10
|
[TiffMimeType.Lzw]: 'lzw',
|
|
10
11
|
[TiffMimeType.Deflate]: 'deflate',
|
|
@@ -33,7 +34,7 @@ export function getTileName(mimeType: string, index: number, x: number, y: numbe
|
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
export async function writeTile(
|
|
36
|
-
tiff:
|
|
37
|
+
tiff: Tiff,
|
|
37
38
|
x: number,
|
|
38
39
|
y: number,
|
|
39
40
|
index: number,
|