exiftool-vendored 22.2.2 → 22.2.3
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 +4 -0
- package/dist/ExifDate.js +20 -4
- package/dist/ExifDate.js.map +1 -1
- package/dist/ExifTime.js +15 -5
- package/dist/ExifTime.js.map +1 -1
- package/dist/ExifTool.d.ts +1 -1
- package/dist/ExifTool.js +1 -1
- package/dist/ReadTask.d.ts +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -26,6 +26,10 @@ vendored versions of ExifTool match the version that they vendor.
|
|
|
26
26
|
|
|
27
27
|
## Version history
|
|
28
28
|
|
|
29
|
+
### v22.2.3
|
|
30
|
+
|
|
31
|
+
- 🐞 Apply the v22.2.3 bugfix _even wider_ (just found a `SubSecTime` value of "01" in the wild, and it was happily parsed into today's date, oops).
|
|
32
|
+
|
|
29
33
|
### v22.2.2
|
|
30
34
|
|
|
31
35
|
- 🐞 Apply the v22.2.1 bugfix wider: we now reject parsing any date-ish or time-ish value that matches `/^0+$/`.
|
package/dist/ExifDate.js
CHANGED
|
@@ -5,6 +5,8 @@ const luxon_1 = require("luxon");
|
|
|
5
5
|
const DateTime_1 = require("./DateTime");
|
|
6
6
|
const Maybe_1 = require("./Maybe");
|
|
7
7
|
const String_1 = require("./String");
|
|
8
|
+
const StrictExifRE = /^\d+:\d+:\d+|\d+-\d+-\d+$/;
|
|
9
|
+
const LooseExifRE = /^\S+\s+\S+\s+\S+$/;
|
|
8
10
|
/**
|
|
9
11
|
* Encodes an ExifDate
|
|
10
12
|
*/
|
|
@@ -16,23 +18,37 @@ class ExifDate {
|
|
|
16
18
|
(_b = (_a = this.fromExifStrict(exifOrIso)) !== null && _a !== void 0 ? _a : this.fromISO(exifOrIso)) !== null && _b !== void 0 ? _b : this.fromExifLoose(exifOrIso));
|
|
17
19
|
}
|
|
18
20
|
static fromISO(text) {
|
|
19
|
-
return
|
|
21
|
+
return StrictExifRE.test((0, String_1.toS)(text).trim())
|
|
22
|
+
? this.fromDateTime(luxon_1.DateTime.fromISO(text), text)
|
|
23
|
+
: undefined;
|
|
20
24
|
}
|
|
21
25
|
static fromPatterns(text, fmts) {
|
|
22
26
|
if ((0, String_1.blank)(text))
|
|
23
27
|
return;
|
|
24
28
|
text = (0, String_1.toS)(text).trim();
|
|
25
|
-
|
|
29
|
+
for (const fmt of fmts) {
|
|
30
|
+
const dt = luxon_1.DateTime.fromFormat(text, fmt);
|
|
31
|
+
if ((0, DateTime_1.validDateTime)(dt)) {
|
|
32
|
+
return this.fromDateTime(dt, text);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return;
|
|
26
36
|
}
|
|
27
37
|
// These are all formats I've seen in the wild from exiftool's output.
|
|
28
38
|
// More iterations might make sense, like "d MMM, y" or "MMM d, y", but I
|
|
29
39
|
// want to be constrained in what I consider a valid date to lessen the
|
|
30
40
|
// chance of misinterpreting a given value.
|
|
31
41
|
static fromExifStrict(text) {
|
|
32
|
-
return
|
|
42
|
+
return StrictExifRE.test((0, String_1.toS)(text).trim())
|
|
43
|
+
? this.fromPatterns(text, ["y:MM:dd", "y-MM-dd", "y:M:d"])
|
|
44
|
+
: undefined;
|
|
33
45
|
}
|
|
34
46
|
static fromExifLoose(text) {
|
|
35
|
-
|
|
47
|
+
// Unfortunately, Luxon parses "00" and "01" as _today_. So if we don't
|
|
48
|
+
// three non-blank strings parts, reject.
|
|
49
|
+
return LooseExifRE.test((0, String_1.toS)(text).trim())
|
|
50
|
+
? this.fromPatterns(text, ["MMM d y", "MMMM d y"])
|
|
51
|
+
: undefined;
|
|
36
52
|
}
|
|
37
53
|
static fromEXIF(text) {
|
|
38
54
|
return (0, Maybe_1.firstDefinedThunk)([
|
package/dist/ExifDate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifDate.js","sourceRoot":"","sources":["../src/ExifDate.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAEhC,yCAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"ExifDate.js","sourceRoot":"","sources":["../src/ExifDate.ts"],"names":[],"mappings":"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"}
|
package/dist/ExifTime.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ExifTime = void 0;
|
|
4
4
|
const luxon_1 = require("luxon");
|
|
5
|
-
const
|
|
5
|
+
const DateTime_1 = require("./DateTime");
|
|
6
6
|
const String_1 = require("./String");
|
|
7
7
|
/**
|
|
8
8
|
* Encodes an ExifTime (which may not have a timezone offset)
|
|
@@ -12,12 +12,22 @@ class ExifTime {
|
|
|
12
12
|
text = (0, String_1.toS)(text).trim();
|
|
13
13
|
if ((0, String_1.blank)(text))
|
|
14
14
|
return;
|
|
15
|
-
|
|
15
|
+
for (const fmt of [
|
|
16
|
+
"HH:mm:ss.uZZ",
|
|
17
|
+
"HH:mm:ssZZ",
|
|
18
|
+
"HH:mm:ss.u",
|
|
19
|
+
"HH:mm:ss",
|
|
20
|
+
]) {
|
|
21
|
+
const result = this.fromDateTime(luxon_1.DateTime.fromFormat(text, fmt), text);
|
|
22
|
+
if (result != null)
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
return;
|
|
16
26
|
}
|
|
17
27
|
static fromDateTime(dt, rawValue) {
|
|
18
|
-
return
|
|
19
|
-
?
|
|
20
|
-
:
|
|
28
|
+
return (0, DateTime_1.validDateTime)(dt)
|
|
29
|
+
? new ExifTime(dt.hour, dt.minute, dt.second, dt.millisecond, rawValue)
|
|
30
|
+
: undefined;
|
|
21
31
|
}
|
|
22
32
|
constructor(hour, minute, second, millisecond, rawValue) {
|
|
23
33
|
this.hour = hour;
|
package/dist/ExifTime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifTime.js","sourceRoot":"","sources":["../src/ExifTime.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,
|
|
1
|
+
{"version":3,"file":"ExifTime.js","sourceRoot":"","sources":["../src/ExifTime.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,yCAA0C;AAE1C,qCAAiD;AAEjD;;GAEG;AACH,MAAa,QAAQ;IACnB,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,IAAI,GAAG,IAAA,YAAG,EAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;QACvB,IAAI,IAAA,cAAK,EAAC,IAAI,CAAC;YAAE,OAAM;QACvB,KAAK,MAAM,GAAG,IAAI;YAChB,cAAc;YACd,YAAY;YACZ,YAAY;YACZ,UAAU;SACX,EAAE;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;YACtE,IAAI,MAAM,IAAI,IAAI;gBAAE,OAAO,MAAM,CAAA;SAClC;QACD,OAAM;IACR,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,EAAY,EAAE,QAAiB;QACjD,OAAO,IAAA,wBAAa,EAAC,EAAE,CAAC;YACtB,CAAC,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;YACvE,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;IAED,YACW,IAAY,EACZ,MAAc,EACd,MAAc,EACd,WAAoB,EACpB,QAAiB;QAJjB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,gBAAW,GAAX,WAAW,CAAS;QACpB,aAAQ,GAAR,QAAQ,CAAS;IACzB,CAAC;IAEJ,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAEO,MAAM;QACZ,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC;YACvD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,GAAG,GAAG,IAAA,aAAI,EAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAClC,CAAC;IAED,QAAQ;QACN,OAAO,IAAA,aAAI,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;IAC5E,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAA;IACH,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAoC;QAClD,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,QAAQ,CACd,CAAA;IACH,CAAC;CACF;AAxED,4BAwEC"}
|
package/dist/ExifTool.d.ts
CHANGED
|
@@ -205,7 +205,7 @@ export declare class ExifTool {
|
|
|
205
205
|
* be lost in the process.
|
|
206
206
|
*
|
|
207
207
|
* This should only be applied as a last resort to images whose metadata is
|
|
208
|
-
* not readable via {@link .read()}.
|
|
208
|
+
* not readable via {@link ExifTool.read()}.
|
|
209
209
|
*
|
|
210
210
|
* @see https://exiftool.org/faq.html#Q20
|
|
211
211
|
*
|
package/dist/ExifTool.js
CHANGED
|
@@ -313,7 +313,7 @@ class ExifTool {
|
|
|
313
313
|
* be lost in the process.
|
|
314
314
|
*
|
|
315
315
|
* This should only be applied as a last resort to images whose metadata is
|
|
316
|
-
* not readable via {@link .read()}.
|
|
316
|
+
* not readable via {@link ExifTool.read()}.
|
|
317
317
|
*
|
|
318
318
|
* @see https://exiftool.org/faq.html#Q20
|
|
319
319
|
*
|
package/dist/ReadTask.d.ts
CHANGED
|
@@ -2,10 +2,10 @@ import { ExifToolTask } from "./ExifToolTask";
|
|
|
2
2
|
import { Tags } from "./Tags";
|
|
3
3
|
export declare function nullish(s: string | undefined): s is undefined;
|
|
4
4
|
export declare const DefaultReadTaskOptions: {
|
|
5
|
+
readonly includeImageDataMD5: boolean | undefined;
|
|
6
|
+
readonly imageHashType: false | "MD5" | "SHA256" | "SHA512";
|
|
5
7
|
readonly useMWG: boolean;
|
|
6
8
|
readonly numericTags: string[];
|
|
7
|
-
readonly imageHashType: false | "MD5" | "SHA256" | "SHA512";
|
|
8
|
-
readonly includeImageDataMD5: boolean | undefined;
|
|
9
9
|
readonly defaultVideosToUTC: boolean;
|
|
10
10
|
readonly backfillTimezones: boolean;
|
|
11
11
|
readonly inferTimezoneFromDatestamps: boolean;
|