exiftool-vendored 28.8.0 → 29.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.
Files changed (63) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/SECURITY.md +1 -2
  3. package/dist/BinaryField.js +2 -0
  4. package/dist/BinaryField.js.map +1 -1
  5. package/dist/BinaryToBufferTask.js +5 -5
  6. package/dist/BinaryToBufferTask.js.map +1 -1
  7. package/dist/CoordinateParser.d.ts +38 -0
  8. package/dist/CoordinateParser.js +185 -0
  9. package/dist/CoordinateParser.js.map +1 -0
  10. package/dist/DateTime.js +4 -5
  11. package/dist/DateTime.js.map +1 -1
  12. package/dist/DefaultExifToolOptions.js +1 -3
  13. package/dist/DefaultExifToolOptions.js.map +1 -1
  14. package/dist/ErrorsAndWarnings.js +2 -2
  15. package/dist/ErrorsAndWarnings.js.map +1 -1
  16. package/dist/ExifDate.js +7 -2
  17. package/dist/ExifDate.js.map +1 -1
  18. package/dist/ExifDateTime.js +61 -64
  19. package/dist/ExifDateTime.js.map +1 -1
  20. package/dist/ExifTime.js +19 -26
  21. package/dist/ExifTime.js.map +1 -1
  22. package/dist/ExifTool.d.ts +1 -3
  23. package/dist/ExifTool.js +56 -57
  24. package/dist/ExifTool.js.map +1 -1
  25. package/dist/ExifToolTask.js +21 -26
  26. package/dist/ExifToolTask.js.map +1 -1
  27. package/dist/ExiftoolPath.js +7 -4
  28. package/dist/ExiftoolPath.js.map +1 -1
  29. package/dist/FirstDateTime.js +1 -1
  30. package/dist/FirstDateTime.js.map +1 -1
  31. package/dist/GPS.d.ts +24 -0
  32. package/dist/GPS.js +152 -0
  33. package/dist/GPS.js.map +1 -0
  34. package/dist/JSON.js +1 -1
  35. package/dist/JSON.js.map +1 -1
  36. package/dist/Number.d.ts +13 -0
  37. package/dist/Number.js +26 -0
  38. package/dist/Number.js.map +1 -1
  39. package/dist/ReadRawTask.js +3 -1
  40. package/dist/ReadRawTask.js.map +1 -1
  41. package/dist/ReadTask.js +189 -254
  42. package/dist/ReadTask.js.map +1 -1
  43. package/dist/RewriteAllTagsTask.js +2 -2
  44. package/dist/RewriteAllTagsTask.js.map +1 -1
  45. package/dist/String.d.ts +6 -2
  46. package/dist/String.js +7 -0
  47. package/dist/String.js.map +1 -1
  48. package/dist/Struct.js +1 -2
  49. package/dist/Struct.js.map +1 -1
  50. package/dist/Tags.d.ts +23 -23
  51. package/dist/TimeParsing.js +6 -8
  52. package/dist/TimeParsing.js.map +1 -1
  53. package/dist/Times.d.ts +6 -0
  54. package/dist/Times.js +7 -3
  55. package/dist/Times.js.map +1 -1
  56. package/dist/Timezones.d.ts +1 -1
  57. package/dist/Timezones.js +19 -24
  58. package/dist/Timezones.js.map +1 -1
  59. package/dist/VersionTask.js +1 -1
  60. package/dist/VersionTask.js.map +1 -1
  61. package/dist/WriteTask.js +38 -13
  62. package/dist/WriteTask.js.map +1 -1
  63. package/package.json +7 -7
package/dist/ReadTask.js CHANGED
@@ -22,18 +22,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
26
- if (kind === "m") throw new TypeError("Private method is not writable");
27
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
28
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
29
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
30
- };
31
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
32
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
33
- 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");
34
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
35
- };
36
- var _ReadTask_instances, _ReadTask_raw, _ReadTask_rawDegrouped, _ReadTask_tags, _ReadTask_isVideo, _ReadTask_defaultToUTC, _ReadTask_tagName, _ReadTask_parseTags, _ReadTask_lat, _ReadTask_lon, _ReadTask_extractTzOffsetFromGps, _ReadTask_extractGpsMetadata, _ReadTask_parseLocation, _ReadTask_tz, _ReadTask_extractTzOffset, _ReadTask_parseTag;
37
25
  Object.defineProperty(exports, "__esModule", { value: true });
38
26
  exports.ReadTask = exports.DefaultReadTaskOptions = exports.ReadTaskOptionFields = void 0;
39
27
  exports.nullish = nullish;
@@ -41,6 +29,7 @@ const batch_cluster_1 = require("batch-cluster");
41
29
  const _path = __importStar(require("node:path"));
42
30
  const Array_1 = require("./Array");
43
31
  const BinaryField_1 = require("./BinaryField");
32
+ const Boolean_1 = require("./Boolean");
44
33
  const DefaultExifToolOptions_1 = require("./DefaultExifToolOptions");
45
34
  const ErrorsAndWarnings_1 = require("./ErrorsAndWarnings");
46
35
  const ExifDate_1 = require("./ExifDate");
@@ -49,7 +38,7 @@ const ExifTime_1 = require("./ExifTime");
49
38
  const ExifToolOptions_1 = require("./ExifToolOptions");
50
39
  const ExifToolTask_1 = require("./ExifToolTask");
51
40
  const FilenameCharsetArgs_1 = require("./FilenameCharsetArgs");
52
- const GeolocationTags_1 = require("./GeolocationTags");
41
+ const GPS_1 = require("./GPS");
53
42
  const Lazy_1 = require("./Lazy");
54
43
  const Number_1 = require("./Number");
55
44
  const OnlyZerosRE_1 = require("./OnlyZerosRE");
@@ -95,6 +84,13 @@ exports.DefaultReadTaskOptions = {
95
84
  };
96
85
  const MaybeDateOrTimeRe = /when|date|time|subsec|creat|modif/i;
