exiftool-vendored 30.2.0 → 30.4.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 +33 -8
- package/CLAUDE.md +2 -1
- package/README.md +171 -454
- package/RELEASE.md +34 -13
- package/dist/DefaultExifToolOptions.js +2 -0
- package/dist/DefaultExifToolOptions.js.map +1 -1
- package/dist/ExifTool.d.ts +72 -29
- package/dist/ExifTool.js +109 -11
- package/dist/ExifTool.js.map +1 -1
- package/dist/ExifToolOptions.d.ts +14 -0
- package/dist/ExifToolOptions.js.map +1 -1
- package/dist/StrEnum.d.ts +1 -1
- package/dist/StrEnum.js +2 -4
- package/dist/StrEnum.js.map +1 -1
- package/dist/Tags.d.ts +12512 -2512
- package/dist/Tags.js +3 -3
- package/dist/Tags.js.map +1 -1
- package/dist/WriteTags.d.ts +3 -4
- package/eslint.config.mjs +8 -1
- package/package.json +43 -30
package/CHANGELOG.md
CHANGED
|
@@ -25,6 +25,38 @@ vendored versions of ExifTool match the version that they vendor.
|
|
|
25
25
|
|
|
26
26
|
## Version history
|
|
27
27
|
|
|
28
|
+
### v30.4.0
|
|
29
|
+
|
|
30
|
+
- 🌱 Upgraded ExifTool to version [13.34](https://exiftool.org/history.html#13.34).
|
|
31
|
+
|
|
32
|
+
- 📦 Upgrade to batch-cluster [v15.0.1](https://github.com/photostructure/batch-cluster.js/releases/tag/v15.0.0) which includes a macos and linux /proc permission workaround, and is now built with OIDC, so it includes https://www.npmjs.com/package/batch-cluster#user-content-provenance
|
|
33
|
+
|
|
34
|
+
- 📦 Automated publishing (like batch-cluster!), so https://www.npmjs.com/package/exiftool-vendored#user-content-provenance will be a thing
|
|
35
|
+
|
|
36
|
+
### v30.3.0
|
|
37
|
+
|
|
38
|
+
- 🌱 Upgraded ExifTool to version [13.31](https://exiftool.org/history.html#13.31).
|
|
39
|
+
|
|
40
|
+
- ✨ Added **Disposable interface support** for automatic resource cleanup:
|
|
41
|
+
- `ExifTool` now implements both `Disposable` and `AsyncDisposable` interfaces
|
|
42
|
+
- Use `using et = new ExifTool()` for automatic synchronous cleanup (TypeScript 5.2+)
|
|
43
|
+
- Use `await using et = new ExifTool()` for automatic asynchronous cleanup
|
|
44
|
+
- Synchronous disposal initiates graceful cleanup with configurable timeout fallback
|
|
45
|
+
- Asynchronous disposal provides robust cleanup with timeout protection
|
|
46
|
+
- New options: `disposalTimeoutMs` (default: 1000ms) and `asyncDisposalTimeoutMs` (default: 5000ms)
|
|
47
|
+
- Comprehensive error handling ensures disposal never throws or hangs
|
|
48
|
+
- Maintains backward compatibility - existing `.end()` method unchanged
|
|
49
|
+
|
|
50
|
+
- ✨ **Enhanced JSDoc annotations** for Tags interface with emoji-based visual hierarchy:
|
|
51
|
+
- Replaced cryptic star/checkmark system with ~~even more cryptic~~ semantic JSDoc tags
|
|
52
|
+
- Added 🔥/🧊 emojis to indicate mainstream consumer vs specialized devices
|
|
53
|
+
- Format: `@frequency 🔥 ★★★★ (85%)` combines device type, visual rating, and exact percentage
|
|
54
|
+
- Consolidated @mainstream into @frequency tag for cleaner, more compact documentation
|
|
55
|
+
- Added @groups tag showing all metadata groups where each tag appears (e.g., "EXIF, MakerNotes")
|
|
56
|
+
- Generated `data/TagMetadata.json` with programmatic access to frequency, mainstream flags, and groups
|
|
57
|
+
- Custom TypeDoc tags defined in tsdoc.json for proper tooling support
|
|
58
|
+
- Star ratings maintain same thresholds: ★★★★ (>50%), ★★★☆ (>20%), ★★☆☆ (>10%), ★☆☆☆ (>5%), ☆☆☆☆ (≤5%)
|
|
59
|
+
|
|
28
60
|
### v30.2.0
|
|
29
61
|
|
|
30
62
|
- ✨ Enhanced `StrEnum` with iterator support and JSDoc
|
|
@@ -36,26 +68,22 @@ vendored versions of ExifTool match the version that they vendor.
|
|
|
36
68
|
- 🐞 Fixed `ExifToolVersion` to be a `string`. Prior versions used `exiftool`'s JSON representation, which rendered a numeric float. This caused versions like "12.3" and "12.30" to appear identical. We now preserve the exact version string to enable proper version comparisons.
|
|
37
69
|
|
|
38
70
|
- ✨ Added **partial date support** for `ExifDate` class. XMP date tags (like `XMP:CreateDate`, `XMP:MetadataDate`) now support:
|
|
39
|
-
|
|
40
71
|
- **Year-only dates**: `1980` (numeric) or `"1980"` (string)
|
|
41
72
|
- **Year-month dates**: `"1980:08"` (EXIF format) or `"1980-08"` (ISO format)
|
|
42
73
|
- **Full dates**: `"1980:08:13"` (unchanged)
|
|
43
74
|
|
|
44
75
|
- ✨ Enhanced `ExifDate` with type-safe predicates:
|
|
45
|
-
|
|
46
76
|
- `isYearOnly()`: Returns `true` for year-only dates with type narrowing
|
|
47
77
|
- `isYearMonth()`: Returns `true` for year-month dates with type narrowing
|
|
48
78
|
- `isFullDate()`: Returns `true` for complete dates with type narrowing
|
|
49
79
|
- `isPartial()`: Returns `true` for year-only or year-month dates
|
|
50
80
|
|
|
51
81
|
- ✨ Added compositional TypeScript interfaces:
|
|
52
|
-
|
|
53
82
|
- `ExifDateYearOnly`: `{year: number}`
|
|
54
83
|
- `ExifDateYearMonth extends ExifDateYearOnly`: `{year: number, month: number}`
|
|
55
84
|
- `ExifDateFull extends ExifDateYearMonth`: `{year: number, month: number, day: number}`
|
|
56
85
|
|
|
57
86
|
- ✨ Enhanced `WriteTags` interface with group-prefixed tag support:
|
|
58
|
-
|
|
59
87
|
- `"XMP:CreateDate"`, `"XMP:MetadataDate"`, etc. accept partial dates
|
|
60
88
|
- `"EXIF:CreateDate"`, etc. require full dates (type-safe distinction)
|
|
61
89
|
|
|
@@ -67,7 +95,7 @@ vendored versions of ExifTool match the version that they vendor.
|
|
|
67
95
|
|
|
68
96
|
### v30.0.0
|
|
69
97
|
|
|
70
|
-
-
|
|
98
|
+
- 🏚️ Dropped support for Node v18, whose End-of-Life was 2025-04-30.
|
|
71
99
|
|
|
72
100
|
- 🌱 Upgraded ExifTool to version [13.29](https://exiftool.org/history.html#13.29).
|
|
73
101
|
|
|
@@ -358,7 +386,6 @@ vendored versions of ExifTool match the version that they vendor.
|
|
|
358
386
|
### v23.2.0
|
|
359
387
|
|
|
360
388
|
- ✨ Timezone parsing improvements:
|
|
361
|
-
|
|
362
389
|
- Added [`ExifToolOptions.inferTimezoneFromDatestampTags`](https://photostructure.github.io/exiftool-vendored.js/interfaces/ExifToolOptions.html#inferTimezoneFromDatestampTags).
|
|
363
390
|
- Timezone inference from datestamps now skips over UTC values, as Google
|
|
364
391
|
Takeout (and several other applications) may spuriously set "+00:00" to
|
|
@@ -530,7 +557,6 @@ vendored versions of ExifTool match the version that they vendor.
|
|
|
530
557
|
### v18.5.0
|
|
531
558
|
|
|
532
559
|
- ✨ `ExifToolOptions` now supports an `ignorableError` predicate, used for characterizing errors as "ignorable". Defaults to ignoring the following styles of warnings:
|
|
533
|
-
|
|
534
560
|
- `Warning: Duplicate MakerNoteUnknown tag in ExifIFD`
|
|
535
561
|
- `Warning: ICC_Profile deleted. Image colors may be affected`
|
|
536
562
|
|
|
@@ -663,7 +689,6 @@ const exiftool = new ExifTool({
|
|
|
663
689
|
- ✨ Added read/write support for
|
|
664
690
|
[History](https://exiftool.org/TagNames/XMP.html#ResourceEvent) and
|
|
665
691
|
[Versions](https://exiftool.org/TagNames/XMP.html#Version) structs.
|
|
666
|
-
|
|
667
692
|
- These two tags return typed optional struct arrays.
|
|
668
693
|
|
|
669
694
|
- Via the new `StructAppendTags` interface, `ExifTool.write()` now accepts
|
package/CLAUDE.md
CHANGED
|
@@ -30,7 +30,7 @@ npm run docs # Generate TypeDoc docs and serve at http://localhost:3000
|
|
|
30
30
|
npm run docs:1 # Build documentation only (without serving)
|
|
31
31
|
|
|
32
32
|
# Tag Generation
|
|
33
|
-
npm run mktags ../path/to/images # Regenerate src/Tags.ts from sample images
|
|
33
|
+
npm run mktags ../path/to/images # Regenerate src/Tags.ts and data/TagMetadata.json (with frequency, mainstream flags, and groups) from sample images
|
|
34
34
|
|
|
35
35
|
# Release Management
|
|
36
36
|
npm run release # Run release process (requires proper permissions)
|
|
@@ -63,5 +63,6 @@ npm run release # Run release process (requires proper permissions)
|
|
|
63
63
|
- Use `if (x != null)` not `if (x)` (problematic with booleans)
|
|
64
64
|
- Use `??` not `||` for nullish coalescing (problematic with booleans)
|
|
65
65
|
- Strict TypeScript settings enabled
|
|
66
|
+
- Always use standard imports at the top of the file. Never use dynamic imports like `await import("node:fs/promises").then(fs => fs.access(path))` - instead import normally: `import { access } from "node:fs/promises"`
|
|
66
67
|
|
|
67
68
|
**File Patterns**: `src/*.ts` (source), `src/*.spec.ts` (tests), `src/update/*.ts` (scripts), `bin/` (binaries), `dist/` (compiled), `test/` (test images)
|