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.
- package/CHANGELOG.md +21 -1
- package/SECURITY.md +1 -2
- package/dist/BinaryField.js +2 -0
- package/dist/BinaryField.js.map +1 -1
- package/dist/BinaryToBufferTask.js +5 -5
- package/dist/BinaryToBufferTask.js.map +1 -1
- package/dist/CoordinateParser.d.ts +38 -0
- package/dist/CoordinateParser.js +185 -0
- package/dist/CoordinateParser.js.map +1 -0
- package/dist/DateTime.js +4 -5
- package/dist/DateTime.js.map +1 -1
- package/dist/DefaultExifToolOptions.js +1 -3
- package/dist/DefaultExifToolOptions.js.map +1 -1
- package/dist/ErrorsAndWarnings.js +2 -2
- package/dist/ErrorsAndWarnings.js.map +1 -1
- package/dist/ExifDate.js +7 -2
- package/dist/ExifDate.js.map +1 -1
- package/dist/ExifDateTime.js +61 -64
- package/dist/ExifDateTime.js.map +1 -1
- package/dist/ExifTime.js +19 -26
- package/dist/ExifTime.js.map +1 -1
- package/dist/ExifTool.d.ts +1 -3
- package/dist/ExifTool.js +56 -57
- package/dist/ExifTool.js.map +1 -1
- package/dist/ExifToolTask.js +21 -26
- package/dist/ExifToolTask.js.map +1 -1
- package/dist/ExiftoolPath.js +7 -4
- package/dist/ExiftoolPath.js.map +1 -1
- package/dist/FirstDateTime.js +1 -1
- package/dist/FirstDateTime.js.map +1 -1
- package/dist/GPS.d.ts +24 -0
- package/dist/GPS.js +152 -0
- package/dist/GPS.js.map +1 -0
- package/dist/JSON.js +1 -1
- package/dist/JSON.js.map +1 -1
- package/dist/Number.d.ts +13 -0
- package/dist/Number.js +26 -0
- package/dist/Number.js.map +1 -1
- package/dist/ReadRawTask.js +3 -1
- package/dist/ReadRawTask.js.map +1 -1
- package/dist/ReadTask.js +189 -254
- package/dist/ReadTask.js.map +1 -1
- package/dist/RewriteAllTagsTask.js +2 -2
- package/dist/RewriteAllTagsTask.js.map +1 -1
- package/dist/String.d.ts +6 -2
- package/dist/String.js +7 -0
- package/dist/String.js.map +1 -1
- package/dist/Struct.js +1 -2
- package/dist/Struct.js.map +1 -1
- package/dist/Tags.d.ts +23 -23
- package/dist/TimeParsing.js +6 -8
- package/dist/TimeParsing.js.map +1 -1
- package/dist/Times.d.ts +6 -0
- package/dist/Times.js +7 -3
- package/dist/Times.js.map +1 -1
- package/dist/Timezones.d.ts +1 -1
- package/dist/Timezones.js +19 -24
- package/dist/Timezones.js.map +1 -1
- package/dist/VersionTask.js +1 -1
- package/dist/VersionTask.js.map +1 -1
- package/dist/WriteTask.js +38 -13
- package/dist/WriteTask.js.map +1 -1
- package/package.json +7 -7
package/dist/ExifDateTime.js
CHANGED
|
@@ -1,16 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
-
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");
|
|
5
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
8
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
9
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
10
|
-
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");
|
|
11
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
|
-
};
|
|
13
|
-
var _a, _ExifDateTime_fromPatterns, _ExifDateTime_looseExifFormats, _ExifDateTime_dt;
|
|
14
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
3
|
exports.ExifDateTime = void 0;
|
|
16
4
|
const luxon_1 = require("luxon");
|
|
@@ -24,20 +12,32 @@ const Timezones_1 = require("./Timezones");
|
|
|
24
12
|
* Encodes an ExifDateTime with an optional tz offset in minutes.
|
|
25
13
|
*/
|
|
26
14
|
class ExifDateTime {
|
|
15
|
+
year;
|
|
16
|
+
month;
|
|
17
|
+
day;
|
|
18
|
+
hour;
|
|
19
|
+
minute;
|
|
20
|
+
second;
|
|
21
|
+
millisecond;
|
|
22
|
+
tzoffsetMinutes;
|
|
23
|
+
rawValue;
|
|
24
|
+
zoneName;
|
|
25
|
+
inferredZone;
|
|
27
26
|
static from(exifOrIso, defaultZone) {
|
|
28
|
-
|
|
29
|
-
return exifOrIso instanceof _a
|
|
27
|
+
return exifOrIso instanceof ExifDateTime
|
|
30
28
|
? exifOrIso // already an ExifDateTime
|
|
31
29
|
: (0, String_1.blank)(exifOrIso)
|
|
32
30
|
? undefined // in order of strictness:
|
|
33
|
-
:
|
|
31
|
+
: this.fromExifStrict(exifOrIso, defaultZone) ??
|
|
32
|
+
this.fromISO(exifOrIso, defaultZone) ??
|
|
33
|
+
this.fromExifLoose(exifOrIso, defaultZone);
|
|
34
34
|
}
|
|
35
35
|
static fromISO(iso, defaultZone) {
|
|
36
36
|
if ((0, String_1.blank)(iso) || null != iso.match(/^\d+$/))
|
|
37
37
|
return undefined;
|
|
38
38
|
// Unfortunately, DateTime.fromISO() is happy to parse a date with no time,
|
|
39
39
|
// so we have to do this ourselves:
|
|
40
|
-
return
|
|
40
|
+
return this.#fromPatterns(iso, (0, TimeParsing_1.timeFormats)({
|
|
41
41
|
formatPrefixes: ["y-MM-dd'T'", "y-MM-dd ", "y-M-d "],
|
|
42
42
|
defaultZone,
|
|
43
43
|
}));
|
|
@@ -53,12 +53,22 @@ class ExifDateTime {
|
|
|
53
53
|
* `offsetMinutesToZoneName`.
|
|
54
54
|
*/
|
|
55
55
|
static fromEXIF(text, defaultZone) {
|
|
56
|
-
var _b;
|
|
57
56
|
if ((0, String_1.blank)(text))
|
|
58
57
|
return undefined;
|
|
59
58
|
return (
|
|
60
59
|
// .fromExifStrict() uses .fromISO() as a backstop
|
|
61
|
-
|
|
60
|
+
this.fromExifStrict(text, defaultZone) ??
|
|
61
|
+
this.fromExifLoose(text, defaultZone));
|
|
62
|
+
}
|
|
63
|
+
static #fromPatterns(text, fmts) {
|
|
64
|
+
const result = (0, TimeParsing_1.parseDateTime)(text, fmts);
|
|
65
|
+
return result == null
|
|
66
|
+
? undefined
|
|
67
|
+
: ExifDateTime.fromDateTime(result.dt, {
|
|
68
|
+
rawValue: text,
|
|
69
|
+
unsetMilliseconds: result.unsetMilliseconds,
|
|
70
|
+
inferredZone: result.inferredZone,
|
|
71
|
+
});
|
|
62
72
|
}
|
|
63
73
|
/**
|
|
64
74
|
* Parse the given date-time string, EXIF-formatted.
|
|
@@ -72,29 +82,40 @@ class ExifDateTime {
|
|
|
72
82
|
* `offsetMinutesToZoneName`.
|
|
73
83
|
*/
|
|
74
84
|
static fromExifStrict(text, defaultZone) {
|
|
75
|
-
var _b;
|
|
76
85
|
if ((0, String_1.blank)(text))
|
|
77
86
|
return undefined;
|
|
78
|
-
return (
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
87
|
+
return (this.#fromPatterns(text, (0, TimeParsing_1.timeFormats)({ formatPrefixes: ["y:MM:dd ", "y:M:d "], defaultZone })) ??
|
|
88
|
+
// Not found yet? Maybe it's in ISO format? See
|
|
89
|
+
// https://github.com/photostructure/exiftool-vendored.js/issues/71
|
|
90
|
+
this.fromISO(text, defaultZone));
|
|
91
|
+
}
|
|
92
|
+
static *#looseExifFormats(defaultZone) {
|
|
93
|
+
// The following are from actual datestamps seen in the wild (!!)
|
|
94
|
+
const formats = [
|
|
95
|
+
"MMM d y HH:mm:ss",
|
|
96
|
+
"MMM d y, HH:mm:ss",
|
|
97
|
+
// Thu Oct 13 00:12:27 2016:
|
|
98
|
+
"ccc MMM d HH:mm:ss y",
|
|
99
|
+
];
|
|
100
|
+
const zone = (0, String_1.notBlank)(defaultZone) ? defaultZone : Timezones_1.UnsetZone;
|
|
101
|
+
for (const fmt of formats) {
|
|
102
|
+
yield { fmt: fmt, zone, inferredZone: true };
|
|
103
|
+
}
|
|
82
104
|
}
|
|
83
105
|
static fromExifLoose(text, defaultZone) {
|
|
84
106
|
return (0, String_1.blank)(text)
|
|
85
107
|
? undefined
|
|
86
|
-
:
|
|
108
|
+
: this.#fromPatterns(text, this.#looseExifFormats(defaultZone));
|
|
87
109
|
}
|
|
88
110
|
static fromDateTime(dt, opts) {
|
|
89
|
-
var _b;
|
|
90
111
|
if (dt == null || !dt.isValid || dt.year === 0 || dt.year === 1) {
|
|
91
112
|
return undefined;
|
|
92
113
|
}
|
|
93
|
-
return new
|
|
114
|
+
return new ExifDateTime(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.millisecond === 0 && true === opts?.unsetMilliseconds
|
|
94
115
|
? undefined
|
|
95
|
-
: dt.millisecond, dt.offset === Timezones_1.UnsetZoneOffsetMinutes ? undefined : dt.offset, opts
|
|
116
|
+
: dt.millisecond, dt.offset === Timezones_1.UnsetZoneOffsetMinutes ? undefined : dt.offset, opts?.rawValue, dt.zoneName == null || dt.zone?.name === Timezones_1.UnsetZone.name
|
|
96
117
|
? undefined
|
|
97
|
-
: dt.zoneName, opts
|
|
118
|
+
: dt.zoneName, opts?.inferredZone);
|
|
98
119
|
}
|
|
99
120
|
/**
|
|
100
121
|
* Create an ExifDateTime from a number of milliseconds since the epoch
|
|
@@ -126,6 +147,8 @@ class ExifDateTime {
|
|
|
126
147
|
static now(opts = {}) {
|
|
127
148
|
return this.fromMillis(Date.now(), opts);
|
|
128
149
|
}
|
|
150
|
+
#dt;
|
|
151
|
+
zone;
|
|
129
152
|
constructor(year, month, day, hour, minute, second, millisecond, tzoffsetMinutes, rawValue, zoneName, inferredZone) {
|
|
130
153
|
this.year = year;
|
|
131
154
|
this.month = month;
|
|
@@ -138,7 +161,6 @@ class ExifDateTime {
|
|
|
138
161
|
this.rawValue = rawValue;
|
|
139
162
|
this.zoneName = zoneName;
|
|
140
163
|
this.inferredZone = inferredZone;
|
|
141
|
-
_ExifDateTime_dt.set(this, void 0);
|
|
142
164
|
this.zone = (0, Timezones_1.getZoneName)({ zoneName, tzoffsetMinutes });
|
|
143
165
|
}
|
|
144
166
|
get millis() {
|
|
@@ -151,17 +173,16 @@ class ExifDateTime {
|
|
|
151
173
|
return this.millisecond == null;
|
|
152
174
|
}
|
|
153
175
|
setZone(zone, opts) {
|
|
154
|
-
var _b;
|
|
155
176
|
const dt = (0, TimeParsing_1.setZone)({
|
|
156
177
|
zone,
|
|
157
178
|
src: this.toDateTime(),
|
|
158
179
|
srcHasZone: this.hasZone,
|
|
159
180
|
opts,
|
|
160
181
|
});
|
|
161
|
-
return
|
|
182
|
+
return ExifDateTime.fromDateTime(dt, {
|
|
162
183
|
rawValue: this.rawValue,
|
|
163
184
|
unsetMilliseconds: this.millisecond == null,
|
|
164
|
-
inferredZone:
|
|
185
|
+
inferredZone: opts?.inferredZone ?? true,
|
|
165
186
|
});
|
|
166
187
|
}
|
|
167
188
|
/**
|
|
@@ -169,8 +190,7 @@ class ExifDateTime {
|
|
|
169
190
|
* has an unset zone (as Luxon doesn't support "unset" timezones)
|
|
170
191
|
*/
|
|
171
192
|
toDateTime(overrideZone) {
|
|
172
|
-
|
|
173
|
-
return (__classPrivateFieldSet(this, _ExifDateTime_dt, (_b = __classPrivateFieldGet(this, _ExifDateTime_dt, "f")) !== null && _b !== void 0 ? _b : luxon_1.DateTime.fromObject({
|
|
193
|
+
return (this.#dt ??= luxon_1.DateTime.fromObject({
|
|
174
194
|
year: this.year,
|
|
175
195
|
month: this.month,
|
|
176
196
|
day: this.day,
|
|
@@ -179,8 +199,8 @@ class ExifDateTime {
|
|
|
179
199
|
second: this.second,
|
|
180
200
|
millisecond: this.millisecond,
|
|
181
201
|
}, {
|
|
182
|
-
zone: overrideZone
|
|
183
|
-
})
|
|
202
|
+
zone: overrideZone ?? this.zone,
|
|
203
|
+
}));
|
|
184
204
|
}
|
|
185
205
|
toEpochSeconds(overrideZone) {
|
|
186
206
|
return this.toDateTime(overrideZone).toUnixInteger();
|
|
@@ -189,9 +209,8 @@ class ExifDateTime {
|
|
|
189
209
|
return this.toDateTime().toJSDate();
|
|
190
210
|
}
|
|
191
211
|
toISOString(options = {}) {
|
|
192
|
-
var _b;
|
|
193
212
|
return (0, Maybe_1.denull)(this.toDateTime().toISO({
|
|
194
|
-
suppressMilliseconds:
|
|
213
|
+
suppressMilliseconds: options.suppressMilliseconds ?? this.millisecond == null,
|
|
195
214
|
includeOffset: this.hasZone && options.includeOffset !== false,
|
|
196
215
|
}));
|
|
197
216
|
}
|
|
@@ -233,14 +252,14 @@ class ExifDateTime {
|
|
|
233
252
|
* @return a new ExifDateTime from the given JSON. Note that this instance **may not be valid**.
|
|
234
253
|
*/
|
|
235
254
|
static fromJSON(json) {
|
|
236
|
-
return new
|
|
255
|
+
return new ExifDateTime(json.year, json.month, json.day, json.hour, json.minute, json.second, json.millisecond, json.tzoffsetMinutes, json.rawValue, json.zoneName, json.inferredZone);
|
|
237
256
|
}
|
|
238
257
|
maybeMatchZone(target, maxDeltaMs = 14 * DateTime_1.MinuteMs) {
|
|
239
|
-
var _b, _c, _d;
|
|
240
258
|
const targetZone = target.zone;
|
|
241
259
|
if (targetZone == null || !target.hasZone)
|
|
242
260
|
return;
|
|
243
|
-
return (
|
|
261
|
+
return (this.setZone(targetZone, { keepLocalTime: false })?.ifClose(target, maxDeltaMs) ??
|
|
262
|
+
this.setZone(targetZone, { keepLocalTime: true })?.ifClose(target, maxDeltaMs));
|
|
244
263
|
}
|
|
245
264
|
ifClose(target, maxDeltaMs = 14 * DateTime_1.MinuteMs) {
|
|
246
265
|
const ts = this.toMillis();
|
|
@@ -252,30 +271,8 @@ class ExifDateTime {
|
|
|
252
271
|
if (!this.hasZone) {
|
|
253
272
|
dt = dt.setZone(Timezones_1.UnsetZone, { keepLocalTime: true });
|
|
254
273
|
}
|
|
255
|
-
return
|
|
274
|
+
return ExifDateTime.fromDateTime(dt, this);
|
|
256
275
|
}
|
|
257
276
|
}
|
|
258
277
|
exports.ExifDateTime = ExifDateTime;
|
|
259
|
-
_a = ExifDateTime, _ExifDateTime_dt = new WeakMap(), _ExifDateTime_fromPatterns = function _ExifDateTime_fromPatterns(text, fmts) {
|
|
260
|
-
const result = (0, TimeParsing_1.parseDateTime)(text, fmts);
|
|
261
|
-
return result == null
|
|
262
|
-
? undefined
|
|
263
|
-
: _a.fromDateTime(result.dt, {
|
|
264
|
-
rawValue: text,
|
|
265
|
-
unsetMilliseconds: result.unsetMilliseconds,
|
|
266
|
-
inferredZone: result.inferredZone,
|
|
267
|
-
});
|
|
268
|
-
}, _ExifDateTime_looseExifFormats = function* _ExifDateTime_looseExifFormats(defaultZone) {
|
|
269
|
-
// The following are from actual datestamps seen in the wild (!!)
|
|
270
|
-
const formats = [
|
|
271
|
-
"MMM d y HH:mm:ss",
|
|
272
|
-
"MMM d y, HH:mm:ss",
|
|
273
|
-
// Thu Oct 13 00:12:27 2016:
|
|
274
|
-
"ccc MMM d HH:mm:ss y",
|
|
275
|
-
];
|
|
276
|
-
const zone = (0, String_1.notBlank)(defaultZone) ? defaultZone : Timezones_1.UnsetZone;
|
|
277
|
-
for (const fmt of formats) {
|
|
278
|
-
yield { fmt: fmt, zone, inferredZone: true };
|
|
279
|
-
}
|
|
280
|
-
};
|
|
281
278
|
//# sourceMappingURL=ExifDateTime.js.map
|
package/dist/ExifDateTime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifDateTime.js","sourceRoot":"","sources":["../src/ExifDateTime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ExifDateTime.js","sourceRoot":"","sources":["../src/ExifDateTime.ts"],"names":[],"mappings":"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"}
|
package/dist/ExifTime.js
CHANGED
|
@@ -1,16 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
-
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");
|
|
5
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
8
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
9
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
10
|
-
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");
|
|
11
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
|
-
};
|
|
13
|
-
var _ExifTime_instances, _ExifTime_dt, _ExifTime_z, _ExifTime_subsec, _ExifTime_shortZone;
|
|
14
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
3
|
exports.ExifTime = void 0;
|
|
16
4
|
const luxon_1 = require("luxon");
|
|
@@ -22,6 +10,12 @@ const Timezones_1 = require("./Timezones");
|
|
|
22
10
|
* Encodes an ExifTime (which may not have a timezone offset)
|
|
23
11
|
*/
|
|
24
12
|
class ExifTime {
|
|
13
|
+
hour;
|
|
14
|
+
minute;
|
|
15
|
+
second;
|
|
16
|
+
millisecond;
|
|
17
|
+
rawValue;
|
|
18
|
+
inferredZone;
|
|
25
19
|
static fromEXIF(text, defaultZone) {
|
|
26
20
|
const s = (0, String_1.toS)(text).trim();
|
|
27
21
|
if (s.length === 0)
|
|
@@ -37,28 +31,27 @@ class ExifTime {
|
|
|
37
31
|
? undefined
|
|
38
32
|
: new ExifTime(dt.hour, dt.minute, dt.second, unsetMilliseconds ? undefined : dt.millisecond, rawValue, zone, inferredZone);
|
|
39
33
|
}
|
|
34
|
+
#dt;
|
|
35
|
+
#z;
|
|
36
|
+
zone;
|
|
40
37
|
constructor(hour, minute, second, millisecond, rawValue, zoneName, inferredZone) {
|
|
41
|
-
_ExifTime_instances.add(this);
|
|
42
38
|
this.hour = hour;
|
|
43
39
|
this.minute = minute;
|
|
44
40
|
this.second = second;
|
|
45
41
|
this.millisecond = millisecond;
|
|
46
42
|
this.rawValue = rawValue;
|
|
47
43
|
this.inferredZone = inferredZone;
|
|
48
|
-
_ExifTime_dt.set(this, void 0);
|
|
49
|
-
_ExifTime_z.set(this, void 0);
|
|
50
44
|
this.zone = (0, Timezones_1.getZoneName)({ zoneName });
|
|
51
45
|
}
|
|
52
46
|
toDateTime() {
|
|
53
|
-
|
|
54
|
-
return (__classPrivateFieldSet(this, _ExifTime_dt, (_a = __classPrivateFieldGet(this, _ExifTime_dt, "f")) !== null && _a !== void 0 ? _a : luxon_1.DateTime.fromObject({
|
|
47
|
+
return (this.#dt ??= luxon_1.DateTime.fromObject({
|
|
55
48
|
hour: this.hour,
|
|
56
49
|
minute: this.minute,
|
|
57
50
|
second: this.second,
|
|
58
51
|
millisecond: this.millisecond,
|
|
59
52
|
}, {
|
|
60
53
|
zone: this.zone,
|
|
61
|
-
})
|
|
54
|
+
}));
|
|
62
55
|
}
|
|
63
56
|
/**
|
|
64
57
|
* Alias for `.millisecond`
|
|
@@ -69,10 +62,16 @@ class ExifTime {
|
|
|
69
62
|
get hasZone() {
|
|
70
63
|
return this.zone != null;
|
|
71
64
|
}
|
|
65
|
+
#subsec() {
|
|
66
|
+
return this.millisecond == null ? "" : "." + (0, String_1.pad3)(this.millisecond);
|
|
67
|
+
}
|
|
68
|
+
#shortZone() {
|
|
69
|
+
return (this.#z ??= (0, Timezones_1.zoneToShortOffset)(this.zone));
|
|
70
|
+
}
|
|
72
71
|
toString() {
|
|
73
72
|
return ((0, String_1.pad2)(this.hour, this.minute, this.second).join(":") +
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
this.#subsec() +
|
|
74
|
+
this.#shortZone());
|
|
76
75
|
}
|
|
77
76
|
toISOString() {
|
|
78
77
|
return this.toString();
|
|
@@ -106,10 +105,4 @@ class ExifTime {
|
|
|
106
105
|
}
|
|
107
106
|
}
|
|
108
107
|
exports.ExifTime = ExifTime;
|
|
109
|
-
_ExifTime_dt = new WeakMap(), _ExifTime_z = new WeakMap(), _ExifTime_instances = new WeakSet(), _ExifTime_subsec = function _ExifTime_subsec() {
|
|
110
|
-
return this.millisecond == null ? "" : "." + (0, String_1.pad3)(this.millisecond);
|
|
111
|
-
}, _ExifTime_shortZone = function _ExifTime_shortZone() {
|
|
112
|
-
var _a;
|
|
113
|
-
return (__classPrivateFieldSet(this, _ExifTime_z, (_a = __classPrivateFieldGet(this, _ExifTime_z, "f")) !== null && _a !== void 0 ? _a : (0, Timezones_1.zoneToShortOffset)(this.zone), "f"));
|
|
114
|
-
};
|
|
115
108
|
//# sourceMappingURL=ExifTime.js.map
|
package/dist/ExifTime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifTime.js","sourceRoot":"","sources":["../src/ExifTime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ExifTime.js","sourceRoot":"","sources":["../src/ExifTime.ts"],"names":[],"mappings":"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"}
|
package/dist/ExifTool.d.ts
CHANGED
|
@@ -153,8 +153,6 @@ export declare class ExifTool {
|
|
|
153
153
|
*/
|
|
154
154
|
write(file: string, tags: WriteTags, options?: WriteTaskOptions): Promise<WriteTaskResult>;
|
|
155
155
|
/**
|
|
156
|
-
* Write the given `tags` to `file`.
|
|
157
|
-
*
|
|
158
156
|
* @param file an existing file to write `tags` to
|
|
159
157
|
*
|
|
160
158
|
* @param tags the tags to write to `file`.
|
|
@@ -173,7 +171,7 @@ export declare class ExifTool {
|
|
|
173
171
|
*
|
|
174
172
|
* @deprecated use
|
|
175
173
|
* {@link ExifTool.write(file: string, tags: WriteTags, options?: WriteTaskOptions)}
|
|
176
|
-
* instead
|
|
174
|
+
* instead: move `writeArgs` into your `options` hash.
|
|
177
175
|
*/
|
|
178
176
|
write(file: string, tags: WriteTags, writeArgs?: string[], options?: WriteTaskOptions): Promise<WriteTaskResult>;
|
|
179
177
|
/**
|
package/dist/ExifTool.js
CHANGED
|
@@ -22,15 +22,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
26
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
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
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
29
|
-
};
|
|
30
25
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
31
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
32
27
|
};
|
|
33
|
-
var _ExifTool_taskOptions, _ExifTool_checkForPerl;
|
|
34
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
29
|
exports.exiftool = exports.ExifTool = exports.DefaultWriteTaskOptions = exports.offsetMinutesToZoneName = exports.defaultVideosToUTC = exports.UnsetZoneOffsetMinutes = exports.UnsetZoneName = exports.UnsetZone = exports.TimezoneOffsetTagnames = exports.DefaultReadTaskOptions = exports.parseJSON = exports.isGeolocationTag = exports.exiftoolPath = exports.ExifToolTask = exports.ExifTime = exports.ExifDateTime = exports.ExifDate = exports.DefaultMaxProcs = exports.DefaultExiftoolArgs = exports.DefaultExifToolOptions = exports.CapturedAtTagNames = exports.BinaryField = void 0;
|
|
36
30
|
const bc = __importStar(require("batch-cluster"));
|
|
@@ -124,44 +118,9 @@ const whichPerl = (0, Lazy_1.lazy)(async () => {
|
|
|
124
118
|
* @see https://photostructure.github.io/exiftool-vendored.js/ for more documentation.
|
|
125
119
|
*/
|
|
126
120
|
class ExifTool {
|
|
121
|
+
options;
|
|
122
|
+
batchCluster;
|
|
127
123
|
constructor(options = {}) {
|
|
128
|
-
var _a;
|
|
129
|
-
this.exiftoolPath = (0, Lazy_1.lazy)(async () => {
|
|
130
|
-
var _a;
|
|
131
|
-
const o = this.options;
|
|
132
|
-
return ((_a = (await ((0, Object_1.isFunction)(o.exiftoolPath)
|
|
133
|
-
? o.exiftoolPath(this.options.logger())
|
|
134
|
-
: o.exiftoolPath))) !== null && _a !== void 0 ? _a : (0, ExiftoolPath_1.exiftoolPath)(this.options.logger()));
|
|
135
|
-
});
|
|
136
|
-
_ExifTool_taskOptions.set(this, (0, Lazy_1.lazy)(() => (0, Pick_1.pick)(this.options, "ignoreMinorErrors"))
|
|
137
|
-
/**
|
|
138
|
-
* Register life cycle event listeners. Delegates to BatchProcess.
|
|
139
|
-
*/
|
|
140
|
-
);
|
|
141
|
-
/**
|
|
142
|
-
* Register life cycle event listeners. Delegates to BatchProcess.
|
|
143
|
-
*/
|
|
144
|
-
this.on = (event, listener) => this.batchCluster.on(event, listener);
|
|
145
|
-
/**
|
|
146
|
-
* Unregister life cycle event listeners. Delegates to BatchProcess.
|
|
147
|
-
*/
|
|
148
|
-
this.off = (event, listener) => this.batchCluster.off(event, listener);
|
|
149
|
-
// calling whichPerl through this lazy() means we only do that task once per
|
|
150
|
-
// instance.
|
|
151
|
-
_ExifTool_checkForPerl.set(this, (0, Lazy_1.lazy)(async () => {
|
|
152
|
-
if (this.options.checkPerl) {
|
|
153
|
-
await whichPerl(); // < throws if perl is missing
|
|
154
|
-
}
|
|
155
|
-
})
|
|
156
|
-
/**
|
|
157
|
-
* Most users will not need to use `enqueueTask` directly. This method
|
|
158
|
-
* supports submitting custom `BatchCluster` tasks.
|
|
159
|
-
*
|
|
160
|
-
* @param task is a thunk to support retries by providing new instances on retries.
|
|
161
|
-
*
|
|
162
|
-
* @see BinaryExtractionTask for an example task implementation
|
|
163
|
-
*/
|
|
164
|
-
);
|
|
165
124
|
if (options != null && typeof options !== "object") {
|
|
166
125
|
throw new Error("Please update caller to the new ExifTool constructor API");
|
|
167
126
|
}
|
|
@@ -169,7 +128,7 @@ class ExifTool {
|
|
|
169
128
|
...DefaultExifToolOptions_1.DefaultExifToolOptions,
|
|
170
129
|
...options,
|
|
171
130
|
});
|
|
172
|
-
const ignoreShebang =
|
|
131
|
+
const ignoreShebang = o.ignoreShebang ?? _ignoreShebang();
|
|
173
132
|
const env = { ...o.exiftoolEnv, LANG: "C" };
|
|
174
133
|
if ((0, String_1.notBlank)(node_process_1.default.env.EXIFTOOL_HOME) && (0, String_1.blank)(env.EXIFTOOL_HOME)) {
|
|
175
134
|
env.EXIFTOOL_HOME = node_process_1.default.env.EXIFTOOL_HOME;
|
|
@@ -190,6 +149,21 @@ class ExifTool {
|
|
|
190
149
|
};
|
|
191
150
|
this.batchCluster = new bc.BatchCluster(this.options);
|
|
192
151
|
}
|
|
152
|
+
exiftoolPath = (0, Lazy_1.lazy)(async () => {
|
|
153
|
+
const o = this.options;
|
|
154
|
+
return ((await ((0, Object_1.isFunction)(o.exiftoolPath)
|
|
155
|
+
? o.exiftoolPath(this.options.logger())
|
|
156
|
+
: o.exiftoolPath)) ?? (0, ExiftoolPath_1.exiftoolPath)(this.options.logger()));
|
|
157
|
+
});
|
|
158
|
+
#taskOptions = (0, Lazy_1.lazy)(() => (0, Pick_1.pick)(this.options, "ignoreMinorErrors"));
|
|
159
|
+
/**
|
|
160
|
+
* Register life cycle event listeners. Delegates to BatchProcess.
|
|
161
|
+
*/
|
|
162
|
+
on = (event, listener) => this.batchCluster.on(event, listener);
|
|
163
|
+
/**
|
|
164
|
+
* Unregister life cycle event listeners. Delegates to BatchProcess.
|
|
165
|
+
*/
|
|
166
|
+
off = (event, listener) => this.batchCluster.off(event, listener);
|
|
193
167
|
/**
|
|
194
168
|
* @return a promise holding the version number of the vendored ExifTool
|
|
195
169
|
*/
|
|
@@ -197,13 +171,12 @@ class ExifTool {
|
|
|
197
171
|
return this.enqueueTask(() => new VersionTask_1.VersionTask(this.options));
|
|
198
172
|
}
|
|
199
173
|
read(file, argsOrOptions, options) {
|
|
200
|
-
var _a, _b;
|
|
201
174
|
const opts = {
|
|
202
175
|
...(0, Pick_1.pick)(this.options, ...ReadTask_1.ReadTaskOptionFields),
|
|
203
176
|
...((0, Object_1.isObject)(argsOrOptions) ? argsOrOptions : options),
|
|
204
177
|
};
|
|
205
178
|
opts.readArgs =
|
|
206
|
-
(
|
|
179
|
+
(0, Array_1.ifArr)(argsOrOptions) ?? (0, Array_1.ifArr)(opts.readArgs) ?? this.options.readArgs;
|
|
207
180
|
return this.enqueueTask(() => ReadTask_1.ReadTask.for(file, opts)); // < no way to know at compile time if we're going to get back a T!
|
|
208
181
|
}
|
|
209
182
|
/**
|
|
@@ -232,16 +205,37 @@ class ExifTool {
|
|
|
232
205
|
* typing details.
|
|
233
206
|
*/
|
|
234
207
|
readRaw(file, args = []) {
|
|
235
|
-
return this.enqueueTask(() => ReadRawTask_1.ReadRawTask.for(file, args,
|
|
208
|
+
return this.enqueueTask(() => ReadRawTask_1.ReadRawTask.for(file, args, this.#taskOptions()));
|
|
236
209
|
}
|
|
210
|
+
/**
|
|
211
|
+
* Write the given `tags` to `file`.
|
|
212
|
+
*
|
|
213
|
+
* **NOTE: no input validation is done by this library.** ExifTool, however,
|
|
214
|
+
* is strict about tag names and values in the context of the format of file
|
|
215
|
+
* being written to.
|
|
216
|
+
*
|
|
217
|
+
* @param file an existing file to write `tags` to
|
|
218
|
+
*
|
|
219
|
+
* @param tags the tags to write to `file`.
|
|
220
|
+
*
|
|
221
|
+
* @param options overrides to the default ExifTool options provided to the
|
|
222
|
+
* ExifTool constructor.
|
|
223
|
+
*
|
|
224
|
+
* @returns Either the promise will be resolved if the tags are written to
|
|
225
|
+
* successfully, or the promise will be rejected if there are errors or
|
|
226
|
+
* warnings.
|
|
227
|
+
*
|
|
228
|
+
* @see https://exiftool.org/exiftool_pod.html#overwrite_original
|
|
229
|
+
*/
|
|
237
230
|
write(file, tags, writeArgsOrOptions, options) {
|
|
238
|
-
var _a, _b;
|
|
239
231
|
const opts = {
|
|
240
232
|
...(0, Pick_1.pick)(this.options, ...WriteTask_1.WriteTaskOptionFields),
|
|
241
233
|
...((0, Object_1.isObject)(writeArgsOrOptions) ? writeArgsOrOptions : options),
|
|
242
234
|
};
|
|
243
235
|
opts.writeArgs =
|
|
244
|
-
(
|
|
236
|
+
(0, Array_1.ifArr)(writeArgsOrOptions) ??
|
|
237
|
+
(0, Array_1.ifArr)(opts.writeArgs) ??
|
|
238
|
+
this.options.writeArgs;
|
|
245
239
|
// don't retry because writes might not be idempotent (e.g. incrementing
|
|
246
240
|
// timestamps by an hour)
|
|
247
241
|
const retriable = false;
|
|
@@ -259,12 +253,11 @@ class ExifTool {
|
|
|
259
253
|
* a list of metadata keys to **not** delete.
|
|
260
254
|
*/
|
|
261
255
|
deleteAllTags(file, opts) {
|
|
262
|
-
var _a;
|
|
263
256
|
const args = [...DeleteAllTagsArgs_1.DeleteAllTagsArgs];
|
|
264
|
-
for (const ea of
|
|
257
|
+
for (const ea of opts?.retain ?? []) {
|
|
265
258
|
args.push(`-${ea}<${ea}`);
|
|
266
259
|
}
|
|
267
|
-
return this.write(file, {}, args, (0, Object_1.omit)(opts
|
|
260
|
+
return this.write(file, {}, args, (0, Object_1.omit)(opts ?? {}, "retain"));
|
|
268
261
|
}
|
|
269
262
|
/**
|
|
270
263
|
* Extract the low-resolution thumbnail in `path/to/image.jpg`
|
|
@@ -316,7 +309,7 @@ class ExifTool {
|
|
|
316
309
|
// BinaryExtractionTask returns a stringified error if the output indicates
|
|
317
310
|
// the task should not be retried.
|
|
318
311
|
const maybeError = await this.enqueueTask(() => BinaryExtractionTask_1.BinaryExtractionTask.for(tagname, src, dest, {
|
|
319
|
-
...
|
|
312
|
+
...this.#taskOptions(),
|
|
320
313
|
...opts,
|
|
321
314
|
}));
|
|
322
315
|
if (maybeError != null) {
|
|
@@ -334,7 +327,7 @@ class ExifTool {
|
|
|
334
327
|
*/
|
|
335
328
|
async extractBinaryTagToBuffer(tagname, imageFile, opts) {
|
|
336
329
|
const result = await this.enqueueTask(() => BinaryToBufferTask_1.BinaryToBufferTask.for(tagname, imageFile, {
|
|
337
|
-
...
|
|
330
|
+
...this.#taskOptions(),
|
|
338
331
|
...opts,
|
|
339
332
|
}));
|
|
340
333
|
if (Buffer.isBuffer(result)) {
|
|
@@ -368,7 +361,7 @@ class ExifTool {
|
|
|
368
361
|
rewriteAllTags(inputFile, outputFile, opts) {
|
|
369
362
|
return this.enqueueTask(() => RewriteAllTagsTask_1.RewriteAllTagsTask.for(inputFile, outputFile, {
|
|
370
363
|
allowMakerNoteRepair: false,
|
|
371
|
-
...
|
|
364
|
+
...this.#taskOptions(),
|
|
372
365
|
...opts,
|
|
373
366
|
}));
|
|
374
367
|
}
|
|
@@ -388,6 +381,13 @@ class ExifTool {
|
|
|
388
381
|
get ended() {
|
|
389
382
|
return this.batchCluster.ended;
|
|
390
383
|
}
|
|
384
|
+
// calling whichPerl through this lazy() means we only do that task once per
|
|
385
|
+
// instance.
|
|
386
|
+
#checkForPerl = (0, Lazy_1.lazy)(async () => {
|
|
387
|
+
if (this.options.checkPerl) {
|
|
388
|
+
await whichPerl(); // < throws if perl is missing
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
391
|
/**
|
|
392
392
|
* Most users will not need to use `enqueueTask` directly. This method
|
|
393
393
|
* supports submitting custom `BatchCluster` tasks.
|
|
@@ -398,7 +398,7 @@ class ExifTool {
|
|
|
398
398
|
*/
|
|
399
399
|
enqueueTask(task, retriable = true) {
|
|
400
400
|
const f = async () => {
|
|
401
|
-
await
|
|
401
|
+
await this.#checkForPerl();
|
|
402
402
|
return this.batchCluster.enqueueTask(task());
|
|
403
403
|
};
|
|
404
404
|
return retriable ? (0, AsyncRetry_1.retryOnReject)(f, this.options.taskRetries) : f();
|
|
@@ -445,7 +445,6 @@ class ExifTool {
|
|
|
445
445
|
}
|
|
446
446
|
}
|
|
447
447
|
exports.ExifTool = ExifTool;
|
|
448
|
-
_ExifTool_taskOptions = new WeakMap(), _ExifTool_checkForPerl = new WeakMap();
|
|
449
448
|
/**
|
|
450
449
|
* Use this singleton rather than instantiating new {@link ExifTool} instances
|
|
451
450
|
* in order to leverage a single running ExifTool process.
|