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 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
- - 💔 Dropped support for Node v18, whose End-of-Life was 2025-04-30.
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)