exiftool-vendored 23.0.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.
Files changed (52) hide show
  1. package/CHANGELOG.md +31 -2
  2. package/dist/AsyncRetry.js +0 -1
  3. package/dist/AsyncRetry.js.map +1 -1
  4. package/dist/CapturedAtTagNames.d.ts +1 -1
  5. package/dist/CapturedAtTagNames.js +4 -2
  6. package/dist/CapturedAtTagNames.js.map +1 -1
  7. package/dist/DateTime.d.ts +2 -1
  8. package/dist/DateTime.js +3 -2
  9. package/dist/DateTime.js.map +1 -1
  10. package/dist/DefaultCreateDateTagNames.d.ts +4 -0
  11. package/dist/DefaultCreateDateTagNames.js +9 -0
  12. package/dist/DefaultCreateDateTagNames.js.map +1 -0
  13. package/dist/DefaultExifToolOptions.js +2 -0
  14. package/dist/DefaultExifToolOptions.js.map +1 -1
  15. package/dist/ExifDateTime.d.ts +6 -4
  16. package/dist/ExifDateTime.js +63 -130
  17. package/dist/ExifDateTime.js.map +1 -1
  18. package/dist/ExifTime.d.ts +15 -5
  19. package/dist/ExifTime.js +67 -23
  20. package/dist/ExifTime.js.map +1 -1
  21. package/dist/ExifTool.d.ts +17 -10
  22. package/dist/ExifTool.js +19 -11
  23. package/dist/ExifTool.js.map +1 -1
  24. package/dist/ExifToolOptions.d.ts +49 -26
  25. package/dist/ExifToolOptions.js.map +1 -1
  26. package/dist/Maybe.d.ts +1 -0
  27. package/dist/Maybe.js +5 -1
  28. package/dist/Maybe.js.map +1 -1
  29. package/dist/ReadTask.d.ts +1 -0
  30. package/dist/ReadTask.js +28 -74
  31. package/dist/ReadTask.js.map +1 -1
  32. package/dist/ResourceEvent.d.ts +1 -0
  33. package/dist/ResourceEvent.js +13 -0
  34. package/dist/ResourceEvent.js.map +1 -1
  35. package/dist/String.d.ts +1 -1
  36. package/dist/String.js +6 -4
  37. package/dist/String.js.map +1 -1
  38. package/dist/Struct.js +2 -1
  39. package/dist/Struct.js.map +1 -1
  40. package/dist/Tags.d.ts +19 -19
  41. package/dist/TimeParsing.d.ts +29 -0
  42. package/dist/TimeParsing.js +75 -0
  43. package/dist/TimeParsing.js.map +1 -0
  44. package/dist/Timezones.d.ts +33 -23
  45. package/dist/Timezones.js +271 -86
  46. package/dist/Timezones.js.map +1 -1
  47. package/dist/Version.d.ts +1 -0
  48. package/dist/Version.js +6 -0
  49. package/dist/Version.js.map +1 -1
  50. package/dist/WriteTask.js +0 -2
  51. package/dist/WriteTask.js.map +1 -1
  52. package/package.json +14 -12
@@ -1,10 +1,10 @@
1
1
  import { Zone } from "luxon";
2
- import { ExifDateTime } from "./ExifDateTime";
3
- import { ExifTime } from "./ExifTime";
2
+ import { CapturedAtTagNames } from "./CapturedAtTagNames";
4
3
  import { ExifToolOptions } from "./ExifToolOptions";
5
4
  import { Maybe } from "./Maybe";
6
5
  import { Tags } from "./Tags";
7
- export declare const MaxTzOffsetHours = 14;
6
+ declare const ValidTimezoneOffsets: readonly ["-12:00", "-11:00", "-10:30", "-10:00", "-09:30", "-09:00", "-08:30", "-08:00", "-07:30", "-07:00", "-06:00", "-05:00", "-04:30", "-04:00", "-03:30", "-03:00", "-02:30", "-02:00", "-01:00", "-00:44", "-00:25:21", "+00:00", "+00:20", "+00:30", "+01:00", "+01:24", "+01:30", "+02:00", "+02:30", "+03:00", "+03:30", "+04:00", "+04:30", "+04:51", "+05:00", "+05:30", "+05:40", "+05:45", "+06:00", "+06:30", "+07:00", "+07:20", "+07:30", "+08:00", "+08:30", "+08:45", "+09:00", "+09:30", "+09:45", "+10:00", "+10:30", "+11:00", "+11:30", "+12:00", "+12:45", "+13:00", "+13:45", "+14:00"];
7
+ export type TimezoneOffset = (typeof ValidTimezoneOffsets)[number];
8
8
  /**
9
9
  * Zone instances with this offset are a placeholder for being "unset".
10
10
  */
@@ -18,43 +18,53 @@ export declare const UnsetZone: Zone;
18
18
  * Zone instances with this name are a placeholder for being "unset".
19
19
  */
20
20
  export declare const UnsetZoneName: string;
21
+ export declare function isUTC(zone: Maybe<Zone | string | number>): boolean;
22
+ export declare function isZoneValid(zone: Maybe<Zone>): zone is Zone;
21
23
  /**
22
24
  * If `tzSource` matches this value, the tags are from a video, and we had to
23
25
  * resort to assuming time fields are in UTC.
24
26
  * @see https://github.com/photostructure/exiftool-vendored.js/issues/113
25
27
  */
26
28
  export declare const defaultVideosToUTC = "defaultVideosToUTC";
27
- export declare function normalizeZone(z: Maybe<string | number | Zone>): Maybe<Zone>;
28
- export declare function reasonableTzOffsetMinutes(tzOffsetMinutes: Maybe<number>): boolean;
29
+ /**
30
+ * @param input must be either a number, which is the offset in minutes, or a
31
+ * string in the format "UTC+H" or "UTC+HH:mm"
32
+ */
33
+ export declare function normalizeZone(input: Maybe<string | number | Zone>): Maybe<Zone>;
34
+ /**
35
+ * @param ts must be provided if the zone is not a fixed offset
36
+ * @return the zone offset (in "±HH:MM" format) for the given zone, or "" if
37
+ * the zone is invalid
38
+ */
39
+ export declare function zoneToShortOffset(zone: Maybe<string | number | Zone>, ts?: number): string;
40
+ export declare function validTzOffsetMinutes(tzOffsetMinutes: Maybe<number>): tzOffsetMinutes is number;
29
41
  /**
30
42
  * Returns a "zone name" (used by `luxon`) that encodes the given offset.
31
43
  */
32
44
  export declare function offsetMinutesToZoneName(offsetMinutes: Maybe<number>): Maybe<string>;
33
45
  export interface TzSrc {
34
46
  tz: string;
47
+ /**
48
+ * If given a string, this is the remaining string left after extracting the
49
+ * timezone
50
+ */
51
+ leftovers?: string;
35
52
  src: string;
36
53
  }
37
54
  /**
38
55
  * Parse a timezone offset and return the offset minutes
39
56
  */
