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 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", "DateTimeOriginal", "SubSecCreateDate", "CreateDate", "SubSecMediaCreateDate", "MediaCreateDate", "DateTimeCreated"];
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":";;;AAAa,QAAA,kBAAkB,GAAG;IAChC,wBAAwB;IACxB,kBAAkB;IAClB,kBAAkB;IAClB,YAAY;IACZ,uBAAuB;IACvB,iBAAiB;IACjB,iBAAiB;CACT,CAAA"}
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;AAEU,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,KAAK,EAAE,aAAK;IACZ,gBAAgB,EAAE,mCAAkB;CACrC,CAAC,CAAA"}
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, _b, _c;
113
- return (__classPrivateFieldSet(this, _ExifTime_z, (_a = __classPrivateFieldGet(this, _ExifTime_z, "f")) !== null && _a !== void 0 ? _a : ((_c = (_b = (0, Timezones_1.normalizeZone)(this.zone)) === null || _b === void 0 ? void 0 : _b.formatOffset(Date.now(), "short")) !== null && _c !== void 0 ? _c : ""), "f"));
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
@@ -1 +1 @@
1
- {"version":3,"file":"ExifTime.js","sourceRoot":"","sources":["../src/ExifTime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iCAAmD;AACnD,yCAA0C;AAE1C,qCAA0C;AAC1C,+CAAmE;AACnE,2CAAwD;AAExD;;GAEG;AACH,MAAa,QAAQ;IACnB,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,WAA2B;QACvD,MAAM,CAAC,GAAG,IAAA,YAAG,EAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;QAC1B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAC1B,MAAM,MAAM,GAAG,IAAA,2BAAa,EAAC,IAAI,EAAE,IAAA,yBAAW,EAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QAChE,IAAI,MAAM,IAAI,IAAI,EAAE;YAClB,OAAO,IAAI,CAAC,YAAY,CACtB,MAAM,CAAC,EAAE,EACT,IAAI,EACJ,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,uBAAW,EAAC,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EACpE,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,iBAAiB,CACzB,CAAA;SACF;QACD,OAAM;IACR,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,EAAmB,EACnB,QAAiB,EACjB,IAAa,EACb,YAAsB,EACtB,iBAA2B;QAE3B,OAAO,CAAC,IAAA,wBAAa,EAAC,EAAE,CAAC;YACvB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,QAAQ,CACV,EAAE,CAAC,IAAI,EACP,EAAE,CAAC,MAAM,EACT,EAAE,CAAC,MAAM,EACT,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAC9C,QAAQ,EACR,IAAI,EACJ,YAAY,CACb,CAAA;IACP,CAAC;IAMD,YACW,IAAY,EACZ,MAAc,EACd,MAAc,EACd,WAAoB,EACpB,QAAiB,EAC1B,QAAwB,EACf,YAAsB;;QANtB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,gBAAW,GAAX,WAAW,CAAS;QACpB,aAAQ,GAAR,QAAQ,CAAS;QAEjB,iBAAY,GAAZ,YAAY,CAAU;QAXjC,+BAAc;QACd,8BAAkB;QAYhB,IAAI,CAAC,IAAI,GAAG,IAAA,uBAAW,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;IACvC,CAAC;IAED,UAAU;;QACR,OAAO,CAAC,mIAAa,gBAAQ,CAAC,UAAU,CACtC;YACE,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,EACD;YACE,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CACF,MAAA,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAA;IAC1B,CAAC;IAWD,QAAQ;QACN,OAAO,CACL,IAAA,aAAI,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACnD,uBAAA,IAAI,6CAAQ,MAAZ,IAAI,CAAU;YACd,uBAAA,IAAI,gDAAW,MAAf,IAAI,CAAa,CAClB,CAAA;IACH,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAED,OAAO,CAAC,IAAmB,EAAE,IAAkB;QAC7C,MAAM,EAAE,GAAG,IAAA,qBAAO,EAAC;YACjB,IAAI;YACJ,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE;YACtB,UAAU,EAAE,IAAI,CAAC,OAAO;YACxB,IAAI;SACL,CAAC,CAAA;QACF,OAAO,QAAQ,CAAC,YAAY,CAC1B,EAAE,EACF,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,WAAW,IAAI,IAAI,CACzB,CAAA;IACH,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAA;IACH,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAoC;QAClD,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,YAAY,CAClB,CAAA;IACH,CAAC;CACF;AA/ID,4BA+IC;;IAhEG,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAA,aAAI,EAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AACrE,CAAC;;IAGC,OAAO,CAAC,kIACN,MAAA,MAAA,IAAA,yBAAa,EAAC,IAAI,CAAC,IAAI,CAAC,0CAAE,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,mCAAI,EAAE,OAAA,CAAC,CAAA;AACtE,CAAC"}
1
+ {"version":3,"file":"ExifTime.js","sourceRoot":"","sources":["../src/ExifTime.ts"],"names":[],"mappings":"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"}
@@ -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 vendored running instance of ExifTool.
69
+ * Manages delegating calls to a cluster of ExifTool child processes.
69
70
  *
70
- * Instances should be shared: consider using the exported singleton
71
- * instance of this class, `exiftool`.
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 in order
290
- * to leverage a single running ExifTool process. As of v3.0, its `maxProcs` is
291
- * set to the number of CPUs on the current system; no more than `maxProcs`
292
- * instances of `exiftool` will be spawned. You may want to experiment with
293
- * smaller or larger values for `maxProcs`, depending on CPU and disk speed of
294
- * your system and performance tradeoffs.
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` value.
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 vendored running instance of ExifTool.
90
+ * Manages delegating calls to a cluster of ExifTool child processes.
89
91
  *
90
- * Instances should be shared: consider using the exported singleton
91
- * instance of this class, `exiftool`.
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 in order
407
- * to leverage a single running ExifTool process. As of v3.0, its `maxProcs` is
408
- * set to the number of CPUs on the current system; no more than `maxProcs`
409
- * instances of `exiftool` will be spawned. You may want to experiment with
410
- * smaller or larger values for `maxProcs`, depending on CPU and disk speed of
411
- * your system and performance tradeoffs.
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` value.
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
@@ -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 before
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
- * `spawnTimeoutMillis` millis before it times out and a new attempt is made.
22
- * Be pessimistic here--windows can regularly take several seconds to spin up
23
- * a process, thanks to antivirus shenanigans. This can't be set to a value
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
- * presume the underlying process is dead and we should restart the task. This
32
- * can't be set to a value less than 10ms, and really should be set to at more
33
- * than a second unless `taskRetries` is sufficiently large or all writes will
34
- * be to a fast local disk. Defaults to 10 seconds.
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 windows
52
- * binaries provided by `exiftool-vendored.pl` or `exiftool-vendored.exe`.
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*", "GPSAltitude", "GPSLatitude",
84
- * "GPSLongitude", "GPSPosition", and "Orientation".
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 `defaultVideosToUTC` is also `true`, we'll try
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. Prior
116
- * versions of exiftool-vendored would use the file's `.tz` as a backstop
117
- * even if this was set to `false`.
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, TimeZoneOffset, and GPS metadata
125
- * to infer the timezone.
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, can we infer a timezone from any non-UTC
128
- * datestamp whose tag starts with "Creat" and includes an offset? (This
129
- * means CreateDateSubSec, CreateDate, and CreationDate will be considered).
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":";;;AA4MA,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"}
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"}
@@ -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, _ReadTask_maybeSetZone, _ReadTask_parseTags, _ReadTask_extractLatLon, _ReadTask_latlon, _ReadTask_geoTz, _ReadTask_extractTzOffset, _ReadTask_parseTag;
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
- return ((_c = (_b = (_a = (keyIncludesTime || keyIncludesDate
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: