exiftool-vendored 30.0.0 → 30.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.
Files changed (74) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/CLAUDE.md +40 -104
  3. package/README.md +30 -1
  4. package/RELEASE.md +29 -34
  5. package/dist/Array.js.map +1 -1
  6. package/dist/BinaryToBufferTask.js +1 -1
  7. package/dist/BinaryToBufferTask.js.map +1 -1
  8. package/dist/CoordinateParser.js +9 -0
  9. package/dist/CoordinateParser.js.map +1 -1
  10. package/dist/DateTime.js +1 -1
  11. package/dist/DateTime.js.map +1 -1
  12. package/dist/ExifDate.d.ts +47 -7
  13. package/dist/ExifDate.js +60 -1
  14. package/dist/ExifDate.js.map +1 -1
  15. package/dist/ExifDateTime.js +5 -1
  16. package/dist/ExifDateTime.js.map +1 -1
  17. package/dist/ExifTool.d.ts +9 -23
  18. package/dist/ExifTool.js +16 -1
  19. package/dist/ExifTool.js.map +1 -1
  20. package/dist/ExifToolVendoredTags.d.ts +0 -1
  21. package/dist/ExifToolVendoredTags.js +0 -4
  22. package/dist/ExifToolVendoredTags.js.map +1 -1
  23. package/dist/ExiftoolPath.js +5 -5
  24. package/dist/ExiftoolPath.js.map +1 -1
  25. package/dist/GPS.d.ts +3 -1
  26. package/dist/GPS.js +4 -15
  27. package/dist/GPS.js.map +1 -1
  28. package/dist/GeolocationTags.d.ts +1 -1
  29. package/dist/GeolocationTags.js +2 -2
  30. package/dist/GeolocationTags.js.map +1 -1
  31. package/dist/ICCProfileTags.d.ts +0 -1
  32. package/dist/ICCProfileTags.js +0 -4
  33. package/dist/ICCProfileTags.js.map +1 -1
  34. package/dist/IPTCApplicationRecordTags.d.ts +0 -4
  35. package/dist/IPTCApplicationRecordTags.js +0 -7
  36. package/dist/IPTCApplicationRecordTags.js.map +1 -1
  37. package/dist/ImageDataHashTag.d.ts +0 -1
  38. package/dist/ImageDataHashTag.js +0 -4
  39. package/dist/ImageDataHashTag.js.map +1 -1
  40. package/dist/JSON.d.ts +4 -0
  41. package/dist/JSON.js +7 -2
  42. package/dist/JSON.js.map +1 -1
  43. package/dist/MWGTags.d.ts +0 -8
  44. package/dist/MWGTags.js +0 -14
  45. package/dist/MWGTags.js.map +1 -1
  46. package/dist/Maybe.js +1 -1
  47. package/dist/Maybe.js.map +1 -1
  48. package/dist/Object.d.ts +2 -2
  49. package/dist/Object.js +3 -3
  50. package/dist/Object.js.map +1 -1
  51. package/dist/RawTags.d.ts +1 -4
  52. package/dist/ReadTask.js +5 -2
  53. package/dist/ReadTask.js.map +1 -1
  54. package/dist/StrEnum.d.ts +144 -4
  55. package/dist/StrEnum.js +2 -0
  56. package/dist/StrEnum.js.map +1 -1
  57. package/dist/String.js +1 -6
  58. package/dist/String.js.map +1 -1
  59. package/dist/Tags.d.ts +167 -171
  60. package/dist/Tags.js +5 -6
  61. package/dist/Tags.js.map +1 -1
  62. package/dist/TimeParsing.js +1 -1
  63. package/dist/TimeParsing.js.map +1 -1
  64. package/dist/Timezones.js +3 -1
  65. package/dist/Timezones.js.map +1 -1
  66. package/dist/WriteTags.d.ts +18 -2
  67. package/eslint.config.mjs +37 -18
  68. package/package.json +12 -11
  69. package/dist/ExifToolTags.d.ts +0 -7
  70. package/dist/ExifToolTags.js +0 -19
  71. package/dist/ExifToolTags.js.map +0 -1
  72. package/dist/FileTags.d.ts +0 -7
  73. package/dist/FileTags.js +0 -41
  74. package/dist/FileTags.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -25,6 +25,46 @@ vendored versions of ExifTool match the version that they vendor.
25
25
 
26
26
  ## Version history
27
27
 
