exiftool-vendored 22.2.3 → 23.1.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 +41 -0
- package/dist/AsyncRetry.js +0 -1
- package/dist/AsyncRetry.js.map +1 -1
- package/dist/DateTime.d.ts +2 -1
- package/dist/DateTime.js +3 -2
- package/dist/DateTime.js.map +1 -1
- package/dist/DefaultExifToolOptions.js +1 -1
- package/dist/DefaultExifToolOptions.js.map +1 -1
- package/dist/ExifDateTime.d.ts +10 -5
- package/dist/ExifDateTime.js +67 -118
- package/dist/ExifDateTime.js.map +1 -1
- package/dist/ExifTime.d.ts +15 -5
- package/dist/ExifTime.js +67 -23
- package/dist/ExifTime.js.map +1 -1
- package/dist/ExifToolOptions.d.ts +9 -2
- package/dist/ExifToolOptions.js.map +1 -1
- package/dist/ReadTask.js +51 -24
- package/dist/ReadTask.js.map +1 -1
- package/dist/String.d.ts +1 -1
- package/dist/String.js +6 -4
- package/dist/String.js.map +1 -1
- package/dist/Tags.d.ts +19 -19
- package/dist/TimeParsing.d.ts +29 -0
- package/dist/TimeParsing.js +74 -0
- package/dist/TimeParsing.js.map +1 -0
- package/dist/Timezones.d.ts +16 -3
- package/dist/Timezones.js +154 -45
- package/dist/Timezones.js.map +1 -1
- package/dist/WriteTask.js +0 -2
- package/dist/WriteTask.js.map +1 -1
- package/package.json +16 -14
package/CHANGELOG.md
CHANGED
|
@@ -26,6 +26,47 @@ vendored versions of ExifTool match the version that they vendor.
|
|
|
26
26
|
|
|
27
27
|
## Version history
|
|
28
28
|
|
|
29
|
+
### v23.1.0
|
|
30
|
+
|
|
31
|
+
- 🌱 ExifTool upgraded to [v12.67](https://exiftool.org/history.html#v12.67)
|
|
32
|
+
|
|
33
|
+
- ✨ `ExifTime` now parses and stores timezone offsets if available. This resolves [issue
|
|
34
|
+
#157](https://github.com/photostructure/exiftool-vendored.js/issues/157).
|
|
35
|
+
|
|
36
|
+
- 📦 `ExifDateTime`, `ExifTime`, and `ExifDate` are now [only allowed to try
|
|
37
|
+
to parse keys that includes `date` or
|
|
38
|
+
`time`](https://github.com/photostructure/exiftool-vendored.js/blob/ed7bf9eaea9b1d8ad234fb907953568219fc5bdb/src/ReadTask.ts#L389),
|
|
39
|
+
which avoids incorrect parsing of tags like `MonthDayCreated` (which looks
|
|
40
|
+
like `12:19`)
|
|
41
|
+
|
|
42
|
+
- 📦 Upgrade all deps, but only `devDependencies` were impacted.
|
|
43
|
+
|
|
44
|
+
### v23.0.0
|
|
45
|
+
|
|
46
|
+
- 🏚️ Dropped support for Node.js v16, which is [End-of-Life](https://nodejs.org/en/blog/announcements/nodejs16-eol).
|
|
47
|
+
|
|
48
|
+
- 💔/🐞 If `defaultVideosToUTC` is set to `true`, `read()` will now allow non-UTC
|
|
49
|
+
timezones extractable from other tags to be assigned to `.tz`. Prior
|
|
50
|
+
versions would simply force `.tz` to "UTC" for all videos, which wasn't
|
|
51
|
+
great. Note that "UTC" is still used as the default timezone for all
|
|
52
|
+
datestamps without explicit timezones, just as prior versions did. See [issue
|
|
53
|
+
#156](https://github.com/photostructure/exiftool-vendored.js/issues/156) for
|
|
54
|
+
details.
|
|
55
|
+
|
|
56
|
+
- 💔 `backfillTimezones` now defaults to `true`. Although this is likely to be
|
|
57
|
+
what people expect, but know that this makes the assumption that all encoded
|
|
58
|
+
times without an explicit offset share the same tz, which may not be correct
|
|
59
|
+
(say, if you edit the image in a different timezone from when it was
|
|
60
|
+
captured).
|
|
61
|
+
|
|
62
|
+
- 💔 If `backfillTimezones` is set to `false`, `ExifDateTime` will no longer
|
|
63
|
+
use the current file's `.tz` as a default. Prior versions would inherit the
|
|
64
|
+
file's `.tz`, which might be incorrect.
|
|
65
|
+
|
|
66
|
+
- 📦 `ExifDateTime` now includes an `.inferredZone` field, which may be useful
|
|
67
|
+
in helping to determine how "trustworthy" the zone and actual datestamp
|
|
68
|
+
value is.
|
|
69
|
+
|
|
29
70
|
### v22.2.3
|
|
30
71
|
|
|
31
72
|
- 🐞 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).
|
package/dist/AsyncRetry.js
CHANGED
package/dist/AsyncRetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncRetry.js","sourceRoot":"","sources":["../src/AsyncRetry.ts"],"names":[],"mappings":";;;AAAA,SAAgB,aAAa,CAC3B,CAAuB,EACvB,UAAkB;IAElB,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,MAAM,CAAC,GAAqB,KAAK,IAAI,EAAE;QACrC,IAAI;YACF,OAAO,MAAM,CAAC,EAAE,CAAA;SACjB;QAAC,OAAO,GAAG,EAAE;YACZ,
|
|
1
|
+
{"version":3,"file":"AsyncRetry.js","sourceRoot":"","sources":["../src/AsyncRetry.ts"],"names":[],"mappings":";;;AAAA,SAAgB,aAAa,CAC3B,CAAuB,EACvB,UAAkB;IAElB,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,MAAM,CAAC,GAAqB,KAAK,IAAI,EAAE;QACrC,IAAI;YACF,OAAO,MAAM,CAAC,EAAE,CAAA;SACjB;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,OAAO,GAAG,UAAU,EAAE;gBACxB,OAAO,EAAE,CAAA;gBACT,OAAO,CAAC,EAAE,CAAA;aACX;iBAAM;gBACL,MAAM,GAAG,CAAA;aACV;SACF;IACH,CAAC,CAAA;IACD,OAAO,CAAC,EAAE,CAAA;AACZ,CAAC;AAlBD,sCAkBC"}
|
package/dist/DateTime.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ import { ExifDate } from "./ExifDate";
|
|
|
3
3
|
import { ExifDateTime } from "./ExifDateTime";
|
|
4
4
|
import { ExifTime } from "./ExifTime";
|
|
5
5
|
import { Maybe } from "./Maybe";
|
|
6
|
-
export declare function validDateTime(dt: DateTime):
|
|
6
|
+
export declare function validDateTime(dt: Maybe<DateTime>): dt is DateTime;
|
|
7
|
+
export declare const SecondMs = 1000;
|
|
7
8
|
export declare const MinuteMs: number;
|
|
8
9
|
export declare const HourMs: number;
|
|
9
10
|
export declare const DayMs: number;
|
package/dist/DateTime.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hms = exports.toExifString = exports.dateTimeToExif = exports.isDateOrTime = exports.DayMs = exports.HourMs = exports.MinuteMs = exports.validDateTime = void 0;
|
|
3
|
+
exports.hms = exports.toExifString = exports.dateTimeToExif = exports.isDateOrTime = exports.DayMs = exports.HourMs = exports.MinuteMs = exports.SecondMs = exports.validDateTime = void 0;
|
|
4
4
|
const luxon_1 = require("luxon");
|
|
5
5
|
const ExifDate_1 = require("./ExifDate");
|
|
6
6
|
const ExifDateTime_1 = require("./ExifDateTime");
|
|
@@ -9,7 +9,8 @@ function validDateTime(dt) {
|
|
|
9
9
|
return dt != null && dt.isValid;
|
|
10
10
|
}
|
|
11
11
|
exports.validDateTime = validDateTime;
|
|
12
|
-
exports.
|
|
12
|
+
exports.SecondMs = 1000;
|
|
13
|
+
exports.MinuteMs = 60 * exports.SecondMs;
|
|
13
14
|
exports.HourMs = 60 * exports.MinuteMs;
|
|
14
15
|
exports.DayMs = 24 * exports.HourMs;
|
|
15
16
|
function isDateOrTime(o) {
|
package/dist/DateTime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../src/DateTime.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,yCAAqC;AACrC,iDAA6C;AAC7C,yCAAqC;AAGrC,SAAgB,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../src/DateTime.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,yCAAqC;AACrC,iDAA6C;AAC7C,yCAAqC;AAGrC,SAAgB,aAAa,CAAC,EAAmB;IAC/C,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,CAAA;AACjC,CAAC;AAFD,sCAEC;AAEY,QAAA,QAAQ,GAAG,IAAI,CAAA;AACf,QAAA,QAAQ,GAAG,EAAE,GAAG,gBAAQ,CAAA;AACxB,QAAA,MAAM,GAAG,EAAE,GAAG,gBAAQ,CAAA;AACtB,QAAA,KAAK,GAAG,EAAE,GAAG,cAAM,CAAA;AAIhC,SAAgB,YAAY,CAAC,CAAM;IACjC,OAAO,CACL,CAAC,YAAY,2BAAY;QACzB,CAAC,YAAY,mBAAQ;QACrB,CAAC,YAAY,mBAAQ;QACrB,gBAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CACvB,CAAA;AACH,CAAC;AAPD,oCAOC;AAED,SAAgB,cAAc,CAC5B,CAAW,EACX,IAAiE;IAEjE,OAAO,CAAC,CAAC,QAAQ,CACf,kBAAkB;QAChB,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,MAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,MAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9C,CAAA;AACH,CAAC;AATD,wCASC;AAED,SAAgB,YAAY,CAAC,CAAa;;IACxC,IAAI,gBAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;QAC1B,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;KACzB;SAAM;QACL,OAAO,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,YAAY,iDAAI,CAAA;KAC3B;AACH,CAAC;AAND,oCAMC;AAED,SAAgB,GAAG,CACjB,CAAW,EACX,IAAwC;IAExC,OAAO,CAAC,CAAC,QAAQ,CACf,UAAU,GAAG,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,mBAAmB,MAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAChE,CAAA;AACH,CAAC;AAPD,kBAOC"}
|
|
@@ -67,7 +67,7 @@ exports.DefaultExifToolOptions = Object.freeze({
|
|
|
67
67
|
includeImageDataMD5: undefined,
|
|
68
68
|
imageHashType: false,
|
|
69
69
|
defaultVideosToUTC: true,
|
|
70
|
-
backfillTimezones:
|
|
70
|
+
backfillTimezones: true,
|
|
71
71
|
inferTimezoneFromDatestamps: false,
|
|
72
72
|
geoTz: GeoTz_1.geoTz,
|
|
73
73
|
isIgnorableError: IgnorableError_1.isIgnorableWarning,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultExifToolOptions.js","sourceRoot":"","sources":["../src/DefaultExifToolOptions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAmC;AACnC,+DAA2D;AAC3D,uDAAmD;AAEnD,iDAAoD;AACpD,mCAA+B;AAC/B,qDAAqD;AACrD,uCAAmC;AAEnC,+CAA2C;AAE3C;;;GAGG;AAEU,QAAA,sBAAsB,GAG/B,MAAM,CAAC,MAAM,CAAC;IAChB,GAAG,IAAI,EAAE,CAAC,mBAAmB,EAAE;IAC/B,QAAQ,EAAE,iCAAe;IACzB,kBAAkB,EAAE,GAAG;IACvB,kBAAkB,EAAE,KAAK;IACzB,yEAAyE;IACzE,iBAAiB,EAAE,KAAK;IACxB,oBAAoB,EAAE,IAAI;IAC1B,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,kCAAmB;IACjC,YAAY,EAAE,yCAAmB;IACjC,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,CAAC,IAAA,iBAAO,GAAE;IACrB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,qBAAqB;IAClC,cAAc,EAAE,IAAI,yBAAW,EAAE,CAAC,OAAO;IACzC,yBAAyB,EAAE,KAAK;IAChC,kBAAkB,EAAE,kBAAkB;IACtC,MAAM,EAAE,KAAK;IACb,WAAW,EAAE;QACX,YAAY;QACZ,aAAa;QACb,aAAa;QACb,cAAc;QACd,aAAa;QACb,aAAa;KACd;IACD,mBAAmB,EAAE,SAAS;IAC9B,aAAa,EAAE,KAAK;IACpB,kBAAkB,EAAE,IAAI;IACxB,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"DefaultExifToolOptions.js","sourceRoot":"","sources":["../src/DefaultExifToolOptions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAmC;AACnC,+DAA2D;AAC3D,uDAAmD;AAEnD,iDAAoD;AACpD,mCAA+B;AAC/B,qDAAqD;AACrD,uCAAmC;AAEnC,+CAA2C;AAE3C;;;GAGG;AAEU,QAAA,sBAAsB,GAG/B,MAAM,CAAC,MAAM,CAAC;IAChB,GAAG,IAAI,EAAE,CAAC,mBAAmB,EAAE;IAC/B,QAAQ,EAAE,iCAAe;IACzB,kBAAkB,EAAE,GAAG;IACvB,kBAAkB,EAAE,KAAK;IACzB,yEAAyE;IACzE,iBAAiB,EAAE,KAAK;IACxB,oBAAoB,EAAE,IAAI;IAC1B,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,kCAAmB;IACjC,YAAY,EAAE,yCAAmB;IACjC,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,CAAC,IAAA,iBAAO,GAAE;IACrB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,qBAAqB;IAClC,cAAc,EAAE,IAAI,yBAAW,EAAE,CAAC,OAAO;IACzC,yBAAyB,EAAE,KAAK;IAChC,kBAAkB,EAAE,kBAAkB;IACtC,MAAM,EAAE,KAAK;IACb,WAAW,EAAE;QACX,YAAY;QACZ,aAAa;QACb,aAAa;QACb,cAAc;QACd,aAAa;QACb,aAAa;KACd;IACD,mBAAmB,EAAE,SAAS;IAC9B,aAAa,EAAE,KAAK;IACpB,kBAAkB,EAAE,IAAI;IACxB,iBAAiB,EAAE,IAAI;IACvB,2BAA2B,EAAE,KAAK;IAClC,KAAK,EAAE,aAAK;IACZ,gBAAgB,EAAE,mCAAkB;CACrC,CAAC,CAAA"}
|
package/dist/ExifDateTime.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export declare class ExifDateTime {
|
|
|
15
15
|
readonly tzoffsetMinutes?: number | undefined;
|
|
16
16
|
readonly rawValue?: string | undefined;
|
|
17
17
|
readonly zoneName?: string | undefined;
|
|
18
|
+
readonly inferredZone?: boolean | undefined;
|
|
18
19
|
static from(exifOrIso: string, defaultZone?: Maybe<string>): Maybe<ExifDateTime>;
|
|
19
20
|
static fromISO(iso: string, defaultZone?: Maybe<string>): Maybe<ExifDateTime>;
|
|
20
21
|
/**
|
|
@@ -28,7 +29,6 @@ export declare class ExifDateTime {
|
|
|
28
29
|
* `offsetMinutesToZoneName`.
|
|
29
30
|
*/
|
|
30
31
|
static fromEXIF(text: string, defaultZone?: Maybe<string>): Maybe<ExifDateTime>;
|
|
31
|
-
private static fromPatterns;
|
|
32
32
|
/**
|
|
33
33
|
* Parse the given date-time string, EXIF-formatted.
|
|
34
34
|
*
|
|
@@ -45,6 +45,7 @@ export declare class ExifDateTime {
|
|
|
45
45
|
static fromDateTime(dt: Maybe<DateTime>, opts?: {
|
|
46
46
|
rawValue?: Maybe<string>;
|
|
47
47
|
unsetMilliseconds?: boolean;
|
|
48
|
+
inferredZone?: Maybe<boolean>;
|
|
48
49
|
}): Maybe<ExifDateTime>;
|
|
49
50
|
/**
|
|
50
51
|
* Create an ExifDateTime from a number of milliseconds since the epoch
|
|
@@ -64,14 +65,17 @@ export declare class ExifDateTime {
|
|
|
64
65
|
static now(opts?: DateTimeJSOptions & {
|
|
65
66
|
rawValue?: string;
|
|
66
67
|
}): ExifDateTime;
|
|
67
|
-
|
|
68
|
+
readonly zone: Maybe<string>;
|
|
69
|
+
constructor(year: number, month: number, day: number, hour: number, minute: number, second: number, millisecond?: number | undefined, tzoffsetMinutes?: number | undefined, rawValue?: string | undefined, zoneName?: string | undefined, inferredZone?: boolean | undefined);
|
|
68
70
|
get millis(): number | undefined;
|
|
69
71
|
get hasZone(): boolean;
|
|
70
|
-
get
|
|
71
|
-
setZone(zone
|
|
72
|
+
get unsetMilliseconds(): boolean;
|
|
73
|
+
setZone(zone: string | Zone, opts?: ZoneOptions & {
|
|
74
|
+
inferredZone?: boolean;
|
|
75
|
+
}): Maybe<ExifDateTime>;
|
|
72
76
|
/**
|
|
73
77
|
* CAUTION: This instance will inherit the system timezone if this instance
|
|
74
|
-
* has an unset zone
|
|
78
|
+
* has an unset zone (as Luxon doesn't support "unset" timezones)
|
|
75
79
|
*/
|
|
76
80
|
toDateTime(): DateTime;
|
|
77
81
|
toEpochSeconds(): number;
|
|
@@ -96,6 +100,7 @@ export declare class ExifDateTime {
|
|
|
96
100
|
tzoffsetMinutes: number | undefined;
|
|
97
101
|
rawValue: string | undefined;
|
|
98
102
|
zoneName: string | undefined;
|
|
103
|
+
inferredZone: boolean | undefined;
|
|
99
104
|
};
|
|
100
105
|
/**
|
|
101
106
|
* @return a new ExifDateTime from the given JSON. Note that this instance **may not be valid**.
|
package/dist/ExifDateTime.js
CHANGED
|
@@ -10,7 +10,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
10
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
11
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
12
|
};
|
|
13
|
-
var _ExifDateTime_dt;
|
|
13
|
+
var _a, _ExifDateTime_fromPatterns, _ExifDateTime_looseExifFormats, _ExifDateTime_dt;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.ExifDateTime = void 0;
|
|
16
16
|
const luxon_1 = require("luxon");
|
|
@@ -18,44 +18,27 @@ const DateTime_1 = require("./DateTime");
|
|
|
18
18
|
const Maybe_1 = require("./Maybe");
|
|
19
19
|
const Object_1 = require("./Object");
|
|
20
20
|
const String_1 = require("./String");
|
|
21
|
+
const TimeParsing_1 = require("./TimeParsing");
|
|
21
22
|
const Timezones_1 = require("./Timezones");
|
|
22
|
-
const TimeFmts = [
|
|
23
|
-
{ fmt: "HH:mm:ss.u", unsetMilliseconds: false },
|
|
24
|
-
{ fmt: "HH:mm:ss", unsetMilliseconds: true },
|
|
25
|
-
{ fmt: "HH:mm", unsetMilliseconds: true },
|
|
26
|
-
];
|
|
27
23
|
/**
|
|
28
24
|
* Encodes an ExifDateTime with an optional tz offset in minutes.
|
|
29
25
|
*/
|
|
30
26
|
class ExifDateTime {
|
|
31
27
|
static from(exifOrIso, defaultZone) {
|
|
32
|
-
var
|
|
28
|
+
var _b, _c;
|
|
33
29
|
return (
|
|
34
30
|
// in order of strictness:
|
|
35
|
-
(
|
|
31
|
+
(_c = (_b = this.fromExifStrict(exifOrIso, defaultZone)) !== null && _b !== void 0 ? _b : this.fromISO(exifOrIso, defaultZone)) !== null && _c !== void 0 ? _c : this.fromExifLoose(exifOrIso, defaultZone));
|
|
36
32
|
}
|
|
37
33
|
static fromISO(iso, defaultZone) {
|
|
38
34
|
if ((0, String_1.blank)(iso) || null != iso.match(/^\d+$/))
|
|
39
35
|
return undefined;
|
|
40
36
|
// Unfortunately, DateTime.fromISO() is happy to parse a date with no time,
|
|
41
37
|
// so we have to do this ourselves:
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
{ fmt: "", zone: defaultZone },
|
|
47
|
-
]) {
|
|
48
|
-
for (const sep of ["'T'", " "]) {
|
|
49
|
-
for (const timeFmt of TimeFmts) {
|
|
50
|
-
patterns.push({
|
|
51
|
-
fmt: `y-M-d${sep}${timeFmt.fmt}${z.fmt}`,
|
|
52
|
-
zone: z.zone,
|
|
53
|
-
unsetMilliseconds: timeFmt.unsetMilliseconds,
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return this.fromPatterns(iso, patterns);
|
|
38
|
+
return __classPrivateFieldGet(this, _a, "m", _ExifDateTime_fromPatterns).call(this, iso, (0, TimeParsing_1.timeFormats)({
|
|
39
|
+
formatPrefixes: ["y-MM-dd'T'", "y-MM-dd ", "y-M-d "],
|
|
40
|
+
defaultZone,
|
|
41
|
+
}));
|
|
59
42
|
}
|
|
60
43
|
/**
|
|
61
44
|
* Try to parse a date-time string from EXIF. If there is not both a date
|
|
@@ -68,42 +51,12 @@ class ExifDateTime {
|
|
|
68
51
|
* `offsetMinutesToZoneName`.
|
|
69
52
|
*/
|
|
70
53
|
static fromEXIF(text, defaultZone) {
|
|
71
|
-
var
|
|
54
|
+
var _b;
|
|
72
55
|
if ((0, String_1.blank)(text))
|
|
73
56
|
return undefined;
|
|
74
57
|
return (
|
|
75
58
|
// .fromExifStrict() uses .fromISO() as a backstop
|
|
76
|
-
(
|
|
77
|
-
}
|
|
78
|
-
static fromPatterns(text, fmts) {
|
|
79
|
-
const s = (0, String_1.toS)(text).trim();
|
|
80
|
-
const inputs = [s];
|
|
81
|
-
// Some EXIF datetime will "over-specify" and include both the utc offset
|
|
82
|
-
// *and* the "time zone abbreviation", like PST or PDT.
|
|
83
|
-
// TZAs are between 2 (AT) and 5 (WEST) characters.
|
|
84
|
-
// Unfortunately, luxon doesn't support regex.
|
|
85
|
-
// We only want to strip off the TZA if it isn't "UTC" or "Z"
|
|
86
|
-
if (null == s.match(/[.\d\s](UTC|Z)$/)) {
|
|
87
|
-
const noTza = s.replace(/ [a-z]{2,5}$/i, "");
|
|
88
|
-
if (noTza !== s)
|
|
89
|
-
inputs.push(noTza);
|
|
90
|
-
}
|
|
91
|
-
// PERF: unroll first() to avoid creating closures
|
|
92
|
-
for (const input of inputs) {
|
|
93
|
-
for (const { fmt, zone, unsetMilliseconds } of fmts) {
|
|
94
|
-
const dt = luxon_1.DateTime.fromFormat(input, fmt, {
|
|
95
|
-
setZone: true,
|
|
96
|
-
zone: zone !== null && zone !== void 0 ? zone : Timezones_1.UnsetZone,
|
|
97
|
-
});
|
|
98
|
-
const edt = ExifDateTime.fromDateTime(dt, {
|
|
99
|
-
rawValue: s,
|
|
100
|
-
unsetMilliseconds: unsetMilliseconds !== null && unsetMilliseconds !== void 0 ? unsetMilliseconds : false,
|
|
101
|
-
});
|
|
102
|
-
if (edt != null)
|
|
103
|
-
return edt;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return;
|
|
59
|
+
(_b = this.fromExifStrict(text, defaultZone)) !== null && _b !== void 0 ? _b : this.fromExifLoose(text, defaultZone));
|
|
107
60
|
}
|
|
108
61
|
/**
|
|
109
62
|
* Parse the given date-time string, EXIF-formatted.
|
|
@@ -117,55 +70,29 @@ class ExifDateTime {
|
|
|
117
70
|
* `offsetMinutesToZoneName`.
|
|
118
71
|
*/
|
|
119
72
|
static fromExifStrict(text, defaultZone) {
|
|
120
|
-
var
|
|
73
|
+
var _b;
|
|
121
74
|
if ((0, String_1.blank)(text))
|
|
122
75
|
return undefined;
|
|
123
|
-
|
|
124
|
-
for (const z of [
|
|
125
|
-
{ fmt: "ZZ", zone: undefined },
|
|
126
|
-
{ fmt: "'Z'", zone: "UTC" },
|
|
127
|
-
{ fmt: "", zone: defaultZone },
|
|
128
|
-
]) {
|
|
129
|
-
for (const timeFmt of TimeFmts) {
|
|
130
|
-
patterns.push({
|
|
131
|
-
fmt: `y:M:d ${timeFmt.fmt}${z.fmt}`,
|
|
132
|
-
zone: z.zone,
|
|
133
|
-
unsetMilliseconds: timeFmt.unsetMilliseconds,
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return ((_a = this.fromPatterns(text, patterns)) !== null && _a !== void 0 ? _a :
|
|
76
|
+
return ((_b = __classPrivateFieldGet(this, _a, "m", _ExifDateTime_fromPatterns).call(this, text, (0, TimeParsing_1.timeFormats)({ formatPrefixes: ["y:MM:dd ", "y:M:d "], defaultZone }))) !== null && _b !== void 0 ? _b :
|
|
138
77
|
// Not found yet? Maybe it's in ISO format? See
|
|
139
78
|
// https://github.com/photostructure/exiftool-vendored.js/issues/71
|
|
140
79
|
this.fromISO(text, defaultZone));
|
|
141
80
|
}
|
|
142
81
|
static fromExifLoose(text, defaultZone) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
// The following are from actual datestamps seen in the wild:
|
|
147
|
-
const formats = [
|
|
148
|
-
"MMM d y H:m:s",
|
|
149
|
-
"MMM d y, H:m:s",
|
|
150
|
-
// Thu Oct 13 00:12:27 2016:
|
|
151
|
-
"ccc MMM d H:m:s y",
|
|
152
|
-
];
|
|
153
|
-
return this.fromPatterns(text, [
|
|
154
|
-
...formats.map((fmt) => ({ fmt: fmt + "ZZ" })),
|
|
155
|
-
// And the same formats, without offsets with default zone:
|
|
156
|
-
...formats.map((fmt) => ({ fmt, zone })),
|
|
157
|
-
]);
|
|
82
|
+
return (0, String_1.blank)(text)
|
|
83
|
+
? undefined
|
|
84
|
+
: __classPrivateFieldGet(this, _a, "m", _ExifDateTime_fromPatterns).call(this, text, __classPrivateFieldGet(this, _a, "m", _ExifDateTime_looseExifFormats).call(this, defaultZone));
|
|
158
85
|
}
|
|
159
86
|
static fromDateTime(dt, opts) {
|
|
160
|
-
var
|
|
87
|
+
var _b;
|
|
161
88
|
if (dt == null || !dt.isValid || dt.year === 0 || dt.year === 1) {
|
|
162
89
|
return undefined;
|
|
163
90
|
}
|
|
164
|
-
return new
|
|
91
|
+
return new _a(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.millisecond === 0 && true === (opts === null || opts === void 0 ? void 0 : opts.unsetMilliseconds)
|
|
165
92
|
? undefined
|
|
166
|
-
: dt.millisecond, dt.offset === Timezones_1.UnsetZoneOffsetMinutes ? undefined : dt.offset, opts === null || opts === void 0 ? void 0 : opts.rawValue, dt.zoneName == null || ((
|
|
93
|
+
: dt.millisecond, dt.offset === Timezones_1.UnsetZoneOffsetMinutes ? undefined : dt.offset, opts === null || opts === void 0 ? void 0 : opts.rawValue, dt.zoneName == null || ((_b = dt.zone) === null || _b === void 0 ? void 0 : _b.name) === Timezones_1.UnsetZone.name
|
|
167
94
|
? undefined
|
|
168
|
-
: dt.zoneName);
|
|
95
|
+
: dt.zoneName, opts === null || opts === void 0 ? void 0 : opts.inferredZone);
|
|
169
96
|
}
|
|
170
97
|
/**
|
|
171
98
|
* Create an ExifDateTime from a number of milliseconds since the epoch
|
|
@@ -197,7 +124,7 @@ class ExifDateTime {
|
|
|
197
124
|
static now(opts = {}) {
|
|
198
125
|
return this.fromMillis(Date.now(), opts);
|
|
199
126
|
}
|
|
200
|
-
constructor(year, month, day, hour, minute, second, millisecond, tzoffsetMinutes, rawValue, zoneName) {
|
|
127
|
+
constructor(year, month, day, hour, minute, second, millisecond, tzoffsetMinutes, rawValue, zoneName, inferredZone) {
|
|
201
128
|
this.year = year;
|
|
202
129
|
this.month = month;
|
|
203
130
|
this.day = day;
|
|
@@ -208,41 +135,40 @@ class ExifDateTime {
|
|
|
208
135
|
this.tzoffsetMinutes = tzoffsetMinutes;
|
|
209
136
|
this.rawValue = rawValue;
|
|
210
137
|
this.zoneName = zoneName;
|
|
138
|
+
this.inferredZone = inferredZone;
|
|
211
139
|
_ExifDateTime_dt.set(this, void 0);
|
|
140
|
+
this.zone = (0, Timezones_1.getZoneName)({ zoneName, tzoffsetMinutes });
|
|
212
141
|
}
|
|
213
142
|
get millis() {
|
|
214
143
|
return this.millisecond;
|
|
215
144
|
}
|
|
216
145
|
get hasZone() {
|
|
217
|
-
return
|
|
146
|
+
return this.zone != null;
|
|
218
147
|
}
|
|
219
|
-
get
|
|
220
|
-
|
|
221
|
-
return (_a = this.zoneName) !== null && _a !== void 0 ? _a : (0, Timezones_1.offsetMinutesToZoneName)(this.tzoffsetMinutes);
|
|
148
|
+
get unsetMilliseconds() {
|
|
149
|
+
return this.millisecond == null;
|
|
222
150
|
}
|
|
223
151
|
setZone(zone, opts) {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
152
|
+
var _b;
|
|
153
|
+
const dt = (0, TimeParsing_1.setZone)({
|
|
154
|
+
zone,
|
|
155
|
+
src: this.toDateTime(),
|
|
156
|
+
srcHasZone: this.hasZone,
|
|
157
|
+
opts,
|
|
229
158
|
});
|
|
230
|
-
|
|
159
|
+
return _a.fromDateTime(dt, {
|
|
231
160
|
rawValue: this.rawValue,
|
|
232
161
|
unsetMilliseconds: this.millisecond == null,
|
|
162
|
+
inferredZone: (_b = opts === null || opts === void 0 ? void 0 : opts.inferredZone) !== null && _b !== void 0 ? _b : true,
|
|
233
163
|
});
|
|
234
|
-
// We know this will be defined: this is valid, so changing the zone will
|
|
235
|
-
// also be valid.
|
|
236
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
237
|
-
return result;
|
|
238
164
|
}
|
|
239
165
|
/**
|
|
240
166
|
* CAUTION: This instance will inherit the system timezone if this instance
|
|
241
|
-
* has an unset zone
|
|
167
|
+
* has an unset zone (as Luxon doesn't support "unset" timezones)
|
|
242
168
|
*/
|
|
243
169
|
toDateTime() {
|
|
244
|
-
var
|
|
245
|
-
return (__classPrivateFieldSet(this, _ExifDateTime_dt, (
|
|
170
|
+
var _b;
|
|
171
|
+
return (__classPrivateFieldSet(this, _ExifDateTime_dt, (_b = __classPrivateFieldGet(this, _ExifDateTime_dt, "f")) !== null && _b !== void 0 ? _b : luxon_1.DateTime.fromObject({
|
|
246
172
|
year: this.year,
|
|
247
173
|
month: this.month,
|
|
248
174
|
day: this.day,
|
|
@@ -261,9 +187,9 @@ class ExifDateTime {
|
|
|
261
187
|
return this.toDateTime().toJSDate();
|
|
262
188
|
}
|
|
263
189
|
toISOString(options = {}) {
|
|
264
|
-
var
|
|
190
|
+
var _b;
|
|
265
191
|
return (0, Maybe_1.denull)(this.toDateTime().toISO({
|
|
266
|
-
suppressMilliseconds: (
|
|
192
|
+
suppressMilliseconds: (_b = options.suppressMilliseconds) !== null && _b !== void 0 ? _b : this.millisecond == null,
|
|
267
193
|
includeOffset: this.hasZone && options.includeOffset !== false,
|
|
268
194
|
}));
|
|
269
195
|
}
|
|
@@ -298,19 +224,21 @@ class ExifDateTime {
|
|
|
298
224
|
tzoffsetMinutes: this.tzoffsetMinutes,
|
|
299
225
|
rawValue: this.rawValue,
|
|
300
226
|
zoneName: this.zoneName,
|
|
227
|
+
inferredZone: this.inferredZone,
|
|
301
228
|
};
|
|
302
229
|
}
|
|
303
230
|
/**
|
|
304
231
|
* @return a new ExifDateTime from the given JSON. Note that this instance **may not be valid**.
|
|
305
232
|
*/
|
|
306
233
|
static fromJSON(json) {
|
|
307
|
-
return new
|
|
234
|
+
return new _a(json.year, json.month, json.day, json.hour, json.minute, json.second, json.millisecond, json.tzoffsetMinutes, json.rawValue, json.zoneName, json.inferredZone);
|
|
308
235
|
}
|
|
309
236
|
maybeMatchZone(target, maxDeltaMs = 14 * DateTime_1.MinuteMs) {
|
|
310
|
-
var
|
|
311
|
-
|
|
237
|
+
var _b, _c, _d;
|
|
238
|
+
const targetZone = target.zone;
|
|
239
|
+
if (targetZone == null || !target.hasZone)
|
|
312
240
|
return;
|
|
313
|
-
return ((
|
|
241
|
+
return ((_c = (_b = this.setZone(targetZone, { keepLocalTime: false })) === null || _b === void 0 ? void 0 : _b.ifClose(target, maxDeltaMs)) !== null && _c !== void 0 ? _c : (_d = this.setZone(targetZone, { keepLocalTime: true })) === null || _d === void 0 ? void 0 : _d.ifClose(target, maxDeltaMs));
|
|
314
242
|
}
|
|
315
243
|
ifClose(target, maxDeltaMs = 14 * DateTime_1.MinuteMs) {
|
|
316
244
|
const ts = this.toMillis();
|
|
@@ -322,9 +250,30 @@ class ExifDateTime {
|
|
|
322
250
|
if (!this.hasZone) {
|
|
323
251
|
dt = dt.setZone(Timezones_1.UnsetZone, { keepLocalTime: true });
|
|
324
252
|
}
|
|
325
|
-
return
|
|
253
|
+
return _a.fromDateTime(dt, this);
|
|
326
254
|
}
|
|
327
255
|
}
|
|
328
256
|
exports.ExifDateTime = ExifDateTime;
|
|
329
|
-
_ExifDateTime_dt = new WeakMap()
|
|
257
|
+
_a = ExifDateTime, _ExifDateTime_dt = new WeakMap(), _ExifDateTime_fromPatterns = function _ExifDateTime_fromPatterns(text, fmts) {
|
|
258
|
+
const result = (0, TimeParsing_1.parseDateTime)(text, fmts);
|
|
259
|
+
return result == null
|
|
260
|
+
? undefined
|
|
261
|
+
: _a.fromDateTime(result.dt, {
|
|
262
|
+
rawValue: text,
|
|
263
|
+
unsetMilliseconds: result.unsetMilliseconds,
|
|
264
|
+
inferredZone: result.inferredZone,
|
|
265
|
+
});
|
|
266
|
+
}, _ExifDateTime_looseExifFormats = function* _ExifDateTime_looseExifFormats(defaultZone) {
|
|
267
|
+
// The following are from actual datestamps seen in the wild (!!)
|
|
268
|
+
const formats = [
|
|
269
|
+
"MMM d y HH:mm:ss",
|
|
270
|
+
"MMM d y, HH:mm:ss",
|
|
271
|
+
// Thu Oct 13 00:12:27 2016:
|
|
272
|
+
"ccc MMM d HH:mm:ss y",
|
|
273
|
+
];
|
|
274
|
+
const zone = (0, String_1.notBlank)(defaultZone) ? defaultZone : Timezones_1.UnsetZone;
|
|
275
|
+
for (const fmt of formats) {
|
|
276
|
+
yield { fmt: fmt, zone, inferredZone: true };
|
|
277
|
+
}
|
|
278
|
+
};
|
|
330
279
|
//# 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":";;;;;;;;;;;;;;;AAAA,iCAOc;AACd,yCAAqD;AACrD,mCAAuC;AACvC,qCAA+B;AAC/B,
|
|
1
|
+
{"version":3,"file":"ExifDateTime.js","sourceRoot":"","sources":["../src/ExifDateTime.ts"],"names":[],"mappings":"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"}
|
package/dist/ExifTime.d.ts
CHANGED
|
@@ -1,22 +1,30 @@
|
|
|
1
|
-
import { DateTime } from "luxon";
|
|
1
|
+
import { DateTime, Zone, ZoneOptions } from "luxon";
|
|
2
2
|
import { Maybe } from "./Maybe";
|
|
3
3
|
/**
|
|
4
4
|
* Encodes an ExifTime (which may not have a timezone offset)
|
|
5
5
|
*/
|
|
6
6
|
export declare class ExifTime {
|
|
7
|
+
#private;
|
|
7
8
|
readonly hour: number;
|
|
8
9
|
readonly minute: number;
|
|
9
10
|
readonly second: number;
|
|
10
11
|
readonly millisecond?: number | undefined;
|
|
11
12
|
readonly rawValue?: string | undefined;
|
|
12
|
-
|
|
13
|
-
static
|
|
14
|
-
|
|
13
|
+
readonly inferredZone?: boolean | undefined;
|
|
14
|
+
static fromEXIF(text: string, defaultZone?: Maybe<string>): Maybe<ExifTime>;
|
|
15
|
+
static fromDateTime(dt: Maybe<DateTime>, rawValue?: string, zone?: string, inferredZone?: boolean, unsetMilliseconds?: boolean): Maybe<ExifTime>;
|
|
16
|
+
readonly zone: Maybe<string>;
|
|
17
|
+
constructor(hour: number, minute: number, second: number, millisecond?: number | undefined, rawValue?: string | undefined, zoneName?: Maybe<string>, inferredZone?: boolean | undefined);
|
|
18
|
+
toDateTime(): DateTime;
|
|
19
|
+
/**
|
|
20
|
+
* Alias for `.millisecond`
|
|
21
|
+
*/
|
|
15
22
|
get millis(): number | undefined;
|
|
16
|
-
|
|
23
|
+
get hasZone(): boolean;
|
|
17
24
|
toString(): string;
|
|
18
25
|
toISOString(): string;
|
|
19
26
|
toExifString(): string;
|
|
27
|
+
setZone(zone: string | Zone, opts?: ZoneOptions): Maybe<ExifTime>;
|
|
20
28
|
toJSON(): {
|
|
21
29
|
_ctor: string;
|
|
22
30
|
hour: number;
|
|
@@ -24,6 +32,8 @@ export declare class ExifTime {
|
|
|
24
32
|
second: number;
|
|
25
33
|
millisecond: number | undefined;
|
|
26
34
|
rawValue: string | undefined;
|
|
35
|
+
zone: Maybe<string>;
|
|
36
|
+
inferredZone: boolean | undefined;
|
|
27
37
|
};
|
|
28
38
|
static fromJSON(json: ReturnType<ExifTime["toJSON"]>): ExifTime;
|
|
29
39
|
}
|