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 +13 -1
- package/README.md +20 -10
- package/RELEASE.md +35 -12
- package/dist/ExifTool.d.ts +1 -1
- package/eslint.config.mjs +8 -1
- package/package.json +33 -27
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
|
-
-
|
|
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
|
[](https://www.npmjs.com/package/exiftool-vendored)
|
|
6
|
-
[](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/build.yml)
|
|
7
7
|
[](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
|
|
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
|
-
/**
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
-
|
|
127
|
-
-
|
|
128
|
-
-
|
|
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
|
-
##
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
1.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
package/dist/ExifTool.d.ts
CHANGED
|
@@ -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.
|
|
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: [
|
|
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
|
+
"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
|
|
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":
|
|
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.
|
|
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.
|
|
102
|
+
"@types/globule": "^1.1.10",
|
|
97
103
|
"@types/he": "^1.2.3",
|
|
98
104
|
"@types/mocha": "^10.0.10",
|
|
99
|
-
"@types/node": "^24.
|
|
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.
|
|
105
|
-
"@typescript-eslint/parser": "^8.
|
|
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.
|
|
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.
|
|
120
|
+
"eslint-plugin-regexp": "^2.10.0",
|
|
115
121
|
"extract-zip": "^2.0.1",
|
|
116
122
|
"geo-tz": "^8.1.4",
|
|
117
|
-
"globals": "^16.
|
|
123
|
+
"globals": "^16.3.0",
|
|
118
124
|
"globule": "^1.3.4",
|
|
119
125
|
"mocha": "^10.8.2",
|
|
120
|
-
"npm-check-updates": "^18.0.
|
|
126
|
+
"npm-check-updates": "^18.0.3",
|
|
121
127
|
"npm-run-all": "^4.1.5",
|
|
122
|
-
"prettier": "^3.6.
|
|
123
|
-
"prettier-plugin-organize-imports": "^4.
|
|
128
|
+
"prettier": "^3.6.2",
|
|
129
|
+
"prettier-plugin-organize-imports": "^4.2.0",
|
|
124
130
|
"progress": "^2.0.3",
|
|
125
|
-
"release-it": "^19.0.
|
|
131
|
+
"release-it": "^19.0.4",
|
|
126
132
|
"rimraf": "^5.0.9",
|
|
127
|
-
"serve": "^14.2.
|
|
133
|
+
"serve": "^14.2.5",
|
|
128
134
|
"source-map-support": "^0.5.21",
|
|
129
|
-
"tmp": "^0.2.
|
|
135
|
+
"tmp": "^0.2.5",
|
|
130
136
|
"ts-node": "^10.9.2",
|
|
131
|
-
"typedoc": "^0.28.
|
|
132
|
-
"typescript": "^5.
|
|
133
|
-
"typescript-eslint": "^8.
|
|
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.
|
|
139
|
-
"@types/luxon": "^3.
|
|
140
|
-
"batch-cluster": "^
|
|
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.
|
|
148
|
+
"luxon": "^3.7.2"
|
|
143
149
|
},
|
|
144
150
|
"optionalDependencies": {
|
|
145
|
-
"exiftool-vendored.exe": "13.
|
|
146
|
-
"exiftool-vendored.pl": "13.
|
|
151
|
+
"exiftool-vendored.exe": "13.35.1",
|
|
152
|
+
"exiftool-vendored.pl": "13.35.0"
|
|
147
153
|
}
|
|
148
154
|
}
|