exiftool-vendored 23.1.0 → 23.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.
- package/CHANGELOG.md +13 -1
- package/dist/CapturedAtTagNames.d.ts +1 -1
- package/dist/CapturedAtTagNames.js +4 -2
- package/dist/CapturedAtTagNames.js.map +1 -1
- package/dist/DefaultCreateDateTagNames.d.ts +4 -0
- package/dist/DefaultCreateDateTagNames.js +9 -0
- package/dist/DefaultCreateDateTagNames.js.map +1 -0
- package/dist/DefaultExifToolOptions.js +2 -0
- package/dist/DefaultExifToolOptions.js.map +1 -1
- package/dist/ExifTime.js +2 -2
- package/dist/ExifTime.js.map +1 -1
- package/dist/ExifTool.d.ts +17 -10
- package/dist/ExifTool.js +19 -11
- package/dist/ExifTool.js.map +1 -1
- package/dist/ExifToolOptions.d.ts +49 -26
- package/dist/ExifToolOptions.js.map +1 -1
- package/dist/Maybe.d.ts +1 -0
- package/dist/Maybe.js +5 -1
- package/dist/Maybe.js.map +1 -1
- package/dist/ReadTask.d.ts +1 -0
- package/dist/ReadTask.js +16 -75
- package/dist/ReadTask.js.map +1 -1
- package/dist/ResourceEvent.d.ts +1 -0
- package/dist/ResourceEvent.js +13 -0
- package/dist/ResourceEvent.js.map +1 -1
- package/dist/Struct.js +2 -1
- package/dist/Struct.js.map +1 -1
- package/dist/Tags.d.ts +8 -8
- package/dist/TimeParsing.js +2 -1
- package/dist/TimeParsing.js.map +1 -1
- package/dist/Timezones.d.ts +18 -21
- package/dist/Timezones.js +137 -59
- package/dist/Timezones.js.map +1 -1
- package/dist/Version.d.ts +1 -0
- package/dist/Version.js +6 -0
- package/dist/Version.js.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -26,13 +26,25 @@ vendored versions of ExifTool match the version that they vendor.
|
|
|
26
26
|
|
|
27
27
|
## Version history
|
|
28
28
|
|
|
29
|
+
### v23.2.0
|
|
30
|
+
|
|
31
|
+
- ✨ Timezone parsing improvements:
|
|
32
|
+
- Added [`ExifToolOptions.inferTimezoneFromDatestampTags`](https://photostructure.github.io/exiftool-vendored.js/interfaces/ExifToolOptions.html#inferTimezoneFromDatestampTags).
|
|
33
|
+
- Timezone inference from datestamps now skips over UTC values, as Google
|
|
34
|
+
Takeout (and several other applications) may spuriously set "+00:00" to
|
|
35
|
+
datestamps.
|
|
36
|
+
- ReadTask.parse in prior versions had to scan all tags twice to set the
|
|
37
|
+
timezone. Code was refactored to do this in a single pass.
|
|
38
|
+
- Timezone extraction and normalization was improved.
|
|
39
|
+
|
|
40
|
+
- 📦 Add `creationDate` to [CapturedAtTagNames](https://photostructure.github.io/exiftool-vendored.js/variables/CapturedAtTagNames.html). [See PR#159](https://github.com/photostructure/exiftool-vendored.js/pull/159).
|
|
41
|
+
|
|
29
42
|
### v23.1.0
|
|
30
43
|
|
|
31
44
|
- 🌱 ExifTool upgraded to [v12.67](https://exiftool.org/history.html#v12.67)
|
|
32
45
|
|
|
33
46
|
- ✨ `ExifTime` now parses and stores timezone offsets if available. This resolves [issue
|
|
34
47
|
#157](https://github.com/photostructure/exiftool-vendored.js/issues/157).
|
|
35
|
-
|
|
36
48
|
- 📦 `ExifDateTime`, `ExifTime`, and `ExifDate` are now [only allowed to try
|
|
37
49
|
to parse keys that includes `date` or
|
|
38
50
|
`time`](https://github.com/photostructure/exiftool-vendored.js/blob/ed7bf9eaea9b1d8ad234fb907953568219fc5bdb/src/ReadTask.ts#L389),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CapturedAtTagNames: readonly ["SubSecDateTimeOriginal", "
|
|
1
|
+
export declare const CapturedAtTagNames: readonly ["SubSecDateTimeOriginal", "SubSecCreateDate", "SubSecMediaCreateDate", "DateTimeOriginal", "CreateDate", "MediaCreateDate", "CreationDate", "DateTimeCreated", "TimeCreated"];
|
|
@@ -3,11 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CapturedAtTagNames = void 0;
|
|
4
4
|
exports.CapturedAtTagNames = [
|
|
5
5
|
"SubSecDateTimeOriginal",
|
|
6
|
-
"DateTimeOriginal",
|
|
7
6
|
"SubSecCreateDate",
|
|
8
|
-
"CreateDate",
|
|
9
7
|
"SubSecMediaCreateDate",
|
|
8
|
+
"DateTimeOriginal",
|
|
9
|
+
"CreateDate",
|
|
10
10
|
"MediaCreateDate",
|
|
11
|
+
"CreationDate",
|
|
11
12
|
"DateTimeCreated",
|
|
13
|
+
"TimeCreated", // < may not have the date
|
|
12
14
|
];
|
|
13
15
|
//# sourceMappingURL=CapturedAtTagNames.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CapturedAtTagNames.js","sourceRoot":"","sources":["../src/CapturedAtTagNames.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"CapturedAtTagNames.js","sourceRoot":"","sources":["../src/CapturedAtTagNames.ts"],"names":[],"mappings":";;;AAEa,QAAA,kBAAkB,GAAG;IAChC,wBAAwB;IACxB,kBAAkB;IAClB,uBAAuB;IACvB,kBAAkB;IAClB,YAAY;IACZ,iBAAiB;IACjB,cAAc;IACd,iBAAiB;IACjB,aAAa,EAAE,0BAA0B;CACC,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated use {@link CapturedAtTagNames} instead.
|
|
3
|
+
*/
|
|
4
|
+
export declare const DefaultCreateDateTagNames: readonly ["SubSecDateTimeOriginal", "SubSecCreateDate", "SubSecMediaCreateDate", "DateTimeOriginal", "CreateDate", "MediaCreateDate", "CreationDate", "DateTimeCreated", "TimeCreated"];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultCreateDateTagNames = void 0;
|
|
4
|
+
const CapturedAtTagNames_1 = require("./CapturedAtTagNames");
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated use {@link CapturedAtTagNames} instead.
|
|
7
|
+
*/
|
|
8
|
+
exports.DefaultCreateDateTagNames = CapturedAtTagNames_1.CapturedAtTagNames;
|
|
9
|
+
//# sourceMappingURL=DefaultCreateDateTagNames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultCreateDateTagNames.js","sourceRoot":"","sources":["../src/DefaultCreateDateTagNames.ts"],"names":[],"mappings":";;;AAAA,6DAAyD;AAEzD;;GAEG;AACU,QAAA,yBAAyB,GAAG,uCAAkB,CAAA"}
|
|
@@ -25,6 +25,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.DefaultExifToolOptions = void 0;
|
|
27
27
|
const bc = __importStar(require("batch-cluster"));
|
|
28
|
+
const CapturedAtTagNames_1 = require("./CapturedAtTagNames");
|
|
28
29
|
const DefaultExiftoolArgs_1 = require("./DefaultExiftoolArgs");
|
|
29
30
|
const DefaultMaxProcs_1 = require("./DefaultMaxProcs");
|
|
30
31
|
const FindExiftool_1 = require("./FindExiftool");
|
|
@@ -69,6 +70,7 @@ exports.DefaultExifToolOptions = Object.freeze({
|
|
|
69
70
|
defaultVideosToUTC: true,
|
|
70
71
|
backfillTimezones: true,
|
|
71
72
|
inferTimezoneFromDatestamps: false,
|
|
73
|
+
inferTimezoneFromDatestampTags: [...CapturedAtTagNames_1.CapturedAtTagNames],
|
|
72
74
|
geoTz: GeoTz_1.geoTz,
|
|
73
75
|
isIgnorableError: IgnorableError_1.isIgnorableWarning,
|
|
74
76
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultExifToolOptions.js","sourceRoot":"","sources":["../src/DefaultExifToolOptions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAmC;AACnC,+DAA2D;AAC3D,uDAAmD;AAEnD,iDAAoD;AACpD,mCAA+B;AAC/B,qDAAqD;AACrD,uCAAmC;AAEnC,+CAA2C;AAE3C;;;GAGG;
|
|
1
|
+
{"version":3,"file":"DefaultExifToolOptions.js","sourceRoot":"","sources":["../src/DefaultExifToolOptions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAmC;AACnC,6DAAyD;AACzD,+DAA2D;AAC3D,uDAAmD;AAEnD,iDAAoD;AACpD,mCAA+B;AAC/B,qDAAqD;AACrD,uCAAmC;AAEnC,+CAA2C;AAE3C;;;GAGG;AACU,QAAA,sBAAsB,GAG/B,MAAM,CAAC,MAAM,CAAC;IAChB,GAAG,IAAI,EAAE,CAAC,mBAAmB,EAAE;IAC/B,QAAQ,EAAE,iCAAe;IACzB,kBAAkB,EAAE,GAAG;IACvB,kBAAkB,EAAE,KAAK;IACzB,yEAAyE;IACzE,iBAAiB,EAAE,KAAK;IACxB,oBAAoB,EAAE,IAAI;IAC1B,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,kCAAmB;IACjC,YAAY,EAAE,yCAAmB;IACjC,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,CAAC,IAAA,iBAAO,GAAE;IACrB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,qBAAqB;IAClC,cAAc,EAAE,IAAI,yBAAW,EAAE,CAAC,OAAO;IACzC,yBAAyB,EAAE,KAAK;IAChC,kBAAkB,EAAE,kBAAkB;IACtC,MAAM,EAAE,KAAK;IACb,WAAW,EAAE;QACX,YAAY;QACZ,aAAa;QACb,aAAa;QACb,cAAc;QACd,aAAa;QACb,aAAa;KACd;IACD,mBAAmB,EAAE,SAAS;IAC9B,aAAa,EAAE,KAAK;IACpB,kBAAkB,EAAE,IAAI;IACxB,iBAAiB,EAAE,IAAI;IACvB,2BAA2B,EAAE,KAAK;IAClC,8BAA8B,EAAE,CAAC,GAAG,uCAAkB,CAAC;IACvD,KAAK,EAAE,aAAK;IACZ,gBAAgB,EAAE,mCAAkB;CACrC,CAAC,CAAA"}
|
package/dist/ExifTime.js
CHANGED
|
@@ -109,7 +109,7 @@ exports.ExifTime = ExifTime;
|
|
|
109
109
|
_ExifTime_dt = new WeakMap(), _ExifTime_z = new WeakMap(), _ExifTime_instances = new WeakSet(), _ExifTime_subsec = function _ExifTime_subsec() {
|
|
110
110
|
return this.millisecond == null ? "" : "." + (0, String_1.pad3)(this.millisecond);
|
|
111
111
|
}, _ExifTime_shortZone = function _ExifTime_shortZone() {
|
|
112
|
-
var _a
|
|
113
|
-
return (__classPrivateFieldSet(this, _ExifTime_z, (_a = __classPrivateFieldGet(this, _ExifTime_z, "f")) !== null && _a !== void 0 ? _a : (
|
|
112
|
+
var _a;
|
|
113
|
+
return (__classPrivateFieldSet(this, _ExifTime_z, (_a = __classPrivateFieldGet(this, _ExifTime_z, "f")) !== null && _a !== void 0 ? _a : (0, Timezones_1.zoneToShortOffset)(this.zone), "f"));
|
|
114
114
|
};
|
|
115
115
|
//# sourceMappingURL=ExifTime.js.map
|
package/dist/ExifTime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifTime.js","sourceRoot":"","sources":["../src/ExifTime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iCAAmD;AACnD,yCAA0C;AAE1C,qCAA0C;AAC1C,+CAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"ExifTime.js","sourceRoot":"","sources":["../src/ExifTime.ts"],"names":[],"mappings":"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"}
|
package/dist/ExifTool.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ import { Version } from "./Version";
|
|
|
19
19
|
import { WriteTags } from "./WriteTags";
|
|
20
20
|
import { WriteTaskOptions } from "./WriteTask";
|
|
21
21
|
export { BinaryField } from "./BinaryField";
|
|
22
|
+
export { CapturedAtTagNames } from "./CapturedAtTagNames";
|
|
22
23
|
export { DefaultExifToolOptions } from "./DefaultExifToolOptions";
|
|
23
24
|
export { DefaultExiftoolArgs } from "./DefaultExiftoolArgs";
|
|
24
25
|
export { DefaultMaxProcs } from "./DefaultMaxProcs";
|
|
@@ -65,10 +66,10 @@ export interface StructAppendTags {
|
|
|
65
66
|
"Versions+"?: Version | Version[];
|
|
66
67
|
}
|
|
67
68
|
/**
|
|
68
|
-
* Manages delegating calls to a
|
|
69
|
+
* Manages delegating calls to a cluster of ExifTool child processes.
|
|
69
70
|
*
|
|
70
|
-
* Instances should be shared: consider using the exported singleton
|
|
71
|
-
*
|
|
71
|
+
* Instances should be shared: consider using the exported singleton instance
|
|
72
|
+
* of this class, {@link exiftool}.
|
|
72
73
|
*/
|
|
73
74
|
export declare class ExifTool {
|
|
74
75
|
#private;
|
|
@@ -286,14 +287,20 @@ export declare class ExifTool {
|
|
|
286
287
|
closeChildProcesses(gracefully?: boolean): Promise<void>;
|
|
287
288
|
}
|
|
288
289
|
/**
|
|
289
|
-
* Use this singleton rather than instantiating new ExifTool instances
|
|
290
|
-
* to leverage a single running ExifTool process.
|
|
291
|
-
*
|
|
292
|
-
*
|
|
293
|
-
*
|
|
294
|
-
*
|
|
290
|
+
* Use this singleton rather than instantiating new {@link ExifTool} instances
|
|
291
|
+
* in order to leverage a single running ExifTool process.
|
|
292
|
+
*
|
|
293
|
+
* As of v3.0, its {@link ExifToolOptions.maxProcs} is set to the number of
|
|
294
|
+
* CPUs on the current system; no more than `maxProcs` instances of `exiftool`
|
|
295
|
+
* will be spawned. You may want to experiment with smaller or larger values
|
|
296
|
+
* for `maxProcs`, depending on CPU and disk speed of your system and
|
|
297
|
+
* performance tradeoffs.
|
|
295
298
|
*
|
|
296
299
|
* Note that each child process consumes between 10 and 50 MB of RAM. If you
|
|
297
|
-
* have limited system resources you may want to use a smaller `maxProcs`
|
|
300
|
+
* have limited system resources you may want to use a smaller `maxProcs`
|
|
301
|
+
* value.
|
|
302
|
+
*
|
|
303
|
+
* See the source of {@link DefaultExifToolOptions} for more details about how
|
|
304
|
+
* this instance is configured.
|
|
298
305
|
*/
|
|
299
306
|
export declare const exiftool: ExifTool;
|
package/dist/ExifTool.js
CHANGED
|
@@ -32,7 +32,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
32
32
|
};
|
|
33
33
|
var _ExifTool_checkForPerl;
|
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
exports.exiftool = exports.ExifTool = exports.DefaultWriteTaskOptions = exports.offsetMinutesToZoneName = exports.defaultVideosToUTC = exports.UnsetZoneOffsetMinutes = exports.UnsetZoneName = exports.UnsetZone = exports.DefaultReadTaskOptions = exports.parseJSON = exports.isIgnorableWarning = exports.ExifToolTask = exports.ExifTime = exports.ExifDateTime = exports.ExifDate = exports.DefaultMaxProcs = exports.DefaultExiftoolArgs = exports.DefaultExifToolOptions = exports.BinaryField = void 0;
|
|
35
|
+
exports.exiftool = exports.ExifTool = exports.DefaultWriteTaskOptions = exports.offsetMinutesToZoneName = exports.defaultVideosToUTC = exports.UnsetZoneOffsetMinutes = exports.UnsetZoneName = exports.UnsetZone = exports.DefaultReadTaskOptions = exports.parseJSON = exports.isIgnorableWarning = exports.ExifToolTask = exports.ExifTime = exports.ExifDateTime = exports.ExifDate = exports.DefaultMaxProcs = exports.DefaultExiftoolArgs = exports.DefaultExifToolOptions = exports.CapturedAtTagNames = exports.BinaryField = void 0;
|
|
36
36
|
const bc = __importStar(require("batch-cluster"));
|
|
37
37
|
const _cp = __importStar(require("child_process"));
|
|
38
38
|
const _fs = __importStar(require("fs"));
|
|
@@ -55,6 +55,8 @@ const Which_1 = require("./Which");
|
|
|
55
55
|
const WriteTask_1 = require("./WriteTask");
|
|
56
56
|
var BinaryField_1 = require("./BinaryField");
|
|
57
57
|
Object.defineProperty(exports, "BinaryField", { enumerable: true, get: function () { return BinaryField_1.BinaryField; } });
|
|
58
|
+
var CapturedAtTagNames_1 = require("./CapturedAtTagNames");
|
|
59
|
+
Object.defineProperty(exports, "CapturedAtTagNames", { enumerable: true, get: function () { return CapturedAtTagNames_1.CapturedAtTagNames; } });
|
|
58
60
|
var DefaultExifToolOptions_2 = require("./DefaultExifToolOptions");
|
|
59
61
|
Object.defineProperty(exports, "DefaultExifToolOptions", { enumerable: true, get: function () { return DefaultExifToolOptions_2.DefaultExifToolOptions; } });
|
|
60
62
|
var DefaultExiftoolArgs_1 = require("./DefaultExiftoolArgs");
|
|
@@ -85,10 +87,10 @@ var WriteTask_2 = require("./WriteTask");
|
|
|
85
87
|
Object.defineProperty(exports, "DefaultWriteTaskOptions", { enumerable: true, get: function () { return WriteTask_2.DefaultWriteTaskOptions; } });
|
|
86
88
|
const _ignoreShebang = (0, Lazy_1.lazy)(() => !(0, IsWin32_1.isWin32)() && !_fs.existsSync("/usr/bin/perl"));
|
|
87
89
|
/**
|
|
88
|
-
* Manages delegating calls to a
|
|
90
|
+
* Manages delegating calls to a cluster of ExifTool child processes.
|
|
89
91
|
*
|
|
90
|
-
* Instances should be shared: consider using the exported singleton
|
|
91
|
-
*
|
|
92
|
+
* Instances should be shared: consider using the exported singleton instance
|
|
93
|
+
* of this class, {@link exiftool}.
|
|
92
94
|
*/
|
|
93
95
|
class ExifTool {
|
|
94
96
|
constructor(options = {}) {
|
|
@@ -403,15 +405,21 @@ class ExifTool {
|
|
|
403
405
|
exports.ExifTool = ExifTool;
|
|
404
406
|
_ExifTool_checkForPerl = new WeakMap();
|
|
405
407
|
/**
|
|
406
|
-
* Use this singleton rather than instantiating new ExifTool instances
|
|
407
|
-
* to leverage a single running ExifTool process.
|
|
408
|
-
*
|
|
409
|
-
*
|
|
410
|
-
*
|
|
411
|
-
*
|
|
408
|
+
* Use this singleton rather than instantiating new {@link ExifTool} instances
|
|
409
|
+
* in order to leverage a single running ExifTool process.
|
|
410
|
+
*
|
|
411
|
+
* As of v3.0, its {@link ExifToolOptions.maxProcs} is set to the number of
|
|
412
|
+
* CPUs on the current system; no more than `maxProcs` instances of `exiftool`
|
|
413
|
+
* will be spawned. You may want to experiment with smaller or larger values
|
|
414
|
+
* for `maxProcs`, depending on CPU and disk speed of your system and
|
|
415
|
+
* performance tradeoffs.
|
|
412
416
|
*
|
|
413
417
|
* Note that each child process consumes between 10 and 50 MB of RAM. If you
|
|
414
|
-
* have limited system resources you may want to use a smaller `maxProcs`
|
|
418
|
+
* have limited system resources you may want to use a smaller `maxProcs`
|
|
419
|
+
* value.
|
|
420
|
+
*
|
|
421
|
+
* See the source of {@link DefaultExifToolOptions} for more details about how
|
|
422
|
+
* this instance is configured.
|
|
415
423
|
*/
|
|
416
424
|
exports.exiftool = new ExifTool();
|
|
417
425
|
//# sourceMappingURL=ExifTool.js.map
|
package/dist/ExifTool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifTool.js","sourceRoot":"","sources":["../src/ExifTool.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ExifTool.js","sourceRoot":"","sources":["../src/ExifTool.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
import * as bc from "batch-cluster";
|
|
3
3
|
import { geoTz } from "./GeoTz";
|
|
4
4
|
import { IgnorableError } from "./IgnorableError";
|
|
5
|
+
import { Tags } from "./Tags";
|
|
6
|
+
/**
|
|
7
|
+
* Options for the {@link ExifTool} constructor.
|
|
8
|
+
*
|
|
9
|
+
* Defaults are defined in {@link DefaultExifToolOptions}.
|
|
10
|
+
*/
|
|
5
11
|
export interface ExifToolOptions extends bc.BatchClusterOptions, bc.BatchProcessOptions, bc.ChildProcessFactory {
|
|
6
12
|
/**
|
|
7
13
|
* The maximum number of ExifTool child processes to spawn when load merits.
|
|
@@ -10,28 +16,28 @@ export interface ExifToolOptions extends bc.BatchClusterOptions, bc.BatchProcess
|
|
|
10
16
|
*/
|
|
11
17
|
maxProcs: number;
|
|
12
18
|
/**
|
|
13
|
-
* The maximum number of requests a given ExifTool process will service
|
|
14
|
-
* being retired.
|
|
19
|
+
* The maximum number of requests a given ExifTool process will service
|
|
20
|
+
* before being retired.
|
|
15
21
|
*
|
|
16
22
|
* Defaults to 500, to balance performance with memory usage.
|
|
17
23
|
*/
|
|
18
24
|
maxTasksPerProcess: number;
|
|
19
25
|
/**
|
|
20
26
|
* Spawning new ExifTool processes must not take longer than
|
|
21
|
-
*
|
|
22
|
-
* Be pessimistic here--windows can regularly
|
|
23
|
-
*
|
|
24
|
-
* less than 100ms.
|
|
27
|
+
* {@link spawnTimeoutMillis} milliseconds before the child process is timed
|
|
28
|
+
* out and a new attempt is made. Be pessimistic here--windows can regularly
|
|
29
|
+
* take several seconds to spin up a process, thanks to antivirus
|
|
30
|
+
* shenanigans. This can't be set to a value less than 100ms.
|
|
25
31
|
*
|
|
26
32
|
* Defaults to 30 seconds, to accommodate slow Windows machines.
|
|
27
33
|
*/
|
|
28
34
|
spawnTimeoutMillis: number;
|
|
29
35
|
/**
|
|
30
|
-
* If requests to ExifTool take longer than this,
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
36
|
+
* If requests to ExifTool take longer than this, presume the underlying
|
|
37
|
+
* process is dead and we should restart the task. This can't be set to a
|
|
38
|
+
* value less than 10ms, and really should be set to at more than a second
|
|
39
|
+
* unless `taskRetries` is sufficiently large or all writes will be to a
|
|
40
|
+
* fast local disk. Defaults to 10 seconds.
|
|
35
41
|
*/
|
|
36
42
|
taskTimeoutMillis: number;
|
|
37
43
|
/**
|
|
@@ -48,8 +54,9 @@ export interface ExifToolOptions extends bc.BatchClusterOptions, bc.BatchProcess
|
|
|
48
54
|
*/
|
|
49
55
|
taskRetries: number;
|
|
50
56
|
/**
|
|
51
|
-
* Allows for non-standard paths to ExifTool. Defaults to the perl or
|
|
52
|
-
* binaries provided by `exiftool-vendored.pl` or
|
|
57
|
+
* Allows for non-standard paths to ExifTool. Defaults to the perl or
|
|
58
|
+
* windows binaries provided by `exiftool-vendored.pl` or
|
|
59
|
+
* `exiftool-vendored.exe`.
|
|
53
60
|
*/
|
|
54
61
|
exiftoolPath: string;
|
|
55
62
|
/**
|
|
@@ -64,7 +71,8 @@ export interface ExifToolOptions extends bc.BatchClusterOptions, bc.BatchProcess
|
|
|
64
71
|
* Should ExifTool use MWG (Metadata Working Group) composite tags for
|
|
65
72
|
* reading and writing tags?
|
|
66
73
|
*
|
|
67
|
-
* ExifTool recommends this to be set to true.
|
|
74
|
+
* ExifTool recommends this to be set to true. This defaults to `false` to
|
|
75
|
+
* maintain consistency with prior versions.
|
|
68
76
|
*
|
|
69
77
|
* Note that this can result in many tag value differences from
|
|
70
78
|
* `ExifTool.read`, and makes `ExifTool.write` write to "synonymous" MWG
|
|
@@ -80,8 +88,9 @@ export interface ExifToolOptions extends bc.BatchClusterOptions, bc.BatchProcess
|
|
|
80
88
|
* If you're using tag values only for human consumption, you may want to
|
|
81
89
|
* leave this blank.
|
|
82
90
|
*
|
|
83
|
-
* The default includes "*Duration*",
|
|
84
|
-
*
|
|
91
|
+
* The default includes "*Duration*", {@link Tags.GPSAltitude},
|
|
92
|
+
* {@link Tags.GPSLatitude}, {@link Tags.GPSLongitude},
|
|
93
|
+
* {@link Tags.GPSPosition}, and {@link Tags.Orientation}.
|
|
85
94
|
*/
|
|
86
95
|
numericTags: string[];
|
|
87
96
|
/**
|
|
@@ -108,30 +117,44 @@ export interface ExifToolOptions extends bc.BatchClusterOptions, bc.BatchProcess
|
|
|
108
117
|
defaultVideosToUTC: boolean;
|
|
109
118
|
/**
|
|
110
119
|
* Should we try to backfill timezones for date-times that don't have them?
|
|
111
|
-
* If set to `true`, and
|
|
112
|
-
* backfilling timezones for date-times that are UTC, as well.
|
|
120
|
+
* If set to `true`, and {@link defaultVideosToUTC} is also `true`, we'll
|
|
121
|
+
* try backfilling timezones for date-times that are UTC, as well.
|
|
113
122
|
*
|
|
114
123
|
* Setting this to `false` removes **all** timezone inference--only those
|
|
115
|
-
* date-times with an explicit offset will have a defined timezone.
|
|
116
|
-
*
|
|
117
|
-
*
|
|
124
|
+
* date-times with an explicit offset will have a defined timezone.
|
|
125
|
+
*
|
|
126
|
+
* Prior versions of exiftool-vendored would use the file's `.tz` as a
|
|
127
|
+
* backstop even if this was set to `false`.
|
|
118
128
|
*
|
|
119
129
|
* As of version 23, this now defaults to `true`, as it's more likely to be
|
|
120
130
|
* what people expect.
|
|
121
131
|
*/
|
|
122
132
|
backfillTimezones: boolean;
|
|
123
133
|
/**
|
|
124
|
-
* We always look at TimeZone, OffsetTime,
|
|
125
|
-
*
|
|
134
|
+
* We always look at {@link Tags.TimeZone}, {@link Tags.OffsetTime},
|
|
135
|
+
* {@link Tags.TimeZoneOffset}, {@link Tags.OffsetTimeOriginal},
|
|
136
|
+
* {@link Tags.OffsetTimeDigitized}, and GPS metadata to infer the timezone.
|
|
126
137
|
*
|
|
127
|
-
* If these strategies fail,
|
|
128
|
-
*
|
|
129
|
-
*
|
|
138
|
+
* If these strategies fail, and this is enabled, we'll try to infer the
|
|
139
|
+
* timezone from non-UTC datestamps included in the
|
|
140
|
+
* {@link inferTimezoneFromDatestampTags} value.
|
|
130
141
|
*
|
|
131
142
|
* This defaults to false as it both retains prior behavior and means fewer
|
|
132
143
|
* "fuzzy" heuristics are enabled by default.
|
|
133
144
|
*/
|
|
134
145
|
inferTimezoneFromDatestamps: boolean;
|
|
146
|
+
/**
|
|
147
|
+
* This is the list of tag names that will be used to infer the timezone as
|
|
148
|
+
* a backstop, if no explicit timezone is found in metadata. Note that
|
|
149
|
+
* datestamps with UTC offsets are ignored, as they are frequently
|
|
150
|
+
* incorrectly set.
|
|
151
|
+
*
|
|
152
|
+
* This setting is only in play if {@link inferTimezoneFromDatestamps} has
|
|
153
|
+
* been overridden to be `true`.
|
|
154
|
+
*
|
|
155
|
+
* This defaults to {@link CapturedAtTagNames}
|
|
156
|
+
*/
|
|
157
|
+
inferTimezoneFromDatestampTags: (keyof Tags)[];
|
|
135
158
|
/**
|
|
136
159
|
* `ExifTool` has a shebang line that assumes a valid `perl` is installed at
|
|
137
160
|
* `/usr/bin/perl`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifToolOptions.js","sourceRoot":"","sources":["../src/ExifToolOptions.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ExifToolOptions.js","sourceRoot":"","sources":["../src/ExifToolOptions.ts"],"names":[],"mappings":";;;AAoOA,SAAgB,uBAAuB,CAErC,OAAU;IACV,IAAI,OAAO,CAAC,aAAa,IAAI,IAAI,IAAI,OAAO,CAAC,mBAAmB,IAAI,IAAI,EAAE;QACxE,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;KACpE;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAPD,0DAOC"}
|
package/dist/Maybe.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export type Maybe<T> = T | undefined;
|
|
2
2
|
export type MaybeNull<T> = Maybe<T> | null;
|
|
3
3
|
export declare function map<T, U>(maybeT: MaybeNull<T>, f: (t: T) => U): Maybe<U>;
|
|
4
|
+
export declare function map2<A, B, U>(a: MaybeNull<A>, b: MaybeNull<B>, f: (a: A, b: B) => U): Maybe<U>;
|
|
4
5
|
export declare function first<T, U>(iter: Iterable<Maybe<T>>, f: (t: T) => Maybe<U>): Maybe<U>;
|
|
5
6
|
export declare function firstDefinedThunk<T>(iter: Iterable<() => Maybe<T>>): Maybe<T>;
|
|
6
7
|
/**
|
package/dist/Maybe.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.denull = exports.firstDefinedThunk = exports.first = exports.map = void 0;
|
|
3
|
+
exports.denull = exports.firstDefinedThunk = exports.first = exports.map2 = exports.map = void 0;
|
|
4
4
|
function map(maybeT, f) {
|
|
5
5
|
return maybeT == null ? undefined : f(maybeT);
|
|
6
6
|
}
|
|
7
7
|
exports.map = map;
|
|
8
|
+
function map2(a, b, f) {
|
|
9
|
+
return a == null || b == null ? undefined : f(a, b);
|
|
10
|
+
}
|
|
11
|
+
exports.map2 = map2;
|
|
8
12
|
function first(iter, f) {
|
|
9
13
|
for (const t of iter) {
|
|
10
14
|
if (t != null) {
|
package/dist/Maybe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Maybe.js","sourceRoot":"","sources":["../src/Maybe.ts"],"names":[],"mappings":";;;AAGA,SAAgB,GAAG,CAAO,MAAoB,EAAE,CAAc;IAC5D,OAAO,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAC/C,CAAC;AAFD,kBAEC;AAED,SAAgB,KAAK,CACnB,IAAwB,EACxB,CAAqB;IAErB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;QACpB,IAAI,CAAC,IAAI,IAAI,EAAE;YACb,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YACd,IAAI,CAAC,IAAI,IAAI;gBAAE,OAAO,CAAC,CAAA;SACxB;KACF;IACD,OAAM;AACR,CAAC;AAXD,sBAWC;AAED,SAAgB,iBAAiB,CAAI,IAA8B;IACjE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;QACpB,MAAM,MAAM,GAAG,CAAC,EAAE,CAAA;QAClB,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,MAAM,CAAA;KAClC;IACD,OAAM;AACR,CAAC;AAND,8CAMC;AAED;;GAEG;AACH,SAAgB,MAAM,CAAI,CAAW;IACnC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AAClC,CAAC;AAFD,wBAEC"}
|
|
1
|
+
{"version":3,"file":"Maybe.js","sourceRoot":"","sources":["../src/Maybe.ts"],"names":[],"mappings":";;;AAGA,SAAgB,GAAG,CAAO,MAAoB,EAAE,CAAc;IAC5D,OAAO,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAC/C,CAAC;AAFD,kBAEC;AAED,SAAgB,IAAI,CAClB,CAAe,EACf,CAAe,EACf,CAAoB;IAEpB,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACrD,CAAC;AAND,oBAMC;AAED,SAAgB,KAAK,CACnB,IAAwB,EACxB,CAAqB;IAErB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;QACpB,IAAI,CAAC,IAAI,IAAI,EAAE;YACb,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YACd,IAAI,CAAC,IAAI,IAAI;gBAAE,OAAO,CAAC,CAAA;SACxB;KACF;IACD,OAAM;AACR,CAAC;AAXD,sBAWC;AAED,SAAgB,iBAAiB,CAAI,IAA8B;IACjE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;QACpB,MAAM,MAAM,GAAG,CAAC,EAAE,CAAA;QAClB,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,MAAM,CAAA;KAClC;IACD,OAAM;AACR,CAAC;AAND,8CAMC;AAED;;GAEG;AACH,SAAgB,MAAM,CAAI,CAAW;IACnC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AAClC,CAAC;AAFD,wBAEC"}
|
package/dist/ReadTask.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export declare const DefaultReadTaskOptions: {
|
|
|
9
9
|
readonly defaultVideosToUTC: boolean;
|
|
10
10
|
readonly backfillTimezones: boolean;
|
|
11
11
|
readonly inferTimezoneFromDatestamps: boolean;
|
|
12
|
+
readonly inferTimezoneFromDatestampTags: (keyof Tags)[];
|
|
12
13
|
readonly geoTz: typeof import("./GeoTz").geoTz;
|
|
13
14
|
readonly optionalArgs: string[];
|
|
14
15
|
};
|
package/dist/ReadTask.js
CHANGED
|
@@ -27,7 +27,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
27
27
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
28
28
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
29
29
|
};
|
|
30
|
-
var _ReadTask_instances, _ReadTask_isVideo, _ReadTask_defaultToUTC, _ReadTask_tagName,
|
|
30
|
+
var _ReadTask_instances, _ReadTask_isVideo, _ReadTask_defaultToUTC, _ReadTask_tagName, _ReadTask_parseTags, _ReadTask_extractLatLon, _ReadTask_latlon, _ReadTask_geoTz, _ReadTask_extractTzOffset, _ReadTask_parseTag;
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
32
|
exports.ReadTask = exports.DefaultReadTaskOptions = exports.nullish = void 0;
|
|
33
33
|
const batch_cluster_1 = require("batch-cluster");
|
|
@@ -41,7 +41,6 @@ const ExifTime_1 = require("./ExifTime");
|
|
|
41
41
|
const ExifToolOptions_1 = require("./ExifToolOptions");
|
|
42
42
|
const ExifToolTask_1 = require("./ExifToolTask");
|
|
43
43
|
const FilenameCharsetArgs_1 = require("./FilenameCharsetArgs");
|
|
44
|
-
const FirstDateTime_1 = require("./FirstDateTime");
|
|
45
44
|
const Lazy_1 = require("./Lazy");
|
|
46
45
|
const Maybe_1 = require("./Maybe");
|
|
47
46
|
const Number_1 = require("./Number");
|
|
@@ -66,7 +65,7 @@ function nullish(s) {
|
|
|
66
65
|
exports.nullish = nullish;
|
|
67
66
|
exports.DefaultReadTaskOptions = {
|
|
68
67
|
optionalArgs: [],
|
|
69
|
-
...(0, Pick_1.pick)(DefaultExifToolOptions_1.DefaultExifToolOptions, "numericTags", "useMWG", "includeImageDataMD5", "imageHashType", "defaultVideosToUTC", "backfillTimezones", "inferTimezoneFromDatestamps", "geoTz"),
|
|
68
|
+
...(0, Pick_1.pick)(DefaultExifToolOptions_1.DefaultExifToolOptions, "numericTags", "useMWG", "includeImageDataMD5", "imageHashType", "defaultVideosToUTC", "backfillTimezones", "inferTimezoneFromDatestamps", "inferTimezoneFromDatestampTags", "geoTz"),
|
|
70
69
|
};
|
|
71
70
|
const MaybeDateOrTimeRe = /when|date|time|subsec|creat|modif/i;
|
|
72
71
|
class ReadTask extends ExifToolTask_1.ExifToolTask {
|
|
@@ -180,63 +179,19 @@ _ReadTask_extractLatLon = new WeakMap(), _ReadTask_geoTz = new WeakMap(), _ReadT
|
|
|
180
179
|
}, _ReadTask_tagName = function _ReadTask_tagName(k) {
|
|
181
180
|
var _a;
|
|
182
181
|
return this.degroup ? (_a = k.split(":")[1]) !== null && _a !== void 0 ? _a : k : k;
|
|
183
|
-
}, _ReadTask_maybeSetZone = function _ReadTask_maybeSetZone(edt, candidates) {
|
|
184
|
-
if (!edt.inferredZone && edt.hasZone)
|
|
185
|
-
return edt;
|
|
186
|
-
if (this.tz != null)
|
|
187
|
-
return edt.setZone(this.tz);
|
|
188
|
-
for (const src of candidates) {
|
|
189
|
-
const result = edt.maybeMatchZone(src);
|
|
190
|
-
if (result != null) {
|
|
191
|
-
return result;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
return;
|
|
195
182
|
}, _ReadTask_parseTags = function _ReadTask_parseTags() {
|
|
196
|
-
var _a;
|
|
197
183
|
__classPrivateFieldGet(this, _ReadTask_extractLatLon, "f").call(this);
|
|
198
184
|
__classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_extractTzOffset).call(this);
|
|
199
185
|
(0, Maybe_1.map)(this.tz, (ea) => (this.tags.tz = ea));
|
|
200
186
|
(0, Maybe_1.map)(this.tzSource, (ea) => (this.tags.tzSource = ea));
|
|
201
187
|
// avoid casting `this.tags as any` everywhere:
|
|
202
188
|
const tags = this.tags;
|
|
203
|
-
const datesWithTz = [];
|
|
204
|
-
// two passes: one to parse dates, and the next to possibly set timezones.
|
|
205
189
|
for (const [key, value] of Object.entries(this._raw)) {
|
|
206
190
|
const k = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_tagName).call(this, key);
|
|
207
191
|
const v = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_parseTag).call(this, k, value);
|
|
208
|
-
if (v instanceof ExifDateTime_1.ExifDateTime &&
|
|
209
|
-
// Don't backfill from `stat()` dates, as they may include the system
|
|
210
|
-
// zone:
|
|
211
|
-
!key.startsWith("File") &&
|
|
212
|
-
v.hasZone &&
|
|
213
|
-
// Don't backfill from inferred zones:
|
|
214
|
-
v.inferredZone !== true &&
|
|
215
|
-
// Don't backfill from UTC tags:
|
|
216
|
-
!isUtcTagName(key)) {
|
|
217
|
-
datesWithTz.push(v);
|
|
218
|
-
}
|
|
219
192
|
// Note that we set `key` (which may include a group prefix):
|
|
220
193
|
tags[key] = v;
|
|
221
194
|
}
|
|
222
|
-
if (this.options.backfillTimezones === true) {
|
|
223
|
-
// prefer non-UTC offsets (UTC may be incorrect):
|
|
224
|
-
const candidates = (0, Array_1.sortBy)(datesWithTz, (ea) => { var _a; return -Math.abs((_a = ea.tzoffsetMinutes) !== null && _a !== void 0 ? _a : 0); });
|
|
225
|
-
for (const [key, value] of Object.entries(tags)) {
|
|
226
|
-
if (
|
|
227
|
-
// we don't backfill ExifTime zones, as we don't know for sure what
|
|
228
|
-
// day they are for, and if the zone isn't fixed, that would be an
|
|
229
|
-
// issue. (We _could_ set ExifTime zones if we knew the zone was
|
|
230
|
-
// fixed, but that's a later, low-priority TODO).
|
|
231
|
-
value instanceof ExifDateTime_1.ExifDateTime &&
|
|
232
|
-
// Don't backfill dates from `stat`:
|
|
233
|
-
!key.startsWith("File") &&
|
|
234
|
-
// Don't backfill UTC tags:
|
|
235
|
-
!isUtcTagName(key)) {
|
|
236
|
-
tags[key] = (_a = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_maybeSetZone).call(this, value, candidates)) !== null && _a !== void 0 ? _a : value;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
195
|
if (this.errors.length > 0)
|
|
241
196
|
this.tags.errors = this.errors;
|
|
242
197
|
return tags;
|
|
@@ -268,36 +223,12 @@ _ReadTask_extractLatLon = new WeakMap(), _ReadTask_geoTz = new WeakMap(), _ReadT
|
|
|
268
223
|
(0, Maybe_1.map)((0, Maybe_1.firstDefinedThunk)([
|
|
269
224
|
// If there is an explicit TimeZone tag (which is rare), defer to that
|
|
270
225
|
// before defaulting to UTC for videos:
|
|
271
|
-
() =>
|
|
272
|
-
const tz = (0, Timezones_1.extractTzOffsetFromTags)(this._rawDegrouped, this.options);
|
|
273
|
-
// If this tz offset matches the GPS zone, use the GPS zone name (like "America/Los_Angeles") instead of the offset.
|
|
274
|
-
const z = (0, Timezones_1.normalizeZone)(tz === null || tz === void 0 ? void 0 : tz.tz);
|
|
275
|
-
if (tz != null && z != null) {
|
|
276
|
-
const geoTz = __classPrivateFieldGet(this, _ReadTask_geoTz, "f").call(this);
|
|
277
|
-
if (geoTz != null) {
|
|
278
|
-
const edt = (0, FirstDateTime_1.firstDateTime)(this._rawDegrouped);
|
|
279
|
-
if (edt != null) {
|
|
280
|
-
const ts = edt.toMillis();
|
|
281
|
-
const zOffset = z.offset(ts);
|
|
282
|
-
const geoTzOffset = geoTz.offset(ts);
|
|
283
|
-
if (zOffset === geoTzOffset) {
|
|
284
|
-
return {
|
|
285
|
-
tz: geoTz.name,
|
|
286
|
-
src: tz.src + " & GPSLatitude/GPSLongitude",
|
|
287
|
-
};
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
// nope, no GPS, just use the minutes-offset zone format:
|
|
293
|
-
return tz;
|
|
294
|
-
},
|
|
295
|
-
// If lat/lon is valid, use the tzlookup library, as it will be a proper
|
|
296
|
-
// Zone name (like "America/New_York"), rather than just an hour offset.
|
|
226
|
+
() => (0, Timezones_1.extractTzOffsetFromTags)(this._rawDegrouped),
|
|
297
227
|
() => (0, Maybe_1.map)(__classPrivateFieldGet(this, _ReadTask_geoTz, "f").call(this), (ea) => ({
|
|
298
228
|
tz: ea.name,
|
|
299
229
|
src: "GPSLatitude/GPSLongitude",
|
|
300
230
|
})),
|
|
231
|
+
() => (0, Timezones_1.extractTzOffsetFromDatestamps)(this._rawDegrouped, this.options),
|
|
301
232
|
// See https://github.com/photostructure/exiftool-vendored.js/issues/113
|
|
302
233
|
// and https://github.com/photostructure/exiftool-vendored.js/issues/156
|
|
303
234
|
// Videos are frequently encoded in UTC, but don't include the
|
|
@@ -355,9 +286,19 @@ _ReadTask_extractLatLon = new WeakMap(), _ReadTask_geoTz = new WeakMap(), _ReadT
|
|
|
355
286
|
// Time-only tags have "time" but not "date" in their name:
|
|
356
287
|
const keyIncludesTime = /time/i.test(tagName);
|
|
357
288
|
const keyIncludesDate = /date/i.test(tagName);
|
|
358
|
-
|
|
289
|
+
const result = (_c = (_b = (_a = (keyIncludesTime || keyIncludesDate
|
|
359
290
|
? ExifDateTime_1.ExifDateTime.from(value, tz)
|
|
360
|
-
: undefined)) !== null && _a !== void 0 ? _a : (keyIncludesTime ? ExifTime_1.ExifTime.fromEXIF(value) : undefined)) !== null && _b !== void 0 ? _b : (keyIncludesDate ? ExifDate_1.ExifDate.from(value) : undefined)) !== null && _c !== void 0 ? _c : value
|
|
291
|
+
: undefined)) !== null && _a !== void 0 ? _a : (keyIncludesTime ? ExifTime_1.ExifTime.fromEXIF(value) : undefined)) !== null && _b !== void 0 ? _b : (keyIncludesDate ? ExifDate_1.ExifDate.from(value) : undefined)) !== null && _c !== void 0 ? _c : value;
|
|
292
|
+
if (this.options.backfillTimezones &&
|
|
293
|
+
result != null &&
|
|
294
|
+
this.tz != null &&
|
|
295
|
+
result instanceof ExifDateTime_1.ExifDateTime &&
|
|
296
|
+
__classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_defaultToUTC).call(this) &&
|
|
297
|
+
!isUtcTagName(tagName) &&
|
|
298
|
+
true === result.inferredZone) {
|
|
299
|
+
return result.setZone(this.tz);
|
|
300
|
+
}
|
|
301
|
+
return result;
|
|
361
302
|
}
|
|
362
303
|
}
|
|
363
304
|
// Trust that ExifTool rendered the value with the correct type in JSON:
|