28
+ ### v30.2.0
29
+
30
+ - ✨ Enhanced `StrEnum` with iterator support and JSDoc
31
+
32
+ ### v30.1.0
33
+
34
+ - 🌱 Upgraded ExifTool to version [13.30](https://exiftool.org/history.html#13.30).
35
+
36
+ - 🐞 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
+
38
+ - ✨ Added **partial date support** for `ExifDate` class. XMP date tags (like `XMP:CreateDate`, `XMP:MetadataDate`) now support:
39
+
40
+ - **Year-only dates**: `1980` (numeric) or `"1980"` (string)
41
+ - **Year-month dates**: `"1980:08"` (EXIF format) or `"1980-08"` (ISO format)
42
+ - **Full dates**: `"1980:08:13"` (unchanged)
43
+
44
+ - ✨ Enhanced `ExifDate` with type-safe predicates:
45
+
46
+ - `isYearOnly()`: Returns `true` for year-only dates with type narrowing
47
+ - `isYearMonth()`: Returns `true` for year-month dates with type narrowing
48
+ - `isFullDate()`: Returns `true` for complete dates with type narrowing
49
+ - `isPartial()`: Returns `true` for year-only or year-month dates
50
+
51
+ - ✨ Added compositional TypeScript interfaces:
52
+
53
+ - `ExifDateYearOnly`: `{year: number}`
54
+ - `ExifDateYearMonth extends ExifDateYearOnly`: `{year: number, month: number}`
55
+ - `ExifDateFull extends ExifDateYearMonth`: `{year: number, month: number, day: number}`
56
+
57
+ - ✨ Enhanced `WriteTags` interface with group-prefixed tag support:
58
+
59
+ - `"XMP:CreateDate"`, `"XMP:MetadataDate"`, etc. accept partial dates
60
+ - `"EXIF:CreateDate"`, etc. require full dates (type-safe distinction)
61
+
62
+ - 📦 Docs are now automatically updated via [GitHub Actions](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/docs.yml)
63
+
64
+ - 📦 Added comprehensive test coverage (47 new tests) for partial date functionality
65
+
66
+ - 📦 Upgrade to batch-cluster [v14.0.0](https://github.com/photostructure/batch-cluster.js/releases/tag/v14.0.0) which removes the requirement for `procps` on most linux distributions.
67
+
28
68
  ### v30.0.0
29
69
 
30
70
  - 💔 Dropped support for Node v18, whose End-of-Life was 2025-04-30.
package/CLAUDE.md CHANGED
@@ -8,124 +8,60 @@ This is exiftool-vendored.js, a Node.js library that provides cross-platform acc
8
8
 
9
9
  ## Key Commands
10
10
 
11
- ### Building & Development
12
-
13
- ```bash
14
- # Install dependencies
15
- npm install
16
-
17
- # Compile TypeScript to JavaScript
18
- npm run compile
19
-
20
- # Watch mode for development
21
- npm run compile:watch
22
-
23
- # Clean build artifacts
24
- npm run clean
25
- ```
26
-
27
- ### Linting & Formatting
28
-
29
- ```bash
30
- # Run ESLint with TypeScript configuration
31
- npm run lint
32
-
33
- # Format all TypeScript and other files with Prettier
34
- npm run fmt
35
- ```
36
-
37
- ### Testing
38
-
39
11
  ```bash
40
- # Run all tests (requires compilation first)
41
- npm test
42
-
43
- # Note: Tests use Mocha and execute the compiled JavaScript files in dist/
12
+ # Development
13
+ npm install # Install dependencies
14
+ npm run compile # Compile TypeScript to JavaScript
15
+ npm run compile:watch # Watch mode for development
16
+ npm run clean # Clean build artifacts
17
+ npm run u # Update dependencies and install
18
+
19
+ # Linting & Formatting
20
+ npm run lint # Run ESLint with TypeScript configuration
21
+ npm run fmt # Format all TypeScript and other files with Prettier
22
+
23
+ # Testing (requires compilation first)
24
+ npm test # Run all tests
25
+ npm run compile && npx mocha dist/ExifTool.spec.js # Run specific test file
26
+ npm run compile && npx mocha 'dist/*.spec.js' --grep "pattern" # Run tests matching pattern
27
+
28
+ # Documentation
29
+ npm run docs # Generate TypeDoc docs and serve at http://localhost:3000
30
+ npm run docs:1 # Build documentation only (without serving)
31
+
32
+ # Tag Generation
33
+ npm run mktags ../path/to/images # Regenerate src/Tags.ts from sample images
34
+
35
+ # Release Management
36
+ npm run release # Run release process (requires proper permissions)
44
37
  ```
45
38
 
46
- ### Documentation
47
-
48
- ```bash
49
- # Generate TypeDoc documentation
50
- npm run docs
51
-
52
- # This runs the typedoc tool and serves the documentation locally
53
- ```
54
-
55
- ### Tag Generation
56
-
57
- ```bash
58
- # Regenerate src/Tags.ts from sample images
59
- npm run mktags ../path/to/images
60
-
61
- # This requires a directory of sample images to analyze and extract metadata tags
62
- ```
39
+ **Note**: Documentation is automatically built and deployed to GitHub Pages on every push to main branch via `.github/workflows/docs.yml`.
63
40
 
64
41
  ## Architecture & Key Concepts
65
42
 
66
- ### Core Components
67
-
68
- 1. **ExifTool Class** (`src/ExifTool.ts`): Main entry point that wraps ExifTool process management using batch-cluster. Provides methods for reading metadata, writing tags, extracting binaries, and rewriting tags.
69
-
70
- 2. **Tags Interface** (`src/Tags.ts`): Auto-generated TypeScript interface containing ~2000 metadata fields commonly found in photo/video files. Generated by analyzing thousands of sample files to avoid TypeScript union type limits. Fields include popularity ratings and example values.
71
-
72
- 3. **Date/Time Handling**: Custom classes for handling EXIF dates with timezone complexities:
73
-
74
- - `ExifDate`: Date without time
75
- - `ExifTime`: Time without date
76
- - `ExifDateTime`: Date and time with optional timezone
77
-
78
- 4. **Task System**: Various task classes for different operations:
79
-
80
- - `ReadTask`: Read metadata from files
81
- - `WriteTask`: Write metadata to files
82
- - `BinaryExtractionTask`: Extract thumbnails/previews
83
- - `RewriteAllTagsTask`: Repair corrupt metadata
84
-
85
- 5. **Platform Support**: Includes platform-specific ExifTool binaries via optional dependencies:
86
- - `exiftool-vendored.exe` for Windows
87
- - `exiftool-vendored.pl` for Unix-like systems
88
-
89
- ### Timezone Handling
90
-
91
- The library implements sophisticated timezone heuristics to handle underspecified date metadata:
92
-
93
- 1. Uses explicit timezone metadata if available
94
- 2. Falls back to GPS location for timezone inference
95
- 3. Uses UTC timestamp deltas to infer timezone offsets
96
- 4. Handles edge cases like daylight saving time transitions
97
-
98
- ### Tag Generation Process
99
-
100
- The `mktags.ts` script analyzes sample images to generate TypeScript interfaces:
43
+ **Core Components**: `ExifTool` class (`src/ExifTool.ts`) wraps ExifTool process management using batch-cluster. `Tags` interface (`src/Tags.ts`) contains ~2000 auto-generated metadata fields with popularity ratings. Custom date/time classes (`ExifDate`, `ExifTime`, `ExifDateTime`) handle timezone complexities. Task system includes `ReadTask`, `WriteTask`, `BinaryExtractionTask`, and `RewriteAllTagsTask`. Platform-specific binaries via optional dependencies.
101
44
 
102
- 1. Scans image directories for various formats (JPEG, RAW, video)
103
- 2. Extracts metadata using ExifTool
104
- 3. Counts tag frequencies and value types
105
- 4. Generates strongly-typed interfaces for the most common ~2000 tags
106
- 5. Includes popularity ratings (★★★★ = >50% of samples)
45
+ **Process Management**: Uses [batch-cluster](https://photostructure.github.io/batch-cluster.js/) with configurable `maxProcs`, `minDelayBetweenSpawnMillis`, and `streamFlushMillis`. Singleton `exiftool` instance configured conservatively.
107
46
 
108
- ### Testing Approach
47
+ **Timezone Handling**: Sophisticated heuristics using explicit timezone metadata, GPS location inference, UTC timestamp deltas, and daylight saving transitions.
109
48
 
110
- Tests use Mocha with Chai assertions:
49
+ **Tag Generation**: `mktags.ts` analyzes sample images to generate TypeScript interfaces with ~2000 most common tags and popularity ratings.
111
50
 
112
- - Unit tests for individual components (dates, parsers, etc.)
113
- - Integration tests for ExifTool operations
114
- - Test images in the `test/` directory cover various edge cases
115
- - Includes non-English filename tests
51
+ **Testing**: Mocha with Chai assertions, unit/integration tests, test images in `test/` directory including non-English filenames.
116
52
 
117
53
  ## Important Notes
118
54
 
119
55
  - Always run `npm run compile` before testing
120
- - The singleton `exiftool` instance must be properly ended with `.end()` to clean up child processes
121
- - Tag interfaces are not comprehensive - less common tags may exist in returned objects
122
- - The library uses batch processing for performance, managing process pools automatically
123
- - TypeScript's union type limits require careful tag selection to avoid compilation errors
56
+ - End singleton `exiftool` instance with `.end()` to clean up child processes
57
+ - Tag interfaces not comprehensive - less common tags may exist in returned objects
58
+ - Uses batch processing with automatic process pool management
59
+ - TypeScript union type limits require careful tag selection
124
60
 
125
- ## Important TypeScript Hygiene
61
+ ## TypeScript Hygiene
126
62
 
127
- - You MUST use `if (x != null)` to test for `null` or `undefined` values.
128
- DO NOT use `if (x)`: this is problematic (especially when handling boolean values).
63
+ - Use `if (x != null)` not `if (x)` (problematic with booleans)
64
+ - Use `??` not `||` for nullish coalescing (problematic with booleans)
65
+ - Strict TypeScript settings enabled
129
66
 
130
- - You MUST use `??` for nullish coalescing.
131
- DO NOT use `||`: this is problematic (especially when handling boolean values).
67
+ **File Patterns**: `src/*.ts` (source), `src/*.spec.ts` (tests), `src/update/*.ts` (scripts), `bin/` (binaries), `dist/` (compiled), `test/` (test images)
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  1. **Best-of-class cross-platform performance and reliability**.
13
13
 
14
- This library enables [PhotoStructure](https://photostructure.com) and [500+](https://github.com/photostructure/exiftool-vendored.js/network/dependents?package_id=UGFja2FnZS0xNjYxNjY2MQ%3D%3D) other projects to read and write metadata in photos and videos.
14
+ This library enables [PhotoStructure](https://photostructure.com) and [over 1,000](https://github.com/photostructure/exiftool-vendored.js/network/dependents?package_id=UGFja2FnZS0xNjYxNjY2MQ%3D%3D) other projects to read and write metadata in photos and videos.
15
15
 
16
16
  Expect [an order of magnitude faster performance](#performance) than other Node.js ExifTool modules.
17
17
 
@@ -299,6 +299,35 @@ exiftool.write("path/to/file.jpg", { UserComment: null });
299
299
 
300
300
  The above example removes any value associated with the `UserComment` tag.
301
301
 
302
+ ### Partial Date Support
303
+
304
+ **NEW in v30.2.0:** XMP date tags now support partial dates (year-only or year-month):
305
+
306
+ ```js
307
+ // Year-only dates
308
+ exiftool.write("path/to/file.jpg", { "XMP:CreateDate": 1980 });
309
+ // or
310
+ exiftool.write("path/to/file.jpg", {
311
+ "XMP:CreateDate": ExifDate.fromYear(1980),
312
+ });
313
+
314
+ // Year-month dates (EXIF format)
315
+ exiftool.write("path/to/file.jpg", { "XMP:CreateDate": "1980:08" });
316
+ // Year-month dates (ISO format)
317
+ exiftool.write("path/to/file.jpg", { "XMP:CreateDate": "1980-08" });
318
+ // or
319
+ exiftool.write("path/to/file.jpg", {
320
+ "XMP:CreateDate": ExifDate.fromYearMonth("1980-08"),
321
+ });
322
+ ```
323
+
324
+ **⚠️ IMPORTANT:** Partial dates are only supported for [XMP
325
+ tags](https://exiftool.org/TagNames/XMP.html) (like `XMP:CreateDate`,
326
+ `XMP:MetadataDate`). [EXIF tags](https://exiftool.org/TagNames/EXIF.html), like
327
+ `EXIF:CreateDate`, require **complete** (year, month, and day) dates. Always use
328
+ the group-prefixed tag names (e.g., `"XMP:CreateDate"`) when working with
329
+ partial dates.
330
+
302
331
  ### Always Beware: Timezones
303
332
 
304
333
  If you edit a timestamp tag, realize that the difference between the
package/RELEASE.md CHANGED
@@ -1,36 +1,31 @@
1
1
  # Releasing new versions of `exiftool-vendored`
2
2
 
3
- 1. `git clone` this repo into `~/src`
4
-
5
- 2. On a POSIX machine, clone
6
- [exiftool-vendored.pl](https://github.com/photostructure/exiftool-vendored.pl)
7
- into `~/src` (or another common subdirectory)
8
-
9
- 3. On a Windows machine, clone
10
- [exiftool-vendored.exe](https://github.com/photostructure/exiftool-vendored.exe)
11
-
12
- 4. On POSIX, in `../exiftool-vendored.pl`:
13
-
14
- 1. Run the "check-updates" GitHub Action. If there is a pending update, a PR is generated.
15
- 1. Verify and merge the PR
16
- 1. Run the "release" GitHub Action.
17
-
18
- 5. On Windows, in `...\exiftool-vendored.exe\`:
19
- (The terminal built into vscode plays with `ncu` and `release-it` a bit nicer than CMD or Windows for Git's terminal)
20
-
21
- 1. `git stash -u && git fetch && git checkout main && npm install && npm run update && npm run test`
22
- 1. Verify diffs are reasonable, and commit
23
- 1. `npx release-it --only-version`
24
-
25
- 6. Finally, back on the POSIX box, release `exiftool-vendored`:
26
-
27
- 1. `cd ../exiftool-vendored.js`
28
- 1. `npm run u`
29
- 1. `npm run mktags ../test-images` # < assumes `../test-images` has the full ExifTool sample image suite
30
- 1. `npm run fmt && npm run lint && npm run docs`
31
- 1. Verify docs were rebuilt successfully at <http://localhost:3000/index.html>
32
- 1. `npm run test`
33
- 1. Verify diffs are reasonable, `git commit` and `git push`
34
- 1. Verify [![Node.js CI](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/node.js.yml/badge.svg)](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/node.js.yml)
35
- 1. Update the [CHANGELOG.md](https://github.com/photostructure/exiftool-vendored.js/blob/main/CHANGELOG.md)
36
- 1. `npx release-it --only-version`
3
+ As of May 2025, the Windows
4
+ [exiftool-vendored.exe](https://github.com/photostructure/exiftool-vendored.exe)
5
+ and POSIX
6
+ [exiftool-vendored.pl](https://github.com/photostructure/exiftool-vendored.pl)
7
+ vendored versions of ExifTool are updated and released automatically.
8
+
9
+ ## Automated Dependency Updates
10
+
11
+ A GitHub Actions workflow automatically checks for dependency updates (including ExifTool packages) periodically and creates pull requests when updates are available. The workflow:
12
+
13
+ - Updates all dependencies using `npm-check-updates`
14
+ - Creates a pull request with signed commits
15
+ - Includes a detailed diff of changes
16
+ - Allows manual approval and merging
17
+ - Can also be triggered manually via the Actions tab
18
+
19
+ ## Manual Release Process
20
+
21
+ 1. `git clone` this repo,
22
+ 1. `npm install`
23
+ 1. `npm run u` # should be a no-op if automated updates are working
24
+ 1. `npm run mktags ../test-images` # < assumes `../test-images` has the full ExifTool sample image suite
25
+ 1. `npm run fmt && npm run lint && npm run docs` (look for lint or documentation generation issues)
26
+ 1. `npm run test`
27
+ 1. Verify diffs are reasonable, `git commit` and `git push`
28
+ 1. Verify [![Node.js CI](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/node.js.yml/badge.svg)](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/node.js.yml)
29
+ 1. Update the [CHANGELOG.md](https://github.com/photostructure/exiftool-vendored.js/blob/main/CHANGELOG.md)
30
+ 1. Run the [release action on GitHub](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/release.yml)
31
+ 1. Copy the relevant CHANGELOG entries into the new GitHub Release. [Here's an example](https://github.com/photostructure/exiftool-vendored.js/releases/tag/30.0.0).
package/dist/Array.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Array.js","sourceRoot":"","sources":["../src/Array.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Array.js","sourceRoot":"","sources":["../src/Array.ts"],"names":[],"mappings":"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"}
@@ -55,7 +55,7 @@ class BinaryToBufferTask extends ExifToolTask_1.ExifToolTask {
55
55
  exports.BinaryToBufferTask = BinaryToBufferTask;
56
56
  const B64Prefix = "base64:";
57
57
  function decode(data) {
58
- return data == null || !data.startsWith(B64Prefix)
58
+ return !data?.startsWith(B64Prefix)
59
59
  ? undefined
60
60
  : Buffer.from(data.substring(B64Prefix.length), "base64");
61
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BinaryToBufferTask.js","sourceRoot":"","sources":["../src/BinaryToBufferTask.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA6B;AAC7B,iDAAmE;AACnE,+DAAgE;AAEhE,qCAAoC;AAEpC;;;GAGG;AACH,MAAa,kBAAmB,SAAQ,2BAA4B;IAEvD;IADX,YACW,OAAe,EACxB,IAAc,EACd,OAA6B;QAE7B,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAJZ,YAAO,GAAP,OAAO,CAAQ;IAK1B,CAAC;IAED,MAAM,CAAC,GAAG,CACR,OAAe,EACf,MAAc,EACd,OAA6B;QAE7B,sEAAsE;QACtE,wCAAwC;QACxC,MAAM,IAAI,GAAG,CAAC,GAAG,6CAAuB,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,mBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,OAAO,IAAI,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,GAAW;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClC,iCAAiC;YACjC,CAAC;gBACC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzC,IAAI,MAAM,IAAI,IAAI;oBAAE,OAAO,MAAM,CAAC;YACpC,CAAC,CAAC,+CAA+C;YACjD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;oBACnD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,MAAM,IAAI,IAAI;wBAAE,OAAO,MAAM,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,GAAG,KAAK,IAAA,iBAAQ,EAAC,IAAI,CAAC;gBACpB,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;gBACjB,CAAC,CAAC,MAAM,YAAY,KAAK;oBACvB,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;IACvD,CAAC;CACF;AA5CD,gDA4CC;AAED,MAAM,SAAS,GAAG,SAAS,CAAC;AAE5B,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,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"BinaryToBufferTask.js","sourceRoot":"","sources":["../src/BinaryToBufferTask.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA6B;AAC7B,iDAAmE;AACnE,+DAAgE;AAEhE,qCAAoC;AAEpC;;;GAGG;AACH,MAAa,kBAAmB,SAAQ,2BAA4B;IAEvD;IADX,YACW,OAAe,EACxB,IAAc,EACd,OAA6B;QAE7B,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAJZ,YAAO,GAAP,OAAO,CAAQ;IAK1B,CAAC;IAED,MAAM,CAAC,GAAG,CACR,OAAe,EACf,MAAc,EACd,OAA6B;QAE7B,sEAAsE;QACtE,wCAAwC;QACxC,MAAM,IAAI,GAAG,CAAC,GAAG,6CAAuB,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,mBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAChC,OAAO,IAAI,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,GAAW;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClC,iCAAiC;YACjC,CAAC;gBACC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzC,IAAI,MAAM,IAAI,IAAI;oBAAE,OAAO,MAAM,CAAC;YACpC,CAAC,CAAC,+CAA+C;YACjD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;oBACnD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,MAAM,IAAI,IAAI;wBAAE,OAAO,MAAM,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,GAAG,KAAK,IAAA,iBAAQ,EAAC,IAAI,CAAC;gBACpB,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;gBACjB,CAAC,CAAC,MAAM,YAAY,KAAK;oBACvB,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;IACvD,CAAC;CACF;AA5CD,gDA4CC;AAED,MAAM,SAAS,GAAG,SAAS,CAAC;AAE5B,SAAS,MAAM,CAAC,IAAmB;IACjC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;QACjC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC9D,CAAC"}
@@ -164,10 +164,16 @@ function parseCoordinate(input, expectRemainders = false) {
164
164
  }
165
165
  const { degrees: degreesStr, minutes: minutesStr, seconds: secondsStr, direction: directionStr, remainder, } = match.groups;
166
166
  const direction = directionStr?.toUpperCase();
167
+ if (degreesStr == null) {
168
+ throw new CoordinateParseError("Missing degrees in coordinate");
169
+ }
167
170
  const degrees = parseFloat(degreesStr);
168
171
  let minutes;
169
172
  let seconds;
170
173
  if (format === "DMS") {
174
+ if (minutesStr == null || secondsStr == null) {
175
+ throw new CoordinateParseError("Missing minutes or seconds in DMS coordinate");
176
+ }
171
177
  minutes = parseInt(minutesStr, 10);
172
178
  seconds = parseFloat(secondsStr);
173
179
  if (minutes >= 60) {
@@ -178,6 +184,9 @@ function parseCoordinate(input, expectRemainders = false) {
178
184
  }
179
185
  }
180
186
  else if (format === "DM") {
187
+ if (minutesStr == null) {
188
+ throw new CoordinateParseError("Missing minutes in DM coordinate");
189
+ }
181
190
  minutes = parseFloat(minutesStr);
182
191
  if (minutes >= 60) {
183
192
  throw new CoordinateParseError("Minutes must be between 0 and 59.999...");
@@ -1 +1 @@
1
- {"version":3,"file":"CoordinateParser.js","sourceRoot":"","sources":["../src/CoordinateParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CoordinateParser.js","sourceRoot":"","sources":["../src/CoordinateParser.ts"],"names":[],"mappings":"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"}
package/dist/DateTime.js CHANGED
@@ -11,7 +11,7 @@ const ExifDate_1 = require("./ExifDate");
11
11
  const ExifDateTime_1 = require("./ExifDateTime");
12
12
  const ExifTime_1 = require("./ExifTime");
13
13
  function validDateTime(dt) {
14
- return dt != null && dt.isValid;
14
+ return dt?.isValid === true;
15
15
  }
16
16
  exports.SecondMs = 1000;
17
17
  exports.MinuteMs = 60 * exports.SecondMs;
@@ -1 +1 @@
1
- {"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../src/DateTime.ts"],"names":[],"mappings":";;;AAMA,sCAEC;AASD,oCAOC;AAED,wCASC;AAED,oCAMC;AAED,kBAOC;AApDD,iCAAiC;AACjC,yCAAsC;AACtC,iDAA8C;AAC9C,yCAAsC;AAGtC,SAAgB,aAAa,CAAC,EAAmB;IAC/C,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,CAAC;AAClC,CAAC;AAEY,QAAA,QAAQ,GAAG,IAAI,CAAC;AAChB,QAAA,QAAQ,GAAG,EAAE,GAAG,gBAAQ,CAAC;AACzB,QAAA,MAAM,GAAG,EAAE,GAAG,gBAAQ,CAAC;AACvB,QAAA,KAAK,GAAG,EAAE,GAAG,cAAM,CAAC;AAIjC,SAAgB,YAAY,CAAC,CAAU;IACrC,OAAO,CACL,CAAC,YAAY,2BAAY;QACzB,CAAC,YAAY,mBAAQ;QACrB,CAAC,YAAY,mBAAQ;QACrB,gBAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CACvB,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAC5B,CAAW,EACX,IAAiE;IAEjE,OAAO,CAAC,CAAC,QAAQ,CACf,kBAAkB;QAChB,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,CAAC,IAAI,EAAE,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAAC,CAAa;IACxC,IAAI,gBAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,SAAgB,GAAG,CACjB,CAAW,EACX,IAAwC;IAExC,OAAO,CAAC,CAAC,QAAQ,CACf,UAAU,GAAG,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAChE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"DateTime.js","sourceRoot":"","sources":["../src/DateTime.ts"],"names":[],"mappings":";;;AAMA,sCAEC;AASD,oCAOC;AAED,wCASC;AAED,oCAMC;AAED,kBAOC;AApDD,iCAAiC;AACjC,yCAAsC;AACtC,iDAA8C;AAC9C,yCAAsC;AAGtC,SAAgB,aAAa,CAAC,EAAmB;IAC/C,OAAO,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC;AAC9B,CAAC;AAEY,QAAA,QAAQ,GAAG,IAAI,CAAC;AAChB,QAAA,QAAQ,GAAG,EAAE,GAAG,gBAAQ,CAAC;AACzB,QAAA,MAAM,GAAG,EAAE,GAAG,gBAAQ,CAAC;AACvB,QAAA,KAAK,GAAG,EAAE,GAAG,cAAM,CAAC;AAIjC,SAAgB,YAAY,CAAC,CAAU;IACrC,OAAO,CACL,CAAC,YAAY,2BAAY;QACzB,CAAC,YAAY,mBAAQ;QACrB,CAAC,YAAY,mBAAQ;QACrB,gBAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CACvB,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAC5B,CAAW,EACX,IAAiE;IAEjE,OAAO,CAAC,CAAC,QAAQ,CACf,kBAAkB;QAChB,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,CAAC,IAAI,EAAE,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAAC,CAAa;IACxC,IAAI,gBAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,SAAgB,GAAG,CACjB,CAAW,EACX,IAAwC;IAExC,OAAO,CAAC,CAAC,QAAQ,CACf,UAAU,GAAG,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAChE,CAAC;AACJ,CAAC"}
@@ -1,23 +1,47 @@
1
1
  import { DateTime } from "luxon";
2
2
  import { Maybe } from "./Maybe";
3
3
  /**
4
- * Encodes an ExifDate
4
+ * Base type for year-only date
5
5
  */
6
- export declare class ExifDate {
6
+ export interface ExifDateYearOnly {
7
7
  readonly year: number;
8
+ }
9
+ /**
10
+ * Type for year-month date (extends year-only)
11
+ */
12
+ export interface ExifDateYearMonth extends ExifDateYearOnly {
8
13
  readonly month: number;
14
+ }
15
+ /**
16
+ * Type for full date (extends year-month)
17
+ */
18
+ export interface ExifDateFull extends ExifDateYearMonth {
9
19
  readonly day: number;
20
+ }
21
+ /**
22
+ * Type for partial ExifDate (year-only or year-month)
23
+ */
24
+ export type ExifDatePartial = ExifDateYearOnly | ExifDateYearMonth;
25
+ /**
26
+ * Encodes an ExifDate
27
+ */
28
+ export declare class ExifDate {
29
+ readonly year: number;
30
+ readonly month?: number | undefined;
31
+ readonly day?: number | undefined;
10
32
  readonly rawValue?: string | undefined;
11
- static from(exifOrIso: string): Maybe<ExifDate>;
33
+ static from(exifOrIso: string | number): Maybe<ExifDate>;
12
34
  static fromISO(text: string): Maybe<ExifDate>;
13
35
  private static fromPatterns;
14
36
  static fromExifStrict(text: string): Maybe<ExifDate>;
37
+ static fromYearMonth(text: string | number): Maybe<ExifDate>;
38
+ static fromYear(yearValue: string | number): Maybe<ExifDate>;
15
39
  static fromExifLoose(text: string): Maybe<ExifDate>;
16
40
  static fromEXIF(text: string): Maybe<ExifDate>;
17
41
  static fromDateTime(dt: DateTime, rawValue?: string): Maybe<ExifDate>;
18
42
  constructor(year: number, // 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/
19
- month: number, // 1-12, (no crazy 0-11 nonsense from Date!)
20
- day: number, // 1-31
43
+ month?: number | undefined, // 1-12, (no crazy 0-11 nonsense from Date!)
44
+ day?: number | undefined, // 1-31
21
45
  rawValue?: string | undefined);
22
46
  toDate(): Date;
23
47
  /**
@@ -32,9 +56,25 @@ export declare class ExifDate {
32
56
  toJSON(): {
33
57
  _ctor: string;
34
58
  year: number;
35
- month: number;
36
- day: number;
59
+ month: number | undefined;
60
+ day: number | undefined;
37
61
  rawValue: string | undefined;
38
62
  };
39
63
  static fromJSON(json: ReturnType<ExifDate["toJSON"]>): ExifDate;
64
+ /**
65
+ * @returns true if this is a partial date (year-only or year-month)
66
+ */
67
+ isPartial(): this is ExifDatePartial;
68
+ /**
69
+ * @returns true if this is a year-only date
70
+ */
71
+ isYearOnly(): this is ExifDateYearOnly;
72
+ /**
73
+ * @returns true if this is a year-month date (no day)
74
+ */
75
+ isYearMonth(): this is ExifDateYearMonth;
76
+ /**
77
+ * @returns true if this is a full date (year, month, and day)
78
+ */
79
+ isFullDate(): this is ExifDateFull;
40
80
  }
package/dist/ExifDate.js CHANGED
@@ -6,6 +6,8 @@ const DateTime_1 = require("./DateTime");
6
6
  const Maybe_1 = require("./Maybe");
7
7
  const String_1 = require("./String");
8
8
  const StrictExifRE = /^\d{1,4}:\d{1,2}:\d{1,2}|\d{1,4}-\d{1,2}-\d{1,2}$/;
9
+ const YearMonthRE = /^\d{1,4}[:-]\d{1,2}$/;
10
+ const YearOnlyRE = /^\d{1,4}$/;
9
11
  const LooseExifRE = /^\S+\s+\S+\s+\S+$/;
10
12
  /**
11
13
  * Encodes an ExifDate
@@ -16,9 +18,14 @@ class ExifDate {
16
18
  day;
17
19
  rawValue;
18
20
  static from(exifOrIso) {
21
+ if (typeof exifOrIso === "number") {
22
+ return this.fromYear(exifOrIso);
23
+ }
19
24
  return (
20
25
  // in order of strictness:
21
26
  this.fromExifStrict(exifOrIso) ??
27
+ this.fromYearMonth(exifOrIso) ??
28
+ this.fromYear(exifOrIso) ??
22
29
  this.fromISO(exifOrIso) ??
23
30
  this.fromExifLoose(exifOrIso));
24
31
  }
@@ -48,6 +55,28 @@ class ExifDate {
48
55
  ? this.fromPatterns(text, ["y:MM:dd", "y-MM-dd", "y:M:d"])
49
56
  : undefined;
50
57
  }
58
+ static fromYearMonth(text) {
59
+ const textStr = (0, String_1.toS)(text).trim();
60
+ if (!YearMonthRE.test(textStr))
61
+ return undefined;
62
+ for (const fmt of ["y:MM", "y-MM", "y:M", "y-M"]) {
63
+ const dt = luxon_1.DateTime.fromFormat(textStr, fmt);
64
+ if ((0, DateTime_1.validDateTime)(dt)) {
65
+ return new ExifDate(dt.year, dt.month, undefined, textStr);
66
+ }
67
+ }
68
+ return undefined;
69
+ }
70
+ static fromYear(yearValue) {
71
+ const textStr = (0, String_1.toS)(yearValue).trim();
72
+ if (YearOnlyRE.test(textStr)) {
73
+ const year = parseInt(textStr, 10);
74
+ if (!isNaN(year) && year > 0 && year <= 9999) {
75
+ return new ExifDate(year, undefined, undefined, textStr);
76
+ }
77
+ }
78
+ return undefined;
79
+ }
51
80
  static fromExifLoose(text) {
52
81
  // Unfortunately, Luxon parses "00" and "01" as _today_. So if we don't
53
82
  // three non-blank strings parts, reject.
@@ -76,7 +105,7 @@ class ExifDate {
76
105
  this.rawValue = rawValue;
77
106
  }
78
107
  toDate() {
79
- return new Date(this.year, this.month - 1, this.day);
108
+ return new Date(this.year, (this.month ?? 1) - 1, this.day ?? 1);
80
109
  }
81
110
  /**
82
111
  * @param deltaMs defaults to 12 hours, so toMillis() is in the middle of the day.
@@ -93,6 +122,12 @@ class ExifDate {
93
122
  return this.toString(":");
94
123
  }
95
124
  toString(sep = "-") {
125
+ if (this.month == null) {
126
+ return `${this.year}`;
127
+ }
128
+ if (this.day == null) {
129
+ return `${this.year}${sep}${(0, String_1.pad2)(this.month).join("")}`;
130
+ }
96
131
  return `${this.year}${sep}${(0, String_1.pad2)(this.month, this.day).join(sep)}`;
97
132
  }
98
133
  toJSON() {
@@ -107,6 +142,30 @@ class ExifDate {
107
142
  static fromJSON(json) {
108
143
  return new ExifDate(json.year, json.month, json.day, json.rawValue);
109
144
  }
145
+ /**
146
+ * @returns true if this is a partial date (year-only or year-month)
147
+ */
148
+ isPartial() {
149
+ return this.month == null || this.day == null;
150
+ }
151
+ /**
152
+ * @returns true if this is a year-only date
153
+ */
154
+ isYearOnly() {
155
+ return this.month == null;
156
+ }
157
+ /**
158
+ * @returns true if this is a year-month date (no day)
159
+ */
160
+ isYearMonth() {
161
+ return this.month != null && this.day == null;
162
+ }
163
+ /**
164
+ * @returns true if this is a full date (year, month, and day)
165
+ */
166
+ isFullDate() {
167
+ return this.month != null && this.day != null;
168
+ }
110
169
  }
111
170
  exports.ExifDate = ExifDate;
112
171
  //# sourceMappingURL=ExifDate.js.map