exiftool-vendored 15.2.0 → 15.6.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 +30 -0
- package/README.md +19 -0
- package/dist/ApplicationRecordTags.d.ts +0 -1
- package/dist/Array.d.ts +0 -1
- package/dist/AsyncRetry.d.ts +0 -1
- package/dist/BinaryExtractionTask.d.ts +0 -1
- package/dist/BinaryExtractionTask.js +7 -4
- package/dist/BinaryExtractionTask.js.map +1 -1
- package/dist/BinaryToBufferTask.d.ts +1 -3
- package/dist/BinaryToBufferTask.js +10 -3
- package/dist/BinaryToBufferTask.js.map +1 -1
- package/dist/DateTime.d.ts +0 -1
- package/dist/ExifDate.d.ts +8 -1
- package/dist/ExifDate.js +18 -6
- package/dist/ExifDate.js.map +1 -1
- package/dist/ExifDateTime.d.ts +16 -3
- package/dist/ExifDateTime.js +33 -14
- package/dist/ExifDateTime.js.map +1 -1
- package/dist/ExifTime.d.ts +8 -1
- package/dist/ExifTime.js +17 -5
- package/dist/ExifTime.js.map +1 -1
- package/dist/ExifTool.d.ts +4 -4
- package/dist/ExifTool.js +9 -7
- package/dist/ExifTool.js.map +1 -1
- package/dist/ExifToolTask.d.ts +0 -1
- package/dist/ExifToolTask.js +3 -3
- package/dist/ExifToolTask.js.map +1 -1
- package/dist/ICCProfileTags.d.ts +0 -1
- package/dist/JSON.d.ts +1 -0
- package/dist/JSON.js +16 -0
- package/dist/JSON.js.map +1 -0
- package/dist/Lazy.d.ts +0 -1
- package/dist/Maybe.d.ts +0 -1
- package/dist/Maybe.js +1 -1
- package/dist/Maybe.js.map +1 -1
- package/dist/Number.d.ts +0 -1
- package/dist/Number.js +2 -2
- package/dist/Number.js.map +1 -1
- package/dist/Object.d.ts +0 -1
- package/dist/PreviewTag.d.ts +0 -1
- package/dist/ReadRawTask.d.ts +0 -1
- package/dist/ReadRawTask.js +2 -2
- package/dist/ReadRawTask.js.map +1 -1
- package/dist/ReadTask.d.ts +3 -4
- package/dist/ReadTask.js +13 -13
- package/dist/ReadTask.js.map +1 -1
- package/dist/RewriteAllTagsTask.d.ts +0 -1
- package/dist/RewriteAllTagsTask.js +2 -2
- package/dist/RewriteAllTagsTask.js.map +1 -1
- package/dist/String.d.ts +0 -1
- package/dist/String.js +6 -3
- package/dist/String.js.map +1 -1
- package/dist/Struct.d.ts +0 -1
- package/dist/Struct.js +1 -1
- package/dist/Struct.js.map +1 -1
- package/dist/Tags.d.ts +9 -4
- package/dist/Timezones.d.ts +0 -1
- package/dist/Timezones.js +17 -16
- package/dist/Timezones.js.map +1 -1
- package/dist/VersionTask.d.ts +0 -1
- package/dist/WriteTask.d.ts +0 -1
- package/dist/WriteTask.js +9 -9
- package/dist/WriteTask.js.map +1 -1
- package/package.json +25 -25
- package/dist/ApplicationRecordTags.d.ts.map +0 -1
- package/dist/Array.d.ts.map +0 -1
- package/dist/AsyncRetry.d.ts.map +0 -1
- package/dist/BinaryExtractionTask.d.ts.map +0 -1
- package/dist/BinaryToBufferTask.d.ts.map +0 -1
- package/dist/DateTime.d.ts.map +0 -1
- package/dist/ExifDate.d.ts.map +0 -1
- package/dist/ExifDateTime.d.ts.map +0 -1
- package/dist/ExifTime.d.ts.map +0 -1
- package/dist/ExifTool.d.ts.map +0 -1
- package/dist/ExifToolTask.d.ts.map +0 -1
- package/dist/ICCProfileTags.d.ts.map +0 -1
- package/dist/Lazy.d.ts.map +0 -1
- package/dist/Maybe.d.ts.map +0 -1
- package/dist/Number.d.ts.map +0 -1
- package/dist/Object.d.ts.map +0 -1
- package/dist/PreviewTag.d.ts.map +0 -1
- package/dist/ReadRawTask.d.ts.map +0 -1
- package/dist/ReadTask.d.ts.map +0 -1
- package/dist/RewriteAllTagsTask.d.ts.map +0 -1
- package/dist/String.d.ts.map +0 -1
- package/dist/Struct.d.ts.map +0 -1
- package/dist/Tags.d.ts.map +0 -1
- package/dist/Timezones.d.ts.map +0 -1
- package/dist/VersionTask.d.ts.map +0 -1
- package/dist/WriteTask.d.ts.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -25,6 +25,36 @@ vendored versions of ExifTool match the version they vendor.
|
|
|
25
25
|
|
|
26
26
|
## Version history
|
|
27
27
|
|
|
28
|
+
### v15.6.0
|
|
29
|
+
|
|
30
|
+
- ✨ Added [serialization support](https://github.com/photostructure/exiftool-vendored.js/issues/102)
|
|
31
|
+
|
|
32
|
+
- 🌱 ExifTool upgraded to [v12.34](https://exiftool.org/history.html#v12.34).
|
|
33
|
+
|
|
34
|
+
### v15.5.0
|
|
35
|
+
|
|
36
|
+
- 🌱 ExifTool upgraded to [v12.33](https://exiftool.org/history.html#v12.33).
|
|
37
|
+
|
|
38
|
+
- 📦 Updated dependencies
|
|
39
|
+
|
|
40
|
+
- 📦 Now ignoring `yarn.lock`
|
|
41
|
+
|
|
42
|
+
### v15.4.0
|
|
43
|
+
|
|
44
|
+
- 🌱 ExifTool upgraded to [v12.31](https://exiftool.org/history.html#v12.31).
|
|
45
|
+
|
|
46
|
+
- 📦 Updated dependencies (including new TypeScript, which required import [adjustments](https://github.com/microsoft/TypeScript/issues/46027#issuecomment-926019016).
|
|
47
|
+
|
|
48
|
+
### v15.3.0
|
|
49
|
+
|
|
50
|
+
- ✨ `ExifTool.read` and `ExifTool.write` [now accept generics](https://github.com/photostructure/exiftool-vendored.js/issues/103).
|
|
51
|
+
|
|
52
|
+
- 🌱 ExifTool upgraded to [v12.30](https://exiftool.org/history.html#v12.30).
|
|
53
|
+
|
|
54
|
+
- 📦 Updated dependencies (including new Luxon and TypeScript)
|
|
55
|
+
|
|
56
|
+
- 📦 Rebuilt docs
|
|
57
|
+
|
|
28
58
|
### v15.2.0
|
|
29
59
|
|
|
30
60
|
- 📦 Updated dependencies (including [batch-cluster
|
package/README.md
CHANGED
|
@@ -398,6 +398,25 @@ Note that if parsing fails (for, example, a datetime string), the raw string
|
|
|
398
398
|
will be returned. Consuming code should verify both existence and type as
|
|
399
399
|
reasonable for safety.
|
|
400
400
|
|
|
401
|
+
## Serialization
|
|
402
|
+
|
|
403
|
+
The `Tags` object returned by `.readTags()` can be serialized to JSON with `JSON.stringify`.
|
|
404
|
+
|
|
405
|
+
To reconstitute, use the `parseJSON()` method.
|
|
406
|
+
|
|
407
|
+
```ts
|
|
408
|
+
import { exiftool, parseJSON } from "exiftool-vendored"
|
|
409
|
+
|
|
410
|
+
const tags: Tags = await exiftool.readTags("/path/to/file.jpg")
|
|
411
|
+
const str: string = JSON.stringify(tags)
|
|
412
|
+
|
|
413
|
+
// parseJSON doesn't validate the input, so we don't assert that it's a Tags
|
|
414
|
+
// instance, but you can cast it (unsafely...)
|
|
415
|
+
|
|
416
|
+
const tags2: Tags = parseJSON(str) as Tags
|
|
417
|
+
|
|
418
|
+
```
|
|
419
|
+
|
|
401
420
|
## Performance
|
|
402
421
|
|
|
403
422
|
The `npm run mktags` target reads all tags found in a batch of sample images and
|
package/dist/Array.d.ts
CHANGED
package/dist/AsyncRetry.d.ts
CHANGED
|
@@ -9,4 +9,3 @@ export declare class BinaryExtractionTask extends ExifToolTask<Maybe<string>> {
|
|
|
9
9
|
static for(tagname: string, imgSrc: string, imgDest: string): BinaryExtractionTask;
|
|
10
10
|
parse(stdout: string, err?: Error): Maybe<string>;
|
|
11
11
|
}
|
|
12
|
-
//# sourceMappingURL=BinaryExtractionTask.d.ts.map
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.BinaryExtractionTask = void 0;
|
|
4
|
-
const path_1 = require("path");
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
5
8
|
const ExifToolTask_1 = require("./ExifToolTask");
|
|
6
9
|
const String_1 = require("./String");
|
|
7
10
|
const StdoutRe = /\b(\d+) output files? created/i;
|
|
@@ -17,16 +20,16 @@ class BinaryExtractionTask extends ExifToolTask_1.ExifToolTask {
|
|
|
17
20
|
const args = [
|
|
18
21
|
"-b",
|
|
19
22
|
"-" + tagname,
|
|
20
|
-
path_1.resolve(imgSrc),
|
|
23
|
+
path_1.default.resolve(imgSrc),
|
|
21
24
|
"-w",
|
|
22
25
|
// The %0f prevents shell escaping. See
|
|
23
26
|
// https://exiftool.org/exiftool_pod.html#w-EXT-or-FMT--textOut
|
|
24
|
-
"%0f" + path_1.resolve(imgDest),
|
|
27
|
+
"%0f" + path_1.default.resolve(imgDest),
|
|
25
28
|
];
|
|
26
29
|
return new BinaryExtractionTask(args);
|
|
27
30
|
}
|
|
28
31
|
parse(stdout, err) {
|
|
29
|
-
const s = String_1.toS(stdout).trim();
|
|
32
|
+
const s = (0, String_1.toS)(stdout).trim();
|
|
30
33
|
const m = StdoutRe.exec(s);
|
|
31
34
|
if (err != null) {
|
|
32
35
|
throw err;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BinaryExtractionTask.js","sourceRoot":"","sources":["../src/BinaryExtractionTask.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BinaryExtractionTask.js","sourceRoot":"","sources":["../src/BinaryExtractionTask.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,iDAA6C;AAE7C,qCAA8B;AAE9B,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,IAAI;YACJ,GAAG,GAAG,OAAO;YACb,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACpB,IAAI;YACJ,uCAAuC;YACvC,+DAA+D;YAC/D,KAAK,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC;SAC9B,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;AApCD,oDAoCC"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { ExifToolTask } from "./ExifToolTask";
|
|
3
|
-
import { PreviewTag } from "./PreviewTag";
|
|
4
3
|
/**
|
|
5
4
|
* Task that returns an error string (to prevent retries), or undefined if
|
|
6
5
|
* everything seems to have worked.
|
|
7
6
|
*/
|
|
8
7
|
export declare class BinaryToBufferTask extends ExifToolTask<Buffer | Error> {
|
|
9
|
-
readonly tagname:
|
|
8
|
+
readonly tagname: string;
|
|
10
9
|
private constructor();
|
|
11
10
|
static for(tagname: string, imgSrc: string): BinaryToBufferTask;
|
|
12
11
|
parse(data: string, err?: Error): Buffer | Error;
|
|
13
12
|
}
|
|
14
|
-
//# sourceMappingURL=BinaryToBufferTask.d.ts.map
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.BinaryToBufferTask = void 0;
|
|
4
|
-
const path_1 = require("path");
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
5
8
|
const ExifToolTask_1 = require("./ExifToolTask");
|
|
6
9
|
const String_1 = require("./String");
|
|
7
10
|
/**
|
|
@@ -16,7 +19,7 @@ class BinaryToBufferTask extends ExifToolTask_1.ExifToolTask {
|
|
|
16
19
|
static for(tagname, imgSrc) {
|
|
17
20
|
// NOTE TO FUTURE ME: we don't need to escape these arguments, because
|
|
18
21
|
// ExifTool separates them via newlines.
|
|
19
|
-
const args = ["-json", "-b", "-" + tagname, path_1.resolve(imgSrc)];
|
|
22
|
+
const args = ["-json", "-b", "-" + tagname, path_1.default.resolve(imgSrc)];
|
|
20
23
|
return new BinaryToBufferTask(tagname, args);
|
|
21
24
|
}
|
|
22
25
|
parse(data, err) {
|
|
@@ -38,7 +41,11 @@ class BinaryToBufferTask extends ExifToolTask_1.ExifToolTask {
|
|
|
38
41
|
}
|
|
39
42
|
}
|
|
40
43
|
catch (caught) {
|
|
41
|
-
err !== null && err !== void 0 ? err : (err = String_1.notBlank
|
|
44
|
+
err !== null && err !== void 0 ? err : (err = (0, String_1.notBlank)(data)
|
|
45
|
+
? new Error(data)
|
|
46
|
+
: caught instanceof Error
|
|
47
|
+
? caught
|
|
48
|
+
: new Error(String(caught)));
|
|
42
49
|
}
|
|
43
50
|
return err !== null && err !== void 0 ? err : new Error(this.tagname + " not found");
|
|
44
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BinaryToBufferTask.js","sourceRoot":"","sources":["../src/BinaryToBufferTask.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BinaryToBufferTask.js","sourceRoot":"","sources":["../src/BinaryToBufferTask.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,iDAA6C;AAE7C,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,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,EAAE,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;QACjE,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;AAnCD,gDAmCC;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
|
@@ -11,4 +11,3 @@ export declare 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>;
|
|
14
|
-
//# sourceMappingURL=DateTime.d.ts.map
|
package/dist/ExifDate.d.ts
CHANGED
|
@@ -22,5 +22,12 @@ export declare class ExifDate {
|
|
|
22
22
|
toISOString(): string;
|
|
23
23
|
toExifString(): string;
|
|
24
24
|
toString(sep?: string): string;
|
|
25
|
+
toJSON(): {
|
|
26
|
+
_ctor: string;
|
|
27
|
+
year: number;
|
|
28
|
+
month: number;
|
|
29
|
+
day: number;
|
|
30
|
+
rawValue: string | undefined;
|
|
31
|
+
};
|
|
32
|
+
static fromJSON(json: ReturnType<ExifDate["toJSON"]>): ExifDate;
|
|
25
33
|
}
|
|
26
|
-
//# sourceMappingURL=ExifDate.d.ts.map
|
package/dist/ExifDate.js
CHANGED
|
@@ -22,10 +22,10 @@ class ExifDate {
|
|
|
22
22
|
return this.fromDateTime(luxon_1.DateTime.fromISO(text), text);
|
|
23
23
|
}
|
|
24
24
|
static fromPatterns(text, fmts) {
|
|
25
|
-
if (String_1.blank(text))
|
|
25
|
+
if ((0, String_1.blank)(text))
|
|
26
26
|
return;
|
|
27
|
-
text = String_1.toS(text).trim();
|
|
28
|
-
return Maybe_1.first(fmts, (fmt) => Maybe_1.map(luxon_1.DateTime.fromFormat(text, fmt), (dt) => this.fromDateTime(dt, text)));
|
|
27
|
+
text = (0, String_1.toS)(text).trim();
|
|
28
|
+
return (0, Maybe_1.first)(fmts, (fmt) => (0, Maybe_1.map)(luxon_1.DateTime.fromFormat(text, fmt), (dt) => this.fromDateTime(dt, text)));
|
|
29
29
|
}
|
|
30
30
|
// These are all formats I've seen in the wild from exiftool's output.
|
|
31
31
|
// More iterations might make sense, like "d MMM, y" or "MMM d, y", but I
|
|
@@ -38,13 +38,13 @@ class ExifDate {
|
|
|
38
38
|
return this.fromPatterns(text, ["MMM d y", "MMMM d y"]);
|
|
39
39
|
}
|
|
40
40
|
static fromEXIF(text) {
|
|
41
|
-
return Maybe_1.firstDefinedThunk([
|
|
41
|
+
return (0, Maybe_1.firstDefinedThunk)([
|
|
42
42
|
() => this.fromExifStrict(text),
|
|
43
43
|
() => this.fromExifLoose(text),
|
|
44
44
|
]);
|
|
45
45
|
}
|
|
46
46
|
static fromDateTime(dt, rawValue) {
|
|
47
|
-
return DateTime_1.validDateTime(dt)
|
|
47
|
+
return (0, DateTime_1.validDateTime)(dt)
|
|
48
48
|
? new ExifDate(dt.year, dt.month, dt.day, rawValue)
|
|
49
49
|
: undefined;
|
|
50
50
|
}
|
|
@@ -58,7 +58,19 @@ class ExifDate {
|
|
|
58
58
|
return this.toString(":");
|
|
59
59
|
}
|
|
60
60
|
toString(sep = "-") {
|
|
61
|
-
return `${this.year}${sep}${String_1.pad2(this.month, this.day).join(sep)}`;
|
|
61
|
+
return `${this.year}${sep}${(0, String_1.pad2)(this.month, this.day).join(sep)}`;
|
|
62
|
+
}
|
|
63
|
+
toJSON() {
|
|
64
|
+
return {
|
|
65
|
+
_ctor: "ExifDate",
|
|
66
|
+
year: this.year,
|
|
67
|
+
month: this.month,
|
|
68
|
+
day: this.day,
|
|
69
|
+
rawValue: this.rawValue,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
static fromJSON(json) {
|
|
73
|
+
return new ExifDate(json.year, json.month, json.day, json.rawValue);
|
|
62
74
|
}
|
|
63
75
|
}
|
|
64
76
|
exports.ExifDate = ExifDate;
|
package/dist/ExifDate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExifDate.js","sourceRoot":"","sources":["../src/ExifDate.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAEhC,yCAA0C;AAC1C,mCAA8D;AAC9D,qCAA2C;AAE3C;;GAEG;AACH,MAAa,QAAQ;IAwCnB,YACW,IAAY,EAAE,qJAAqJ;IACnK,KAAa,EAAE,4CAA4C;IAC3D,GAAW,EAAE,OAAO;IACpB,QAAiB;QAHjB,SAAI,GAAJ,IAAI,CAAQ;QACZ,UAAK,GAAL,KAAK,CAAQ;QACb,QAAG,GAAH,GAAG,CAAQ;QACX,aAAQ,GAAR,QAAQ,CAAS;IACzB,CAAC;IA5CJ,MAAM,CAAC,OAAO,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;IACxD,CAAC;IAEO,MAAM,CAAC,YAAY,CAAC,IAAY,EAAE,IAAc;QACtD,IAAI,cAAK,
|
|
1
|
+
{"version":3,"file":"ExifDate.js","sourceRoot":"","sources":["../src/ExifDate.ts"],"names":[],"mappings":"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"}
|
package/dist/ExifDateTime.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DateTime,
|
|
1
|
+
import { DateTime, ToISOTimeOptions } from "luxon";
|
|
2
2
|
import { Maybe } from "./Maybe";
|
|
3
3
|
/**
|
|
4
4
|
* Encodes an ExifDateTime with an optional tz offset in minutes.
|
|
@@ -35,9 +35,22 @@ export declare class ExifDateTime {
|
|
|
35
35
|
get zone(): Maybe<string>;
|
|
36
36
|
toDateTime(): DateTime;
|
|
37
37
|
toDate(): Date;
|
|
38
|
-
toISOString(options?:
|
|
38
|
+
toISOString(options?: ToISOTimeOptions): Maybe<string>;
|
|
39
39
|
toExifString(): string;
|
|
40
40
|
toString(): Maybe<string>;
|
|
41
41
|
get isValid(): boolean;
|
|
42
|
+
toJSON(): {
|
|
43
|
+
_ctor: string;
|
|
44
|
+
year: number;
|
|
45
|
+
month: number;
|
|
46
|
+
day: number;
|
|
47
|
+
hour: number;
|
|
48
|
+
minute: number;
|
|
49
|
+
second: number;
|
|
50
|
+
millisecond: number | undefined;
|
|
51
|
+
tzoffsetMinutes: number | undefined;
|
|
52
|
+
rawValue: string | undefined;
|
|
53
|
+
zoneName: string | undefined;
|
|
54
|
+
};
|
|
55
|
+
static fromJSON(json: ReturnType<ExifDateTime["toJSON"]>): ExifDateTime;
|
|
42
56
|
}
|
|
43
|
-
//# sourceMappingURL=ExifDateTime.d.ts.map
|
package/dist/ExifDateTime.js
CHANGED
|
@@ -23,12 +23,12 @@ class ExifDateTime {
|
|
|
23
23
|
this.zoneName = zoneName;
|
|
24
24
|
}
|
|
25
25
|
static fromISO(iso, zone, rawValue) {
|
|
26
|
-
if (String_1.blank(iso) || null != iso.match(/^\d+$/))
|
|
26
|
+
if ((0, String_1.blank)(iso) || null != iso.match(/^\d+$/))
|
|
27
27
|
return undefined;
|
|
28
28
|
return this.fromDateTime(luxon_1.DateTime.fromISO(iso, {
|
|
29
29
|
setZone: true,
|
|
30
30
|
zone: zone !== null && zone !== void 0 ? zone : Timezones_1.UnsetZone,
|
|
31
|
-
}), Maybe_1.orElse(rawValue, iso));
|
|
31
|
+
}), (0, Maybe_1.orElse)(rawValue, iso));
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* Try to parse a date-time string from EXIF. If there is not both a date and
|
|
@@ -40,16 +40,16 @@ class ExifDateTime {
|
|
|
40
40
|
* `offsetMinutesToZoneName`.
|
|
41
41
|
*/
|
|
42
42
|
static fromEXIF(text, defaultZone) {
|
|
43
|
-
if (String_1.blank(text))
|
|
43
|
+
if ((0, String_1.blank)(text))
|
|
44
44
|
return undefined;
|
|
45
|
-
return Maybe_1.firstDefinedThunk([
|
|
45
|
+
return (0, Maybe_1.firstDefinedThunk)([
|
|
46
46
|
() => this.fromExifStrict(text, defaultZone),
|
|
47
47
|
() => this.fromISO(text, defaultZone),
|
|
48
48
|
() => this.fromExifLoose(text, defaultZone),
|
|
49
49
|
]);
|
|
50
50
|
}
|
|
51
51
|
static fromPatterns(text, fmts) {
|
|
52
|
-
const s = String_1.toS(text).trim();
|
|
52
|
+
const s = (0, String_1.toS)(text).trim();
|
|
53
53
|
const inputs = [s];
|
|
54
54
|
// Some EXIF datetime will "over-specify" and include both the utc offset
|
|
55
55
|
// *and* the "time zone abbreviation", like PST or PDT.
|
|
@@ -61,13 +61,13 @@ class ExifDateTime {
|
|
|
61
61
|
if (noTza !== s)
|
|
62
62
|
inputs.push(noTza);
|
|
63
63
|
}
|
|
64
|
-
return Maybe_1.first(inputs, (input) => Maybe_1.first(fmts, ({ fmt, zone }) => Maybe_1.map(luxon_1.DateTime.fromFormat(input, fmt, {
|
|
64
|
+
return (0, Maybe_1.first)(inputs, (input) => (0, Maybe_1.first)(fmts, ({ fmt, zone }) => (0, Maybe_1.map)(luxon_1.DateTime.fromFormat(input, fmt, {
|
|
65
65
|
setZone: true,
|
|
66
66
|
zone: zone !== null && zone !== void 0 ? zone : Timezones_1.UnsetZone,
|
|
67
67
|
}), (dt) => this.fromDateTime(dt, s))));
|
|
68
68
|
}
|
|
69
69
|
static fromExifStrict(text, zone) {
|
|
70
|
-
if (String_1.blank(text))
|
|
70
|
+
if ((0, String_1.blank)(text))
|
|
71
71
|
return undefined;
|
|
72
72
|
return this.fromPatterns(text, [
|
|
73
73
|
// if it specifies a zone, use it:
|
|
@@ -92,9 +92,9 @@ class ExifDateTime {
|
|
|
92
92
|
]);
|
|
93
93
|
}
|
|
94
94
|
static fromExifLoose(text, defaultZone) {
|
|
95
|
-
if (String_1.blank(text))
|
|
95
|
+
if ((0, String_1.blank)(text))
|
|
96
96
|
return undefined;
|
|
97
|
-
const zone = String_1.notBlank(defaultZone) ? defaultZone : Timezones_1.UnsetZone;
|
|
97
|
+
const zone = (0, String_1.notBlank)(defaultZone) ? defaultZone : Timezones_1.UnsetZone;
|
|
98
98
|
return this.fromPatterns(text, [
|
|
99
99
|
// FWIW, the following are from actual datestamps seen in the wild:
|
|
100
100
|
{ fmt: "MMM d y H:m:sZZZ" },
|
|
@@ -120,11 +120,11 @@ class ExifDateTime {
|
|
|
120
120
|
return this.millisecond;
|
|
121
121
|
}
|
|
122
122
|
get hasZone() {
|
|
123
|
-
return String_1.notBlank(this.zone);
|
|
123
|
+
return (0, String_1.notBlank)(this.zone);
|
|
124
124
|
}
|
|
125
125
|
get zone() {
|
|
126
126
|
var _a;
|
|
127
|
-
return (_a = this.zoneName) !== null && _a !== void 0 ? _a : Timezones_1.offsetMinutesToZoneName(this.tzoffsetMinutes);
|
|
127
|
+
return (_a = this.zoneName) !== null && _a !== void 0 ? _a : (0, Timezones_1.offsetMinutesToZoneName)(this.tzoffsetMinutes);
|
|
128
128
|
}
|
|
129
129
|
toDateTime() {
|
|
130
130
|
return luxon_1.DateTime.fromObject({
|
|
@@ -135,6 +135,7 @@ class ExifDateTime {
|
|
|
135
135
|
minute: this.minute,
|
|
136
136
|
second: this.second,
|
|
137
137
|
millisecond: this.millisecond,
|
|
138
|
+
}, {
|
|
138
139
|
zone: this.zone,
|
|
139
140
|
});
|
|
140
141
|
}
|
|
@@ -142,13 +143,13 @@ class ExifDateTime {
|
|
|
142
143
|
return this.toDateTime().toJSDate();
|
|
143
144
|
}
|
|
144
145
|
toISOString(options = {}) {
|
|
145
|
-
return Maybe_1.denull(this.toDateTime().toISO({
|
|
146
|
-
suppressMilliseconds: Maybe_1.orElse(options.suppressMilliseconds, () => this.millisecond == null),
|
|
146
|
+
return (0, Maybe_1.denull)(this.toDateTime().toISO({
|
|
147
|
+
suppressMilliseconds: (0, Maybe_1.orElse)(options.suppressMilliseconds, () => this.millisecond == null),
|
|
147
148
|
includeOffset: this.hasZone && options.includeOffset !== false,
|
|
148
149
|
}));
|
|
149
150
|
}
|
|
150
151
|
toExifString() {
|
|
151
|
-
return DateTime_1.dateTimeToExif(this.toDateTime());
|
|
152
|
+
return (0, DateTime_1.dateTimeToExif)(this.toDateTime());
|
|
152
153
|
}
|
|
153
154
|
toString() {
|
|
154
155
|
return this.toISOString();
|
|
@@ -156,6 +157,24 @@ class ExifDateTime {
|
|
|
156
157
|
get isValid() {
|
|
157
158
|
return this.toDateTime().isValid;
|
|
158
159
|
}
|
|
160
|
+
toJSON() {
|
|
161
|
+
return {
|
|
162
|
+
_ctor: "ExifDateTime",
|
|
163
|
+
year: this.year,
|
|
164
|
+
month: this.month,
|
|
165
|
+
day: this.day,
|
|
166
|
+
hour: this.hour,
|
|
167
|
+
minute: this.minute,
|
|
168
|
+
second: this.second,
|
|
169
|
+
millisecond: this.millisecond,
|
|
170
|
+
tzoffsetMinutes: this.tzoffsetMinutes,
|
|
171
|
+
rawValue: this.rawValue,
|
|
172
|
+
zoneName: this.zoneName,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
static fromJSON(json) {
|
|
176
|
+
return new ExifDateTime(json.year, json.month, json.day, json.hour, json.minute, json.second, json.millisecond, json.tzoffsetMinutes, json.rawValue, json.zoneName);
|
|
177
|
+
}
|
|
159
178
|
}
|
|
160
179
|
exports.ExifDateTime = ExifDateTime;
|
|
161
180
|
//# 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,
|
|
1
|
+
{"version":3,"file":"ExifDateTime.js","sourceRoot":"","sources":["../src/ExifDateTime.ts"],"names":[],"mappings":";;;AAAA,iCAAwD;AACxD,yCAA2C;AAC3C,mCAA8E;AAC9E,qCAA+C;AAC/C,2CAIoB;AAEpB;;GAEG;AACH,MAAa,YAAY;IAiJvB,YACW,IAAY,EACZ,KAAa,EACb,GAAW,EACX,IAAY,EACZ,MAAc,EACd,MAAc,EACd,WAAoB,EACpB,eAAwB,EACxB,QAAiB,EACjB,QAAiB;QATjB,SAAI,GAAJ,IAAI,CAAQ;QACZ,UAAK,GAAL,KAAK,CAAQ;QACb,QAAG,GAAH,GAAG,CAAQ;QACX,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,gBAAW,GAAX,WAAW,CAAS;QACpB,oBAAe,GAAf,eAAe,CAAS;QACxB,aAAQ,GAAR,QAAQ,CAAS;QACjB,aAAQ,GAAR,QAAQ,CAAS;IACzB,CAAC;IA3JJ,MAAM,CAAC,OAAO,CACZ,GAAW,EACX,IAAoB,EACpB,QAAiB;QAEjB,IAAI,IAAA,cAAK,EAAC,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO,SAAS,CAAA;QAC9D,OAAO,IAAI,CAAC,YAAY,CACtB,gBAAQ,CAAC,OAAO,CAAC,GAAG,EAAE;YACpB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,qBAAS;SACxB,CAAC,EACF,IAAA,cAAM,EAAC,QAAQ,EAAE,GAAG,CAAC,CACtB,CAAA;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,QAAQ,CACb,IAAY,EACZ,WAA2B;QAE3B,IAAI,IAAA,cAAK,EAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAA;QACjC,OAAO,IAAA,yBAAiB,EAAC;YACvB,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC;YAC5C,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;YACrC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC;SAC5C,CAAC,CAAA;IACJ,CAAC;IAEO,MAAM,CAAC,YAAY,CACzB,IAAY,EACZ,IAAyD;QAEzD,MAAM,CAAC,GAAG,IAAA,YAAG,EAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QAElB,yEAAyE;QACzE,uDAAuD;QACvD,mDAAmD;QAEnD,8CAA8C;QAE9C,6DAA6D;QAC7D,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;YACvC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;YAC5C,IAAI,KAAK,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SACpC;QAED,OAAO,IAAA,aAAK,EAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAC7B,IAAA,aAAK,EAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAC5B,IAAA,WAAG,EACD,gBAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE;YAC9B,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,qBAAS;SACxB,CAAC,EACF,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,CACjC,CACF,CACF,CAAA;IACH,CAAC;IAED,MAAM,CAAC,cAAc,CACnB,IAAmB,EACnB,IAAoB;QAEpB,IAAI,IAAA,cAAK,EAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAA;QACjC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;YAC7B,kCAAkC;YAClC,EAAE,GAAG,EAAE,iBAAiB,EAAE;YAC1B,EAAE,GAAG,EAAE,eAAe,EAAE;YAExB,+BAA+B;YAC/B,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE;YACxC,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE;YAEtC,kCAAkC;YAClC,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE;YAC9B,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE;YAE5B,gHAAgH;YAEhH,kCAAkC;YAClC,EAAE,GAAG,EAAE,mBAAmB,EAAE;YAC5B,EAAE,GAAG,EAAE,iBAAiB,EAAE;YAE1B,+BAA+B;YAC/B,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,KAAK,EAAE;YAC1C,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE;YAExC,kCAAkC;YAClC,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE;YAChC,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE;SAC/B,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,aAAa,CAClB,IAAmB,EACnB,WAA2B;QAE3B,IAAI,IAAA,cAAK,EAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAA;QACjC,MAAM,IAAI,GAAG,IAAA,iBAAQ,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,qBAAS,CAAA;QAC5D,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;YAC7B,mEAAmE;YACnE,EAAE,GAAG,EAAE,kBAAkB,EAAE;YAC3B,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE;YAC9B,EAAE,GAAG,EAAE,mBAAmB,EAAE;YAC5B,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE;YAC/B,4BAA4B;YAC5B,EAAE,GAAG,EAAE,qBAAqB,EAAE;YAC9B,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE;SACnC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,EAAY,EAAE,QAAiB;QACjD,IACE,EAAE,IAAI,IAAI;YACV,CAAC,EAAE,CAAC,OAAO;YACX,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;YACnB,EAAE,CAAC,IAAI,KAAK,CAAC;YACb,EAAE,CAAC,IAAI,KAAK,CAAC,EACb;YACA,OAAO,SAAS,CAAA;SACjB;QACD,OAAO,IAAI,YAAY,CACrB,EAAE,CAAC,IAAI,EACP,EAAE,CAAC,KAAK,EACR,EAAE,CAAC,GAAG,EACN,EAAE,CAAC,IAAI,EACP,EAAE,CAAC,MAAM,EACT,EAAE,CAAC,MAAM,EACT,EAAE,CAAC,WAAW,EACd,EAAE,CAAC,MAAM,KAAK,kCAAsB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAC5D,QAAQ,EACR,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,qBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAC1D,CAAA;IACH,CAAC;IAeD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAA,iBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,IAAI;;QACN,OAAO,MAAA,IAAI,CAAC,QAAQ,mCAAI,IAAA,mCAAuB,EAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACvE,CAAC;IAED,UAAU;QACR,OAAO,gBAAQ,CAAC,UAAU,CACxB;YACE,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,EACD;YACE,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CACF,CAAA;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAA;IACrC,CAAC;IAED,WAAW,CAAC,UAA4B,EAAE;QACxC,OAAO,IAAA,cAAM,EACX,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;YACtB,oBAAoB,EAAE,IAAA,cAAM,EAC1B,OAAO,CAAC,oBAAoB,EAC5B,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAC/B;YACD,aAAa,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK;SAC/D,CAAC,CACH,CAAA;IACH,CAAC;IAED,YAAY;QACV,OAAO,IAAA,yBAAc,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,WAAW,EAAE,CAAA;IAC3B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAA;IAClC,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAA;IACH,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAwC;QACtD,OAAO,IAAI,YAAY,CACrB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,CACd,CAAA;IACH,CAAC;CACF;AArPD,oCAqPC"}
|
package/dist/ExifTime.d.ts
CHANGED
|
@@ -16,5 +16,12 @@ export declare class ExifTime {
|
|
|
16
16
|
toString(): string;
|
|
17
17
|
toISOString(): string;
|
|
18
18
|
toExifString(): string;
|
|
19
|
+
toJSON(): {
|
|
20
|
+
_ctor: string;
|
|
21
|
+
hour: number;
|
|
22
|
+
minute: number;
|
|
23
|
+
second: number;
|
|
24
|
+
millisecond: number | undefined;
|
|
25
|
+
};
|
|
26
|
+
static fromJSON(json: ReturnType<ExifTime["toJSON"]>): ExifTime;
|
|
19
27
|
}
|
|
20
|
-
//# sourceMappingURL=ExifTime.d.ts.map
|
package/dist/ExifTime.js
CHANGED
|
@@ -15,10 +15,10 @@ class ExifTime {
|
|
|
15
15
|
this.millisecond = millisecond;
|
|
16
16
|
}
|
|
17
17
|
static fromEXIF(text) {
|
|
18
|
-
if (String_1.blank(text))
|
|
18
|
+
if ((0, String_1.blank)(text))
|
|
19
19
|
return;
|
|
20
|
-
text = String_1.toS(text).trim();
|
|
21
|
-
return Maybe_1.first(["HH:mm:ss.uZZ", "HH:mm:ssZZ", "HH:mm:ss.u", "HH:mm:ss"], (fmt) => Maybe_1.map(luxon_1.DateTime.fromFormat(text, fmt), (dt) => this.fromDateTime(dt)));
|
|
20
|
+
text = (0, String_1.toS)(text).trim();
|
|
21
|
+
return (0, Maybe_1.first)(["HH:mm:ss.uZZ", "HH:mm:ssZZ", "HH:mm:ss.u", "HH:mm:ss"], (fmt) => (0, Maybe_1.map)(luxon_1.DateTime.fromFormat(text, fmt), (dt) => this.fromDateTime(dt)));
|
|
22
22
|
}
|
|
23
23
|
static fromDateTime(dt) {
|
|
24
24
|
return dt == null || !dt.isValid
|
|
@@ -31,10 +31,10 @@ class ExifTime {
|
|
|
31
31
|
subsec() {
|
|
32
32
|
return this.millisecond == null || this.millisecond === 0
|
|
33
33
|
? ""
|
|
34
|
-
: "." + String_1.pad3(this.millisecond);
|
|
34
|
+
: "." + (0, String_1.pad3)(this.millisecond);
|
|
35
35
|
}
|
|
36
36
|
toString() {
|
|
37
|
-
return String_1.pad2(this.hour, this.minute, this.second).join(":") + this.subsec();
|
|
37
|
+
return (0, String_1.pad2)(this.hour, this.minute, this.second).join(":") + this.subsec();
|
|
38
38
|
}
|
|
39
39
|
toISOString() {
|
|
40
40
|
return this.toString();
|
|
@@ -42,6 +42,18 @@ class ExifTime {
|
|
|
42
42
|
toExifString() {
|
|
43
43
|
return this.toString();
|
|
44
44
|
}
|
|
45
|
+
toJSON() {
|
|
46
|
+
return {
|
|
47
|
+
_ctor: "ExifTime",
|
|
48
|
+
hour: this.hour,
|
|
49
|
+
minute: this.minute,
|
|
50
|
+
second: this.second,
|
|
51
|
+
millisecond: this.millisecond,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
static fromJSON(json) {
|
|
55
|
+
return new ExifTime(json.hour, json.minute, json.second, json.millisecond);
|
|
56
|
+
}
|
|
45
57
|
}
|
|
46
58
|
exports.ExifTime = ExifTime;
|
|
47
59
|
//# sourceMappingURL=ExifTime.js.map
|
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;IAiBnB,YACW,IAAY,EACZ,MAAc,EACd,MAAc,EACd,WAAoB;QAHpB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,gBAAW,GAAX,WAAW,CAAS;IAC5B,CAAC;IArBJ,MAAM,CAAC,QAAQ,CAAC,IAAY;QAC1B,IAAI,cAAK,
|
|
1
|
+
{"version":3,"file":"ExifTime.js","sourceRoot":"","sources":["../src/ExifTime.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,mCAA2C;AAC3C,qCAAiD;AAEjD;;GAEG;AACH,MAAa,QAAQ;IAiBnB,YACW,IAAY,EACZ,MAAc,EACd,MAAc,EACd,WAAoB;QAHpB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,gBAAW,GAAX,WAAW,CAAS;IAC5B,CAAC;IArBJ,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,CAAC,CAAC,CACrE,CAAA;IACH,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,EAAY;QAC9B,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,CAAC,CAAA;IACjE,CAAC;IASD,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;SAC9B,CAAA;IACH,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAoC;QAClD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;IAC5E,CAAC;CACF;AA3DD,4BA2DC"}
|
package/dist/ExifTool.d.ts
CHANGED
|
@@ -9,8 +9,9 @@ export { ExifDate } from "./ExifDate";
|
|
|
9
9
|
export { ExifDateTime } from "./ExifDateTime";
|
|
10
10
|
export { ExifTime } from "./ExifTime";
|
|
11
11
|
export { ExifToolTask } from "./ExifToolTask";
|
|
12
|
-
export {
|
|
12
|
+
export { parseJSON } from "./JSON";
|
|
13
13
|
export { offsetMinutesToZoneName } from "./Timezones";
|
|
14
|
+
export type { Tags };
|
|
14
15
|
export declare const DefaultExifToolPath: string;
|
|
15
16
|
export declare const DefaultExiftoolArgs: string[];
|
|
16
17
|
/**
|
|
@@ -155,7 +156,7 @@ export declare class ExifTool {
|
|
|
155
156
|
* during reading, the `.errors` field will be present.
|
|
156
157
|
* @memberof ExifTool
|
|
157
158
|
*/
|
|
158
|
-
read(file: string, args?: string[]): Promise<
|
|
159
|
+
read<T extends Tags = Tags>(file: string, args?: string[]): Promise<T>;
|
|
159
160
|
/**
|
|
160
161
|
* Read the tags from `file`, without any post-processing of ExifTool values.
|
|
161
162
|
*
|
|
@@ -195,7 +196,7 @@ export declare class ExifTool {
|
|
|
195
196
|
* there are errors or warnings.
|
|
196
197
|
* @memberof ExifTool
|
|
197
198
|
*/
|
|
198
|
-
write(file: string, tags:
|
|
199
|
+
write<T extends WriteTags = WriteTags>(file: string, tags: T, args?: string[]): Promise<void>;
|
|
199
200
|
/**
|
|
200
201
|
* This will strip `file` of all metadata tags. The original file (with the
|
|
201
202
|
* name `${FILENAME}_original`) will be retained. Note that some tags, like
|
|
@@ -338,4 +339,3 @@ export declare class ExifTool {
|
|
|
338
339
|
* have limited system resources you may want to use a smaller `maxProcs` value.
|
|
339
340
|
*/
|
|
340
341
|
export declare const exiftool: ExifTool;
|
|
341
|
-
//# sourceMappingURL=ExifTool.d.ts.map
|
package/dist/ExifTool.js
CHANGED
|
@@ -19,7 +19,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.exiftool = exports.ExifTool = exports.DefaultExifToolOptions = exports.DefaultMaxProcs = exports.DefaultExiftoolArgs = exports.DefaultExifToolPath = exports.offsetMinutesToZoneName = exports.ExifToolTask = exports.ExifTime = exports.ExifDateTime = exports.ExifDate = void 0;
|
|
22
|
+
exports.exiftool = exports.ExifTool = exports.DefaultExifToolOptions = exports.DefaultMaxProcs = exports.DefaultExiftoolArgs = exports.DefaultExifToolPath = exports.offsetMinutesToZoneName = exports.parseJSON = exports.ExifToolTask = exports.ExifTime = exports.ExifDateTime = exports.ExifDate = void 0;
|
|
23
23
|
const bc = __importStar(require("batch-cluster"));
|
|
24
24
|
const _cp = __importStar(require("child_process"));
|
|
25
25
|
const _fs = __importStar(require("fs"));
|
|
@@ -45,9 +45,11 @@ var ExifTime_1 = require("./ExifTime");
|
|
|
45
45
|
Object.defineProperty(exports, "ExifTime", { enumerable: true, get: function () { return ExifTime_1.ExifTime; } });
|
|
46
46
|
var ExifToolTask_1 = require("./ExifToolTask");
|
|
47
47
|
Object.defineProperty(exports, "ExifToolTask", { enumerable: true, get: function () { return ExifToolTask_1.ExifToolTask; } });
|
|
48
|
+
var JSON_1 = require("./JSON");
|
|
49
|
+
Object.defineProperty(exports, "parseJSON", { enumerable: true, get: function () { return JSON_1.parseJSON; } });
|
|
48
50
|
var Timezones_1 = require("./Timezones");
|
|
49
51
|
Object.defineProperty(exports, "offsetMinutesToZoneName", { enumerable: true, get: function () { return Timezones_1.offsetMinutesToZoneName; } });
|
|
50
|
-
const isWin32 = Lazy_1.lazy(() => _os.platform() === "win32");
|
|
52
|
+
const isWin32 = (0, Lazy_1.lazy)(() => _os.platform() === "win32");
|
|
51
53
|
function findExiftool() {
|
|
52
54
|
const path = require(`exiftool-vendored.${isWin32() ? "exe" : "pl"}`);
|
|
53
55
|
// This s/app.asar/app.asar.unpacked/ path switch adds support for Electron
|
|
@@ -73,7 +75,7 @@ function findExiftool() {
|
|
|
73
75
|
}
|
|
74
76
|
exports.DefaultExifToolPath = findExiftool();
|
|
75
77
|
exports.DefaultExiftoolArgs = ["-stay_open", "True", "-@", "-"];
|
|
76
|
-
const _ignoreShebang = Lazy_1.lazy(() => !isWin32() && !_fs.existsSync("/usr/bin/perl"));
|
|
78
|
+
const _ignoreShebang = (0, Lazy_1.lazy)(() => !isWin32() && !_fs.existsSync("/usr/bin/perl"));
|
|
77
79
|
exports.DefaultMaxProcs = Math.max(1, Math.floor(_os.cpus().length / 4));
|
|
78
80
|
/**
|
|
79
81
|
* Default values for `ExifToolOptions`, except for `processFactory` (which is
|
|
@@ -120,9 +122,9 @@ class ExifTool {
|
|
|
120
122
|
...exports.DefaultExifToolOptions,
|
|
121
123
|
...options,
|
|
122
124
|
};
|
|
123
|
-
const ignoreShebang = Maybe_1.orElse(o.ignoreShebang, () => _ignoreShebang());
|
|
125
|
+
const ignoreShebang = (0, Maybe_1.orElse)(o.ignoreShebang, () => _ignoreShebang());
|
|
124
126
|
const env = { ...o.exiftoolEnv, LANG: "C" };
|
|
125
|
-
if (String_1.notBlank(_p.env.EXIFTOOL_HOME) && String_1.blank(env.EXIFTOOL_HOME)) {
|
|
127
|
+
if ((0, String_1.notBlank)(_p.env.EXIFTOOL_HOME) && (0, String_1.blank)(env.EXIFTOOL_HOME)) {
|
|
126
128
|
env.EXIFTOOL_HOME = _p.env.EXIFTOOL_HOME;
|
|
127
129
|
}
|
|
128
130
|
const spawnOpts = {
|
|
@@ -166,7 +168,7 @@ class ExifTool {
|
|
|
166
168
|
* @memberof ExifTool
|
|
167
169
|
*/
|
|
168
170
|
read(file, args = ["-fast"]) {
|
|
169
|
-
return this.enqueueTask(() => ReadTask_1.ReadTask.for(file, this.options.numericTags, args));
|
|
171
|
+
return this.enqueueTask(() => ReadTask_1.ReadTask.for(file, this.options.numericTags, args)); // < no way to know at compile time if we're going to get back a T!
|
|
170
172
|
}
|
|
171
173
|
/**
|
|
172
174
|
* Read the tags from `file`, without any post-processing of ExifTool values.
|
|
@@ -340,7 +342,7 @@ class ExifTool {
|
|
|
340
342
|
* @see BinaryExtractionTask for an example task implementation
|
|
341
343
|
*/
|
|
342
344
|
enqueueTask(task) {
|
|
343
|
-
return AsyncRetry_1.retryOnReject(() => this.batchCluster.enqueueTask(task()), this.options.taskRetries);
|
|
345
|
+
return (0, AsyncRetry_1.retryOnReject)(() => this.batchCluster.enqueueTask(task()), this.options.taskRetries);
|
|
344
346
|
}
|
|
345
347
|
/**
|
|
346
348
|
* @return the currently running ExifTool processes. Note that on Windows,
|