exiftool-vendored 18.6.0 β 19.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/LICENSE +1 -1
- package/README.md +6 -5
- package/dist/BinaryExtractionTask.js +3 -1
- package/dist/BinaryExtractionTask.js.map +1 -1
- package/dist/BinaryToBufferTask.js +8 -1
- package/dist/BinaryToBufferTask.js.map +1 -1
- package/dist/DateTime.d.ts +1 -1
- package/dist/DateTime.js +1 -1
- package/dist/DateTime.js.map +1 -1
- package/dist/ExifDate.js +9 -9
- package/dist/ExifDate.js.map +1 -1
- package/dist/ExifDateTime.d.ts +16 -4
- package/dist/ExifDateTime.js +38 -26
- package/dist/ExifDateTime.js.map +1 -1
- package/dist/ExifTime.js +7 -7
- package/dist/ExifTime.js.map +1 -1
- package/dist/ExifTool.d.ts +11 -132
- package/dist/ExifTool.js +6 -11
- package/dist/ExifTool.js.map +1 -1
- package/dist/ExifToolOptions.d.ts +119 -0
- package/dist/ExifToolOptions.js +3 -0
- package/dist/ExifToolOptions.js.map +1 -0
- package/dist/ExifToolTask.js +3 -3
- package/dist/ExifToolTask.js.map +1 -1
- package/dist/FilenameCharsetArgs.d.ts +16 -0
- package/dist/FilenameCharsetArgs.js +23 -0
- package/dist/FilenameCharsetArgs.js.map +1 -0
- package/dist/IsWin32.d.ts +1 -0
- package/dist/IsWin32.js +30 -0
- package/dist/IsWin32.js.map +1 -0
- package/dist/Maybe.d.ts +2 -2
- package/dist/MaybeReadonly.d.ts +1 -1
- package/dist/Object.d.ts +1 -1
- package/dist/Omit.d.ts +1 -0
- package/dist/Omit.js +3 -0
- package/dist/Omit.js.map +1 -0
- package/dist/PreviewTag.d.ts +1 -1
- package/dist/ReadRawTask.js +8 -7
- package/dist/ReadRawTask.js.map +1 -1
- package/dist/ReadTask.d.ts +2 -2
- package/dist/ReadTask.js +7 -2
- package/dist/ReadTask.js.map +1 -1
- package/dist/RewriteAllTagsTask.js +3 -1
- package/dist/RewriteAllTagsTask.js.map +1 -1
- package/dist/Struct.d.ts +1 -1
- package/dist/Tags.d.ts +33 -33
- package/dist/WriteTask.d.ts +1 -1
- package/dist/WriteTask.js +13 -17
- package/dist/WriteTask.js.map +1 -1
- package/package.json +24 -18
package/CHANGELOG.md
CHANGED
|
@@ -25,6 +25,18 @@ vendored versions of ExifTool match the version that they vendor.
|
|
|
25
25
|
|
|
26
26
|
## Version history
|
|
27
27
|
|
|
28
|
+
### v19.0.0
|
|
29
|
+
|
|
30
|
+
- π/π [Fix #124](https://github.com/photostructure/exiftool-vendored.js/issues/124): Improved support for filenames with non-latin (a-z0-9) characters on Windows machines that weren't set to UTF-8. Thanks for the bug report and PR, [JΓΌrg Rast](https://github.com/jrast)!
|
|
31
|
+
|
|
32
|
+
- π/π ExifTool v12.54 has several new tags (see the diff) and now renders `GPSAltitude` with negative values when the altitude is below sea level.
|
|
33
|
+
|
|
34
|
+
- π± ExifTool upgraded to [v12.54](https://exiftool.org/history.html#v12.54)
|
|
35
|
+
|
|
36
|
+
- π¦ Updated dependencies, re-ran prettier, rebuilt tags, rebuilt docs
|
|
37
|
+
|
|
38
|
+
- π¦ Node v19 added to the CI test matrix
|
|
39
|
+
|
|
28
40
|
### v18.6.0
|
|
29
41
|
|
|
30
42
|
- π± ExifTool upgraded to [v12.50](https://exiftool.org/history.html#v12.50)
|
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -299,16 +299,17 @@ If you run this in a docker image based on Alpine or Debian Slim, **this won't w
|
|
|
299
299
|
|
|
300
300
|
## Resource hygiene
|
|
301
301
|
|
|
302
|
-
**
|
|
302
|
+
**Call `ExifTool.end()` when you're done**
|
|
303
|
+
|
|
304
|
+
You must explicitly call
|
|
305
|
+
[`.end()`](https://photostructure.github.io/exiftool-vendored.js/classes/ExifTool.html#end)
|
|
306
|
+
on any used instance of `ExifTool` to allow `node` to exit gracefully.
|
|
303
307
|
|
|
304
308
|
ExifTool child processes consume system resources, and [prevents `node` from
|
|
305
309
|
exiting due to the way Node.js streams
|
|
306
310
|
work](https://github.com/photostructure/exiftool-vendored.js/issues/106).
|
|
307
311
|
|
|
308
|
-
|
|
309
|
-
to exit gracefully.
|
|
310
|
-
|
|
311
|
-
This call cannot be in a `process.on("exit")` hook, as the `stdio` streams
|
|
312
|
+
Note that you can't call cannot be in a `process.on("exit")` hook, as the `stdio` streams
|
|
312
313
|
attached to the child process cannot be `unref`'ed. (If there's a solution to
|
|
313
314
|
this, please post to the above issue!)
|
|
314
315
|
|
|
@@ -7,6 +7,7 @@ exports.BinaryExtractionTask = void 0;
|
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const ExifToolTask_1 = require("./ExifToolTask");
|
|
9
9
|
const String_1 = require("./String");
|
|
10
|
+
const FilenameCharsetArgs_1 = require("./FilenameCharsetArgs");
|
|
10
11
|
const StdoutRe = /\b(\d+) output files? created/i;
|
|
11
12
|
/**
|
|
12
13
|
* Task that returns an error string (to prevent retries), or undefined if
|
|
@@ -18,13 +19,14 @@ class BinaryExtractionTask extends ExifToolTask_1.ExifToolTask {
|
|
|
18
19
|
}
|
|
19
20
|
static for(tagname, imgSrc, imgDest) {
|
|
20
21
|
const args = [
|
|
22
|
+
...FilenameCharsetArgs_1.Utf8FilenameCharsetArgs,
|
|
21
23
|
"-b",
|
|
22
24
|
"-" + tagname,
|
|
23
|
-
path_1.default.resolve(imgSrc),
|
|
24
25
|
"-w",
|
|
25
26
|
// The %0f prevents shell escaping. See
|
|
26
27
|
// https://exiftool.org/exiftool_pod.html#w-EXT-or-FMT--textOut
|
|
27
28
|
"%0f" + path_1.default.resolve(imgDest),
|
|
29
|
+
path_1.default.resolve(imgSrc),
|
|
28
30
|
];
|
|
29
31
|
return new BinaryExtractionTask(args);
|
|
30
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BinaryExtractionTask.js","sourceRoot":"","sources":["../src/BinaryExtractionTask.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,iDAA6C;AAE7C,qCAA8B;
|
|
1
|
+
{"version":3,"file":"BinaryExtractionTask.js","sourceRoot":"","sources":["../src/BinaryExtractionTask.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,iDAA6C;AAE7C,qCAA8B;AAC9B,+DAA+D;AAE/D,MAAM,QAAQ,GAAG,gCAAgC,CAAA;AAEjD;;;GAGG;AACH,MAAa,oBAAqB,SAAQ,2BAA2B;IACnE,YAAoB,IAAc;QAChC,KAAK,CAAC,IAAI,CAAC,CAAA;IACb,CAAC;IAED,MAAM,CAAC,GAAG,CACR,OAAe,EACf,MAAc,EACd,OAAe;QAEf,MAAM,IAAI,GAAG;YACX,GAAG,6CAAuB;YAC1B,IAAI;YACJ,GAAG,GAAG,OAAO;YACb,IAAI;YACJ,uCAAuC;YACvC,+DAA+D;YAC/D,KAAK,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC7B,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SACrB,CAAA;QACD,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,MAAc,EAAE,GAAW;QAC/B,MAAM,CAAC,GAAG,IAAA,YAAG,EAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;QAC5B,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,IAAI,GAAG,IAAI,IAAI,EAAE;YACf,MAAM,GAAG,CAAA;SACV;aAAM,IAAI,CAAC,IAAI,IAAI,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAA;SACxE;aAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YACvB,OAAM;SACP;aAAM;YACL,2EAA2E;YAC3E,OAAO,CAAC,CAAA;SACT;IACH,CAAC;CACF;AArCD,oDAqCC"}
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.BinaryToBufferTask = void 0;
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
8
|
const ExifToolTask_1 = require("./ExifToolTask");
|
|
9
|
+
const FilenameCharsetArgs_1 = require("./FilenameCharsetArgs");
|
|
9
10
|
const String_1 = require("./String");
|
|
10
11
|
/**
|
|
11
12
|
* Task that returns an error string (to prevent retries), or undefined if
|
|
@@ -19,7 +20,13 @@ class BinaryToBufferTask extends ExifToolTask_1.ExifToolTask {
|
|
|
19
20
|
static for(tagname, imgSrc) {
|
|
20
21
|
// NOTE TO FUTURE ME: we don't need to escape these arguments, because
|
|
21
22
|
// ExifTool separates them via newlines.
|
|
22
|
-
const args = [
|
|
23
|
+
const args = [
|
|
24
|
+
...FilenameCharsetArgs_1.Utf8FilenameCharsetArgs,
|
|
25
|
+
"-json",
|
|
26
|
+
"-b",
|
|
27
|
+
"-" + tagname,
|
|
28
|
+
path_1.default.resolve(imgSrc),
|
|
29
|
+
];
|
|
23
30
|
return new BinaryToBufferTask(tagname, args);
|
|
24
31
|
}
|
|
25
32
|
parse(data, err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BinaryToBufferTask.js","sourceRoot":"","sources":["../src/BinaryToBufferTask.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,iDAA6C;
|
|
1
|
+
{"version":3,"file":"BinaryToBufferTask.js","sourceRoot":"","sources":["../src/BinaryToBufferTask.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,iDAA6C;AAC7C,+DAA+D;AAE/D,qCAAmC;AAEnC;;;GAGG;AACH,MAAa,kBAAmB,SAAQ,2BAA4B;IAClE,YAA6B,OAAe,EAAE,IAAc;QAC1D,KAAK,CAAC,IAAI,CAAC,CAAA;QADgB,YAAO,GAAP,OAAO,CAAQ;IAE5C,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,OAAe,EAAE,MAAc;QACxC,sEAAsE;QACtE,wCAAwC;QACxC,MAAM,IAAI,GAAG;YACX,GAAG,6CAAuB;YAC1B,OAAO;YACP,IAAI;YACJ,GAAG,GAAG,OAAO;YACb,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SACrB,CAAA;QACD,OAAO,IAAI,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC9C,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,GAAW;;QAC7B,IAAI;YACF,MAAM,GAAG,GAAG,MAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,0CAAG,CAAC,CAAC,CAAA;YACjC,iCAAiC;YACjC;gBACE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;gBACxC,IAAI,MAAM,IAAI,IAAI;oBAAE,OAAO,MAAM,CAAA;aAClC,CAAC,+CAA+C;YACjD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAChC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;oBAClD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;oBAC7B,IAAI,MAAM,IAAI,IAAI;wBAAE,OAAO,MAAM,CAAA;iBAClC;aACF;SACF;QAAC,OAAO,MAAM,EAAE;YACf,GAAG,aAAH,GAAG,cAAH,GAAG,IAAH,GAAG,GAAK,IAAA,iBAAQ,EAAC,IAAI,CAAC;gBACpB,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;gBACjB,CAAC,CAAC,MAAM,YAAY,KAAK;oBACzB,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAA;SAC9B;QACD,OAAO,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,CAAA;IACtD,CAAC;CACF;AAzCD,gDAyCC;AAED,MAAM,SAAS,GAAG,SAAS,CAAA;AAE3B,SAAS,MAAM,CAAC,IAAmB;IACjC,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAChD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAA;AAC7D,CAAC"}
|
package/dist/DateTime.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export declare function validDateTime(dt: DateTime): boolean;
|
|
|
7
7
|
export declare const MinuteMs: number;
|
|
8
8
|
export declare const HourMs: number;
|
|
9
9
|
export declare const DayMs: number;
|
|
10
|
-
export
|
|
10
|
+
export type DateOrTime = ExifDateTime | ExifDate | ExifTime | DateTime;
|
|
11
11
|
export declare function isDateOrTime(o: any): o is DateOrTime;
|
|
12
12
|
export declare function dateTimeToExif(d: DateTime): string;
|
|
13
13
|
export declare function toExifString(d: DateOrTime): Maybe<string>;
|
package/dist/DateTime.js
CHANGED
|
@@ -20,7 +20,7 @@ function isDateOrTime(o) {
|
|
|
20
20
|
}
|
|
21
21
|
exports.isDateOrTime = isDateOrTime;
|
|
22
22
|
function dateTimeToExif(d) {
|
|
23
|
-
return d.toFormat("y:
|
|
23
|
+
return d.toFormat("y:MM:dd HH:mm:ss.u");
|
|
24
24
|
}
|
|
25
25
|
exports.dateTimeToExif = dateTimeToExif;
|
|
26
26
|
function toExifString(d) {
|
package/dist/DateTime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../src/DateTime.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;
|
|
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,EAAY;IACxC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,CAAA;AACjC,CAAC;AAFD,sCAEC;AAEY,QAAA,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAA;AACpB,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,CAAC,YAAY,gBAAQ,CACtB,CAAA;AACH,CAAC;AAPD,oCAOC;AAED,SAAgB,cAAc,CAAC,CAAW;IACxC,OAAO,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAA;AACzC,CAAC;AAFD,wCAEC;AAED,SAAgB,YAAY,CAAC,CAAa;IACxC,IAAI,CAAC,YAAY,gBAAQ,EAAE;QACzB,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;KACzB;SAAM;QACL,OAAO,CAAC,CAAC,YAAY,EAAE,CAAA;KACxB;AACH,CAAC;AAND,oCAMC"}
|
package/dist/ExifDate.js
CHANGED
|
@@ -9,15 +9,6 @@ const String_1 = require("./String");
|
|
|
9
9
|
* Encodes an ExifDate
|
|
10
10
|
*/
|
|
11
11
|
class ExifDate {
|
|
12
|
-
constructor(year, // full year (probably 2019-ish, but maybe Japanese 30-ish). See https://ericasadun.com/2018/12/25/iso-8601-yyyy-yyyy-and-why-your-year-may-be-wrong/
|
|
13
|
-
month, // 1-12, (no crazy 0-11 nonsense from Date!)
|
|
14
|
-
day, // 1-31
|
|
15
|
-
rawValue) {
|
|
16
|
-
this.year = year;
|
|
17
|
-
this.month = month;
|
|
18
|
-
this.day = day;
|
|
19
|
-
this.rawValue = rawValue;
|
|
20
|
-
}
|
|
21
12
|
static fromISO(text) {
|
|
22
13
|
return this.fromDateTime(luxon_1.DateTime.fromISO(text), text);
|
|
23
14
|
}
|
|
@@ -48,6 +39,15 @@ class ExifDate {
|
|
|
48
39
|
? new ExifDate(dt.year, dt.month, dt.day, rawValue)
|
|
49
40
|
: undefined;
|
|
50
41
|
}
|
|
42
|
+
constructor(year, // full year (probably 2019-ish, but maybe Japanese 30-ish). See https://ericasadun.com/2018/12/25/iso-8601-yyyy-yyyy-and-why-your-year-may-be-wrong/
|
|
43
|
+
month, // 1-12, (no crazy 0-11 nonsense from Date!)
|
|
44
|
+
day, // 1-31
|
|
45
|
+
rawValue) {
|
|
46
|
+
this.year = year;
|
|
47
|
+
this.month = month;
|
|
48
|
+
this.day = day;
|
|
49
|
+
this.rawValue = rawValue;
|
|
50
|
+
}
|
|
51
51
|
toDate() {
|
|
52
52
|
return new Date(this.year, this.month - 1, this.day);
|
|
53
53
|
}
|
package/dist/ExifDate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifDate.js","sourceRoot":"","sources":["../src/ExifDate.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAEhC,yCAAkD;AAClD,mCAA8D;AAC9D,qCAA2C;AAE3C;;GAEG;AACH,MAAa,QAAQ;
|
|
1
|
+
{"version":3,"file":"ExifDate.js","sourceRoot":"","sources":["../src/ExifDate.ts"],"names":[],"mappings":"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"}
|
package/dist/ExifDateTime.d.ts
CHANGED
|
@@ -17,17 +17,29 @@ export declare class ExifDateTime {
|
|
|
17
17
|
readonly zoneName?: string | undefined;
|
|
18
18
|
static fromISO(iso: string, zone?: Maybe<string>): Maybe<ExifDateTime>;
|
|
19
19
|
/**
|
|
20
|
-
* Try to parse a date-time string from EXIF. If there is not both a date
|
|
21
|
-
* a time component, returns `undefined`.
|
|
20
|
+
* Try to parse a date-time string from EXIF. If there is not both a date
|
|
21
|
+
* and a time component, returns `undefined`.
|
|
22
22
|
*
|
|
23
23
|
* @param text from EXIF metadata
|
|
24
|
-
* @param defaultZone a "zone name"
|
|
24
|
+
* @param defaultZone a "zone name" to use as a backstop, or default, if
|
|
25
|
+
* `text` doesn't specify a zone. This may be IANA-formatted, like
|
|
25
26
|
* "America/Los_Angeles", or an offset, like "UTC-3". See
|
|
26
27
|
* `offsetMinutesToZoneName`.
|
|
27
28
|
*/
|
|
28
29
|
static fromEXIF(text: string, defaultZone?: Maybe<string>): Maybe<ExifDateTime>;
|
|
29
30
|
private static fromPatterns;
|
|
30
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Parse the given date-time string, EXIF-formatted.
|
|
33
|
+
*
|
|
34
|
+
* @param text from EXIF metadata, in `y:M:d H:m:s` format (with optional
|
|
35
|
+
* sub-seconds and/or timezone)
|
|
36
|
+
|
|
37
|
+
* @param defaultZone a "zone name" to use as a backstop, or default, if
|
|
38
|
+
* `text` doesn't specify a zone. This may be IANA-formatted, like
|
|
39
|
+
* "America/Los_Angeles", or an offset, like "UTC-3". See
|
|
40
|
+
* `offsetMinutesToZoneName`.
|
|
41
|
+
*/
|
|
42
|
+
static fromExifStrict(text: Maybe<string>, defaultZone?: Maybe<string>): Maybe<ExifDateTime>;
|
|
31
43
|
static fromExifLoose(text: Maybe<string>, defaultZone?: Maybe<string>): Maybe<ExifDateTime>;
|
|
32
44
|
static fromDateTime(dt: DateTime, rawValue?: string): Maybe<ExifDateTime>;
|
|
33
45
|
/**
|
package/dist/ExifDateTime.js
CHANGED
|
@@ -23,19 +23,6 @@ const Timezones_1 = require("./Timezones");
|
|
|
23
23
|
* Encodes an ExifDateTime with an optional tz offset in minutes.
|
|
24
24
|
*/
|
|
25
25
|
class ExifDateTime {
|
|
26
|
-
constructor(year, month, day, hour, minute, second, millisecond, tzoffsetMinutes, rawValue, zoneName) {
|
|
27
|
-
this.year = year;
|
|
28
|
-
this.month = month;
|
|
29
|
-
this.day = day;
|
|
30
|
-
this.hour = hour;
|
|
31
|
-
this.minute = minute;
|
|
32
|
-
this.second = second;
|
|
33
|
-
this.millisecond = millisecond;
|
|
34
|
-
this.tzoffsetMinutes = tzoffsetMinutes;
|
|
35
|
-
this.rawValue = rawValue;
|
|
36
|
-
this.zoneName = zoneName;
|
|
37
|
-
_ExifDateTime_dt.set(this, void 0);
|
|
38
|
-
}
|
|
39
26
|
static fromISO(iso, zone) {
|
|
40
27
|
if ((0, String_1.blank)(iso) || null != iso.match(/^\d+$/))
|
|
41
28
|
return undefined;
|
|
@@ -54,22 +41,22 @@ class ExifDateTime {
|
|
|
54
41
|
]);
|
|
55
42
|
}
|
|
56
43
|
/**
|
|
57
|
-
* Try to parse a date-time string from EXIF. If there is not both a date
|
|
58
|
-
* a time component, returns `undefined`.
|
|
44
|
+
* Try to parse a date-time string from EXIF. If there is not both a date
|
|
45
|
+
* and a time component, returns `undefined`.
|
|
59
46
|
*
|
|
60
47
|
* @param text from EXIF metadata
|
|
61
|
-
* @param defaultZone a "zone name"
|
|
48
|
+
* @param defaultZone a "zone name" to use as a backstop, or default, if
|
|
49
|
+
* `text` doesn't specify a zone. This may be IANA-formatted, like
|
|
62
50
|
* "America/Los_Angeles", or an offset, like "UTC-3". See
|
|
63
51
|
* `offsetMinutesToZoneName`.
|
|
64
52
|
*/
|
|
65
53
|
static fromEXIF(text, defaultZone) {
|
|
54
|
+
var _a;
|
|
66
55
|
if ((0, String_1.blank)(text))
|
|
67
56
|
return undefined;
|
|
68
|
-
return (
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
() => this.fromExifLoose(text, defaultZone),
|
|
72
|
-
]);
|
|
57
|
+
return (
|
|
58
|
+
// .fromExifStrict() uses .fromISO() as a backstop
|
|
59
|
+
(_a = this.fromExifStrict(text, defaultZone)) !== null && _a !== void 0 ? _a : this.fromExifLoose(text, defaultZone));
|
|
73
60
|
}
|
|
74
61
|
static fromPatterns(text, fmts) {
|
|
75
62
|
const s = (0, String_1.toS)(text).trim();
|
|
@@ -98,7 +85,18 @@ class ExifDateTime {
|
|
|
98
85
|
}
|
|
99
86
|
return;
|
|
100
87
|
}
|
|
101
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Parse the given date-time string, EXIF-formatted.
|
|
90
|
+
*
|
|
91
|
+
* @param text from EXIF metadata, in `y:M:d H:m:s` format (with optional
|
|
92
|
+
* sub-seconds and/or timezone)
|
|
93
|
+
|
|
94
|
+
* @param defaultZone a "zone name" to use as a backstop, or default, if
|
|
95
|
+
* `text` doesn't specify a zone. This may be IANA-formatted, like
|
|
96
|
+
* "America/Los_Angeles", or an offset, like "UTC-3". See
|
|
97
|
+
* `offsetMinutesToZoneName`.
|
|
98
|
+
*/
|
|
99
|
+
static fromExifStrict(text, defaultZone) {
|
|
102
100
|
var _a;
|
|
103
101
|
if ((0, String_1.blank)(text))
|
|
104
102
|
return undefined;
|
|
@@ -110,10 +108,11 @@ class ExifDateTime {
|
|
|
110
108
|
{ fmt: "y:M:d H:m:s.u'Z'", zone: "utc" },
|
|
111
109
|
{ fmt: "y:M:d H:m:s'Z'", zone: "utc" },
|
|
112
110
|
// Otherwise use the default zone:
|
|
113
|
-
{ fmt: "y:M:d H:m:s.u", zone },
|
|
114
|
-
{ fmt: "y:M:d H:m:s", zone },
|
|
115
|
-
// Not found yet? Maybe it's in ISO format? See
|
|
116
|
-
|
|
111
|
+
{ fmt: "y:M:d H:m:s.u", zone: defaultZone },
|
|
112
|
+
{ fmt: "y:M:d H:m:s", zone: defaultZone },
|
|
113
|
+
// Not found yet? Maybe it's in ISO format? See
|
|
114
|
+
// https://github.com/photostructure/exiftool-vendored.js/issues/71
|
|
115
|
+
])) !== null && _a !== void 0 ? _a : this.fromISO(text, defaultZone));
|
|
117
116
|
}
|
|
118
117
|
static fromExifLoose(text, defaultZone) {
|
|
119
118
|
if ((0, String_1.blank)(text))
|
|
@@ -156,6 +155,19 @@ class ExifDateTime {
|
|
|
156
155
|
static now(opts = {}) {
|
|
157
156
|
return this.fromMillis(Date.now(), opts);
|
|
158
157
|
}
|
|
158
|
+
constructor(year, month, day, hour, minute, second, millisecond, tzoffsetMinutes, rawValue, zoneName) {
|
|
159
|
+
this.year = year;
|
|
160
|
+
this.month = month;
|
|
161
|
+
this.day = day;
|
|
162
|
+
this.hour = hour;
|
|
163
|
+
this.minute = minute;
|
|
164
|
+
this.second = second;
|
|
165
|
+
this.millisecond = millisecond;
|
|
166
|
+
this.tzoffsetMinutes = tzoffsetMinutes;
|
|
167
|
+
this.rawValue = rawValue;
|
|
168
|
+
this.zoneName = zoneName;
|
|
169
|
+
_ExifDateTime_dt.set(this, void 0);
|
|
170
|
+
}
|
|
159
171
|
get millis() {
|
|
160
172
|
return this.millisecond;
|
|
161
173
|
}
|
package/dist/ExifDateTime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifDateTime.js","sourceRoot":"","sources":["../src/ExifDateTime.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,iCAMc;AACd,yCAA2C;AAC3C,
|
|
1
|
+
{"version":3,"file":"ExifDateTime.js","sourceRoot":"","sources":["../src/ExifDateTime.ts"],"names":[],"mappings":"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"}
|
package/dist/ExifTime.js
CHANGED
|
@@ -8,13 +8,6 @@ const String_1 = require("./String");
|
|
|
8
8
|
* Encodes an ExifTime (which may not have a timezone offset)
|
|
9
9
|
*/
|
|
10
10
|
class ExifTime {
|
|
11
|
-
constructor(hour, minute, second, millisecond, rawValue) {
|
|
12
|
-
this.hour = hour;
|
|
13
|
-
this.minute = minute;
|
|
14
|
-
this.second = second;
|
|
15
|
-
this.millisecond = millisecond;
|
|
16
|
-
this.rawValue = rawValue;
|
|
17
|
-
}
|
|
18
11
|
static fromEXIF(text) {
|
|
19
12
|
if ((0, String_1.blank)(text))
|
|
20
13
|
return;
|
|
@@ -26,6 +19,13 @@ class ExifTime {
|
|
|
26
19
|
? undefined
|
|
27
20
|
: new ExifTime(dt.hour, dt.minute, dt.second, dt.millisecond, rawValue);
|
|
28
21
|
}
|
|
22
|
+
constructor(hour, minute, second, millisecond, rawValue) {
|
|
23
|
+
this.hour = hour;
|
|
24
|
+
this.minute = minute;
|
|
25
|
+
this.second = second;
|
|
26
|
+
this.millisecond = millisecond;
|
|
27
|
+
this.rawValue = rawValue;
|
|
28
|
+
}
|
|
29
29
|
get millis() {
|
|
30
30
|
return this.millisecond;
|
|
31
31
|
}
|
package/dist/ExifTime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifTime.js","sourceRoot":"","sources":["../src/ExifTime.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,mCAA2C;AAC3C,qCAAiD;AAEjD;;GAEG;AACH,MAAa,QAAQ;
|
|
1
|
+
{"version":3,"file":"ExifTime.js","sourceRoot":"","sources":["../src/ExifTime.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,mCAA2C;AAC3C,qCAAiD;AAEjD;;GAEG;AACH,MAAa,QAAQ;IACnB,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,IAAI,IAAA,cAAK,EAAC,IAAI,CAAC;YAAE,OAAM;QACvB,IAAI,GAAG,IAAA,YAAG,EAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;QACvB,OAAO,IAAA,aAAK,EACV,CAAC,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,EACxD,CAAC,GAAG,EAAE,EAAE,CACN,IAAA,WAAG,EAAC,gBAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAC3E,CAAA;IACH,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,EAAY,EAAE,QAAiB;QACjD,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO;YAC9B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IAC3E,CAAC;IAED,YACW,IAAY,EACZ,MAAc,EACd,MAAc,EACd,WAAoB,EACpB,QAAiB;QAJjB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,gBAAW,GAAX,WAAW,CAAS;QACpB,aAAQ,GAAR,QAAQ,CAAS;IACzB,CAAC;IAEJ,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAEO,MAAM;QACZ,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC;YACvD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,GAAG,GAAG,IAAA,aAAI,EAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAClC,CAAC;IAED,QAAQ;QACN,OAAO,IAAA,aAAI,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;IAC5E,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAA;IACH,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAoC;QAClD,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,QAAQ,CACd,CAAA;IACH,CAAC;CACF;AAnED,4BAmEC"}
|
package/dist/ExifTool.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
2
|
import * as bc from "batch-cluster";
|
|
4
3
|
import { ApplicationRecordTags } from "./ApplicationRecordTags";
|
|
5
4
|
import { ExifDate } from "./ExifDate";
|
|
6
5
|
import { ExifDateTime } from "./ExifDateTime";
|
|
6
|
+
import { ExifToolOptions } from "./ExifToolOptions";
|
|
7
7
|
import { ExifToolTask } from "./ExifToolTask";
|
|
8
|
-
import { geoTz } from "./GeoTz";
|
|
9
8
|
import { ICCProfileTags } from "./ICCProfileTags";
|
|
10
9
|
import { IgnorableError } from "./IgnorableError";
|
|
11
10
|
import { Maybe } from "./Maybe";
|
|
11
|
+
import { Omit } from "./Omit";
|
|
12
12
|
import { PreviewTag } from "./PreviewTag";
|
|
13
13
|
import { ResourceEvent } from "./ResourceEvent";
|
|
14
14
|
import { Struct } from "./Struct";
|
|
@@ -22,7 +22,7 @@ export { ExifToolTask } from "./ExifToolTask";
|
|
|
22
22
|
export { isIgnorableWarning } from "./IgnorableError";
|
|
23
23
|
export { parseJSON } from "./JSON";
|
|
24
24
|
export { defaultVideosToUTC, offsetMinutesToZoneName, UnsetZone, UnsetZoneName, UnsetZoneOffsetMinutes, } from "./Timezones";
|
|
25
|
-
export type { AdditionalWriteTags, APP12Tags, APP14Tags, APP1Tags, APP4Tags, APP5Tags, APP6Tags, ApplicationRecordTags, CompositeTags, EXIFTags, ExifToolTags, ExpandedDateTags, FileTags, FlashPixTags, ICCProfileTags, IgnorableError, IPTCTags, JFIFTags, MakerNotesTags, Maybe, MetaTags, MPFTags, Omit, PanasonicRawTags, PhotoshopTags, PrintIMTags, QuickTimeTags, RAFTags, ResourceEvent, RIFFTags, Struct, Tags, Version, XMPTags, };
|
|
25
|
+
export type { AdditionalWriteTags, APP12Tags, APP14Tags, APP1Tags, APP4Tags, APP5Tags, APP6Tags, ApplicationRecordTags, CompositeTags, EXIFTags, ExifToolTags, ExifToolOptions, ExpandedDateTags, FileTags, FlashPixTags, ICCProfileTags, IgnorableError, IPTCTags, JFIFTags, MakerNotesTags, Maybe, MetaTags, MPFTags, Omit, PanasonicRawTags, PhotoshopTags, PrintIMTags, QuickTimeTags, RAFTags, ResourceEvent, RIFFTags, Struct, Tags, Version, XMPTags, };
|
|
26
26
|
export declare const DefaultExifToolPath: string;
|
|
27
27
|
export declare const DefaultExiftoolArgs: string[];
|
|
28
28
|
/**
|
|
@@ -37,14 +37,14 @@ export interface ShortcutTags {
|
|
|
37
37
|
*/
|
|
38
38
|
AllDates?: string;
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
type AdditionalWriteTags = {
|
|
41
41
|
"Orientation#"?: number;
|
|
42
42
|
};
|
|
43
|
-
|
|
43
|
+
type ExpandedDateTags = {
|
|
44
44
|
[K in keyof Tags]: (Tags[K] extends number ? number : Tags[K] extends ExifDateTime ? ExifDate | ExifDateTime : Tags[K]) | string;
|
|
45
45
|
};
|
|
46
|
-
export
|
|
47
|
-
export
|
|
46
|
+
export type Defined<T> = T extends undefined ? never : T;
|
|
47
|
+
export type DefinedOrNullValued<T> = {
|
|
48
48
|
[P in keyof T]: Defined<T[P]> | null;
|
|
49
49
|
};
|
|
50
50
|
export interface StructAppendTags {
|
|
@@ -57,124 +57,8 @@ export interface StructAppendTags {
|
|
|
57
57
|
*/
|
|
58
58
|
"Versions+"?: Version | Version[];
|
|
59
59
|
}
|
|
60
|
-
export
|
|
60
|
+
export type WriteTags = DefinedOrNullValued<ShortcutTags & AdditionalWriteTags & ExpandedDateTags & StructAppendTags>;
|
|
61
61
|
export declare const DefaultMaxProcs: number;
|
|
62
|
-
export interface ExifToolOptions extends bc.BatchClusterOptions, bc.BatchProcessOptions, bc.ChildProcessFactory {
|
|
63
|
-
/**
|
|
64
|
-
* The maximum number of ExifTool child processes to spawn when load merits.
|
|
65
|
-
*
|
|
66
|
-
* Defaults to 1/4 the number of CPUs, minimally 1.
|
|
67
|
-
*/
|
|
68
|
-
maxProcs: number;
|
|
69
|
-
/**
|
|
70
|
-
* The maximum number of requests a given ExifTool process will service before
|
|
71
|
-
* being retired.
|
|
72
|
-
*
|
|
73
|
-
* Defaults to 500, to balance performance with memory usage.
|
|
74
|
-
*/
|
|
75
|
-
maxTasksPerProcess: number;
|
|
76
|
-
/**
|
|
77
|
-
* Spawning new ExifTool processes must not take longer than
|
|
78
|
-
* `spawnTimeoutMillis` millis before it times out and a new attempt is made.
|
|
79
|
-
* Be pessimistic here--windows can regularly take several seconds to spin up
|
|
80
|
-
* a process, thanks to antivirus shenanigans. This can't be set to a value
|
|
81
|
-
* less than 100ms.
|
|
82
|
-
*
|
|
83
|
-
* Defaults to 30 seconds, to accommodate slow Windows machines.
|
|
84
|
-
*/
|
|
85
|
-
spawnTimeoutMillis: number;
|
|
86
|
-
/**
|
|
87
|
-
* If requests to ExifTool take longer than this,
|
|
88
|
-
* presume the underlying process is dead and we should restart the task. This
|
|
89
|
-
* can't be set to a value less than 10ms, and really should be set to at more
|
|
90
|
-
* than a second unless `taskRetries` is sufficiently large or all writes will
|
|
91
|
-
* be to a fast local disk. Defaults to 10 seconds.
|
|
92
|
-
*/
|
|
93
|
-
taskTimeoutMillis: number;
|
|
94
|
-
/**
|
|
95
|
-
* An interval timer is scheduled to do periodic maintenance of underlying
|
|
96
|
-
* child processes with this periodicity.
|
|
97
|
-
*
|
|
98
|
-
* Defaults to 2 seconds.
|
|
99
|
-
*/
|
|
100
|
-
onIdleIntervalMillis: number;
|
|
101
|
-
/**
|
|
102
|
-
* The number of times a task can error or timeout and be retried.
|
|
103
|
-
*
|
|
104
|
-
* Defaults to 1 (every task gets 2 chances).
|
|
105
|
-
*/
|
|
106
|
-
taskRetries: number;
|
|
107
|
-
/**
|
|
108
|
-
* Allows for non-standard paths to ExifTool. Defaults to the perl or windows
|
|
109
|
-
* binaries provided by `exiftool-vendored.pl` or `exiftool-vendored.exe`.
|
|
110
|
-
*/
|
|
111
|
-
exiftoolPath: string;
|
|
112
|
-
/**
|
|
113
|
-
* Args passed to exiftool on launch.
|
|
114
|
-
*/
|
|
115
|
-
exiftoolArgs: string[];
|
|
116
|
-
/**
|
|
117
|
-
* Environment variables passed to ExifTool (besides `EXIFTOOL_HOME`)
|
|
118
|
-
*/
|
|
119
|
-
exiftoolEnv: NodeJS.ProcessEnv;
|
|
120
|
-
/**
|
|
121
|
-
* Tag names (which can have '*' glob matchers) which you want numeric values,
|
|
122
|
-
* rather than ExifTool's "Print Conversion."
|
|
123
|
-
*
|
|
124
|
-
* If the tag value is only for human consumption, you may want to leave this
|
|
125
|
-
* blank. The default is `["*Duration*"]`, but you may want to include
|
|
126
|
-
* "Orientation" as well.
|
|
127
|
-
*/
|
|
128
|
-
numericTags: string[];
|
|
129
|
-
/**
|
|
130
|
-
* Video file dates are assumed to be in UTC, rather than using timezone
|
|
131
|
-
* inference used in images. To disable this default, set this to false.
|
|
132
|
-
*
|
|
133
|
-
* @see <https://github.com/photostructure/exiftool-vendored.js/issues/113>
|
|
134
|
-
*/
|
|
135
|
-
defaultVideosToUTC: boolean;
|
|
136
|
-
/**
|
|
137
|
-
* `ExifTool` has a shebang line that assumes a valid `perl` is installed at
|
|
138
|
-
* `/usr/bin/perl`.
|
|
139
|
-
*
|
|
140
|
-
* Some environments may not include a valid `/usr/bin/perl` (like AWS
|
|
141
|
-
* Lambda), but `perl` may be available in your `PATH` some place else (like
|
|
142
|
-
* `/opt/bin/perl`), if you pull in a perl layer.
|
|
143
|
-
*
|
|
144
|
-
* This will default to `true` in those environments as a workaround in these
|
|
145
|
-
* situations. Note also that `perl` will be spawned in a sub-shell.
|
|
146
|
-
*/
|
|
147
|
-
ignoreShebang: boolean;
|
|
148
|
-
/**
|
|
149
|
-
* Override the default geo-to-timezone lookup service.
|
|
150
|
-
*
|
|
151
|
-
* This defaults to `@photostructure/tz-lookup`, but if you have the
|
|
152
|
-
* resources, consider using `geo-tz` for more accurate results.
|
|
153
|
-
*
|
|
154
|
-
* Here's a snippet of how to use `geo-tz` instead of `tz-lookup`:
|
|
155
|
-
*
|
|
156
|
-
```js
|
|
157
|
-
const geotz = require("geo-tz")
|
|
158
|
-
const { ExifTool } = require("exiftool-vendored")
|
|
159
|
-
const exiftool = new ExifTool({ geoTz: (lat, lon) => geotz.find(lat, lon)[0] })
|
|
160
|
-
```
|
|
161
|
-
*
|
|
162
|
-
* @see https://github.com/photostructure/tz-lookup
|
|
163
|
-
* @see https://github.com/evansiroky/node-geo-tz/
|
|
164
|
-
*/
|
|
165
|
-
geoTz: typeof geoTz;
|
|
166
|
-
/**
|
|
167
|
-
* Predicate for error handling.
|
|
168
|
-
*
|
|
169
|
-
* ExifTool will emit error and warning messages for a variety of reasons.
|
|
170
|
-
*
|
|
171
|
-
* The default implementation ignores all errors that begin with "Warning:"
|
|
172
|
-
*
|
|
173
|
-
* @return true if the error should be ignored
|
|
174
|
-
*/
|
|
175
|
-
isIgnorableError: IgnorableError;
|
|
176
|
-
}
|
|
177
|
-
declare type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;
|
|
178
62
|
/**
|
|
179
63
|
* Default values for `ExifToolOptions`, except for `processFactory` (which is
|
|
180
64
|
* created by the ExifTool constructor)
|
|
@@ -227,19 +111,14 @@ export declare class ExifTool {
|
|
|
227
111
|
* worse if you don't include `-fast` or `-fast2` (as the most expensive bit
|
|
228
112
|
* is the perl interpreter and scanning the file on disk).
|
|
229
113
|
*
|
|
230
|
-
* @param args
|
|
231
|
-
* `-charset` or `filename=utf8` are missing, and you have non-ascii tag
|
|
232
|
-
* values, you're going to have a bad day. The resolved pathname will be
|
|
233
|
-
* appended to the args array for you, and if `-json` is missing from `args`,
|
|
234
|
-
* that will be prepended, as it's a prerequisite to parsing the result.
|
|
114
|
+
* @param args any additional arguments other than the file path. Note that "-json", and the Windows unicode filename handler flags, "-charset filename=utf8", will be added automatically.
|
|
235
115
|
*
|
|
236
116
|
* @return Note that the return value will be similar to `Tags`, but with no
|
|
237
|
-
* date, time, or other rich type parsing that you get from `.read()
|
|
238
|
-
* return value is wholly untyped.
|
|
117
|
+
* date, time, or other rich type parsing that you get from `.read()`. The field values will be `string | number | string[]`.
|
|
239
118
|
*
|
|
240
119
|
* @see https://github.com/photostructure/exiftool-vendored.js/issues/44
|
|
241
120
|
*/
|
|
242
|
-
readRaw(file: string, args
|
|
121
|
+
readRaw(file: string, args?: string[]): Promise<Tags>;
|
|
243
122
|
/**
|
|
244
123
|
* Write the given `tags` to `file`.
|
|
245
124
|
*
|