97
86
  class ReadTask extends ExifToolTask_1.ExifToolTask {
87
+ sourceFile;
88
+ args;
89
+ options;
90
+ degroup;
91
+ #raw = {};
92
+ #rawDegrouped = {};
93
+ #tags = {};
98
94
  /**
99
95
  * @param sourceFile the file to read
100
96
  * @param args the full arguments to pass to exiftool that take into account
@@ -102,121 +98,13 @@ class ReadTask extends ExifToolTask_1.ExifToolTask {
102
98
  */
103
99
  constructor(sourceFile, args, options) {
104
100
  super(args, options);
105
- _ReadTask_instances.add(this);
106
101
  this.sourceFile = sourceFile;
107
102
  this.args = args;
108
103
  this.options = options;
109
- _ReadTask_raw.set(this, {});
110
- _ReadTask_rawDegrouped.set(this, {});
111
- _ReadTask_tags.set(this, {}
112
- /**
113
- * @param sourceFile the file to read
114
- * @param args the full arguments to pass to exiftool that take into account
115
- * the flags in `options`
116
- */
117
- );
118
- _ReadTask_lat.set(this, (0, Lazy_1.lazy)(() => { var _a; return (_a = __classPrivateFieldGet(this, _ReadTask_extractGpsMetadata, "f").call(this)) === null || _a === void 0 ? void 0 : _a.lat; }));
119
- _ReadTask_lon.set(this, (0, Lazy_1.lazy)(() => { var _a; return (_a = __classPrivateFieldGet(this, _ReadTask_extractGpsMetadata, "f").call(this)) === null || _a === void 0 ? void 0 : _a.lon; }));
120
- _ReadTask_extractTzOffsetFromGps.set(this, (0, Lazy_1.lazy)(() => { var _a; return (_a = __classPrivateFieldGet(this, _ReadTask_extractGpsMetadata, "f").call(this)) === null || _a === void 0 ? void 0 : _a.tz; }));
121
- _ReadTask_extractGpsMetadata.set(this, (0, Lazy_1.lazy)(() => {
122
- let lat = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_parseLocation).call(this, {
123
- tagName: "GPSLatitude",
124
- positiveRef: "N",
125
- negativeRef: "S",
126
- maxValid: 90,
127
- });
128
- let lon = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_parseLocation).call(this, {
129
- tagName: "GPSLongitude",
130
- positiveRef: "E",
131
- negativeRef: "W",
132
- maxValid: 180,
133
- });
134
- let invalid = false;
135
- if (this.options.ignoreZeroZeroLatLon && lat === 0 && lon === 0) {
136
- lat = undefined;
137
- lon = undefined;
138
- invalid = true;
139
- }
140
- let tz;
141
- if (!invalid && !(0, String_1.blank)(__classPrivateFieldGet(this, _ReadTask_rawDegrouped, "f").GeolocationTimeZone)) {
142
- const geolocTz = (0, Timezones_1.normalizeZone)(__classPrivateFieldGet(this, _ReadTask_rawDegrouped, "f").GeolocationTimeZone);
143
- if (geolocTz != null) {
144
- tz = {
145
- tz: geolocTz.name,
146
- src: "GeolocationTimeZone",
147
- };
148
- }
149
- else {
150
- this.warnings.push("Failed to determine timezone from GeolocationTimeZone value: " +
151
- __classPrivateFieldGet(this, _ReadTask_rawDegrouped, "f").GeolocationTimeZone);
152
- }
153
- }
154
- if (tz == null && !invalid && lat != null && lon != null) {
155
- try {
156
- const geoTz = this.options.geoTz(lat, lon);
157
- const zone = (0, Timezones_1.normalizeZone)(geoTz);
158
- if (zone != null) {
159
- tz = {
160
- tz: zone.name,
161
- src: "GPSLatitude/GPSLongitude",
162
- };
163
- }
164
- }
165
- catch (error) {
166
- this.warnings.push("Failed to determine timezone from GPS coordinates: " + error);
167
- invalid = true;
168
- lat = undefined;
169
- lon = undefined;
170
- }
171
- }
172
- if (this.options.geolocation && invalid) {
173
- if (__classPrivateFieldGet(this, _ReadTask_tags, "f").GPSLatitude != null || __classPrivateFieldGet(this, _ReadTask_tags, "f").GPSLongitude != null) {
174
- // don't complain unless there was a GPS value:
175
- this.warnings.push("Invalid GPSLatitude or GPSLongitude. Deleting geolocation tags.");
176
- }
177
- for (const key of GeolocationTags_1.GeolocationTagNames) {
178
- delete __classPrivateFieldGet(this, _ReadTask_tags, "f")[key];
179
- delete __classPrivateFieldGet(this, _ReadTask_raw, "f")[key];
180
- delete __classPrivateFieldGet(this, _ReadTask_rawDegrouped, "f")[key];
181
- }
182
- }
183
- return {
184
- lat,
185
- lon,
186
- invalid,
187
- tz,
188
- };
189
- }));
190
- _ReadTask_tz.set(this, (0, Lazy_1.lazy)(() => { var _a; return (_a = __classPrivateFieldGet(this, _ReadTask_extractTzOffset, "f").call(this)) === null || _a === void 0 ? void 0 : _a.tz; }));
191
- _ReadTask_extractTzOffset.set(this, (0, Lazy_1.lazy)(() => {
192
- var _a, _b, _c, _d, _e;
193
- if (true === this.options.preferTimezoneInferenceFromGps) {
194
- const fromGps = __classPrivateFieldGet(this, _ReadTask_extractTzOffsetFromGps, "f").call(this);
195
- if (fromGps != null) {
196
- return fromGps;
197
- }
198
- }
199
- return ((_e = (_d = (_c = (_b = (_a = (0, Timezones_1.extractTzOffsetFromTags)(__classPrivateFieldGet(this, _ReadTask_rawDegrouped, "f"), this.options)) !== null && _a !== void 0 ? _a : __classPrivateFieldGet(this, _ReadTask_extractTzOffsetFromGps, "f").call(this)) !== null && _b !== void 0 ? _b : (0, Timezones_1.extractTzOffsetFromDatestamps)(__classPrivateFieldGet(this, _ReadTask_rawDegrouped, "f"), this.options)) !== null && _c !== void 0 ? _c :
200
- // See https://github.com/photostructure/exiftool-vendored.js/issues/113
201
- // and https://github.com/photostructure/exiftool-vendored.js/issues/156
202
- // Videos are frequently encoded in UTC, but don't include the
203
- // timezone offset in their datetime stamps.
204
- (__classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_defaultToUTC).call(this)
205
- ? {
206
- tz: "UTC",
207
- src: "defaultVideosToUTC",
208
- }
209
- : // not applicable:
210
- undefined)) !== null && _d !== void 0 ? _d :
211
- // This is a last-ditch estimation heuristic:
212
- (0, Timezones_1.extractTzOffsetFromUTCOffset)(__classPrivateFieldGet(this, _ReadTask_rawDegrouped, "f"))) !== null && _e !== void 0 ? _e :
213
- // No, really, this is the even worse than UTC offset heuristics:
214
- (0, Timezones_1.extractTzOffsetFromTimeStamp)(__classPrivateFieldGet(this, _ReadTask_rawDegrouped, "f"), this.options));
215
- }));
216
104
  // See https://github.com/photostructure/exiftool-vendored.js/issues/147#issuecomment-1642580118
217
105
  this.degroup = this.args.includes("-G");
218
- __classPrivateFieldSet(this, _ReadTask_tags, { SourceFile: sourceFile }, "f");
219
- __classPrivateFieldGet(this, _ReadTask_tags, "f").errors = this.errors;
106
+ this.#tags = { SourceFile: sourceFile };
107
+ this.#tags.errors = this.errors;
220
108
  }
