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.
- package/CHANGELOG.md +31 -2
- package/dist/AsyncRetry.js +0 -1
- package/dist/AsyncRetry.js.map +1 -1
- package/dist/CapturedAtTagNames.d.ts +1 -1
- package/dist/CapturedAtTagNames.js +4 -2
- package/dist/CapturedAtTagNames.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/DefaultCreateDateTagNames.d.ts +4 -0
- package/dist/DefaultCreateDateTagNames.js +9 -0
- package/dist/DefaultCreateDateTagNames.js.map +1 -0
- package/dist/DefaultExifToolOptions.js +2 -0
- package/dist/DefaultExifToolOptions.js.map +1 -1
- package/dist/ExifDateTime.d.ts +6 -4
- package/dist/ExifDateTime.js +63 -130
- 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/ExifTool.d.ts +17 -10
- package/dist/ExifTool.js +19 -11
- package/dist/ExifTool.js.map +1 -1
- package/dist/ExifToolOptions.d.ts +49 -26
- package/dist/ExifToolOptions.js.map +1 -1
- package/dist/Maybe.d.ts +1 -0
- package/dist/Maybe.js +5 -1
- package/dist/Maybe.js.map +1 -1
- package/dist/ReadTask.d.ts +1 -0
- package/dist/ReadTask.js +28 -74
- package/dist/ReadTask.js.map +1 -1
- package/dist/ResourceEvent.d.ts +1 -0
- package/dist/ResourceEvent.js +13 -0
- package/dist/ResourceEvent.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/Struct.js +2 -1
- package/dist/Struct.js.map +1 -1
- package/dist/Tags.d.ts +19 -19
- package/dist/TimeParsing.d.ts +29 -0
- package/dist/TimeParsing.js +75 -0
- package/dist/TimeParsing.js.map +1 -0
- package/dist/Timezones.d.ts +33 -23
- package/dist/Timezones.js +271 -86
- package/dist/Timezones.js.map +1 -1
- package/dist/Version.d.ts +1 -0
- package/dist/Version.js +6 -0
- package/dist/Version.js.map +1 -1
- package/dist/WriteTask.js +0 -2
- package/dist/WriteTask.js.map +1 -1
- package/package.json +14 -12
package/CHANGELOG.md
CHANGED
|
@@ -26,6 +26,33 @@ vendored versions of ExifTool match the version that they vendor.
|
|
|
26
26
|
|
|
27
27
|
## Version history
|
|
28
28
|
|
|
29
|
+
### v23.2.0
|
|
30
|
+
|
|
31
|
+
- ✨ Timezone parsing improvements:
|
|
32
|
+
- Added [`ExifToolOptions.inferTimezoneFromDatestampTags`](https://photostructure.github.io/exiftool-vendored.js/interfaces/ExifToolOptions.html#inferTimezoneFromDatestampTags).
|
|
33
|
+
- Timezone inference from datestamps now skips over UTC values, as Google
|
|
34
|
+
Takeout (and several other applications) may spuriously set "+00:00" to
|
|
35
|
+
datestamps.
|
|
36
|
+
- ReadTask.parse in prior versions had to scan all tags twice to set the
|
|
37
|
+
timezone. Code was refactored to do this in a single pass.
|
|
38
|
+
- Timezone extraction and normalization was improved.
|
|
39
|
+
|
|
40
|
+
- 📦 Add `creationDate` to [CapturedAtTagNames](https://photostructure.github.io/exiftool-vendored.js/variables/CapturedAtTagNames.html). [See PR#159](https://github.com/photostructure/exiftool-vendored.js/pull/159).
|
|
41
|
+
|
|
42
|
+
### v23.1.0
|
|
43
|
+
|
|
44
|
+
- 🌱 ExifTool upgraded to [v12.67](https://exiftool.org/history.html#v12.67)
|
|
45
|
+
|
|
46
|
+
- ✨ `ExifTime` now parses and stores timezone offsets if available. This resolves [issue
|
|
47
|
+
#157](https://github.com/photostructure/exiftool-vendored.js/issues/157).
|
|
48
|
+
- 📦 `ExifDateTime`, `ExifTime`, and `ExifDate` are now [only allowed to try
|
|
49
|
+
to parse keys that includes `date` or
|
|
50
|
+
`time`](https://github.com/photostructure/exiftool-vendored.js/blob/ed7bf9eaea9b1d8ad234fb907953568219fc5bdb/src/ReadTask.ts#L389),
|
|
51
|
+
which avoids incorrect parsing of tags like `MonthDayCreated` (which looks
|
|
52
|
+
like `12:19`)
|
|
53
|
+
|
|
54
|
+
- 📦 Upgrade all deps, but only `devDependencies` were impacted.
|
|
55
|
+
|
|
29
56
|
### v23.0.0
|
|
30
57
|
|
|
31
58
|
- 🏚️ Dropped support for Node.js v16, which is [End-of-Life](https://nodejs.org/en/blog/announcements/nodejs16-eol).
|
|
@@ -39,8 +66,10 @@ vendored versions of ExifTool match the version that they vendor.
|
|
|
39
66
|
details.
|
|
40
67
|
|
|
41
68
|
- 💔 `backfillTimezones` now defaults to `true`. Although this is likely to be
|
|
42
|
-
what people expect, know that
|
|
43
|
-
|
|
69
|
+
what people expect, but know that this makes the assumption that all encoded
|
|
70
|
+
times without an explicit offset share the same tz, which may not be correct
|
|
71
|
+
(say, if you edit the image in a different timezone from when it was
|
|
72
|
+
captured).
|
|
44
73
|
|
|
45
74
|
- 💔 If `backfillTimezones` is set to `false`, `ExifDateTime` will no longer
|
|
46
75
|
use the current file's `.tz` as a default. Prior versions would inherit the
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CapturedAtTagNames: readonly ["SubSecDateTimeOriginal", "
|
|
1
|
+
export declare const CapturedAtTagNames: readonly ["SubSecDateTimeOriginal", "SubSecCreateDate", "SubSecMediaCreateDate", "DateTimeOriginal", "CreateDate", "MediaCreateDate", "CreationDate", "DateTimeCreated", "TimeCreated"];
|
|
@@ -3,11 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CapturedAtTagNames = void 0;
|
|
4
4
|
exports.CapturedAtTagNames = [
|
|
5
5
|
"SubSecDateTimeOriginal",
|
|
6
|
-
"DateTimeOriginal",
|
|
7
6
|
"SubSecCreateDate",
|
|
8
|
-
"CreateDate",
|
|
9
7
|
"SubSecMediaCreateDate",
|
|
8
|
+
"DateTimeOriginal",
|
|
9
|
+
"CreateDate",
|
|
10
10
|
"MediaCreateDate",
|
|
11
|
+
"CreationDate",
|
|
11
12
|
"DateTimeCreated",
|
|
13
|
+
"TimeCreated", // < may not have the date
|
|
12
14
|
];
|
|
13
15
|
//# sourceMappingURL=CapturedAtTagNames.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CapturedAtTagNames.js","sourceRoot":"","sources":["../src/CapturedAtTagNames.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"CapturedAtTagNames.js","sourceRoot":"","sources":["../src/CapturedAtTagNames.ts"],"names":[],"mappings":";;;AAEa,QAAA,kBAAkB,GAAG;IAChC,wBAAwB;IACxB,kBAAkB;IAClB,uBAAuB;IACvB,kBAAkB;IAClB,YAAY;IACZ,iBAAiB;IACjB,cAAc;IACd,iBAAiB;IACjB,aAAa,EAAE,0BAA0B;CACC,CAAA"}
|
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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated use {@link CapturedAtTagNames} instead.
|
|
3
|
+
*/
|
|
4
|
+
export declare const DefaultCreateDateTagNames: readonly ["SubSecDateTimeOriginal", "SubSecCreateDate", "SubSecMediaCreateDate", "DateTimeOriginal", "CreateDate", "MediaCreateDate", "CreationDate", "DateTimeCreated", "TimeCreated"];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultCreateDateTagNames = void 0;
|
|
4
|
+
const CapturedAtTagNames_1 = require("./CapturedAtTagNames");
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated use {@link CapturedAtTagNames} instead.
|
|
7
|
+
*/
|
|
8
|
+
exports.DefaultCreateDateTagNames = CapturedAtTagNames_1.CapturedAtTagNames;
|
|
9
|
+
//# sourceMappingURL=DefaultCreateDateTagNames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultCreateDateTagNames.js","sourceRoot":"","sources":["../src/DefaultCreateDateTagNames.ts"],"names":[],"mappings":";;;AAAA,6DAAyD;AAEzD;;GAEG;AACU,QAAA,yBAAyB,GAAG,uCAAkB,CAAA"}
|
|
@@ -25,6 +25,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.DefaultExifToolOptions = void 0;
|
|
27
27
|
const bc = __importStar(require("batch-cluster"));
|
|
28
|
+
const CapturedAtTagNames_1 = require("./CapturedAtTagNames");
|
|
28
29
|
const DefaultExiftoolArgs_1 = require("./DefaultExiftoolArgs");
|
|
29
30
|
const DefaultMaxProcs_1 = require("./DefaultMaxProcs");
|
|
30
31
|
const FindExiftool_1 = require("./FindExiftool");
|
|
@@ -69,6 +70,7 @@ exports.DefaultExifToolOptions = Object.freeze({
|
|
|
69
70
|
defaultVideosToUTC: true,
|
|
70
71
|
backfillTimezones: true,
|
|
71
72
|
inferTimezoneFromDatestamps: false,
|
|
73
|
+
inferTimezoneFromDatestampTags: [...CapturedAtTagNames_1.CapturedAtTagNames],
|
|
72
74
|
geoTz: GeoTz_1.geoTz,
|
|
73
75
|
isIgnorableError: IgnorableError_1.isIgnorableWarning,
|
|
74
76
|
});
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"DefaultExifToolOptions.js","sourceRoot":"","sources":["../src/DefaultExifToolOptions.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAmC;AACnC,6DAAyD;AACzD,+DAA2D;AAC3D,uDAAmD;AAEnD,iDAAoD;AACpD,mCAA+B;AAC/B,qDAAqD;AACrD,uCAAmC;AAEnC,+CAA2C;AAE3C;;;GAGG;AACU,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,8BAA8B,EAAE,CAAC,GAAG,uCAAkB,CAAC;IACvD,KAAK,EAAE,aAAK;IACZ,gBAAgB,EAAE,mCAAkB;CACrC,CAAC,CAAA"}
|
package/dist/ExifDateTime.d.ts
CHANGED
|
@@ -29,7 +29,6 @@ export declare class ExifDateTime {
|
|
|
29
29
|
* `offsetMinutesToZoneName`.
|
|
30
30
|
*/
|
|
31
31
|
static fromEXIF(text: string, defaultZone?: Maybe<string>): Maybe<ExifDateTime>;
|
|
32
|
-
private static fromPatterns;
|
|
33
32
|
/**
|
|
34
33
|
* Parse the given date-time string, EXIF-formatted.
|
|
35
34
|
*
|
|
@@ -66,14 +65,17 @@ export declare class ExifDateTime {
|
|
|
66
65
|
static now(opts?: DateTimeJSOptions & {
|
|
67
66
|
rawValue?: string;
|
|
68
67
|
}): ExifDateTime;
|
|
68
|
+
readonly zone: Maybe<string>;
|
|
69
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);
|
|
70
70
|
get millis(): number | undefined;
|
|
71
71
|
get hasZone(): boolean;
|
|
72
|
-
get
|
|
73
|
-
setZone(zone
|
|
72
|
+
get unsetMilliseconds(): boolean;
|
|
73
|
+
setZone(zone: string | Zone, opts?: ZoneOptions & {
|
|
74
|
+
inferredZone?: boolean;
|
|
75
|
+
}): Maybe<ExifDateTime>;
|
|
74
76
|
/**
|
|
75
77
|
* CAUTION: This instance will inherit the system timezone if this instance
|
|
76
|
-
* has an unset zone
|
|
78
|
+
* has an unset zone (as Luxon doesn't support "unset" timezones)
|
|
77
79
|
*/
|
|
78
80
|
toDateTime(): DateTime;
|
|
79
81
|
toEpochSeconds(): number;
|
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,45 +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, inferredZone: true },
|
|
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
|
-
inferredZone: z.inferredZone,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
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
|
+
}));
|
|
60
42
|
}
|
|
61
43
|
/**
|
|
62
44
|
* Try to parse a date-time string from EXIF. If there is not both a date
|
|
@@ -69,54 +51,12 @@ class ExifDateTime {
|
|
|
69
51
|
* `offsetMinutesToZoneName`.
|
|
70
52
|
*/
|
|
71
53
|
static fromEXIF(text, defaultZone) {
|
|
72
|
-
var
|
|
54
|
+
var _b;
|
|
73
55
|
if ((0, String_1.blank)(text))
|
|
74
56
|
return undefined;
|
|
75
57
|
return (
|
|
76
58
|
// .fromExifStrict() uses .fromISO() as a backstop
|
|
77
|
-
(
|
|
78
|
-
}
|
|
79
|
-
static fromPatterns(text, fmts) {
|
|
80
|
-
var _a, _b;
|
|
81
|
-
const s = (0, String_1.toS)(text).trim();
|
|
82
|
-
const inputs = [s];
|
|
83
|
-
// Some EXIF datetime will "over-specify" and include both the utc offset
|
|
84
|
-
// *and* the "time zone abbreviation", like PST or PDT.
|
|
85
|
-
// TZAs are between 2 (AT) and 5 (WEST) characters.
|
|
86
|
-
// Unfortunately, luxon doesn't support regex.
|
|
87
|
-
// We only want to strip off the TZA if it isn't "UTC" or "Z"
|
|
88
|
-
const zuluSuffix = s.match(/[.\d\s](UTC|Z)$/);
|
|
89
|
-
if (null == zuluSuffix) {
|
|
90
|
-
const noTza = s.replace(/ [a-z]{2,5}$/i, "");
|
|
91
|
-
if (noTza !== s)
|
|
92
|
-
inputs.push(noTza);
|
|
93
|
-
}
|
|
94
|
-
for (const input of inputs) {
|
|
95
|
-
for (const ea of fmts) {
|
|
96
|
-
const dt = luxon_1.DateTime.fromFormat(input, ea.fmt, {
|
|
97
|
-
setZone: true,
|
|
98
|
-
zone: (_a = ea.zone) !== null && _a !== void 0 ? _a : Timezones_1.UnsetZone,
|
|
99
|
-
});
|
|
100
|
-
if (dt != null && dt.isValid) {
|
|
101
|
-
const zoneUnset = dt.zone == null || dt.zone === Timezones_1.UnsetZone;
|
|
102
|
-
let inferredZone = zoneUnset ? false : ea.inferredZone;
|
|
103
|
-
if (inferredZone == null) {
|
|
104
|
-
// this is pretty miserable, but luxon doesn't expose how it got
|
|
105
|
-
// the zone, so we have to resort to this hack:
|
|
106
|
-
const dt2 = luxon_1.DateTime.fromFormat(input, ea.fmt, { setZone: true });
|
|
107
|
-
inferredZone = dt.zone !== dt2.zone;
|
|
108
|
-
}
|
|
109
|
-
const edt = ExifDateTime.fromDateTime(dt, {
|
|
110
|
-
rawValue: s,
|
|
111
|
-
unsetMilliseconds: (_b = ea.unsetMilliseconds) !== null && _b !== void 0 ? _b : false,
|
|
112
|
-
inferredZone,
|
|
113
|
-
});
|
|
114
|
-
if (edt != null)
|
|
115
|
-
return edt;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return;
|
|
59
|
+
(_b = this.fromExifStrict(text, defaultZone)) !== null && _b !== void 0 ? _b : this.fromExifLoose(text, defaultZone));
|
|
120
60
|
}
|
|
121
61
|
/**
|
|
122
62
|
* Parse the given date-time string, EXIF-formatted.
|
|
@@ -130,54 +70,27 @@ class ExifDateTime {
|
|
|
130
70
|
* `offsetMinutesToZoneName`.
|
|
131
71
|
*/
|
|
132
72
|
static fromExifStrict(text, defaultZone) {
|
|
133
|
-
var
|
|
73
|
+
var _b;
|
|
134
74
|
if ((0, String_1.blank)(text))
|
|
135
75
|
return undefined;
|
|
136
|
-
|
|
137
|
-
for (const z of [
|
|
138
|
-
{ fmt: "ZZ", zone: undefined, inferredZone: false },
|
|
139
|
-
{ fmt: "'Z'", zone: "UTC", inferredZone: false },
|
|
140
|
-
{ fmt: "", zone: defaultZone, inferredZone: true },
|
|
141
|
-
]) {
|
|
142
|
-
for (const timeFmt of TimeFmts) {
|
|
143
|
-
patterns.push({
|
|
144
|
-
fmt: `y:M:d ${timeFmt.fmt}${z.fmt}`,
|
|
145
|
-
zone: z.zone,
|
|
146
|
-
unsetMilliseconds: timeFmt.unsetMilliseconds,
|
|
147
|
-
inferredZone: z.inferredZone,
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
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 :
|
|
152
77
|
// Not found yet? Maybe it's in ISO format? See
|
|
153
78
|
// https://github.com/photostructure/exiftool-vendored.js/issues/71
|
|
154
79
|
this.fromISO(text, defaultZone));
|
|
155
80
|
}
|
|
156
81
|
static fromExifLoose(text, defaultZone) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
// The following are from actual datestamps seen in the wild:
|
|
161
|
-
const formats = [
|
|
162
|
-
"MMM d y H:m:s",
|
|
163
|
-
"MMM d y, H:m:s",
|
|
164
|
-
// Thu Oct 13 00:12:27 2016:
|
|
165
|
-
"ccc MMM d H:m:s y",
|
|
166
|
-
];
|
|
167
|
-
return this.fromPatterns(text, [
|
|
168
|
-
...formats.map((fmt) => ({ fmt: fmt + "ZZ", inferredZone: false })),
|
|
169
|
-
// And the same formats, without offsets with default zone:
|
|
170
|
-
...formats.map((fmt) => ({ fmt, zone, inferredZone: true })),
|
|
171
|
-
]);
|
|
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));
|
|
172
85
|
}
|
|
173
86
|
static fromDateTime(dt, opts) {
|
|
174
|
-
var
|
|
87
|
+
var _b;
|
|
175
88
|
if (dt == null || !dt.isValid || dt.year === 0 || dt.year === 1) {
|
|
176
89
|
return undefined;
|
|
177
90
|
}
|
|
178
|
-
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)
|
|
179
92
|
? undefined
|
|
180
|
-
: 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
|
|
181
94
|
? undefined
|
|
182
95
|
: dt.zoneName, opts === null || opts === void 0 ? void 0 : opts.inferredZone);
|
|
183
96
|
}
|
|
@@ -224,40 +137,38 @@ class ExifDateTime {
|
|
|
224
137
|
this.zoneName = zoneName;
|
|
225
138
|
this.inferredZone = inferredZone;
|
|
226
139
|
_ExifDateTime_dt.set(this, void 0);
|
|
140
|
+
this.zone = (0, Timezones_1.getZoneName)({ zoneName, tzoffsetMinutes });
|
|
227
141
|
}
|
|
228
142
|
get millis() {
|
|
229
143
|
return this.millisecond;
|
|
230
144
|
}
|
|
231
145
|
get hasZone() {
|
|
232
|
-
return
|
|
146
|
+
return this.zone != null;
|
|
233
147
|
}
|
|
234
|
-
get
|
|
235
|
-
|
|
236
|
-
return (_a = this.zoneName) !== null && _a !== void 0 ? _a : (0, Timezones_1.offsetMinutesToZoneName)(this.tzoffsetMinutes);
|
|
148
|
+
get unsetMilliseconds() {
|
|
149
|
+
return this.millisecond == null;
|
|
237
150
|
}
|
|
238
151
|
setZone(zone, opts) {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
152
|
+
var _b;
|
|
153
|
+
const dt = (0, TimeParsing_1.setZone)({
|
|
154
|
+
zone,
|
|
155
|
+
src: this.toDateTime(),
|
|
156
|
+
srcHasZone: this.hasZone,
|
|
157
|
+
opts,
|
|
244
158
|
});
|
|
245
|
-
|
|
159
|
+
return _a.fromDateTime(dt, {
|
|
246
160
|
rawValue: this.rawValue,
|
|
247
161
|
unsetMilliseconds: this.millisecond == null,
|
|
162
|
+
inferredZone: (_b = opts === null || opts === void 0 ? void 0 : opts.inferredZone) !== null && _b !== void 0 ? _b : true,
|
|
248
163
|
});
|
|
249
|
-
// We know this will be defined: this is valid, so changing the zone will
|
|
250
|
-
// also be valid.
|
|
251
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
252
|
-
return result;
|
|
253
164
|
}
|
|
254
165
|
/**
|
|
255
166
|
* CAUTION: This instance will inherit the system timezone if this instance
|
|
256
|
-
* has an unset zone
|
|
167
|
+
* has an unset zone (as Luxon doesn't support "unset" timezones)
|
|
257
168
|
*/
|
|
258
169
|
toDateTime() {
|
|
259
|
-
var
|
|
260
|
-
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({
|
|
261
172
|
year: this.year,
|
|
262
173
|
month: this.month,
|
|
263
174
|
day: this.day,
|
|
@@ -276,9 +187,9 @@ class ExifDateTime {
|
|
|
276
187
|
return this.toDateTime().toJSDate();
|
|
277
188
|
}
|
|
278
189
|
toISOString(options = {}) {
|
|
279
|
-
var
|
|
190
|
+
var _b;
|
|
280
191
|
return (0, Maybe_1.denull)(this.toDateTime().toISO({
|
|
281
|
-
suppressMilliseconds: (
|
|
192
|
+
suppressMilliseconds: (_b = options.suppressMilliseconds) !== null && _b !== void 0 ? _b : this.millisecond == null,
|
|
282
193
|
includeOffset: this.hasZone && options.includeOffset !== false,
|
|
283
194
|
}));
|
|
284
195
|
}
|
|
@@ -320,13 +231,14 @@ class ExifDateTime {
|
|
|
320
231
|
* @return a new ExifDateTime from the given JSON. Note that this instance **may not be valid**.
|
|
321
232
|
*/
|
|
322
233
|
static fromJSON(json) {
|
|
323
|
-
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);
|
|
324
235
|
}
|
|
325
236
|
maybeMatchZone(target, maxDeltaMs = 14 * DateTime_1.MinuteMs) {
|
|
326
|
-
var
|
|
327
|
-
|
|
237
|
+
var _b, _c, _d;
|
|
238
|
+
const targetZone = target.zone;
|
|
239
|
+
if (targetZone == null || !target.hasZone)
|
|
328
240
|
return;
|
|
329
|
-
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));
|
|
330
242
|
}
|
|
331
243
|
ifClose(target, maxDeltaMs = 14 * DateTime_1.MinuteMs) {
|
|
332
244
|
const ts = this.toMillis();
|
|
@@ -338,9 +250,30 @@ class ExifDateTime {
|
|
|
338
250
|
if (!this.hasZone) {
|
|
339
251
|
dt = dt.setZone(Timezones_1.UnsetZone, { keepLocalTime: true });
|
|
340
252
|
}
|
|
341
|
-
return
|
|
253
|
+
return _a.fromDateTime(dt, this);
|
|
342
254
|
}
|
|
343
255
|
}
|
|
344
256
|
exports.ExifDateTime = ExifDateTime;
|
|
345
|
-
_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
|
+
};
|
|
346
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
|
}
|