exiftool-vendored 18.1.0 → 18.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 +20 -2
- package/README.md +0 -1
- package/dist/CapturedAtTagNames.d.ts +1 -0
- package/dist/CapturedAtTagNames.js +13 -0
- package/dist/CapturedAtTagNames.js.map +1 -0
- package/dist/ExifTool.d.ts +20 -1
- package/dist/ExifTool.js +6 -1
- package/dist/ExifTool.js.map +1 -1
- package/dist/FirstDateTime.d.ts +9 -0
- package/dist/FirstDateTime.js +27 -0
- package/dist/FirstDateTime.js.map +1 -0
- package/dist/GeoTz.d.ts +2 -0
- package/dist/GeoTz.js +17 -0
- package/dist/GeoTz.js.map +1 -0
- package/dist/MaybeReadonly.d.ts +1 -0
- package/dist/MaybeReadonly.js +3 -0
- package/dist/MaybeReadonly.js.map +1 -0
- package/dist/ReadTask.d.ts +1 -1
- package/dist/ReadTask.js +70 -52
- package/dist/ReadTask.js.map +1 -1
- package/dist/Tags.d.ts +5 -5
- package/dist/Timezones.d.ts +15 -1
- package/dist/Timezones.js +27 -11
- package/dist/Timezones.js.map +1 -1
- package/package.json +5 -6
package/CHANGELOG.md
CHANGED
|
@@ -25,11 +25,29 @@ vendored versions of ExifTool match the version that they vendor.
|
|
|
25
25
|
|
|
26
26
|
## Version history
|
|
27
27
|
|
|
28
|
+
### v18.2.0
|
|
29
|
+
|
|
30
|
+
- ✨ Add support for alternative gps timezone lookup libraries. If you want to use `geo-tz` instead, use something like this:
|
|
31
|
+
|
|
32
|
+
```js
|
|
33
|
+
const geoTz = require("geo-tz")
|
|
34
|
+
const { ExifTool } = require("exiftool-vendored")
|
|
35
|
+
const exiftool = new ExifTool({ geoToTz: (lat, lon) => geoTz.find(lat, lon)[0] })
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
- ✨ If a timezone offset tag is present, _and_ GPS metadata can infer a timezone, _and_ they result in the same offset, `Tags.tz` will use the GPS zone name (like `America/Los_Angeles`).
|
|
39
|
+
|
|
40
|
+
- 🐞 We now only apply timezone offset defaults to tag values that are lacking in explicit offsets and are not always encoded in UTC.
|
|
41
|
+
|
|
42
|
+
- 📦 Timezone "normalization" to a single timezone is no longer applied--if a datetime tag has an offset, the ExifDateTime value should retain that offset value now. Use `ExifDateTime.setZone` if you want to normalize any instance.
|
|
43
|
+
|
|
44
|
+
- 📦 Restore `GPSPosition` to the default `numericTags` so all GPS lat/lon values are consistent.
|
|
45
|
+
|
|
28
46
|
### v18.1.0
|
|
29
47
|
|
|
30
|
-
- 📦 Switch from the abandoned `tz-lookup` package to `@photostructure/tz-lookup
|
|
48
|
+
- 📦 Switch from the abandoned `tz-lookup` package to [`@photostructure/tz-lookup`](https://github.com/photostructure/tz-lookup). Note that this uses an updated time zone geo database, so some time zone names and geo shapes have changed.
|
|
31
49
|
|
|
32
|
-
-
|
|
50
|
+
- 📦 The `GPSPosition` tag is no longer included in the default set of numeric tags, as this results in ExifTool returning two floats, whitespace-separated. Use `GPSLatitude` and `GPSLongitude` instead.
|
|
33
51
|
|
|
34
52
|
### v18.0.0
|
|
35
53
|
|
package/README.md
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
[](https://www.npmjs.com/package/exiftool-vendored)
|
|
6
6
|
[](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/node.js.yml)
|
|
7
7
|
[](https://github.com/photostructure/exiftool-vendored.js/issues)
|
|
8
|
-
[](https://lgtm.com/projects/g/photostructure/exiftool-vendored.js/context:javascript)
|
|
9
8
|
[](https://snyk.io/test/github/photostructure/exiftool-vendored.js?targetFile=package.json)
|
|
10
9
|
|
|
11
10
|
## Features
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CapturedAtTagNames: readonly ["SubSecDateTimeOriginal", "DateTimeOriginal", "SubSecCreateDate", "CreateDate", "SubSecMediaCreateDate", "MediaCreateDate", "DateTimeCreated"];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CapturedAtTagNames = void 0;
|
|
4
|
+
exports.CapturedAtTagNames = [
|
|
5
|
+
"SubSecDateTimeOriginal",
|
|
6
|
+
"DateTimeOriginal",
|
|
7
|
+
"SubSecCreateDate",
|
|
8
|
+
"CreateDate",
|
|
9
|
+
"SubSecMediaCreateDate",
|
|
10
|
+
"MediaCreateDate",
|
|
11
|
+
"DateTimeCreated",
|
|
12
|
+
];
|
|
13
|
+
//# sourceMappingURL=CapturedAtTagNames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CapturedAtTagNames.js","sourceRoot":"","sources":["../src/CapturedAtTagNames.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG;IAChC,wBAAwB;IACxB,kBAAkB;IAClB,kBAAkB;IAClB,YAAY;IACZ,uBAAuB;IACvB,iBAAiB;IACjB,iBAAiB;CACT,CAAA"}
|
package/dist/ExifTool.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { ApplicationRecordTags } from "./ApplicationRecordTags";
|
|
|
5
5
|
import { ExifDate } from "./ExifDate";
|
|
6
6
|
import { ExifDateTime } from "./ExifDateTime";
|
|
7
7
|
import { ExifToolTask } from "./ExifToolTask";
|
|
8
|
+
import { geoTz } from "./GeoTz";
|
|
8
9
|
import { ICCProfileTags } from "./ICCProfileTags";
|
|
9
10
|
import { Maybe } from "./Maybe";
|
|
10
11
|
import { PreviewTag } from "./PreviewTag";
|
|
@@ -17,7 +18,7 @@ export { ExifDateTime } from "./ExifDateTime";
|
|
|
17
18
|
export { ExifTime } from "./ExifTime";
|
|
18
19
|
export { ExifToolTask } from "./ExifToolTask";
|
|
19
20
|
export { parseJSON } from "./JSON";
|
|
20
|
-
export { offsetMinutesToZoneName, UnsetZone, UnsetZoneName, UnsetZoneOffsetMinutes, } from "./Timezones";
|
|
21
|
+
export { defaultVideosToUTC, offsetMinutesToZoneName, UnsetZone, UnsetZoneName, UnsetZoneOffsetMinutes, } from "./Timezones";
|
|
21
22
|
export type { AdditionalWriteTags, APP12Tags, APP14Tags, APP1Tags, APP4Tags, APP5Tags, APP6Tags, ApplicationRecordTags, CompositeTags, EXIFTags, ExifToolTags, ExpandedDateTags, FileTags, FlashPixTags, ICCProfileTags, IPTCTags, JFIFTags, MakerNotesTags, Maybe, MetaTags, MPFTags, Omit, PanasonicRawTags, PhotoshopTags, PrintIMTags, QuickTimeTags, RAFTags, ResourceEvent, RIFFTags, Struct, Tags, Version, XMPTags, };
|
|
22
23
|
export declare const DefaultExifToolPath: string;
|
|
23
24
|
export declare const DefaultExiftoolArgs: string[];
|
|
@@ -141,6 +142,24 @@ export interface ExifToolOptions extends bc.BatchClusterOptions, bc.BatchProcess
|
|
|
141
142
|
* situations. Note also that `perl` will be spawned in a sub-shell.
|
|
142
143
|
*/
|
|
143
144
|
ignoreShebang: boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Override the default geo-to-timezone lookup service.
|
|
147
|
+
*
|
|
148
|
+
* This defaults to `@photostructure/tz-lookup`, but if you have the
|
|
149
|
+
* resources, consider using `geo-tz` for more accurate results.
|
|
150
|
+
*
|
|
151
|
+
* Here's a snippet of how to use `geo-tz` instead of `tz-lookup`:
|
|
152
|
+
*
|
|
153
|
+
```js
|
|
154
|
+
const geotz = require("geo-tz")
|
|
155
|
+
const { ExifTool } = require("exiftool-vendored")
|
|
156
|
+
const exiftool = new ExifTool({ geoTz: (lat, lon) => geotz.find(lat, lon)[0] })
|
|
157
|
+
```
|
|
158
|
+
*
|
|
159
|
+
* @see https://github.com/photostructure/tz-lookup
|
|
160
|
+
* @see https://github.com/evansiroky/node-geo-tz/
|
|
161
|
+
*/
|
|
162
|
+
geoTz: typeof geoTz;
|
|
144
163
|
}
|
|
145
164
|
declare type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;
|
|
146
165
|
/**
|
package/dist/ExifTool.js
CHANGED
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.exiftool = exports.ExifTool = exports.DefaultExifToolOptions = exports.DefaultMaxProcs = exports.DefaultExiftoolArgs = exports.DefaultExifToolPath = exports.UnsetZoneOffsetMinutes = exports.UnsetZoneName = exports.UnsetZone = exports.offsetMinutesToZoneName = exports.parseJSON = exports.ExifToolTask = exports.ExifTime = exports.ExifDateTime = exports.ExifDate = void 0;
|
|
29
|
+
exports.exiftool = exports.ExifTool = exports.DefaultExifToolOptions = exports.DefaultMaxProcs = exports.DefaultExiftoolArgs = exports.DefaultExifToolPath = exports.UnsetZoneOffsetMinutes = exports.UnsetZoneName = exports.UnsetZone = exports.offsetMinutesToZoneName = exports.defaultVideosToUTC = exports.parseJSON = exports.ExifToolTask = exports.ExifTime = exports.ExifDateTime = exports.ExifDate = void 0;
|
|
30
30
|
const bc = __importStar(require("batch-cluster"));
|
|
31
31
|
const _cp = __importStar(require("child_process"));
|
|
32
32
|
const _fs = __importStar(require("fs"));
|
|
@@ -37,6 +37,7 @@ const AsyncRetry_1 = require("./AsyncRetry");
|
|
|
37
37
|
const BinaryExtractionTask_1 = require("./BinaryExtractionTask");
|
|
38
38
|
const BinaryToBufferTask_1 = require("./BinaryToBufferTask");
|
|
39
39
|
const DeleteAllTagsArgs_1 = require("./DeleteAllTagsArgs");
|
|
40
|
+
const GeoTz_1 = require("./GeoTz");
|
|
40
41
|
const Lazy_1 = require("./Lazy");
|
|
41
42
|
const ReadRawTask_1 = require("./ReadRawTask");
|
|
42
43
|
const ReadTask_1 = require("./ReadTask");
|
|
@@ -55,6 +56,7 @@ Object.defineProperty(exports, "ExifToolTask", { enumerable: true, get: function
|
|
|
55
56
|
var JSON_1 = require("./JSON");
|
|
56
57
|
Object.defineProperty(exports, "parseJSON", { enumerable: true, get: function () { return JSON_1.parseJSON; } });
|
|
57
58
|
var Timezones_1 = require("./Timezones");
|
|
59
|
+
Object.defineProperty(exports, "defaultVideosToUTC", { enumerable: true, get: function () { return Timezones_1.defaultVideosToUTC; } });
|
|
58
60
|
Object.defineProperty(exports, "offsetMinutesToZoneName", { enumerable: true, get: function () { return Timezones_1.offsetMinutesToZoneName; } });
|
|
59
61
|
Object.defineProperty(exports, "UnsetZone", { enumerable: true, get: function () { return Timezones_1.UnsetZone; } });
|
|
60
62
|
Object.defineProperty(exports, "UnsetZoneName", { enumerable: true, get: function () { return Timezones_1.UnsetZoneName; } });
|
|
@@ -114,9 +116,11 @@ exports.DefaultExifToolOptions = Object.freeze({
|
|
|
114
116
|
"GPSAltitude",
|
|
115
117
|
"GPSLatitude",
|
|
116
118
|
"GPSLongitude",
|
|
119
|
+
"GPSPosition",
|
|
117
120
|
"Orientation",
|
|
118
121
|
],
|
|
119
122
|
defaultVideosToUTC: true,
|
|
123
|
+
geoTz: GeoTz_1.geoTz,
|
|
120
124
|
});
|
|
121
125
|
/**
|
|
122
126
|
* Manages delegating calls to a vendored running instance of ExifTool.
|
|
@@ -189,6 +193,7 @@ class ExifTool {
|
|
|
189
193
|
optionalArgs,
|
|
190
194
|
numericTags: this.options.numericTags,
|
|
191
195
|
defaultVideosToUTC: this.options.defaultVideosToUTC,
|
|
196
|
+
geoTz: this.options.geoTz,
|
|
192
197
|
})); // < no way to know at compile time if we're going to get back a T!
|
|
193
198
|
}
|
|
194
199
|
/**
|
package/dist/ExifTool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifTool.js","sourceRoot":"","sources":["../src/ExifTool.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAmC;AACnC,mDAAoC;AACpC,wCAAyB;AACzB,wCAAyB;AACzB,4CAA6B;AAC7B,sDAA6B;AAE7B,6CAA4C;AAC5C,iEAA6D;AAC7D,6DAAyD;AACzD,2DAAuD;
|
|
1
|
+
{"version":3,"file":"ExifTool.js","sourceRoot":"","sources":["../src/ExifTool.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAmC;AACnC,mDAAoC;AACpC,wCAAyB;AACzB,wCAAyB;AACzB,4CAA6B;AAC7B,sDAA6B;AAE7B,6CAA4C;AAC5C,iEAA6D;AAC7D,6DAAyD;AACzD,2DAAuD;AAIvD,mCAA+B;AAE/B,iCAA6B;AAG7B,+CAA2C;AAC3C,yCAAqC;AAErC,6DAAyD;AACzD,qCAA0C;AA6B1C,+CAA2C;AAC3C,2CAAuC;AAEvC,uCAAqC;AAA5B,oGAAA,QAAQ,OAAA;AACjB,+CAA6C;AAApC,4GAAA,YAAY,OAAA;AACrB,uCAAqC;AAA5B,oGAAA,QAAQ,OAAA;AACjB,+CAA6C;AAApC,4GAAA,YAAY,OAAA;AACrB,+BAAkC;AAAzB,iGAAA,SAAS,OAAA;AAClB,yCAMoB;AALlB,+GAAA,kBAAkB,OAAA;AAClB,oHAAA,uBAAuB,OAAA;AACvB,sGAAA,SAAS,OAAA;AACT,0GAAA,aAAa,OAAA;AACb,mHAAA,sBAAsB,OAAA;AAsCxB,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAA;AAEtD,SAAS,YAAY;IACnB,MAAM,IAAI,GAAW,OAAO,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7E,2EAA2E;IAC3E,6BAA6B;IAE7B,yEAAyE;IACzE,6EAA6E;IAC7E,2EAA2E;IAC3E,SAAS;IACT,MAAM,SAAS,GAAG,IAAI;SACnB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;SAChB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC3D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAElB,4EAA4E;IAC5E,yEAAyE;IACzE,aAAa;IACb,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC7B,OAAO,SAAS,CAAA;KACjB;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACxB,OAAO,IAAI,CAAA;KACZ;IACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAA;AAChE,CAAC;AAEY,QAAA,mBAAmB,GAAG,YAAY,EAAE,CAAA;AAEpC,QAAA,mBAAmB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;AAEpE,MAAM,cAAc,GAAG,IAAA,WAAI,EACzB,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CACrD,CAAA;AAmDY,QAAA,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;AA6H7E;;;GAGG;AACU,QAAA,sBAAsB,GAG/B,MAAM,CAAC,MAAM,CAAC;IAChB,GAAG,IAAI,EAAE,CAAC,mBAAmB,EAAE;IAC/B,QAAQ,EAAE,uBAAe;IACzB,kBAAkB,EAAE,GAAG;IACvB,kBAAkB,EAAE,KAAM;IAC1B,yEAAyE;IACzE,iBAAiB,EAAE,KAAM;IACzB,oBAAoB,EAAE,IAAK;IAC3B,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,2BAAmB;IACjC,YAAY,EAAE,2BAAmB;IACjC,WAAW,EAAE,EAAE;IACf,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,qBAAqB;IAClC,cAAc,EAAE,IAAI,yBAAW,EAAE,CAAC,OAAO;IACzC,yBAAyB,EAAE,KAAM;IACjC,kBAAkB,EAAE,kBAAkB;IACtC,WAAW,EAAE;QACX,YAAY;QACZ,aAAa;QACb,aAAa;QACb,cAAc;QACd,aAAa;QACb,aAAa;KACd;IACD,kBAAkB,EAAE,IAAI;IACxB,KAAK,EAAL,aAAK;CACN,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAa,QAAQ;IAInB,YAAY,UAAoC,EAAE;;QAsClD;;WAEG;QACH,8DAA8D;QACrD,OAAE,GAA0B,CAAC,KAAU,EAAE,QAAa,EAAE,EAAE,CACjE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QA1CrC,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAClD,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAA;SACF;QACD,MAAM,CAAC,GAAG;YACR,GAAG,8BAAsB;YACzB,GAAG,OAAO;SACX,CAAA;QACD,MAAM,aAAa,GAAG,MAAA,CAAC,CAAC,aAAa,mCAAI,cAAc,EAAE,CAAA;QAEzD,MAAM,GAAG,GAAsB,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;QAC9D,IAAI,IAAA,iBAAQ,EAAC,iBAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAA,cAAK,EAAC,GAAG,CAAC,aAAa,CAAC,EAAE;YACnE,GAAG,CAAC,aAAa,GAAG,iBAAO,CAAC,GAAG,CAAC,aAAa,CAAA;SAC9C;QACD,MAAM,SAAS,GAAqB;YAClC,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,KAAK;YACf,GAAG;SACJ,CAAA;QACD,MAAM,cAAc,GAAG,GAAG,EAAE,CAC1B,aAAa;YACX,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC;YACnE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;QAC1D,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,CAAC;YACJ,aAAa;YACb,cAAc;YACd,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,oBAAoB;YACpB,GAAG,OAAO;SACX,CAAA;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACvD,CAAC;IASD;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAA;IAClD,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,IAAI,CACF,IAAY,EACZ,eAAyB,CAAC,OAAO,CAAC;QAElC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAC3B,mBAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;YACjB,YAAY;YACZ,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YACrC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB;YACnD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;SAC1B,CAAC,CACI,CAAA,CAAC,mEAAmE;IAC9E,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,OAAO,CAAC,IAAY,EAAE,IAAc;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,yBAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC5D,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CACH,IAAY,EACZ,IAAO,EACP,IAAe;QAEf,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,qBAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAChE,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,qCAAiB,CAAC,CAAA;IAChD,CAAC;IAED;;;;;;;;OAQG;IACH,gBAAgB,CAAC,SAAiB,EAAE,aAAqB;QACvD,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;IAC1E,CAAC;IAED;;;;;;;;;OASG;IACH,cAAc,CAAC,SAAiB,EAAE,WAAmB;QACnD,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;IACtE,CAAC;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,SAAiB,EAAE,UAAkB;QACrD,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;IACnE,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,gBAAgB,CACpB,OAAe,EACf,GAAW,EACX,IAAY;QAEZ,2EAA2E;QAC3E,kCAAkC;QAClC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAC7C,2CAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAC7C,CAAA;QACD,IAAI,UAAU,IAAI,IAAI,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;SAC5B;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,wBAAwB,CAC5B,OAAmB,EACnB,SAAiB;QAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CACzC,uCAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAC3C,CAAA;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC3B,OAAO,MAAM,CAAA;SACd;aAAM,IAAI,MAAM,YAAY,KAAK,EAAE;YAClC,MAAM,MAAM,CAAA;SACb;aAAM;YACL,MAAM,IAAI,KAAK,CACb,6CAA6C,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CACvE,CAAA;SACF;IACH,CAAC;IACD;;;;;;;;;;;;;;;;;OAiBG;IACH,cAAc,CACZ,SAAiB,EACjB,UAAkB,EAClB,oBAAoB,GAAG,KAAK;QAE5B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAC3B,uCAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,oBAAoB,CAAC,CACpE,CAAA;IACH,CAAC;IAED;;;;;;OAMG;IACH,GAAG,CAAC,UAAU,GAAG,IAAI;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,CAAA;IAClD,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAA;IAChC,CAAC;IAED;;;;;OAKG;IACH,WAAW,CACT,IAAsD;QAEtD,OAAO,IAAA,0BAAa,EAClB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE,CAAC,EACvD,IAAI,CAAC,OAAO,CAAC,WAAW,CACzB,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAA;IAC3C,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAA;IAC3C,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAA;IACxC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAA;IACzC,CAAC;IAED;;;OAGG;IACH,mBAAmB,CAAC,UAAU,GAAG,IAAI;QACnC,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAC1D,CAAC;CACF;AApVD,4BAoVC;AAED;;;;;;;;;;GAUG;AACU,QAAA,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ExifDateTime } from "./ExifDateTime";
|
|
2
|
+
import { Maybe } from "./Maybe";
|
|
3
|
+
import { MaybeReadonly } from "./MaybeReadonly";
|
|
4
|
+
import { Tags } from "./Tags";
|
|
5
|
+
/**
|
|
6
|
+
* Returns the first date/time tag in `dateTimeTags` that strictly parses from
|
|
7
|
+
* EXIF.
|
|
8
|
+
*/
|
|
9
|
+
export declare function firstDateTime(tags: Maybe<Tags>, dateTimeTags?: MaybeReadonly<(keyof Tags)[]>): Maybe<ExifDateTime>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.firstDateTime = void 0;
|
|
4
|
+
const CapturedAtTagNames_1 = require("./CapturedAtTagNames");
|
|
5
|
+
const ExifDateTime_1 = require("./ExifDateTime");
|
|
6
|
+
const String_1 = require("./String");
|
|
7
|
+
/**
|
|
8
|
+
* Returns the first date/time tag in `dateTimeTags` that strictly parses from
|
|
9
|
+
* EXIF.
|
|
10
|
+
*/
|
|
11
|
+
function firstDateTime(tags, dateTimeTags = CapturedAtTagNames_1.CapturedAtTagNames) {
|
|
12
|
+
for (const tag of dateTimeTags) {
|
|
13
|
+
const dt = tags === null || tags === void 0 ? void 0 : tags[tag];
|
|
14
|
+
if (dt instanceof ExifDateTime_1.ExifDateTime) {
|
|
15
|
+
return dt;
|
|
16
|
+
}
|
|
17
|
+
else if ((0, String_1.isString)(dt)) {
|
|
18
|
+
const edt = ExifDateTime_1.ExifDateTime.fromEXIF(dt);
|
|
19
|
+
if (edt != null) {
|
|
20
|
+
return edt;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
exports.firstDateTime = firstDateTime;
|
|
27
|
+
//# sourceMappingURL=FirstDateTime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FirstDateTime.js","sourceRoot":"","sources":["../src/FirstDateTime.ts"],"names":[],"mappings":";;;AAAA,6DAAyD;AACzD,iDAA6C;AAG7C,qCAAmC;AAGnC;;;GAGG;AACH,SAAgB,aAAa,CAC3B,IAAiB,EACjB,eAA8C,uCAAkB;IAEhE,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE;QAC9B,MAAM,EAAE,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,GAAG,CAAQ,CAAA;QAC7B,IAAI,EAAE,YAAY,2BAAY,EAAE;YAC9B,OAAO,EAAE,CAAA;SACV;aAAM,IAAI,IAAA,iBAAQ,EAAC,EAAE,CAAC,EAAE;YACvB,MAAM,GAAG,GAAG,2BAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;YACrC,IAAI,GAAG,IAAI,IAAI,EAAE;gBACf,OAAO,GAAG,CAAA;aACX;SACF;KACF;IACD,OAAM;AACR,CAAC;AAhBD,sCAgBC"}
|
package/dist/GeoTz.d.ts
ADDED
package/dist/GeoTz.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.geoTz = void 0;
|
|
7
|
+
const tz_lookup_1 = __importDefault(require("@photostructure/tz-lookup"));
|
|
8
|
+
function geoTz(lat, lon) {
|
|
9
|
+
try {
|
|
10
|
+
return (0, tz_lookup_1.default)(lat, lon);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.geoTz = geoTz;
|
|
17
|
+
//# sourceMappingURL=GeoTz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeoTz.js","sourceRoot":"","sources":["../src/GeoTz.ts"],"names":[],"mappings":";;;;;;AAAA,0EAAiD;AAGjD,SAAgB,KAAK,CAAC,GAAW,EAAE,GAAW;IAC5C,IAAI;QACF,OAAO,IAAA,mBAAS,EAAC,GAAG,EAAE,GAAG,CAAC,CAAA;KAC3B;IAAC,MAAM;QACN,OAAM;KACP;AACH,CAAC;AAND,sBAMC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare type MaybeReadonly<T> = T | Readonly<T>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MaybeReadonly.js","sourceRoot":"","sources":["../src/MaybeReadonly.ts"],"names":[],"mappings":""}
|
package/dist/ReadTask.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { Tags } from "./Tags";
|
|
|
4
4
|
export declare function nullish(s: string | undefined): s is undefined;
|
|
5
5
|
export declare type ReadTaskOptions = {
|
|
6
6
|
optionalArgs: string[];
|
|
7
|
-
} & Pick<ExifToolOptions, "numericTags" | "defaultVideosToUTC">;
|
|
7
|
+
} & Pick<ExifToolOptions, "numericTags" | "defaultVideosToUTC" | "geoTz">;
|
|
8
8
|
export declare class ReadTask extends ExifToolTask<Tags> {
|
|
9
9
|
#private;
|
|
10
10
|
readonly sourceFile: string;
|
package/dist/ReadTask.js
CHANGED
|
@@ -27,19 +27,17 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
27
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
28
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
29
29
|
};
|
|
30
|
-
var
|
|
31
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
32
|
-
};
|
|
33
|
-
var _ReadTask_instances, _ReadTask_tagName, _ReadTask_parseTags, _ReadTask_extractLatLon, _ReadTask_latlon, _ReadTask_extractTzOffset, _ReadTask_normalizeDateTime, _ReadTask_parseTag;
|
|
30
|
+
var _ReadTask_instances, _ReadTask_tagName, _ReadTask_parseTags, _ReadTask_extractLatLon, _ReadTask_latlon, _ReadTask_geoTz, _ReadTask_extractTzOffset, _ReadTask_parseTag;
|
|
34
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
32
|
exports.ReadTask = exports.nullish = void 0;
|
|
36
|
-
const tz_lookup_1 = __importDefault(require("@photostructure/tz-lookup"));
|
|
37
33
|
const batch_cluster_1 = require("batch-cluster");
|
|
38
34
|
const _path = __importStar(require("path"));
|
|
39
35
|
const ExifDate_1 = require("./ExifDate");
|
|
40
36
|
const ExifDateTime_1 = require("./ExifDateTime");
|
|
41
37
|
const ExifTime_1 = require("./ExifTime");
|
|
42
38
|
const ExifToolTask_1 = require("./ExifToolTask");
|
|
39
|
+
const FirstDateTime_1 = require("./FirstDateTime");
|
|
40
|
+
const Lazy_1 = require("./Lazy");
|
|
43
41
|
const Maybe_1 = require("./Maybe");
|
|
44
42
|
const Number_1 = require("./Number");
|
|
45
43
|
const String_1 = require("./String");
|
|
@@ -71,6 +69,27 @@ class ReadTask extends ExifToolTask_1.ExifToolTask {
|
|
|
71
69
|
/** Always has non-group-prefixed keys */
|
|
72
70
|
this._tags = {};
|
|
73
71
|
this.invalidLatLon = false;
|
|
72
|
+
_ReadTask_extractLatLon.set(this, (0, Lazy_1.lazy)(() => {
|
|
73
|
+
var _a, _b;
|
|
74
|
+
(_a = this.lat) !== null && _a !== void 0 ? _a : (this.lat = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_latlon).call(this, "GPSLatitude", "S", 90));
|
|
75
|
+
(_b = this.lon) !== null && _b !== void 0 ? _b : (this.lon = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_latlon).call(this, "GPSLongitude", "W", 180));
|
|
76
|
+
if (this.invalidLatLon) {
|
|
77
|
+
this.lat = this.lon = undefined;
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
_ReadTask_geoTz.set(this, (0, Lazy_1.lazy)(() => {
|
|
81
|
+
__classPrivateFieldGet(this, _ReadTask_extractLatLon, "f").call(this);
|
|
82
|
+
if (this.invalidLatLon || this.lat == null || this.lon == null)
|
|
83
|
+
return;
|
|
84
|
+
try {
|
|
85
|
+
const geoTz = this.options.geoTz(this.lat, this.lon);
|
|
86
|
+
return (0, Timezones_1.normalizeZone)(geoTz);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
this.invalidLatLon = true;
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
}));
|
|
74
93
|
this.degroup = this.args.indexOf("-G") !== -1;
|
|
75
94
|
this.tags = { SourceFile: sourceFile };
|
|
76
95
|
this.tags.errors = this.errors;
|
|
@@ -126,11 +145,11 @@ class ReadTask extends ExifToolTask_1.ExifToolTask {
|
|
|
126
145
|
}
|
|
127
146
|
}
|
|
128
147
|
exports.ReadTask = ReadTask;
|
|
129
|
-
_ReadTask_instances = new WeakSet(), _ReadTask_tagName = function _ReadTask_tagName(k) {
|
|
148
|
+
_ReadTask_extractLatLon = new WeakMap(), _ReadTask_geoTz = new WeakMap(), _ReadTask_instances = new WeakSet(), _ReadTask_tagName = function _ReadTask_tagName(k) {
|
|
130
149
|
var _a;
|
|
131
150
|
return this.degroup ? (_a = k.split(":")[1]) !== null && _a !== void 0 ? _a : k : k;
|
|
132
151
|
}, _ReadTask_parseTags = function _ReadTask_parseTags() {
|
|
133
|
-
__classPrivateFieldGet(this,
|
|
152
|
+
__classPrivateFieldGet(this, _ReadTask_extractLatLon, "f").call(this);
|
|
134
153
|
__classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_extractTzOffset).call(this);
|
|
135
154
|
(0, Maybe_1.map)(this.tz, (ea) => (this.tags.tz = ea));
|
|
136
155
|
(0, Maybe_1.map)(this.tzSource, (ea) => (this.tags.tzSource = ea));
|
|
@@ -141,13 +160,6 @@ _ReadTask_instances = new WeakSet(), _ReadTask_tagName = function _ReadTask_tagN
|
|
|
141
160
|
if (this.errors.length > 0)
|
|
142
161
|
this.tags.errors = this.errors;
|
|
143
162
|
return this.tags;
|
|
144
|
-
}, _ReadTask_extractLatLon = function _ReadTask_extractLatLon() {
|
|
145
|
-
var _a, _b;
|
|
146
|
-
(_a = this.lat) !== null && _a !== void 0 ? _a : (this.lat = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_latlon).call(this, "GPSLatitude", "S", 90));
|
|
147
|
-
(_b = this.lon) !== null && _b !== void 0 ? _b : (this.lon = __classPrivateFieldGet(this, _ReadTask_instances, "m", _ReadTask_latlon).call(this, "GPSLongitude", "W", 180));
|
|
148
|
-
if (this.invalidLatLon) {
|
|
149
|
-
this.lat = this.lon = undefined;
|
|
150
|
-
}
|
|
151
163
|
}, _ReadTask_latlon = function _ReadTask_latlon(tagName, negateRef, maxValid) {
|
|
152
164
|
const tagValue = this._tags[tagName];
|
|
153
165
|
const ref = this._tags[tagName + "Ref"];
|
|
@@ -174,48 +186,54 @@ _ReadTask_instances = new WeakSet(), _ReadTask_tagName = function _ReadTask_tagN
|
|
|
174
186
|
}
|
|
175
187
|
}, _ReadTask_extractTzOffset = function _ReadTask_extractTzOffset() {
|
|
176
188
|
(0, Maybe_1.map)((0, Maybe_1.firstDefinedThunk)([
|
|
189
|
+
// If there is an explicit TimeZone tag (which is rare), defer to that
|
|
190
|
+
// before defaulting to UTC for videos:
|
|
191
|
+
() => {
|
|
192
|
+
const tz = (0, Timezones_1.extractTzOffsetFromTags)(this._tags);
|
|
193
|
+
// If this tz offset matches the GPS zone, use the GPS zone name (like "America/Los_Angeles") instead of the offset.
|
|
194
|
+
const z = (0, Timezones_1.normalizeZone)(tz === null || tz === void 0 ? void 0 : tz.tz);
|
|
195
|
+
if (tz != null && z != null) {
|
|
196
|
+
const geoTz = __classPrivateFieldGet(this, _ReadTask_geoTz, "f").call(this);
|
|
197
|
+
if (geoTz != null) {
|
|
198
|
+
const edt = (0, FirstDateTime_1.firstDateTime)(this._raw);
|
|
199
|
+
if (edt != null) {
|
|
200
|
+
const ts = edt.toMillis();
|
|
201
|
+
const zOffset = z.offset(ts);
|
|
202
|
+
const geoTzOffset = geoTz.offset(ts);
|
|
203
|
+
if (zOffset === geoTzOffset) {
|
|
204
|
+
return {
|
|
205
|
+
tz: geoTz.name,
|
|
206
|
+
src: tz.src + " & Lat/Lon",
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return tz;
|
|
213
|
+
},
|
|
177
214
|
// See https://github.com/photostructure/exiftool-vendored.js/issues/113
|
|
215
|
+
// Videos are frequently encoded in UTC, but don't include the timezone offset in their datetime stamps.
|
|
216
|
+
// This must be before the tz_lookup/geoTz strategy, as smartphone videos
|
|
217
|
+
// will contain GPS, but still encode timestamps in UTC without an
|
|
218
|
+
// explicit offset. HURRAY
|
|
178
219
|
() => {
|
|
179
220
|
var _a, _b, _c;
|
|
180
|
-
|
|
181
|
-
this.options.defaultVideosToUTC === true
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
return;
|
|
221
|
+
return ((_b = (_a = this._tags) === null || _a === void 0 ? void 0 : _a.MIMEType) === null || _b === void 0 ? void 0 : _b.startsWith("video/")) &&
|
|
222
|
+
this.options.defaultVideosToUTC === true
|
|
223
|
+
? // If there is a TimeZone tag, defer to that before defaulting to UTC:
|
|
224
|
+
(_c = (0, Timezones_1.extractTzOffsetFromTags)(this._tags)) !== null && _c !== void 0 ? _c : {
|
|
225
|
+
tz: "UTC",
|
|
226
|
+
src: "defaultVideosToUTC",
|
|
227
|
+
}
|
|
228
|
+
: // not applicable:
|
|
229
|
+
undefined;
|
|
190
230
|
},
|
|
191
231
|
// If lat/lon is valid, use the tzlookup library, as it will be a proper
|
|
192
232
|
// Zone name (like "America/New_York"), rather than just an hour offset.
|
|
193
|
-
() => {
|
|
194
|
-
|
|
195
|
-
try {
|
|
196
|
-
return (0, Maybe_1.map)((0, tz_lookup_1.default)(this.lat, this.lon), (tz) => ({
|
|
197
|
-
tz,
|
|
198
|
-
src: "from Lat/Lon",
|
|
199
|
-
}));
|
|
200
|
-
}
|
|
201
|
-
catch (err) {
|
|
202
|
-
/* */
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
return;
|
|
206
|
-
},
|
|
207
|
-
() => (0, Timezones_1.extractTzOffsetFromTags)(this._tags),
|
|
233
|
+
() => (0, Maybe_1.map)(__classPrivateFieldGet(this, _ReadTask_geoTz, "f").call(this), (ea) => ({ tz: ea.name, src: "from Lat/Lon" })),
|
|
234
|
+
// This is a last-ditch estimation heuristic:
|
|
208
235
|
() => (0, Timezones_1.extractTzOffsetFromUTCOffset)(this._tags),
|
|
209
236
|
]), (ea) => ({ tz: this.tz, src: this.tzSource } = ea));
|
|
210
|
-
}, _ReadTask_normalizeDateTime = function _ReadTask_normalizeDateTime(tagName, value) {
|
|
211
|
-
if (tagName.startsWith("File") ||
|
|
212
|
-
!(value instanceof ExifDateTime_1.ExifDateTime) ||
|
|
213
|
-
utcTagName(tagName) ||
|
|
214
|
-
this.tz == null) {
|
|
215
|
-
return value;
|
|
216
|
-
}
|
|
217
|
-
// ExifTool may have put this in the current system time, instead of the timezone of the file.
|
|
218
|
-
return value.zone !== this.tz ? value.setZone(this.tz) : value;
|
|
219
237
|
}, _ReadTask_parseTag = function _ReadTask_parseTag(tagName, value) {
|
|
220
238
|
var _a, _b, _c, _d, _e, _f;
|
|
221
239
|
if (nullish(value))
|
|
@@ -241,18 +259,18 @@ _ReadTask_instances = new WeakSet(), _ReadTask_tagName = function _ReadTask_tagN
|
|
|
241
259
|
return this.lon;
|
|
242
260
|
}
|
|
243
261
|
if (typeof value === "string") {
|
|
244
|
-
const tz =
|
|
262
|
+
const tz = isUtcTagName(tagName) ? "UTC" : this.tz;
|
|
245
263
|
if (tagName === "When" ||
|
|
246
264
|
tagName.includes("DateTime") ||
|
|
247
265
|
tagName.toLowerCase().includes("timestamp")) {
|
|
248
266
|
const d = (_a = ExifDateTime_1.ExifDateTime.fromExifStrict(value, tz)) !== null && _a !== void 0 ? _a : ExifDateTime_1.ExifDateTime.fromISO(value, tz);
|
|
249
267
|
if (d != null)
|
|
250
|
-
return
|
|
268
|
+
return d;
|
|
251
269
|
}
|
|
252
270
|
if (tagName === "When" || tagName.includes("Date")) {
|
|
253
271
|
const d = (_f = (_e = (_d = (_c = (_b = ExifDateTime_1.ExifDateTime.fromExifStrict(value, tz)) !== null && _b !== void 0 ? _b : ExifDateTime_1.ExifDateTime.fromISO(value, tz)) !== null && _c !== void 0 ? _c : ExifDateTime_1.ExifDateTime.fromExifLoose(value, tz)) !== null && _d !== void 0 ? _d : ExifDate_1.ExifDate.fromExifStrict(value)) !== null && _e !== void 0 ? _e : ExifDate_1.ExifDate.fromISO(value)) !== null && _f !== void 0 ? _f : ExifDate_1.ExifDate.fromExifLoose(value);
|
|
254
272
|
if (d != null) {
|
|
255
|
-
return
|
|
273
|
+
return d;
|
|
256
274
|
}
|
|
257
275
|
}
|
|
258
276
|
if (tagName.includes("Time")) {
|
|
@@ -269,7 +287,7 @@ _ReadTask_instances = new WeakSet(), _ReadTask_tagName = function _ReadTask_tagN
|
|
|
269
287
|
return value;
|
|
270
288
|
}
|
|
271
289
|
};
|
|
272
|
-
function
|
|
290
|
+
function isUtcTagName(tagName) {
|
|
273
291
|
return tagName.includes("UTC") || tagName.startsWith("GPS");
|
|
274
292
|
}
|
|
275
293
|
//# sourceMappingURL=ReadTask.js.map
|
package/dist/ReadTask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReadTask.js","sourceRoot":"","sources":["../src/ReadTask.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReadTask.js","sourceRoot":"","sources":["../src/ReadTask.ts"],"names":[],"mappings":"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"}
|
package/dist/Tags.d.ts
CHANGED
|
@@ -1085,7 +1085,7 @@ export interface QuickTimeTags {
|
|
|
1085
1085
|
CompressorID?: string;
|
|
1086
1086
|
/** ☆☆☆☆ ✔ Example: "Track 1" */
|
|
1087
1087
|
ContentDescribes?: string;
|
|
1088
|
-
/** ☆☆☆☆ ✔ Example: 2022-02-
|
|
1088
|
+
/** ☆☆☆☆ ✔ Example: 2022-02-12T14:31:16.000-08:00 */
|
|
1089
1089
|
CreationDate?: ExifDateTime | string;
|
|
1090
1090
|
/** ☆☆☆☆ ✔ Example: "0 s" */
|
|
1091
1091
|
CurrentTime?: string;
|
|
@@ -4037,7 +4037,7 @@ export interface XMPTags {
|
|
|
4037
4037
|
CameraProfileDigest?: string;
|
|
4038
4038
|
/** ☆☆☆☆ Example: "Rear" */
|
|
4039
4039
|
CameraUnit?: string;
|
|
4040
|
-
/** ☆☆☆☆ ✔ Example: [{"
|
|
4040
|
+
/** ☆☆☆☆ ✔ Example: [{"DepthMap":{"ConfidenceURI":"android/confidencemap","De…ical"}] */
|
|
4041
4041
|
Cameras?: Struct[];
|
|
4042
4042
|
/** ☆☆☆☆ ✔ Example: "https://PhotoStructure.com/" */
|
|
4043
4043
|
CaptureSoftware?: string;
|
|
@@ -4069,7 +4069,7 @@ export interface XMPTags {
|
|
|
4069
4069
|
ColorNoiseReductionSmoothness?: number;
|
|
4070
4070
|
/** ☆☆☆☆ ✔ Example: "" */
|
|
4071
4071
|
Colorlabels?: string;
|
|
4072
|
-
/** ☆☆☆☆ ✔ Example: {"Directory":[{"
|
|
4072
|
+
/** ☆☆☆☆ ✔ Example: {"Directory":[{"DataURI":"primary_image","Length":0,"Mime…peg"}]} */
|
|
4073
4073
|
Container?: Struct;
|
|
4074
4074
|
/** ☆☆☆☆ ✔ Example: false */
|
|
4075
4075
|
ConvertToGrayscale?: boolean;
|
|
@@ -4351,7 +4351,7 @@ export interface XMPTags {
|
|
|
4351
4351
|
PreservedFileName?: string;
|
|
4352
4352
|
/** ☆☆☆☆ ✔ Example: 11 */
|
|
4353
4353
|
ProcessVersion?: number;
|
|
4354
|
-
/** ☆☆☆☆ ✔ Example: [{"
|
|
4354
|
+
/** ☆☆☆☆ ✔ Example: [{"CameraIndices":[0],"Type":"DepthPhoto"}] */
|
|
4355
4355
|
Profiles?: Struct[];
|
|
4356
4356
|
/** ☆☆☆☆ ✔ Example: "equirectangular" */
|
|
4357
4357
|
ProjectionType?: string;
|
|
@@ -4494,7 +4494,7 @@ export interface XMPTags {
|
|
|
4494
4494
|
* devices (like iPhones) An example value, JSON stringified, follows the
|
|
4495
4495
|
* popularity ratings.
|
|
4496
4496
|
*
|
|
4497
|
-
* Autogenerated by "yarn mktags" by ExifTool 12.45 on Tue Sep
|
|
4497
|
+
* Autogenerated by "yarn mktags" by ExifTool 12.45 on Tue Sep 27 2022.
|
|
4498
4498
|
* 2923 unique tags were found in 9968 photo and video files.
|
|
4499
4499
|
*/
|
|
4500
4500
|
export interface Tags extends APP12Tags, APP14Tags, APP1Tags, APP4Tags, APP5Tags, APP6Tags, ApplicationRecordTags, CompositeTags, EXIFTags, ExifToolTags, FileTags, FlashPixTags, ICCProfileTags, IPTCTags, JFIFTags, MPFTags, MakerNotesTags, MetaTags, PanasonicRawTags, PhotoshopTags, PrintIMTags, QuickTimeTags, RAFTags, RIFFTags, XMPTags {
|
package/dist/Timezones.d.ts
CHANGED
|
@@ -1,12 +1,26 @@
|
|
|
1
|
+
import { Zone } from "luxon";
|
|
1
2
|
import { Maybe } from "./Maybe";
|
|
2
3
|
export declare const MaxTzOffsetHours = 14;
|
|
4
|
+
/**
|
|
5
|
+
* Zone instances with this offset are a placeholder for being "unset".
|
|
6
|
+
*/
|
|
3
7
|
export declare const UnsetZoneOffsetMinutes = -1;
|
|
4
8
|
/**
|
|
5
9
|
* This is a placeholder for dates where the zone is unknown/unset, because
|
|
6
10
|
* Luxon doesn't officially support "unset" zones.
|
|
7
11
|
*/
|
|
8
|
-
export declare const UnsetZone:
|
|
12
|
+
export declare const UnsetZone: Zone;
|
|
13
|
+
/**
|
|
14
|
+
* Zone instances with this name are a placeholder for being "unset".
|
|
15
|
+
*/
|
|
9
16
|
export declare const UnsetZoneName: string;
|
|
17
|
+
/**
|
|
18
|
+
* If `tzSource` matches this value, the tags are from a video, and we had to
|
|
19
|
+
* resort to assuming time fields are in UTC.
|
|
20
|
+
* @see https://github.com/photostructure/exiftool-vendored.js/issues/113
|
|
21
|
+
*/
|
|
22
|
+
export declare const defaultVideosToUTC = "defaultVideosToUTC";
|
|
23
|
+
export declare function normalizeZone(z: Maybe<string | number | Zone>): Maybe<Zone>;
|
|
10
24
|
export declare function reasonableTzOffsetMinutes(tzOffsetMinutes: Maybe<number>): boolean;
|
|
11
25
|
/**
|
|
12
26
|
* Returns a "zone name" (used by `luxon`) that encodes the given offset.
|
package/dist/Timezones.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.extractTzOffsetFromUTCOffset = exports.inferLikelyOffsetMinutes = exports.extractTzOffsetFromTags = exports.extractOffset = exports.offsetMinutesToZoneName = exports.reasonableTzOffsetMinutes = exports.UnsetZoneName = exports.UnsetZone = exports.UnsetZoneOffsetMinutes = exports.MaxTzOffsetHours = void 0;
|
|
3
|
+
exports.extractTzOffsetFromUTCOffset = exports.inferLikelyOffsetMinutes = exports.extractTzOffsetFromTags = exports.extractOffset = exports.offsetMinutesToZoneName = exports.reasonableTzOffsetMinutes = exports.normalizeZone = exports.defaultVideosToUTC = exports.UnsetZoneName = exports.UnsetZone = exports.UnsetZoneOffsetMinutes = exports.MaxTzOffsetHours = void 0;
|
|
4
4
|
const luxon_1 = require("luxon");
|
|
5
5
|
const Array_1 = require("./Array");
|
|
6
|
+
const CapturedAtTagNames_1 = require("./CapturedAtTagNames");
|
|
6
7
|
const ExifDateTime_1 = require("./ExifDateTime");
|
|
7
8
|
const Maybe_1 = require("./Maybe");
|
|
8
9
|
const Number_1 = require("./Number");
|
|
@@ -10,13 +11,37 @@ const String_1 = require("./String");
|
|
|
10
11
|
// Pacific/Kiritimati is +14:00 TIL
|
|
11
12
|
// https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
|
12
13
|
exports.MaxTzOffsetHours = 14;
|
|
14
|
+
/**
|
|
15
|
+
* Zone instances with this offset are a placeholder for being "unset".
|
|
16
|
+
*/
|
|
13
17
|
exports.UnsetZoneOffsetMinutes = -1;
|
|
14
18
|
/**
|
|
15
19
|
* This is a placeholder for dates where the zone is unknown/unset, because
|
|
16
20
|
* Luxon doesn't officially support "unset" zones.
|
|
17
21
|
*/
|
|
18
22
|
exports.UnsetZone = luxon_1.Info.normalizeZone(exports.UnsetZoneOffsetMinutes);
|
|
23
|
+
/**
|
|
24
|
+
* Zone instances with this name are a placeholder for being "unset".
|
|
25
|
+
*/
|
|
19
26
|
exports.UnsetZoneName = exports.UnsetZone.name;
|
|
27
|
+
/**
|
|
28
|
+
* If `tzSource` matches this value, the tags are from a video, and we had to
|
|
29
|
+
* resort to assuming time fields are in UTC.
|
|
30
|
+
* @see https://github.com/photostructure/exiftool-vendored.js/issues/113
|
|
31
|
+
*/
|
|
32
|
+
exports.defaultVideosToUTC = "defaultVideosToUTC";
|
|
33
|
+
function normalizeZone(z) {
|
|
34
|
+
try {
|
|
35
|
+
if (z == null || (0, String_1.blank)(String(z)))
|
|
36
|
+
return;
|
|
37
|
+
const zone = luxon_1.Info.normalizeZone(z);
|
|
38
|
+
return (zone === null || zone === void 0 ? void 0 : zone.isValid) === true ? zone : undefined;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.normalizeZone = normalizeZone;
|
|
20
45
|
function reasonableTzOffsetMinutes(tzOffsetMinutes) {
|
|
21
46
|
return ((0, Number_1.isNumber)(tzOffsetMinutes) &&
|
|
22
47
|
tzOffsetMinutes !== exports.UnsetZoneOffsetMinutes &&
|
|
@@ -116,15 +141,7 @@ function extractTzOffsetFromUTCOffset(t) {
|
|
|
116
141
|
return;
|
|
117
142
|
// If we can find any of these without a zone, the timezone should be the
|
|
118
143
|
// offset between this time and the GPS time.
|
|
119
|
-
const dt = (0, Maybe_1.first)(
|
|
120
|
-
"SubSecDateTimeOriginal",
|
|
121
|
-
"DateTimeOriginal",
|
|
122
|
-
"SubSecCreateDate",
|
|
123
|
-
"CreateDate",
|
|
124
|
-
"SubSecMediaCreateDate",
|
|
125
|
-
"MediaCreateDate",
|
|
126
|
-
"DateTimeCreated",
|
|
127
|
-
], (tagName) => {
|
|
144
|
+
const dt = (0, Maybe_1.first)(CapturedAtTagNames_1.CapturedAtTagNames, (tagName) => {
|
|
128
145
|
const edt = ExifDateTime_1.ExifDateTime.fromExifStrict(t[tagName]);
|
|
129
146
|
return edt != null && edt.zone == null
|
|
130
147
|
? {
|
|
@@ -135,7 +152,6 @@ function extractTzOffsetFromUTCOffset(t) {
|
|
|
135
152
|
});
|
|
136
153
|
if (dt == null)
|
|
137
154
|
return;
|
|
138
|
-
// By flooring
|
|
139
155
|
const diffSeconds = dt.s - utc.s;
|
|
140
156
|
const offsetMinutes = inferLikelyOffsetMinutes(diffSeconds / 60);
|
|
141
157
|
return (0, Maybe_1.map)(offsetMinutesToZoneName(offsetMinutes), (tz) => ({
|
package/dist/Timezones.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Timezones.js","sourceRoot":"","sources":["../src/Timezones.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"Timezones.js","sourceRoot":"","sources":["../src/Timezones.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "exiftool-vendored",
|
|
3
|
-
"version": "18.
|
|
3
|
+
"version": "18.2.0",
|
|
4
4
|
"description": "Efficient, cross-platform access to ExifTool",
|
|
5
5
|
"main": "./dist/ExifTool.js",
|
|
6
6
|
"types": "./dist/ExifTool.d.ts",
|
|
@@ -84,6 +84,7 @@
|
|
|
84
84
|
"eslint-plugin-node": "^11.1.0",
|
|
85
85
|
"extract-zip": "^2.0.1",
|
|
86
86
|
"fs-extra": "^10.1.0",
|
|
87
|
+
"geo-tz": "^7.0.2",
|
|
87
88
|
"globule": "^1.3.4",
|
|
88
89
|
"mocha": "^10.0.0",
|
|
89
90
|
"npm-run-all": "^4.1.5",
|
|
@@ -97,15 +98,13 @@
|
|
|
97
98
|
"typescript": "~4.8.3",
|
|
98
99
|
"xpath": "^0.0.32"
|
|
99
100
|
},
|
|
100
|
-
"dependencies-note":
|
|
101
|
-
"_": "@types/luxon is _actually_ a dependency (not a devDependency). See <https://github.com/photostructure/exiftool-vendored.js/pull/108>"
|
|
102
|
-
},
|
|
101
|
+
"dependencies-note": "@types/luxon is not a devDependency, as our exported TypeScript typings reference luxon types. See <https://github.com/photostructure/exiftool-vendored.js/pull/108>",
|
|
103
102
|
"dependencies": {
|
|
103
|
+
"@photostructure/tz-lookup": "^7.0.0",
|
|
104
104
|
"@types/luxon": "^3.0.1",
|
|
105
105
|
"batch-cluster": "^11.0.0",
|
|
106
106
|
"he": "^1.2.0",
|
|
107
|
-
"luxon": "^3.0.3"
|
|
108
|
-
"@photostructure/tz-lookup": "^7.0.0"
|
|
107
|
+
"luxon": "^3.0.3"
|
|
109
108
|
},
|
|
110
109
|
"optionalDependencies": {
|
|
111
110
|
"exiftool-vendored.exe": "12.45.0",
|