221
109
  static for(filename, options) {
222
110
  const opts = (0, ExifToolOptions_1.handleDeprecatedOptions)({
@@ -252,7 +140,7 @@ class ReadTask extends ExifToolTask_1.ExifToolTask {
252
140
  // only exposed for tests
253
141
  parse(data, err) {
254
142
  try {
255
- __classPrivateFieldSet(this, _ReadTask_raw, JSON.parse(data)[0], "f");
143
+ this.#raw = JSON.parse(data)[0];
256
144
  }
257
145
  catch (jsonError) {
258
146
  // TODO: should restart exiftool?
@@ -261,159 +149,206 @@ class ReadTask extends ExifToolTask_1.ExifToolTask {
261
149
  err,
262
150
  jsonError,
263
151
  });
264
- throw err !== null && err !== void 0 ? err : jsonError;
152
+ throw err ?? jsonError;
265
153
  }
266
154
  // ExifTool does "humorous" things to paths, like flip path separators. resolve() undoes that.
267
- const SourceFile = _path.resolve(__classPrivateFieldGet(this, _ReadTask_raw, "f").SourceFile);
155
+ const SourceFile = _path.resolve(this.#raw.SourceFile);
268
156
  // Sanity check that the result is for the file we want:
269
157
  if (SourceFile !== this.sourceFile) {
270
158
  // Throw an error rather than add an errors string because this is *really* bad:
271
- throw new Error(`Internal error: unexpected SourceFile of ${__classPrivateFieldGet(this, _ReadTask_raw, "f").SourceFile} for file ${this.sourceFile}`);
159
+ throw new Error(`Internal error: unexpected SourceFile of ${this.#raw.SourceFile} for file ${this.sourceFile}`);
272
160
  }
273
- return __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_parseTags).call(this);
274
- }
275
- }
276
- exports.ReadTask = ReadTask;
277
- _ReadTask_raw = new WeakMap(), _ReadTask_rawDegrouped = new WeakMap(), _ReadTask_tags = new WeakMap(), _ReadTask_lat = new WeakMap(), _ReadTask_lon = new WeakMap(), _ReadTask_extractTzOffsetFromGps = new WeakMap(), _ReadTask_extractGpsMetadata = new WeakMap(), _ReadTask_tz = new WeakMap(), _ReadTask_extractTzOffset = new WeakMap(), _ReadTask_instances = new WeakSet(), _ReadTask_isVideo = function _ReadTask_isVideo() {
278
- var _a;
279
- return String((_a = __classPrivateFieldGet(this, _ReadTask_rawDegrouped, "f")) === null || _a === void 0 ? void 0 : _a.MIMEType).startsWith("video/");
280
- }, _ReadTask_defaultToUTC = function _ReadTask_defaultToUTC() {
281
- return __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_isVideo).call(this) && this.options.defaultVideosToUTC;
282
- }, _ReadTask_tagName = function _ReadTask_tagName(k) {
283
- var _a;
284
- return this.degroup ? ((_a = k.split(":")[1]) !== null && _a !== void 0 ? _a : k) : k;
285
- }, _ReadTask_parseTags = function _ReadTask_parseTags() {
286
- if (this.degroup) {
287
- __classPrivateFieldSet(this, _ReadTask_rawDegrouped, {}, "f");
288
- for (const [key, value] of Object.entries(__classPrivateFieldGet(this, _ReadTask_raw, "f"))) {
289
- const k = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_tagName).call(this, key);
290
- __classPrivateFieldGet(this, _ReadTask_rawDegrouped, "f")[k] = value;
291
- }
292
- }
293
- else {
294
- __classPrivateFieldSet(this, _ReadTask_rawDegrouped, __classPrivateFieldGet(this, _ReadTask_raw, "f"), "f");
295
- }
296
- // avoid casting `this.tags as any` for the rest of the function:
297
- const tags = __classPrivateFieldGet(this, _ReadTask_tags, "f");
298
- const tzSrc = __classPrivateFieldGet(this, _ReadTask_extractTzOffset, "f").call(this);
299
- if (tzSrc) {
300
- tags.tz = tzSrc.tz;
301
- tags.tzSource = tzSrc.src;
161
+ return this.#parseTags();
302
162
  }
303
- for (const [key, value] of Object.entries(__classPrivateFieldGet(this, _ReadTask_raw, "f"))) {
304
- const k = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_tagName).call(this, key);
305
- const v = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_parseTag).call(this, k, value);
306
- // Note that we set `key` (which may include a group prefix):
307
- tags[key] = v;
163
+ #isVideo() {
164
+ return String(this.#rawDegrouped?.MIMEType).startsWith("video/");
308
165
  }
