exiftool-vendored 30.3.0 → 30.5.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,18 @@ vendored versions of ExifTool match the version that they vendor.
25
25
 
26
26
  ## Version history
27
27
 
28
+ ### v30.5.0
29
+
30
+ - 🌱 Upgraded ExifTool to version [13.35](https://exiftool.org/history.html#13.35).
31
+
32
+ ### v30.4.0
33
+
34
+ - 🌱 Upgraded ExifTool to version [13.34](https://exiftool.org/history.html#13.34).
35
+
36
+ - 📦 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
37
+
38
+ - 📦 Automated publishing (like batch-cluster!), so https://www.npmjs.com/package/exiftool-vendored#user-content-provenance will be a thing
39
+
28
40
  ### v30.3.0
29
41
 
30
42
  - 🌱 Upgraded ExifTool to version [13.31](https://exiftool.org/history.html#13.31).
@@ -87,7 +99,7 @@ vendored versions of ExifTool match the version that they vendor.
87
99
 
88
100
  ### v30.0.0
89
101
 
90
- - 💔 Dropped support for Node v18, whose End-of-Life was 2025-04-30.
102
+ - 🏚️ Dropped support for Node v18, whose End-of-Life was 2025-04-30.
91
103
 
92
104
  - 🌱 Upgraded ExifTool to version [13.29](https://exiftool.org/history.html#13.29).
93
105
 
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  **Fast, cross-platform [Node.js](https://nodejs.org/) access to [ExifTool](https://exiftool.org/). Built and supported by [PhotoStructure](https://photostructure.com).**
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/exiftool-vendored.svg)](https://www.npmjs.com/package/exiftool-vendored)
6
- [![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)
6
+ [![Node.js CI](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/build.yml/badge.svg)](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/build.yml)
7
7
  [![GitHub issues](https://img.shields.io/github/issues/photostructure/exiftool-vendored.js.svg)](https://github.com/photostructure/exiftool-vendored.js/issues)
8
8
 
9
9
  ## Installation & Quick Start
@@ -113,19 +113,29 @@ await exiftool.extractJpgFromRaw("photo.cr2", "processed.jpg");
113
113
 
114
114
  ## Understanding Tags
115
115
 
116
- The `Tags` interface contains **thousands of metadata fields** from an auto-generated TypeScript file. Each tag uses a special notation:
116
+ The `Tags` interface contains **thousands of metadata fields** from an auto-generated TypeScript file. Each tag includes semantic JSDoc annotations:
117
117
 
118
118
  ```typescript
119
- /** ★★★★ ✔ Example: 1920 */
120
- ImageWidth?: number; // Very common, all cameras
121
-
122
- /** ★☆☆☆ Example: "Custom" */
123
- RareTag?: string; // Rare, <1% of files
119
+ /**
120
+ * @frequency 🔥 ★★★★ (85%)
121
+ * @groups EXIF, MakerNotes
122
+ * @example 100
123
+ */
124
+ ISO?: number;
125
+
126
+ /**
127
+ * @frequency 🧊 ★★★☆ (23%)
128
+ * @groups MakerNotes
129
+ * @example "Custom lens data"
130
+ */
131
+ LensSpec?: string;
124
132
  ```
125
133
 
126
- - **★★★★** = Found in >50% of files (very common)
127
- - **★☆☆☆** = Very rare, <1% of files
128
- - **✔** = Found in popular cameras (Canon, Nikon, Sony, Apple)
134
+ - **🔥** = Found on mainstream devices (iPhone, Canon, Nikon, Sony)
135
+ - **🧊** = Found on more obscure camera makes and models
136
+ - **★★★★** = Found in >50% of files, **☆☆☆☆** = rare (<1%)
137
+ - **@groups** = Metadata categories (EXIF, GPS, IPTC, XMP, etc.)
138
+ - **@example** = Representative values
129
139
 
130
140
  **Important**: The interface isn't comprehensive - unknown fields may still exist in returned objects.
131
141
 
package/RELEASE.md CHANGED
@@ -16,15 +16,38 @@ A GitHub Actions workflow automatically checks for dependency updates (including
16
16
  - Allows manual approval and merging
17
17
  - Can also be triggered manually via the Actions tab
18
18
 
19
- ## Manual Release Process
20
-
21
- 1. `git clone` this repo,
22
- 1. `npm install`
23
- 1. `npm run mktags ../test-images` # < assumes `../test-images` has the full ExifTool sample image suite
24
- 1. `npm run precommit` (look for lint or documentation generation issues)
25
- 1. `npm run test`
26
- 1. Verify diffs are reasonable, `git commit` and `git push`
27
- 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)
28
- 1. Update the [CHANGELOG.md](https://github.com/photostructure/exiftool-vendored.js/blob/main/CHANGELOG.md)
29
- 1. Run the [release action on GitHub](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/release.yml)
30
- 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).
19
+ ## Release Process
20
+
21
+ ### Prerequisites
22
+
23
+ Before releasing, ensure you have:
24
+
25
+ 1. Configured [npm Trusted Publishing](https://docs.npmjs.com/trusted-publishers) for this repository on npmjs.com
26
+ 2. Access to trigger GitHub Actions workflows
27
+
28
+ ### Automatic Release (Recommended)
29
+
30
+ Releases are now handled through GitHub Actions with OIDC trusted publishing:
31
+
32
+ 1. Ensure all changes are committed and pushed to `main`
33
+ 2. Update the [CHANGELOG.md](https://github.com/photostructure/exiftool-vendored.js/blob/main/CHANGELOG.md)
34
+ 3. Go to the [Build & Release workflow](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/build.yml)
35
+ 4. Click "Run workflow" and select the version type (patch/minor/major)
36
+ 5. The workflow will:
37
+ - Run the full test matrix (3 OS × 3 Node versions)
38
+ - Only proceed with release if all tests pass
39
+ - Use OIDC for secure, token-free npm publishing
40
+ - Create a GitHub release
41
+ 6. 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).
42
+
43
+ ### Manual Development Process
44
+
45
+ For development and testing:
46
+
47
+ 1. `git clone` this repo
48
+ 2. `npm install`
49
+ 3. `npm run mktags ../test-images` # < assumes `../test-images` has the full ExifTool sample image suite
50
+ 4. `npm run precommit` (look for lint or documentation generation issues)
51
+ 5. `npm run test`
52
+ 6. Verify diffs are reasonable, `git commit` and `git push`
53
+ 7. Follow the Automatic Release steps above
@@ -325,7 +325,7 @@ export declare class ExifTool {
325
325
  /**
326
326
  * @return report why child processes were recycled
327
327
  */
328
- childEndCounts(): Record<NonNullable<bc.ChildExitReason>, number>;
328
+ childEndCounts(): Record<NonNullable<bc.ChildEndReason>, number>;
329
329
  /**
330
330
  * Shut down any currently-running child processes. New child processes will
331
331
  * be started automatically to handle new tasks.
package/eslint.config.mjs CHANGED
@@ -5,7 +5,14 @@ import tseslint from "typescript-eslint";
5
5
 
6
6
  export default tseslint.config(
7
7
  {
8
- ignores: ["dist/", "node_modules/", "**/*.d.ts", "coverage/", "docs/"],
8
+ ignores: [
9
+ "**/*.d.ts",
10
+ "build/",
11
+ "coverage/",
12
+ "dist/",
13
+ "docs/",
14
+ "node_modules/",
15
+ ],
9
16
  },
10
17
  eslint.configs.recommended,
11
18
  ...tseslint.configs.recommended,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exiftool-vendored",
3
- "version": "30.3.0",
3
+ "version": "30.5.0",
4
4
  "description": "Efficient, cross-platform access to ExifTool",
5
5
  "main": "./dist/ExifTool.js",
6
6
  "types": "./dist/ExifTool.d.ts",
@@ -31,7 +31,7 @@
31
31
  "docs:serve": "npm run docs:build && npx serve build/docs",
32
32
  "docs": "npm run docs:serve",
33
33
  "update": "run-p update:*",
34
- "update:deps": "npm-check-updates --upgrade && npm install --force && npm audit fix",
34
+ "update:deps": "npm-check-updates --upgrade && npm install && npm audit --production",
35
35
  "install:pinact": "go install github.com/suzuki-shunsuke/pinact/cmd/pinact@latest",
36
36
  "update:actions": "pinact run -u",
37
37
  "precommit": "run-s clean update fmt lint docs:build test",
@@ -43,7 +43,11 @@
43
43
  },
44
44
  "release-it": {
45
45
  "hooks": {
46
- "before:init": "npm run lint"
46
+ "before:init": [
47
+ "npm ci",
48
+ "npm run clean",
49
+ "npm run compile"
50
+ ]
47
51
  },
48
52
  "src": {
49
53
  "tagName": "v%s",
@@ -59,9 +63,11 @@
59
63
  "release": true
60
64
  },
61
65
  "npm": {
62
- "publish": true
66
+ "publish": true,
67
+ "skipChecks": true
63
68
  }
64
69
  },
70
+ "# release-it.npm.skipChecks": "Required for OIDC Trusted Publishing - bypasses npm auth checks since OIDC handles authentication automatically. See: https://github.com/release-it/release-it/issues/1244 and https://docs.npmjs.com/trusted-publishers#supported-cicd-providers",
65
71
  "keywords": [
66
72
  "ExifTool",
67
73
  "EXIF",
@@ -88,61 +94,61 @@
88
94
  ]
89
95
  },
90
96
  "devDependencies": {
91
- "@eslint/js": "^9.29.0",
97
+ "@eslint/js": "^9.35.0",
92
98
  "@types/chai": "^4.3.16",
93
99
  "@types/chai-as-promised": "^8.0.1",
94
100
  "@types/chai-subset": "^1.3.6",
95
101
  "@types/deep-eql": "^4.0.2",
96
- "@types/globule": "^1.1.9",
102
+ "@types/globule": "^1.1.10",
97
103
  "@types/he": "^1.2.3",
98
104
  "@types/mocha": "^10.0.10",
99
- "@types/node": "^24.0.4",
105
+ "@types/node": "^24.3.1",
100
106
  "@types/progress": "^2.0.7",
101
107
  "@types/source-map-support": "^0.5.10",
102
108
  "@types/tmp": "^0.2.6",
103
109
  "@types/xmldom": "^0.1.34",
104
- "@typescript-eslint/eslint-plugin": "^8.35.0",
105
- "@typescript-eslint/parser": "^8.35.0",
110
+ "@typescript-eslint/eslint-plugin": "^8.42.0",
111
+ "@typescript-eslint/parser": "^8.42.0",
106
112
  "@xmldom/xmldom": "^0.9.8",
107
113
  "chai": "^4.5.0",
108
114
  "chai-as-promised": "^7.1.2",
109
115
  "deep-eql": "^4.1.4",
110
- "eslint": "^9.29.0",
116
+ "eslint": "^9.35.0",
111
117
  "eslint-plugin-import": "^2.32.0",
112
118
  "eslint-plugin-node": "^11.1.0",
113
119
  "eslint-plugin-redos": "^4.5.0",
114
- "eslint-plugin-regexp": "^2.9.0",
120
+ "eslint-plugin-regexp": "^2.10.0",
115
121
  "extract-zip": "^2.0.1",
116
122
  "geo-tz": "^8.1.4",
117
- "globals": "^16.2.0",
123
+ "globals": "^16.3.0",
118
124
  "globule": "^1.3.4",
119
125
  "mocha": "^10.8.2",
120
- "npm-check-updates": "^18.0.1",
126
+ "npm-check-updates": "^18.0.3",
121
127
  "npm-run-all": "^4.1.5",
122
- "prettier": "^3.6.1",
123
- "prettier-plugin-organize-imports": "^4.1.0",
128
+ "prettier": "^3.6.2",
129
+ "prettier-plugin-organize-imports": "^4.2.0",
124
130
  "progress": "^2.0.3",
125
- "release-it": "^19.0.3",
131
+ "release-it": "^19.0.4",
126
132
  "rimraf": "^5.0.9",
127
- "serve": "^14.2.4",
133
+ "serve": "^14.2.5",
128
134
  "source-map-support": "^0.5.21",
129
- "tmp": "^0.2.3",
135
+ "tmp": "^0.2.5",
130
136
  "ts-node": "^10.9.2",
131
- "typedoc": "^0.28.5",
132
- "typescript": "^5.8.3",
133
- "typescript-eslint": "^8.35.0",
137
+ "typedoc": "^0.28.12",
138
+ "typescript": "^5.9.2",
139
+ "typescript-eslint": "^8.42.0",
134
140
  "xpath": "^0.0.34"
135
141
  },
136
142
  "dependencies-note": "@types/luxon is a proper dependency, not devDependency, as our exported TypeScript typings reference luxon types. See <https://github.com/photostructure/exiftool-vendored.js/pull/108>",
137
143
  "dependencies": {
138
- "@photostructure/tz-lookup": "^11.2.0",
139
- "@types/luxon": "^3.6.2",
140
- "batch-cluster": "^14.0.0",
144
+ "@photostructure/tz-lookup": "^11.2.1",
145
+ "@types/luxon": "^3.7.1",
146
+ "batch-cluster": "^15.0.1",
141
147
  "he": "^1.2.0",
142
- "luxon": "^3.6.1"
148
+ "luxon": "^3.7.2"
143
149
  },
144
150
  "optionalDependencies": {
145
- "exiftool-vendored.exe": "13.31.0",
146
- "exiftool-vendored.pl": "13.31.0"
151
+ "exiftool-vendored.exe": "13.35.1",
152
+ "exiftool-vendored.pl": "13.35.0"
147
153
  }
148
154
  }