40
- export declare function extractOffset(value: Maybe<string | number | number[] | ExifDateTime | ExifTime>): Maybe<TzSrc>;
41
- declare const TimezoneOffsetTagnames: readonly ["TimeZone", "OffsetTime", "OffsetTimeOriginal", "OffsetTimeDigitized", "TimeZoneOffset"];
42
- declare const CreateDateTagnames: readonly ["SubSecCreateDate", "CreateDate", "SubSecDateTimeOriginal", "DateTimeOriginal", "SubSecMediaCreateDate", "MediaCreateDate", "CreationDate", "TimeCreated"];
43
- export declare function extractTzOffsetFromTags(t: Pick<Tags, (typeof TimezoneOffsetTagnames)[number] | (typeof CreateDateTagnames)[number]>, opts?: Partial<Pick<ExifToolOptions, "inferTimezoneFromDatestamps">>): Maybe<TzSrc>;
44
- export declare function inferLikelyOffsetMinutes(deltaMinutes: number): number;
45
- export declare function extractTzOffsetFromUTCOffset(t: {
46
- DateTimeUTC?: string;
47
- GPSDateTime?: string;
48
- GPSDateStamp?: string;
49
- GPSTimeStamp?: string;
50
- GPSDateTimeStamp?: string;
51
- SubSecDateTimeOriginal?: string;
52
- DateTimeOriginal?: string;
53
- SubSecCreateDate?: string;
54
- CreateDate?: string;
55
- SubSecMediaCreateDate?: string;
56
- MediaCreateDate?: string;
57
- DateTimeCreated?: string;
57
+ export declare function extractZone(value: Tags[keyof Tags], opts?: {
58
+ stripTZA?: boolean;
58
59
  }): Maybe<TzSrc>;
60
+ export declare function extractTzOffsetFromTags(t: Tags): Maybe<TzSrc>;
61
+ export declare function extractTzOffsetFromDatestamps(t: Tags, opts: Partial<Pick<ExifToolOptions, "inferTimezoneFromDatestamps" | "inferTimezoneFromDatestampTags">>): Maybe<TzSrc>;
62
+ export declare function inferLikelyOffsetMinutes(deltaMinutes: number): number;
63
+ export declare function extractTzOffsetFromUTCOffset(t: Pick<Tags, (typeof CapturedAtTagNames)[number] | "GPSDateTime" | "DateTimeUTC" | "GPSDateStamp" | "GPSTimeStamp">): Maybe<TzSrc>;
59
64
  export declare function equivalentZones(a: Maybe<string | number | Zone>, b: Maybe<string | number | Zone>): boolean;
65
+ export declare function getZoneName(args?: {
66
+ zone?: Zone;
67
+ zoneName?: Maybe<string>;
68
+ tzoffsetMinutes?: Maybe<number>;
69
+ }): Maybe<string>;
60
70
  export {};
package/dist/Timezones.js CHANGED
@@ -1,16 +1,87 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.equivalentZones = exports.extractTzOffsetFromUTCOffset = exports.inferLikelyOffsetMinutes = exports.extractTzOffsetFromTags = exports.extractOffset = exports.offsetMinutesToZoneName = exports.reasonableTzOffsetMinutes = exports.normalizeZone = exports.defaultVideosToUTC = exports.UnsetZoneName = exports.UnsetZone = exports.UnsetZoneOffsetMinutes = exports.MaxTzOffsetHours = void 0;
3
+ exports.getZoneName = exports.equivalentZones = exports.extractTzOffsetFromUTCOffset = exports.inferLikelyOffsetMinutes = exports.extractTzOffsetFromDatestamps = exports.extractTzOffsetFromTags = exports.extractZone = exports.offsetMinutesToZoneName = exports.validTzOffsetMinutes = exports.zoneToShortOffset = exports.normalizeZone = exports.defaultVideosToUTC = exports.isZoneValid = exports.isUTC = exports.UnsetZoneName = exports.UnsetZone = exports.UnsetZoneOffsetMinutes = void 0;
4
4
  const luxon_1 = require("luxon");
5
- const Array_1 = require("./Array");
5
+ const BinaryField_1 = require("./BinaryField");
6
6
  const CapturedAtTagNames_1 = require("./CapturedAtTagNames");
7
+ const ExifDate_1 = require("./ExifDate");
7
8
  const ExifDateTime_1 = require("./ExifDateTime");
9
+ const ExifTime_1 = require("./ExifTime");
10
+ const Lazy_1 = require("./Lazy");
8
11
  const Maybe_1 = require("./Maybe");
9
12
  const Number_1 = require("./Number");
13
+ const Pick_1 = require("./Pick");
10
14
  const String_1 = require("./String");
11
- // Pacific/Kiritimati is +14:00 TIL
12
- // https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
13
- exports.MaxTzOffsetHours = 14;
15
+ // Unique values from https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
16
+ const ValidTimezoneOffsets = [
17
+ "-12:00",
18
+ "-11:00",
19
+ "-10:30",
20
+ "-10:00",
21
+ "-09:30",
22
+ "-09:00",
23
+ "-08:30",
24
+ "-08:00",
25
+ "-07:30",
26
+ "-07:00",
27
+ "-06:00",
28
+ "-05:00",
29
+ "-04:30",
30
+ "-04:00",
31
+ "-03:30",
32
+ "-03:00",
33
+ "-02:30",
34
+ "-02:00",
35
+ "-01:00",
36
+ "-00:44",
37
+ "-00:25:21",
38
+ "+00:00",
39
+ "+00:20",
40
+ "+00:30",
41
+ "+01:00",
42
+ "+01:24",
43
+ "+01:30",
44
+ "+02:00",
45
+ "+02:30",
46
+ "+03:00",
47
+ "+03:30",
48
+ "+04:00",
49
+ "+04:30",
50
+ "+04:51",
51
+ "+05:00",
52
+ "+05:30",
53
+ "+05:40",
54
+ "+05:45",
55
+ "+06:00",
56
+ "+06:30",
57
+ "+07:00",
58
+ "+07:20",
59
+ "+07:30",
60
+ "+08:00",
61
+ "+08:30",
62
+ "+08:45",
63
+ "+09:00",
64
+ "+09:30",
65
+ "+09:45",
66
+ "+10:00",
67
+ "+10:30",
68
+ "+11:00",
69
+ "+11:30",
70
+ "+12:00",
71
+ "+12:45",
72
+ "+13:00",
73
+ "+13:45",
74
+ "+14:00",
75
+ ];
76
+ function offsetToMinutes(offset) {
77
+ const [h, m] = offset.split(":").map(Number);
78
+ // we can't just return `h * 60 + m`: that doesn't work with negative
79
+ // offsets (minutes will be positive but hours will be negative)
80
+ const sign = h < 0 ? -1 : 1;
81
+ return h * 60 + sign * m;
82
+ }
83
+ // export const localTzOffsetMinutes = lazy(() => DateTime.local().offset, hourMs)
84
+ const ValidOffsetMinutes = (0, Lazy_1.lazy)(() => new Set(ValidTimezoneOffsets.map(offsetToMinutes)));
14
85
  /**
15
86
  * Zone instances with this offset are a placeholder for being "unset".
16
87
  */
@@ -24,45 +95,106 @@ exports.UnsetZone = luxon_1.Info.normalizeZone(exports.UnsetZoneOffsetMinutes);
24
95
  * Zone instances with this name are a placeholder for being "unset".
25
96
  */
26
97
  exports.UnsetZoneName = exports.UnsetZone.name;
98
+ const Zulus = [
99
+ luxon_1.FixedOffsetZone.utcInstance,
100
+ 0,
101
+ -0,
102
+ "UTC",
103
+ "GMT",
104
+ "Z",
105
+ "+0",
106
+ "+00:00",
107
+ "UTC+0",
108
+ "GMT+0",
109
+ "UTC+00:00",
110
+ // ...sigh, so much for "normalizeZone"...
111
+ ];
112
+ function isUTC(zone) {
113
+ var _a;
114
+ const z = zone;
115
+ return (zone != null && (Zulus.includes(z) || Zulus.includes((_a = z.zoneName) !== null && _a !== void 0 ? _a : z.fixed)));
116
+ }
117
+ exports.isUTC = isUTC;
118
+ function isZoneValid(zone) {
119
+ return (zone != null && zone.isValid && Math.abs(zone.offset(Date.now())) < 14 * 60);
120
+ }
121
+ exports.isZoneValid = isZoneValid;
27
122
  /**
28
123
  * If `tzSource` matches this value, the tags are from a video, and we had to
29
124
  * resort to assuming time fields are in UTC.
30
125
  * @see https://github.com/photostructure/exiftool-vendored.js/issues/113
31
126
  */
32
127
  exports.defaultVideosToUTC = "defaultVideosToUTC";
33
- function normalizeZone(z) {
128
+ // https://en.wikipedia.org/wiki/List_of_tz_database_time_zones -- not that
129
+ // "WET" and "W-SU" are full TZs
130
+ const IanaFormatRE = /^\w{2,15}(?:\/\w{3,15})?$/;
131
+ // Luxon requires fixed-offset zones to look like "UTC+H", "UTC-H",
132
+ // "UTC+H:mm", "UTC-H:mm":
133
+ const FixedFormatRE = /^UTC[+-]\d{1,2}(?::\d\d)?$/;
134
+ /**
135
+ * @param input must be either a number, which is the offset in minutes, or a
136
+ * string in the format "UTC+H" or "UTC+HH:mm"
137
+ */
138
+ function normalizeZone(input) {
139
+ // wrapped in a try/catch as Luxon.settings.throwOnInvalid may be true:
34
140
  try {
35
- if (z == null || (0, String_1.blank)(String(z)))
141
+ // Info.normalizeZone returns the system zone if the input is null or
142
+ // blank (!!!), but we want to return undefined instead:
143
+ // Info.normalizeZone(null) returns the system zone, which isn't what we
144
+ // (ever!) want.
145
+ if (input == null)
36
146
  return;
37
- const zone = luxon_1.Info.normalizeZone(z);
38
- return (zone === null || zone === void 0 ? void 0 : zone.isValid) === true ? zone : undefined;
147
+ if (input instanceof luxon_1.Zone) {
148
+ return isZoneValid(input) ? input : undefined;
149
+ }
150
+ let z = input;
151
+ if (typeof z === "string") {
152
+ z = z.replace(/^(Zulu|Z|GMT)(\b|$)/, "UTC");
153
+ // Info.normalizeZone("") returns the system zone, which we never want.
154
+ // We also don't need to tease Info.normalizeZone with obviously
155
+ // non-offset inputs:
156
+ if ((0, String_1.blank)(z) || (!IanaFormatRE.test(z) && !FixedFormatRE.test(z))) {
157
+ return;
158
+ }
159
+ }
160
+ const result = luxon_1.Info.normalizeZone(z);
161
+ return isZoneValid(result) && result.name !== exports.UnsetZoneName
162
+ ? result
163
+ : undefined;
39
164
  }
40
165
  catch {
41
166
  return;
42
167
  }
43
168
  }
44
169
  exports.normalizeZone = normalizeZone;
45
- function reasonableTzOffsetMinutes(tzOffsetMinutes) {
46
- return ((0, Number_1.isNumber)(tzOffsetMinutes) &&
170
+ /**
171
+ * @param ts must be provided if the zone is not a fixed offset
172
+ * @return the zone offset (in "±HH:MM" format) for the given zone, or "" if
173
+ * the zone is invalid
174
+ */
175
+ function zoneToShortOffset(zone, ts) {
176
+ var _a, _b;
177
+ return (_b = (_a = normalizeZone(zone)) === null || _a === void 0 ? void 0 : _a.formatOffset(ts !== null && ts !== void 0 ? ts : Date.now(), "short")) !== null && _b !== void 0 ? _b : "";
178
+ }
179
+ exports.zoneToShortOffset = zoneToShortOffset;
180
+ function validTzOffsetMinutes(tzOffsetMinutes) {
181
+ return (tzOffsetMinutes != null &&
182
+ (0, Number_1.isNumber)(tzOffsetMinutes) &&
47
183
  tzOffsetMinutes !== exports.UnsetZoneOffsetMinutes &&
48
- Math.abs(tzOffsetMinutes) < exports.MaxTzOffsetHours * 60);
184
+ ValidOffsetMinutes().has(tzOffsetMinutes));
49
185
  }
50
- exports.reasonableTzOffsetMinutes = reasonableTzOffsetMinutes;
186
+ exports.validTzOffsetMinutes = validTzOffsetMinutes;
51
187
  /**
52
188
  * Returns a "zone name" (used by `luxon`) that encodes the given offset.
53
189
  */
54
190
  function offsetMinutesToZoneName(offsetMinutes) {
55
- if (offsetMinutes == null ||
56
- !(0, Number_1.isNumber)(offsetMinutes) ||
57
- offsetMinutes === exports.UnsetZoneOffsetMinutes) {
191
+ if (!validTzOffsetMinutes(offsetMinutes)) {
58
192
  return undefined;
59
193
  }
60
194
  if (offsetMinutes === 0)
61
195
  return "UTC";
62
196
  const sign = offsetMinutes < 0 ? "-" : "+";
63
197
  const absMinutes = Math.abs(offsetMinutes);
64
- if (absMinutes > exports.MaxTzOffsetHours * 60)
65
- return undefined;
66
198
  const hours = Math.floor(absMinutes / 60);
67
199
  const minutes = Math.abs(absMinutes % 60);
68
200
  // luxon now renders simple hour offsets without padding:
@@ -70,12 +202,14 @@ function offsetMinutesToZoneName(offsetMinutes) {
70
202
  }
71
203
  exports.offsetMinutesToZoneName = offsetMinutesToZoneName;
72
204
  function tzHourToOffset(n) {
73
- return (0, Number_1.isNumber)(n) && reasonableTzOffsetMinutes(n * 60)
205
+ return (0, Number_1.isNumber)(n) && validTzOffsetMinutes(n * 60)
74
206
  ? offsetMinutesToZoneName(n * 60)
75
207
  : undefined;
76
208
  }
77
- const utcTzRe = /(?:UTC)?(?<sign>[+-]?)(?<hours>\d\d?)(?::(?<minutes>\d\d))?/;
78
- const timestampTzRe = /(?<sign>[+-]?)(?<hours>\d\d?)(?::(?<minutes>\d\d))$/;
209
+ // Accept "Z", "UTC+2", "UTC+02", "UTC+2:00", "UTC+02:00", "+2", "+02", and
210
+ // "+02:00". Require the sign (+ or -) and a ":" separator if there are
211
+ // minutes.
212
+ const tzRe = /(?<Z>Z)|((UTC)?(?<sign>[+-])(?<hours>\d\d?)(?::(?<minutes>\d\d))?)$/;
79
213
  function extractOffsetFromHours(hourOffset) {
80
214
  return (0, Number_1.isNumber)(hourOffset)
81
215
  ? (0, Maybe_1.map)(tzHourToOffset(hourOffset), (tz) => ({
@@ -89,86 +223,123 @@ function extractOffsetFromHours(hourOffset) {
89
223
  /**
90
224
  * Parse a timezone offset and return the offset minutes
91
225
  */
92
- function extractOffset(value) {
93
- var _a, _b, _c, _d, _e;
94
- if (value instanceof ExifDateTime_1.ExifDateTime) {
95
- return (0, Maybe_1.map)(value.zone, (tz) => ({ tz, src: "ExifDateTime" }));
226
+ function extractZone(value, opts) {
227
+ var _a, _b;
228
+ if (value == null ||
229
+ typeof value === "boolean" ||
230
+ value instanceof BinaryField_1.BinaryField ||
231
+ value instanceof ExifDate_1.ExifDate) {
232
+ return;
96
233
  }
97
- if ((0, Number_1.isNumber)(value) || Array.isArray(value)) {
98
- return extractOffsetFromHours(value);
234
+ if (Array.isArray(value)) {
235
+ // we only ever care about the first non-null value
236
+ return extractZone(value.find((ea) => ea != null));
99
237
  }
100
- if ((0, String_1.isString)(value) && luxon_1.Info.isValidIANAZone(value)) {
101
- return { tz: value, src: "validIANAZone" };
238
+ if (value instanceof ExifDateTime_1.ExifDateTime || value instanceof ExifTime_1.ExifTime) {
239
+ return value.zone == null
240
+ ? undefined
241
+ : { tz: value.zone, src: value.constructor.name + ".zone" };
102
242
  }
103
- // ExifTime will have a rawValue, but doesn't support zone extraction:
104
- const str = (_a = value.rawValue) !== null && _a !== void 0 ? _a : (0, String_1.toS)(value);
105
- if ((0, String_1.blank)(str))
243
+ if ((0, Number_1.isNumber)(value)) {
244
+ return extractOffsetFromHours(value);
245
+ }
246
+ if (typeof value !== "string" || (0, String_1.blank)(value)) {
247
+ // don't accept ExifDate, boolean, BinaryField, ResourceEvent, Struct, or
248
+ // Version instances:
106
249
  return;
107
- for (const g of (0, Array_1.compact)([
108
- (_b = utcTzRe.exec(str)) === null || _b === void 0 ? void 0 : _b.groups,
109
- (_c = timestampTzRe.exec(str)) === null || _c === void 0 ? void 0 : _c.groups,
110
- ])) {
111
- const tz = offsetMinutesToZoneName((g.sign === "-" ? -1 : 1) *
112
- (parseInt((_d = g.hours) !== null && _d !== void 0 ? _d : "0") * 60 + parseInt((_e = g.minutes) !== null && _e !== void 0 ? _e : "0")));
113
- if (tz != null)
114
- return { tz, src: "offsetMinutesToZoneName" };
250
+ }
251
+ {
252
+ // If value is a proper timezone name, this may be easy!
253
+ const z = normalizeZone(value);
254
+ if (z != null) {
255
+ return { tz: z.name, src: "normalizeZone" };
256
+ }
257
+ }
258
+ let str = value.trim();
259
+ // Some EXIF datetime will "over-specify" and include both the utc offset
260
+ // *and* the "time zone abbreviation"/TZA, like "PST" or "PDT". TZAs are
261
+ // between 2 (AT) and 5 (WEST) characters.
262
+ if ((opts === null || opts === void 0 ? void 0 : opts.stripTZA) !== false &&
263
+ // We only want to strip off the TZA if the input _doesn't_ end with "UTC"
264
+ // or "Z"
265
+ !/[.\d\s](UTC|Z)$/.test(str)) {
266
+ str = str.replace(/\s[a-z]{2,5}$/i, "");
267
+ }
268
+ {
269
+ if ((0, String_1.blank)(str))
270
+ return;
271
+ const z = normalizeZone(str);
272
+ if (z != null) {
273
+ return { tz: z.name, src: "normalizeZone" };
274
+ }
275
+ }
276
+ const match = tzRe.exec(str);
277
+ const capturedGroups = match === null || match === void 0 ? void 0 : match.groups;
278
+ if (match != null && capturedGroups != null) {
279
+ const leftovers = str.slice(0, match.index);
280
+ if (capturedGroups.Z === "Z")
281
+ return {
282
+ tz: "UTC",
283
+ src: "Z",
284
+ leftovers,
285
+ };
286
+ const offsetMinutes = (capturedGroups.sign === "-" ? -1 : 1) *
287
+ (parseInt((_a = capturedGroups.hours) !== null && _a !== void 0 ? _a : "0") * 60 +
288
+ parseInt((_b = capturedGroups.minutes) !== null && _b !== void 0 ? _b : "0"));
289
+ const tz = offsetMinutesToZoneName(offsetMinutes);
290
+ if (tz != null) {
291
+ return { tz, src: "offsetMinutesToZoneName", leftovers };
292
+ }
115
293
  }
116
294
  return;
117
295
  }
118
- exports.extractOffset = extractOffset;
296
+ exports.extractZone = extractZone;
119
297
  const TimezoneOffsetTagnames = [
120
298
  "TimeZone",
121
299
  "OffsetTime",
122
- /** time zone for DateTimeOriginal, "-08:00" */
300
+ // time zone for DateTimeOriginal, "-08:00"
123
301
  "OffsetTimeOriginal",
124
- /** time zone for CreateDate, "-08:00" */
302
+ // time zone for CreateDate, "-08:00"
125
303
  "OffsetTimeDigitized",
126
- /**
127
- * 1 or 2 values: 1. The time zone offset of DateTimeOriginal from GMT in
128
- * hours, 2. If present, the time zone offset of ModifyDate (which we ignore)
129
- * @see https://www.exiftool.org/TagNames/EXIF.html
130
- */
304
+ // srsly who came up with these wholly inconsistent tag names? _why not just
305
+ // prefix tag names with "Offset"?!11_ SADNESS AND WOE
306
+ // 1 or 2 values: 1. The time zone offset of DateTimeOriginal from GMT in
307
+ // hours, 2. If present, the time zone offset of ModifyDate (which we
308
+ // ignore) @see https://www.exiftool.org/TagNames/EXIF.html
131
309
  "TimeZoneOffset", // number | number[] | string
132
310
  ];
133
- // The following are a hail-mary to try to get the offset from a
134
- // created-at tag, and only examined if `inferTimezoneFromDatestamps` is
135
- // true.
136
- const CreateDateTagnames = [
137
- "SubSecCreateDate",
138
- "CreateDate",
139
- "SubSecDateTimeOriginal",
140
- "DateTimeOriginal",
141
- "SubSecMediaCreateDate",
142
- "MediaCreateDate",
143
- "CreationDate",
144
- "TimeCreated", // < IPTC tag
145
- ];
146
- function extractTzOffsetFromTags(t, opts) {
147
- var _a;
148
- for (const tagName of [
149
- ...TimezoneOffsetTagnames,
150
- ...(((_a = opts === null || opts === void 0 ? void 0 : opts.inferTimezoneFromDatestamps) !== null && _a !== void 0 ? _a : false) ? CreateDateTagnames : []),
151
- ]) {
152
- // don't adopt FileCreateDate or FileModifyDate offsets--those are just
153
- // the system timezone:
154
- if (t[tagName] != null && !tagName.startsWith("File")) {
155
- const offset = extractOffset(t[tagName]);
311
+ function extractTzOffsetFromTags(t) {
312
+ // We have to iterate twice: if it's from a timezone offset tag, we can
313
+ // trust it, even if it's UTC.
314
+ for (const tagName of TimezoneOffsetTagnames) {
315
+ if (t[tagName] != null) {
316
+ const offset = extractZone(t[tagName]);
156
317
  if (offset != null) {
157
318
  return { tz: offset.tz, src: tagName };
158
319
  }
159
320
  }
160
321
  }
161
- if (t.TimeZoneOffset != null) {
162
- const tz = tzHourToOffset(Array.isArray(t.TimeZoneOffset) ? t.TimeZoneOffset[0] : t.TimeZoneOffset);
163
- if (tz != null)
164
- return {
165
- tz,
166
- src: "TimeZoneOffset",
167
- };
168
- }
169
322
  return;
170
323
  }
171
324
  exports.extractTzOffsetFromTags = extractTzOffsetFromTags;
325
+ function extractTzOffsetFromDatestamps(t, opts) {
326
+ var _a;
327
+ if ((opts === null || opts === void 0 ? void 0 : opts.inferTimezoneFromDatestamps) === true) {
328
+ for (const tagName of (_a = opts.inferTimezoneFromDatestampTags) !== null && _a !== void 0 ? _a : []) {
329
+ if (t[tagName] != null) {
330
+ const offset = extractZone(t[tagName]);
331
+ // Some applications (looking at you, Google Takeout) will add a
332
+ // spurious "+00:00" timezone offset to random datestamp tags, so
333
+ // ignore UTC offsets here.
334
+ if (offset != null && !isUTC(offset.tz)) {
335
+ return { tz: offset.tz, src: tagName };
336
+ }
337
+ }
338
+ }
339
+ }
340
+ return;
341
+ }
342
+ exports.extractTzOffsetFromDatestamps = extractTzOffsetFromDatestamps;
172
343
  // timezone offsets may be on a 15 minute boundary, but if GPS acquisition is
173
344
  // old, this can be spurious. We get less mistakes with a larger multiple, so
174
345
  // we're using 30 minutes instead of 15. See
@@ -178,17 +349,25 @@ function inferLikelyOffsetMinutes(deltaMinutes) {
178
349
  return TzBoundaryMinutes * Math.floor(deltaMinutes / TzBoundaryMinutes);
179
350
  }
180
351
  exports.inferLikelyOffsetMinutes = inferLikelyOffsetMinutes;
352
+ /**
353
+ * Convert blank strings to undefined.
354
+ */
355
+ function blankToNull(x) {
356
+ return x == null || (typeof x === "string" && (0, String_1.blank)(x)) ? undefined : x;
357
+ }
181
358
  function extractTzOffsetFromUTCOffset(t) {
182
- var _a;
183
- const gpsStamps = (0, Array_1.compact)([t.GPSDateStamp, t.GPSTimeStamp]);
184
- if (gpsStamps.length === 2) {
185
- (_a = t.GPSDateTimeStamp) !== null && _a !== void 0 ? _a : (t.GPSDateTimeStamp = gpsStamps.join(" "));
186
- }
359
+ const utcSources = {
360
+ ...(0, Pick_1.pick)(t, "GPSDateTime", "DateTimeUTC"),
361
+ GPSDateTimeStamp: (0, Maybe_1.map2)(blankToNull(t.GPSDateStamp), // Example: "2022:04:13"
362
+ blankToNull(t.GPSTimeStamp), // Example: "23:59:41.001"
363
+ (a, b) => a + " " + b),
364
+ };
187
365
  // We can always assume these are in UTC:
188
366
  const utc = (0, Maybe_1.first)(["GPSDateTime", "DateTimeUTC", "GPSDateTimeStamp"], (tagName) => {
189
367
  var _a;
190
- const edt = ExifDateTime_1.ExifDateTime.fromExifStrict(t[tagName]);
191
- const s = edt != null && (edt.zone == null || edt.zone === "UTC")
368
+ const v = utcSources[tagName];
369
+ const edt = v instanceof ExifDateTime_1.ExifDateTime ? v : ExifDateTime_1.ExifDateTime.fromExifStrict(v);
370
+ const s = edt != null && (edt.zone == null || isUTC(edt.zone))
192
371
  ? (_a = edt.setZone("UTC", { keepLocalTime: true })) === null || _a === void 0 ? void 0 : _a.toEpochSeconds()
193
372
  : undefined;
194
373
  return s != null
@@ -233,4 +412,10 @@ function equivalentZones(a, b) {
233
412
  (az.equals(bz) || az.offset(Date.now()) === bz.offset(Date.now())));
234
413
  }
235
414
  exports.equivalentZones = equivalentZones;
415
+ function getZoneName(args = {}) {
416
+ var _a, _b, _c, _d;
417
+ const result = (_d = (_b = (_a = normalizeZone(args.zone)) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : (_c = normalizeZone(args.zoneName)) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : offsetMinutesToZoneName(args.tzoffsetMinutes);
418
+ return (0, String_1.blank)(result) || result === exports.UnsetZoneName ? undefined : result;
419
+ }
420
+ exports.getZoneName = getZoneName;
236
421
  //# sourceMappingURL=Timezones.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Timezones.js","sourceRoot":"","sources":["../src/Timezones.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Timezones.js","sourceRoot":"","sources":["../src/Timezones.ts"],"names":[],"mappings":"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"}
package/dist/Version.d.ts CHANGED
@@ -11,3 +11,4 @@ export interface Version {
11
11
  ModifyDate?: ExifDateTime | ExifDate | string;
12
12
  Version?: string;
13
13
  }
14
+ export declare function isVersion(obj: any): obj is Version;
package/dist/Version.js CHANGED
@@ -1,3 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isVersion = void 0;
4
+ const fields = ["Comments", "Event", "Modifier", "ModifyDate", "Version"];
5
+ function isVersion(obj) {
6
+ return obj != null && typeof obj === "object" && fields.every((f) => f in obj);
7
+ }
8
+ exports.isVersion = isVersion;
3
9
  //# sourceMappingURL=Version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Version.js","sourceRoot":"","sources":["../src/Version.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"Version.js","sourceRoot":"","sources":["../src/Version.ts"],"names":[],"mappings":";;;AAeA,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;AAEzE,SAAgB,SAAS,CAAC,GAAQ;IAChC,OAAO,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;AAChF,CAAC;AAFD,8BAEC"}
package/dist/WriteTask.js CHANGED
@@ -129,14 +129,12 @@ class WriteTask extends ExifToolTask_1.ExifToolTask {
129
129
  }
130
130
  args.push(...extraArgs);
131
131
  args.push(sourceFile);
132
- // console.log("new WriteTask()", { sourceFile, args, tags })
133
132
  return new WriteTask(sourceFile, args);
134
133
  }
135
134
  toString() {
136
135
  return "WriteTask(" + this.sourceFile + ")";
137
136
  }
138
137
  parse(data, error) {
139
- // console.log(this.toString() + ".parse()", { data, error })
140
138
  if (error != null)
141
139
  throw error;
142
140
  if (this.errors.length > 0)
@@ -1 +1 @@
1
- {"version":3,"file":"WriteTask.js","sourceRoot":"","sources":["../src/WriteTask.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WriteTask.js","sourceRoot":"","sources":["../src/WriteTask.ts"],"names":[],"mappings":"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"}