309
- // we could `return {...tags, ...errorsAndWarnings(this, tags)}` but tags is
310
- // a chonky monster, and we don't want to double the work for the poor
311
- // garbage collector.
312
- const { errors, warnings } = (0, ErrorsAndWarnings_1.errorsAndWarnings)(this, tags);
313
- tags.errors = errors;
314
- tags.warnings = warnings;
315
- return tags;
316
- }, _ReadTask_parseLocation = function _ReadTask_parseLocation({ tagName, positiveRef, negativeRef, maxValid, }) {
317
- const tagValue = __classPrivateFieldGet(this, _ReadTask_rawDegrouped, "f")[tagName];
318
- const refKey = tagName + "Ref";
319
- const ref = __classPrivateFieldGet(this, _ReadTask_rawDegrouped, "f")[refKey];
320
- const result = (0, Number_1.toFloat)(tagValue);
321
- if (result == null) {
322
- return undefined;
166
+ #defaultToUTC() {
167
+ return this.#isVideo() && this.options.defaultVideosToUTC;
323
168
  }
324
- else if (Math.abs(result) > maxValid) {
325
- this.warnings.push(`Invalid ${tagName}: ${JSON.stringify(tagValue)}`);
326
- return undefined;
169
+ #tagName(k) {
170
+ return this.degroup ? k.split(":")[1] ?? k : k;
327
171
  }
328
- else if ((0, String_1.blank)(ref)) {
329
- // Videos may not have a GPSLatitudeRef or GPSLongitudeRef: if this is the case, assume the given sign is correct.
330
- return result;
331
- }
332
- else {
333
- // See https://github.com/photostructure/exiftool-vendored.js/issues/165
334
- // and https://www.exiftool.org/TagNames/GPS.html
335
- const expectedPositive = ref.toUpperCase().startsWith(positiveRef) || ((0, Number_1.isNumber)(ref) && ref >= 0);
336
- const expectedNegative = ref.toUpperCase().startsWith(negativeRef) || ((0, Number_1.isNumber)(ref) && ref < 0);
337
- if (expectedPositive && result < 0) {
338
- this.warnings.push(`Invalid ${tagName} or ${refKey}: expected ${ref} ${tagName} > 0 but got ${result}`);
172
+ #parseTags() {
173
+ if (this.degroup) {
174
+ this.#rawDegrouped = {};
175
+ for (const [key, value] of Object.entries(this.#raw)) {
176
+ const k = this.#tagName(key);
177
+ this.#rawDegrouped[k] = value;
178
+ }
339
179
  }
340
- else if (expectedNegative && result > 0) {
341
- this.warnings.push(`Invalid ${tagName} or ${refKey}: expected ${ref} ${tagName} < 0 but got ${result}`);
180
+ else {
181
+ this.#rawDegrouped = this.#raw;
342
182
  }
343
- return result;
344
- }
345
- }, _ReadTask_parseTag = function _ReadTask_parseTag(tagName, value) {
346
- var _a, _b, _c;
347
- if (nullish(value))
348
- return undefined;
349
- try {
350
- if (PassthroughTags.indexOf(tagName) >= 0) {
351
- return value;
183
+ // avoid casting `this.tags as any` for the rest of the function:
184
+ const tags = this.#tags;
185
+ // Must be run before extracting tz offset, to clear out invalid GPS
186
+ // GeolocationTimeZone
187
+ this.#extractGpsMetadata();
188
+ const tzSrc = this.#extractTzOffset();
189
+ if (tzSrc) {
190
+ tags.tz = tzSrc.tz;
191
+ tags.tzSource = tzSrc.src;
352
192
  }
353
- if (tagName === "GPSLatitude") {
354
- return __classPrivateFieldGet(this, _ReadTask_lat, "f").call(this);
193
+ for (const [key, value] of Object.entries(this.#raw)) {
194
+ const k = this.#tagName(key);
195
+ const v = this.#parseTag(k, value);
196
+ // Note that we set `key` (which may include a group prefix):
197
+ if (v != null)
198
+ tags[key] = v;
355
199
  }
356
- if (tagName === "GPSLongitude") {
357
- return __classPrivateFieldGet(this, _ReadTask_lon, "f").call(this);
200
+ // we could `return {...tags, ...errorsAndWarnings(this, tags)}` but tags is
201
+ // a chonky monster, and we don't want to double the work for the poor
202
+ // garbage collector.
203
+ const { errors, warnings } = (0, ErrorsAndWarnings_1.errorsAndWarnings)(this, tags);
204
+ tags.errors = errors;
205
+ tags.warnings = warnings;
206
+ return tags;
207
+ }
208
+ #extractGpsMetadata = (0, Lazy_1.lazy)(() => (0, GPS_1.parseGPSLocation)(this.#rawDegrouped, this.options));
209
+ #gpsIsInvalid = (0, Lazy_1.lazy)(() => this.#extractGpsMetadata()?.invalid ?? false);
210
+ #gpsResults = (0, Lazy_1.lazy)(() => this.#gpsIsInvalid() ? {} : this.#extractGpsMetadata()?.result ?? {});
211
+ #extractTzOffsetFromGps = (0, Lazy_1.lazy)(() => {
212
+ const gps = this.#extractGpsMetadata();
213
+ const lat = gps?.result?.GPSLatitude;
214
+ const lon = gps?.result?.GPSLongitude;
215
+ if (gps == null || gps.invalid === true || lat == null || lon == null)
216
+ return;
217
+ // First try GeolocationTimeZone:
218
+ const tz = (0, Timezones_1.normalizeZone)(this.#rawDegrouped.GeolocationTimeZone);
219
+ if (tz != null) {
220
+ return {
221
+ tz: tz.name,
222
+ src: "GeolocationTimeZone",
223
+ };
224
+ }
225
+ try {
226
+ const geoTz = this.options.geoTz(lat, lon);
227
+ const zone = (0, Timezones_1.normalizeZone)(geoTz);
228
+ if (zone != null) {
229
+ return {
230
+ tz: zone.name,
231
+ src: "GPSLatitude/GPSLongitude",
232
+ };
233
+ }
358
234
  }
359
- if (Array.isArray(value)) {
360
- return value.map((ea) => __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_parseTag).call(this, tagName, ea));
235
+ catch (error) {
236
+ this.warnings.push("Failed to determine timezone from GPS coordinates: " + error);
361
237
  }
362
- if (typeof value === "object") {
363
- const result = {};
364
- for (const [k, v] of Object.entries(value)) {
365
- result[k] = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_parseTag).call(this, tagName + "." + k, v);
238
+ return;
239
+ });
240
+ #tz = (0, Lazy_1.lazy)(() => this.#extractTzOffset()?.tz);
241
+ #extractTzOffset = (0, Lazy_1.lazy)(() => {
242
+ if (true === this.options.preferTimezoneInferenceFromGps) {
243
+ const fromGps = this.#extractTzOffsetFromGps();
244
+ if (fromGps != null) {
245
+ return fromGps;
366
246
  }
367
- return result;
368
247
  }
369
- if (typeof value === "string") {
370
- const b = BinaryField_1.BinaryField.fromRawValue(value);
371
- if (b != null)
372
- return b;
373
- if (MaybeDateOrTimeRe.test(tagName) &&
374
- // Reject date/time keys that are "0" or "00" (found in Canon
375
- // SubSecTime values)
376
- !OnlyZerosRE_1.OnlyZerosRE.test(value)) {
377
- // if #defaultToUTC() is true, _we actually think zoneless
378
- // datestamps are all in UTC_, rather than being in `this.tz` (which
379
- // may be from GPS or other heuristics). See issue #153.
380
- const tz = isUtcTagName(tagName) || __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_defaultToUTC).call(this)
381
- ? "UTC"
382
- : this.options.backfillTimezones
383
- ? __classPrivateFieldGet(this, _ReadTask_tz, "f").call(this)
384
- : undefined;
385
- // Time-only tags have "time" but not "date" in their name:
386
- const keyIncludesTime = /subsec|time/i.test(tagName);
387
- const keyIncludesDate = /date/i.test(tagName);
388
- const keyIncludesWhen = /when/i.test(tagName); // < ResourceEvent.When
389
- const result = (_c = (_b = (_a = (keyIncludesTime || keyIncludesDate || keyIncludesWhen
390
- ? ExifDateTime_1.ExifDateTime.from(value, tz)
391
- : undefined)) !== null && _a !== void 0 ? _a : (keyIncludesTime || keyIncludesWhen
392
- ? ExifTime_1.ExifTime.fromEXIF(value, tz)
393
- : undefined)) !== null && _b !== void 0 ? _b : (keyIncludesDate || keyIncludesWhen
394
- ? ExifDate_1.ExifDate.from(value)
395
- : undefined)) !== null && _c !== void 0 ? _c : value;
396
- const defaultTz = __classPrivateFieldGet(this, _ReadTask_tz, "f").call(this);
397
- if (this.options.backfillTimezones &&
398
- result != null &&
399
- defaultTz != null &&
400
- result instanceof ExifDateTime_1.ExifDateTime &&
401
- __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_defaultToUTC).call(this) &&
402
- !isUtcTagName(tagName) &&
403
- true === result.inferredZone) {
404
- return result.setZone(defaultTz);
248
+ return ((0, Timezones_1.extractTzOffsetFromTags)(this.#rawDegrouped, this.options) ??
249
+ this.#extractTzOffsetFromGps() ??
250
+ (0, Timezones_1.extractTzOffsetFromDatestamps)(this.#rawDegrouped, this.options) ??
251
+ // See https://github.com/photostructure/exiftool-vendored.js/issues/113
252
+ // and https://github.com/photostructure/exiftool-vendored.js/issues/156
253
+ // Videos are frequently encoded in UTC, but don't include the
254
+ // timezone offset in their datetime stamps.
255
+ (this.#defaultToUTC()
256
+ ? {
257
+ tz: "UTC",
258
+ src: "defaultVideosToUTC",
259
+ }
260
+ : // not applicable:
261
+ undefined) ??
262
+ // This is a last-ditch estimation heuristic:
263
+ (0, Timezones_1.extractTzOffsetFromUTCOffset)(this.#rawDegrouped) ??
264
+ // No, really, this is the even worse than UTC offset heuristics:
265
+ (0, Timezones_1.extractTzOffsetFromTimeStamp)(this.#rawDegrouped, this.options));
266
+ });
267
+ #parseTag(tagName, value) {
268
+ if (nullish(value))
269
+ return undefined;
270
+ try {
271
+ if (PassthroughTags.indexOf(tagName) >= 0) {
272
+ return value;
273
+ }
274
+ if (tagName.startsWith("GPS") || tagName.startsWith("Geolocation")) {
275
+ // If it's bad, strip off everything:
276
+ if (this.#gpsIsInvalid())
277
+ return undefined;
278
+ // If we parsed out a better value, use that:
279
+ const parsed = this.#gpsResults()[tagName];
280
+ if (parsed != null)
281
+ return parsed;
282
+ // Otherwise, parse the raw value like any other tag:
283
+ }
284
+ if (Array.isArray(value)) {
285
+ return value.map((ea) => this.#parseTag(tagName, ea));
286
+ }
287
+ if (typeof value === "object") {
288
+ const result = {};
289
+ for (const [k, v] of Object.entries(value)) {
290
+ result[k] = this.#parseTag(tagName + "." + k, v);
405
291
  }
406
292
  return result;
407
293
  }
294
+ if (typeof value === "string") {
295
+ const b = BinaryField_1.BinaryField.fromRawValue(value);
296
+ if (b != null)
297
+ return b;
298
+ if (/Valid$/.test(tagName)) {
299
+ const b = (0, Boolean_1.toBoolean)(value);
300
+ if (b != null)
301
+ return b;
302
+ }
303
+ if (MaybeDateOrTimeRe.test(tagName) &&
304
+ // Reject date/time keys that are "0" or "00" (found in Canon
305
+ // SubSecTime values)
306
+ !OnlyZerosRE_1.OnlyZerosRE.test(value)) {
307
+ // if #defaultToUTC() is true, _we actually think zoneless
308
+ // datestamps are all in UTC_, rather than being in `this.tz` (which
309
+ // may be from GPS or other heuristics). See issue #153.
310
+ const tz = isUtcTagName(tagName) || this.#defaultToUTC()
311
+ ? "UTC"
312
+ : this.options.backfillTimezones
313
+ ? this.#tz()
314
+ : undefined;
315
+ // Time-only tags have "time" but not "date" in their name:
316
+ const keyIncludesTime = /subsec|time/i.test(tagName);
317
+ const keyIncludesDate = /date/i.test(tagName);
318
+ const keyIncludesWhen = /when/i.test(tagName); // < ResourceEvent.When
319
+ const result = (keyIncludesTime || keyIncludesDate || keyIncludesWhen
320
+ ? ExifDateTime_1.ExifDateTime.from(value, tz)
321
+ : undefined) ??
322
+ (keyIncludesTime || keyIncludesWhen
323
+ ? ExifTime_1.ExifTime.fromEXIF(value, tz)
324
+ : undefined) ??
325
+ (keyIncludesDate || keyIncludesWhen
326
+ ? ExifDate_1.ExifDate.from(value)
327
+ : undefined) ??
328
+ value;
329
+ const defaultTz = this.#tz();
330
+ if (this.options.backfillTimezones &&
331
+ result != null &&
332
+ defaultTz != null &&
333
+ result instanceof ExifDateTime_1.ExifDateTime &&
334
+ this.#defaultToUTC() &&
335
+ !isUtcTagName(tagName) &&
336
+ true === result.inferredZone) {
337
+ return result.setZone(defaultTz);
338
+ }
339
+ return result;
340
+ }
341
+ }
342
+ // Trust that ExifTool rendered the value with the correct type in JSON:
343
+ return value;
344
+ }
345
+ catch (e) {
346
+ this.warnings.push(`Failed to parse ${tagName} with value ${JSON.stringify(value)}: ${e}`);
347
+ return value;
408
348
  }
409
- // Trust that ExifTool rendered the value with the correct type in JSON:
410
- return value;
411
- }
412
- catch (e) {
413
- this.warnings.push(`Failed to parse ${tagName} with value ${JSON.stringify(value)}: ${e}`);
414
- return value;
415
349
  }
416
- };
350
+ }
351
+ exports.ReadTask = ReadTask;
417
352
  function isUtcTagName(tagName) {
418
353
  return tagName.includes("UTC") || tagName.startsWith("GPS");
419
354
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ReadTask.js","sourceRoot":"","sources":["../src/ReadTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DA,0BAEC;AAjED,iDAAsC;AACtC,iDAAkC;AAClC,mCAA6B;AAC7B,+CAA2C;AAC3C,qEAAiE;AACjE,2DAAuD;AACvD,yCAAqC;AACrC,iDAA6C;AAC7C,yCAAqC;AACrC,uDAA4E;AAC5E,iDAA6C;AAC7C,+DAA+D;AAC/D,uDAAuD;AACvD,iCAA6B;AAE7B,qCAA4C;AAC5C,+CAA2C;AAC3C,iCAA6B;AAC7B,qCAA0C;AAE1C,2CAOoB;AAEpB;;;GAGG;AACH,MAAM,eAAe,GAAG;IACtB,iBAAiB;IACjB,eAAe;IACf,WAAW;IACX,UAAU;IACV,mBAAmB;CACpB,CAAA;AAEY,QAAA,oBAAoB,GAAG;IAClC,mBAAmB;IACnB,oBAAoB;IACpB,aAAa;IACb,OAAO;IACP,mBAAmB;IACnB,sBAAsB;IACtB,eAAe;IACf,qBAAqB;IACrB,6BAA6B;IAC7B,gCAAgC;IAChC,4BAA4B;IAC5B,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,iCAAiC;IACjC,gCAAgC;CACY,CAAA;AAE9C,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;AAE9C,SAAgB,OAAO,CAAC,CAAqB;IAC3C,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAA,iBAAQ,EAAC,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AACjE,CAAC;AAEY,QAAA,sBAAsB,GAAG;IACpC,GAAG,IAAA,WAAI,EAAC,+CAAsB,EAAE,GAAG,4BAAoB,CAAC;CACb,CAAA;AAI7C,MAAM,iBAAiB,GAAG,oCAAoC,CAAA;AAE9D,MAAa,QAAS,SAAQ,2BAAkB;IAM9C;;;;OAIG;IACH,YACW,UAAkB,EACT,IAAc,EACvB,OAAkC;QAE3C,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;;QAJX,eAAU,GAAV,UAAU,CAAQ;QACT,SAAI,GAAJ,IAAI,CAAU;QACvB,YAAO,GAAP,OAAO,CAA2B;QAZ7C,wBAAY,EAAE,EAAA;QACd,iCAAqB,EAAE,EAAA;QACd,yBAAc,EAAE;QAEzB;;;;WAIG;UANsB;QAiIzB,wBAAO,IAAA,WAAI,EAAgB,GAAG,EAAE,WAAC,OAAA,MAAA,uBAAA,IAAI,oCAAoB,MAAxB,IAAI,CAAsB,0CAAE,GAAG,CAAA,EAAA,CAAC,EAAA;QACjE,wBAAO,IAAA,WAAI,EAAgB,GAAG,EAAE,WAAC,OAAA,MAAA,uBAAA,IAAI,oCAAoB,MAAxB,IAAI,CAAsB,0CAAE,GAAG,CAAA,EAAA,CAAC,EAAA;QACjE,2CAA0B,IAAA,WAAI,EAC5B,GAAG,EAAE,WAAC,OAAA,MAAA,uBAAA,IAAI,oCAAoB,MAAxB,IAAI,CAAsB,0CAAE,EAAE,CAAA,EAAA,CACrC,EAAA;QAED,uCAAsB,IAAA,WAAI,EAAC,GAAG,EAAE;YAC9B,IAAI,GAAG,GAAG,uBAAA,IAAI,oDAAe,MAAnB,IAAI,EAAgB;gBAC5B,OAAO,EAAE,aAAa;gBACtB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,GAAG;gBAChB,QAAQ,EAAE,EAAE;aACb,CAAC,CAAA;YAEF,IAAI,GAAG,GAAG,uBAAA,IAAI,oDAAe,MAAnB,IAAI,EAAgB;gBAC5B,OAAO,EAAE,cAAc;gBACvB,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,GAAG;gBAChB,QAAQ,EAAE,GAAG;aACd,CAAC,CAAA;YAEF,IAAI,OAAO,GAAG,KAAK,CAAA;YACnB,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;gBAChE,GAAG,GAAG,SAAS,CAAA;gBACf,GAAG,GAAG,SAAS,CAAA;gBACf,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;YAED,IAAI,EAAgB,CAAA;YAEpB,IAAI,CAAC,OAAO,IAAI,CAAC,IAAA,cAAK,EAAC,uBAAA,IAAI,8BAAc,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAC/D,MAAM,QAAQ,GAAG,IAAA,yBAAa,EAAC,uBAAA,IAAI,8BAAc,CAAC,mBAAmB,CAAC,CAAA;gBACtE,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;oBACrB,EAAE,GAAG;wBACH,EAAE,EAAE,QAAQ,CAAC,IAAI;wBACjB,GAAG,EAAE,qBAAqB;qBAC3B,CAAA;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,+DAA+D;wBAC7D,uBAAA,IAAI,8BAAc,CAAC,mBAAmB,CACzC,CAAA;gBACH,CAAC;YACH,CAAC;YAED,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACzD,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;oBAC1C,MAAM,IAAI,GAAG,IAAA,yBAAa,EAAC,KAAK,CAAC,CAAA;oBACjC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;wBACjB,EAAE,GAAG;4BACH,EAAE,EAAE,IAAI,CAAC,IAAI;4BACb,GAAG,EAAE,0BAA0B;yBAChC,CAAA;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,qDAAqD,GAAG,KAAK,CAC9D,CAAA;oBACD,OAAO,GAAG,IAAI,CAAA;oBACd,GAAG,GAAG,SAAS,CAAA;oBACf,GAAG,GAAG,SAAS,CAAA;gBACjB,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,EAAE,CAAC;gBACxC,IAAI,uBAAA,IAAI,sBAAM,CAAC,WAAW,IAAI,IAAI,IAAI,uBAAA,IAAI,sBAAM,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;oBACtE,+CAA+C;oBAC/C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,iEAAiE,CAClE,CAAA;gBACH,CAAC;gBACD,KAAK,MAAM,GAAG,IAAI,qCAAmB,EAAE,CAAC;oBACtC,OAAO,uBAAA,IAAI,sBAAM,CAAC,GAAG,CAAC,CAAA;oBACtB,OAAO,uBAAA,IAAI,qBAAK,CAAC,GAAG,CAAC,CAAA;oBACrB,OAAO,uBAAA,IAAI,8BAAc,CAAC,GAAG,CAAC,CAAA;gBAChC,CAAC;YACH,CAAC;YAED,OAAO;gBACL,GAAG;gBACH,GAAG;gBACH,OAAO;gBACP,EAAE;aACH,CAAA;QACH,CAAC,CAAC,EAAA;QA6CF,uBAAM,IAAA,WAAI,EAAC,GAAG,EAAE,WAAC,OAAA,MAAA,uBAAA,IAAI,iCAAiB,MAArB,IAAI,CAAmB,0CAAE,EAAE,CAAA,EAAA,CAAC,EAAA;QAE7C,oCAAmB,IAAA,WAAI,EAAe,GAAG,EAAE;;YACzC,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,8BAA8B,EAAE,CAAC;gBACzD,MAAM,OAAO,GAAG,uBAAA,IAAI,wCAAwB,MAA5B,IAAI,CAA0B,CAAA;gBAC9C,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBACpB,OAAO,OAAO,CAAA;gBAChB,CAAC;YACH,CAAC;YACD,OAAO,CACL,MAAA,MAAA,MAAA,MAAA,MAAA,IAAA,mCAAuB,EAAC,uBAAA,IAAI,8BAAc,EAAE,IAAI,CAAC,OAAO,CAAC,mCACzD,uBAAA,IAAI,wCAAwB,MAA5B,IAAI,CAA0B,mCAC9B,IAAA,yCAA6B,EAAC,uBAAA,IAAI,8BAAc,EAAE,IAAI,CAAC,OAAO,CAAC;YAC/D,wEAAwE;YACxE,wEAAwE;YACxE,8DAA8D;YAC9D,4CAA4C;YAC5C,CAAC,uBAAA,IAAI,mDAAc,MAAlB,IAAI,CAAgB;gBACnB,CAAC,CAAC;oBACE,EAAE,EAAE,KAAK;oBACT,GAAG,EAAE,oBAAoB;iBAC1B;gBACH,CAAC,CAAC,kBAAkB;oBAClB,SAAS,CAAC;YACd,6CAA6C;YAC7C,IAAA,wCAA4B,EAAC,uBAAA,IAAI,8BAAc,CAAC;YAChD,iEAAiE;YACjE,IAAA,wCAA4B,EAAC,uBAAA,IAAI,8BAAc,EAAE,IAAI,CAAC,OAAO,CAAC,CAC/D,CAAA;QACH,CAAC,CAAC,EAAA;QAnRA,gGAAgG;QAChG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACvC,uBAAA,IAAI,kBAAS,EAAE,UAAU,EAAE,UAAU,EAAU,MAAA,CAAA;QAC/C,uBAAA,IAAI,sBAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IACjC,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,QAAgB,EAAE,OAAwB;QACnD,MAAM,IAAI,GAA8B,IAAA,yCAAuB,EAAC;YAC9D,GAAG,8BAAsB;YACzB,GAAG,OAAO;SACX,CAAC,CAAA;QACF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,IAAI,GAAG,CAAC,GAAG,6CAAuB,EAAE,OAAO,EAAE,GAAG,IAAA,WAAG,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;QACzE,mEAAmE;QACnE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC,IAAA,iBAAQ,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1E,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YAC/D,yEAAyE;YACzE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAA;YAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,CAAA;QAC1D,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;QAClC,CAAC;QACD,uEAAuE;QACvE,oBAAoB;QACpB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;QAC1D,qEAAqE;QAErE,+DAA+D;QAC/D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QAE7B,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAC7C,CAAC;IAEQ,QAAQ;QACf,OAAO,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,CAAA;IAC3C,CAAC;IAED,yBAAyB;IACzB,KAAK,CAAC,IAAY,EAAE,GAAW;QAC7B,IAAI,CAAC;YACH,uBAAA,IAAI,iBAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAA,CAAA;QACjC,CAAC;QAAC,OAAO,SAAS,EAAE,CAAC;YACnB,iCAAiC;YACjC,IAAA,sBAAM,GAAE,CAAC,IAAI,CAAC,mCAAmC,EAAE;gBACjD,IAAI;gBACJ,GAAG;gBACH,SAAS;aACV,CAAC,CAAA;YACF,MAAM,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,SAAS,CAAA;QACxB,CAAC;QACD,8FAA8F;QAC9F,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,uBAAA,IAAI,qBAAK,CAAC,UAAU,CAAC,CAAA;QACtD,wDAAwD;QACxD,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,gFAAgF;YAChF,MAAM,IAAI,KAAK,CACb,4CAA4C,uBAAA,IAAI,qBAAK,CAAC,UAAU,aAAa,IAAI,CAAC,UAAU,EAAE,CAC/F,CAAA;QACH,CAAC;QAED,OAAO,uBAAA,IAAI,gDAAW,MAAf,IAAI,CAAa,CAAA;IAC1B,CAAC;CAuSF;AAzXD,4BAyXC;;;IApSG,OAAO,MAAM,CAAC,MAAA,uBAAA,IAAI,8BAAc,0CAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;AAClE,CAAC;IAGC,OAAO,uBAAA,IAAI,8CAAS,MAAb,IAAI,CAAW,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAA;AAC3D,CAAC,iDAEQ,CAAS;;IAChB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAClD,CAAC;IAGC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,uBAAA,IAAI,0BAAiB,EAAE,MAAA,CAAA;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,uBAAA,IAAI,qBAAK,CAAC,EAAE,CAAC;YACrD,MAAM,CAAC,GAAG,uBAAA,IAAI,8CAAS,MAAb,IAAI,EAAU,GAAG,CAAC,CAAA;YAC5B,uBAAA,IAAI,8BAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;QAC/B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,uBAAA,IAAI,0BAAiB,uBAAA,IAAI,qBAAK,MAAA,CAAA;IAChC,CAAC;IAED,iEAAiE;IACjE,MAAM,IAAI,GAAG,uBAAA,IAAI,sBAAa,CAAA;IAE9B,MAAM,KAAK,GAAG,uBAAA,IAAI,iCAAiB,MAArB,IAAI,CAAmB,CAAA;IACrC,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAA;QAClB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAA;IAC3B,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,uBAAA,IAAI,qBAAK,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,uBAAA,IAAI,8CAAS,MAAb,IAAI,EAAU,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,GAAG,uBAAA,IAAI,+CAAU,MAAd,IAAI,EAAW,CAAC,EAAE,KAAK,CAAC,CAAA;QAClC,6DAA6D;QAC7D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACf,CAAC;IAED,4EAA4E;IAC5E,sEAAsE;IACtE,qBAAqB;IACrB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,qCAAiB,EAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACpB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAExB,OAAO,IAAI,CAAA;AACb,CAAC,6DAyFc,EACb,OAAO,EACP,WAAW,EACX,WAAW,EACX,QAAQ,GAMT;IACC,MAAM,QAAQ,GAAG,uBAAA,IAAI,8BAAc,CAAC,OAAO,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;IAC9B,MAAM,GAAG,GAAG,uBAAA,IAAI,8BAAc,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,MAAM,GAAG,IAAA,gBAAO,EAAC,QAAQ,CAAC,CAAA;IAChC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,OAAO,SAAS,CAAA;IAClB,CAAC;SAAM,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACrE,OAAO,SAAS,CAAA;IAClB,CAAC;SAAM,IAAI,IAAA,cAAK,EAAC,GAAG,CAAC,EAAE,CAAC;QACtB,kHAAkH;QAClH,OAAO,MAAM,CAAA;IACf,CAAC;SAAM,CAAC;QACN,wEAAwE;QACxE,iDAAiD;QACjD,MAAM,gBAAgB,GACpB,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAA,iBAAQ,EAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAA;QAC1E,MAAM,gBAAgB,GACpB,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAA,iBAAQ,EAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAA;QACzE,IAAI,gBAAgB,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,WAAW,OAAO,OAAO,MAAM,cAAc,GAAG,IAAI,OAAO,gBAAgB,MAAM,EAAE,CACpF,CAAA;QACH,CAAC;aAAM,IAAI,gBAAgB,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,WAAW,OAAO,OAAO,MAAM,cAAc,GAAG,IAAI,OAAO,gBAAgB,MAAM,EAAE,CACpF,CAAA;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;AACH,CAAC,mDAiCS,OAAe,EAAE,KAAU;;IACnC,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAEpC,IAAI,CAAC;QACH,IAAI,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YAC9B,OAAO,uBAAA,IAAI,qBAAK,MAAT,IAAI,CAAO,CAAA;QACpB,CAAC;QACD,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC/B,OAAO,uBAAA,IAAI,qBAAK,MAAT,IAAI,CAAO,CAAA;QACpB,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,uBAAA,IAAI,+CAAU,MAAd,IAAI,EAAW,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;QACvD,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAQ,EAAE,CAAA;YACtB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,CAAC,CAAC,GAAG,uBAAA,IAAI,+CAAU,MAAd,IAAI,EAAW,OAAO,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YAClD,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,yBAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;YACzC,IAAI,CAAC,IAAI,IAAI;gBAAE,OAAO,CAAC,CAAA;YAEvB,IACE,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC/B,6DAA6D;gBAC7D,qBAAqB;gBACrB,CAAC,yBAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EACxB,CAAC;gBACD,0DAA0D;gBAC1D,oEAAoE;gBACpE,wDAAwD;gBACxD,MAAM,EAAE,GACN,YAAY,CAAC,OAAO,CAAC,IAAI,uBAAA,IAAI,mDAAc,MAAlB,IAAI,CAAgB;oBAC3C,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB;wBAC9B,CAAC,CAAC,uBAAA,IAAI,oBAAI,MAAR,IAAI,CAAM;wBACZ,CAAC,CAAC,SAAS,CAAA;gBAEjB,2DAA2D;gBAC3D,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACpD,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC7C,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAC,uBAAuB;gBACrE,MAAM,MAAM,GACV,MAAA,MAAA,MAAA,CAAC,eAAe,IAAI,eAAe,IAAI,eAAe;oBACpD,CAAC,CAAC,2BAAY,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;oBAC9B,CAAC,CAAC,SAAS,CAAC,mCACd,CAAC,eAAe,IAAI,eAAe;oBACjC,CAAC,CAAC,mBAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;oBAC9B,CAAC,CAAC,SAAS,CAAC,mCACd,CAAC,eAAe,IAAI,eAAe;oBACjC,CAAC,CAAC,mBAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;oBACtB,CAAC,CAAC,SAAS,CAAC,mCACd,KAAK,CAAA;gBAEP,MAAM,SAAS,GAAG,uBAAA,IAAI,oBAAI,MAAR,IAAI,CAAM,CAAA;gBAC5B,IACE,IAAI,CAAC,OAAO,CAAC,iBAAiB;oBAC9B,MAAM,IAAI,IAAI;oBACd,SAAS,IAAI,IAAI;oBACjB,MAAM,YAAY,2BAAY;oBAC9B,uBAAA,IAAI,mDAAc,MAAlB,IAAI,CAAgB;oBACpB,CAAC,YAAY,CAAC,OAAO,CAAC;oBACtB,IAAI,KAAK,MAAM,CAAC,YAAY,EAC5B,CAAC;oBACD,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;gBAClC,CAAC;gBACD,OAAO,MAAM,CAAA;YACf,CAAC;QACH,CAAC;QACD,wEAAwE;QACxE,OAAO,KAAK,CAAA;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,QAAQ,CAAC,IAAI,CAChB,mBAAmB,OAAO,eAAe,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CACvE,CAAA;QACD,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAGH,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;AAC7D,CAAC"}
1
+ {"version":3,"file":"ReadTask.js","sourceRoot":"","sources":["../src/ReadTask.ts"],"names":[],"mappings":"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"}
@@ -50,7 +50,6 @@ class RewriteAllTagsTask extends ExifToolTask_1.ExifToolTask {
50
50
  return new RewriteAllTagsTask(args, opts);
51
51
  }
52
52
  parse(data, error) {
53
- var _a;
54
53
  if (error != null) {
55
54
  const str = String(error);
56
55
  // Ignore warnings:
@@ -59,7 +58,8 @@ class RewriteAllTagsTask extends ExifToolTask_1.ExifToolTask {
59
58
  }
60
59
  }
61
60
  if (null == data.match(/^\s*1 image files creat/i)) {
62
- throw (error !== null && error !== void 0 ? error : new Error((_a = data.trim().split("\n")[0]) !== null && _a !== void 0 ? _a : "Missing expected status message"));
61
+ throw (error ??
62
+ new Error(data.trim().split("\n")[0] ?? "Missing expected status message"));
63
63
  }
64
64
  }
65
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RewriteAllTagsTask.js","sourceRoot":"","sources":["../src/RewriteAllTagsTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAkC;AAClC,mCAAiC;AACjC,iDAAkE;AAClE,+DAA+D;AAE/D,MAAa,kBAAmB,SAAQ,2BAAkB;IACxD,YAAoB,IAAc,EAAE,OAA4B;QAC9D,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACtB,CAAC;IAED,MAAM,CAAC,GAAG,CACR,MAAc,EACd,OAAe,EACf,IAA8D;QAE9D,8DAA8D;QAE9D,MAAM,IAAI,GAAG,IAAA,eAAO,EAAC;YACnB,GAAG,6CAAuB;YAC1B,OAAO;YACP,eAAe;YACf,GAAG;YACH,UAAU;YACV,SAAS;YACT,cAAc;YACd,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC5C,MAAM;YACN,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACtB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;SACtB,CAAC,CAAA;QACF,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,KAAa;;QAC/B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;YACzB,mBAAmB;YACnB,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClE,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;QACD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC;YACnD,MAAM,CACJ,KAAK,aAAL,KAAK,cAAL,KAAK,GACL,IAAI,KAAK,CACP,MAAA,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,mCAAI,iCAAiC,CAChE,CACF,CAAA;QACH,CAAC;IACH,CAAC;CACF;AA7CD,gDA6CC"}
1
+ {"version":3,"file":"RewriteAllTagsTask.js","sourceRoot":"","sources":["../src/RewriteAllTagsTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAkC;AAClC,mCAAiC;AACjC,iDAAkE;AAClE,+DAA+D;AAE/D,MAAa,kBAAmB,SAAQ,2BAAkB;IACxD,YAAoB,IAAc,EAAE,OAA4B;QAC9D,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACtB,CAAC;IAED,MAAM,CAAC,GAAG,CACR,MAAc,EACd,OAAe,EACf,IAA8D;QAE9D,8DAA8D;QAE9D,MAAM,IAAI,GAAG,IAAA,eAAO,EAAC;YACnB,GAAG,6CAAuB;YAC1B,OAAO;YACP,eAAe;YACf,GAAG;YACH,UAAU;YACV,SAAS;YACT,cAAc;YACd,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC5C,MAAM;YACN,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACtB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;SACtB,CAAC,CAAA;QACF,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,KAAa;QAC/B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;YACzB,mBAAmB;YACnB,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClE,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC;QACD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC;YACnD,MAAM,CACJ,KAAK;gBACL,IAAI,KAAK,CACP,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,iCAAiC,CAChE,CACF,CAAA;QACH,CAAC;IACH,CAAC;CACF;AA7CD,gDA6CC"}
package/dist/String.d.ts CHANGED
@@ -1,7 +1,11 @@
1
1
  import { Maybe } from "./Maybe";
2
2
  export declare function isString(o: any): o is string;
3
- export declare function blank(s: Maybe<any>): s is undefined;
4
- export declare function notBlank(s: Maybe<string>): s is string;
3
+ export declare function blank(s: unknown): s is undefined;
4
+ export declare function notBlank(s: unknown): s is string;
5
+ /**
6
+ * @return true iff `s` is a string with at least one non-whitespace character.
7
+ */
8
+ export declare function notBlankString(s: unknown): s is string;
5
9
  export declare function toNotBlank(s: Maybe<string>): Maybe<string>;
6
10
  export declare function compactBlanks(arr: Maybe<string>[]): string[];
7
11
  export declare function toS(s: Maybe<any>): string;
package/dist/String.js CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isString = isString;
4
4
  exports.blank = blank;
5
5
  exports.notBlank = notBlank;
6
+ exports.notBlankString = notBlankString;
6
7
  exports.toNotBlank = toNotBlank;
7
8
  exports.compactBlanks = compactBlanks;
8
9
  exports.toS = toS;
@@ -25,6 +26,12 @@ function blank(s) {
25
26
  function notBlank(s) {
26
27
  return !blank(s);
27
28
  }
29
+ /**
30
+ * @return true iff `s` is a string with at least one non-whitespace character.
31
+ */
32
+ function notBlankString(s) {
33
+ return isString(s) && s.trim().length > 0;
34
+ }
28
35
  function toNotBlank(s) {
29
36
  if (s == null)
30
37
  return;