exiftool-vendored 29.3.0 → 30.1.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 (77) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/CLAUDE.md +67 -0
  3. package/README.md +30 -1
  4. package/RELEASE.md +29 -34
  5. package/dist/Array.d.ts +2 -2
  6. package/dist/Array.js.map +1 -1
  7. package/dist/BinaryToBufferTask.js +1 -1
  8. package/dist/BinaryToBufferTask.js.map +1 -1
  9. package/dist/CoordinateParser.js +9 -0
  10. package/dist/CoordinateParser.js.map +1 -1
  11. package/dist/DateTime.js +1 -1
  12. package/dist/DateTime.js.map +1 -1
  13. package/dist/ExifDate.d.ts +47 -7
  14. package/dist/ExifDate.js +60 -1
  15. package/dist/ExifDate.js.map +1 -1
  16. package/dist/ExifDateTime.js +5 -1
  17. package/dist/ExifDateTime.js.map +1 -1
  18. package/dist/ExifTool.d.ts +9 -23
  19. package/dist/ExifTool.js +16 -1
  20. package/dist/ExifTool.js.map +1 -1
  21. package/dist/ExifToolVendoredTags.d.ts +15 -6
  22. package/dist/ExifToolVendoredTags.js +2 -15
  23. package/dist/ExifToolVendoredTags.js.map +1 -1
  24. package/dist/ExiftoolPath.js +5 -5
  25. package/dist/ExiftoolPath.js.map +1 -1
  26. package/dist/GPS.d.ts +3 -1
  27. package/dist/GPS.js +4 -15
  28. package/dist/GPS.js.map +1 -1
  29. package/dist/GeolocationTags.d.ts +4 -6
  30. package/dist/GeolocationTags.js +4 -22
  31. package/dist/GeolocationTags.js.map +1 -1
  32. package/dist/ICCProfileTags.d.ts +3 -0
  33. package/dist/ICCProfileTags.js +3 -0
  34. package/dist/ICCProfileTags.js.map +1 -1
  35. package/dist/IPTCApplicationRecordTags.d.ts +3 -0
  36. package/dist/IPTCApplicationRecordTags.js +3 -0
  37. package/dist/IPTCApplicationRecordTags.js.map +1 -1
  38. package/dist/ImageDataHashTag.d.ts +3 -0
  39. package/dist/ImageDataHashTag.js +3 -0
  40. package/dist/ImageDataHashTag.js.map +1 -1
  41. package/dist/JSON.d.ts +4 -0
  42. package/dist/JSON.js +7 -2
  43. package/dist/JSON.js.map +1 -1
  44. package/dist/MWGTags.d.ts +5 -0
  45. package/dist/MWGTags.js +4 -0
  46. package/dist/MWGTags.js.map +1 -1
  47. package/dist/Maybe.d.ts +4 -3
  48. package/dist/Maybe.js +1 -1
  49. package/dist/Maybe.js.map +1 -1
  50. package/dist/Object.d.ts +8 -2
  51. package/dist/Object.js +13 -13
  52. package/dist/Object.js.map +1 -1
  53. package/dist/RawTags.d.ts +1 -4
  54. package/dist/ReadTask.js +12 -5
  55. package/dist/ReadTask.js.map +1 -1
  56. package/dist/StrEnum.d.ts +35 -0
  57. package/dist/StrEnum.js +75 -0
  58. package/dist/StrEnum.js.map +1 -0
  59. package/dist/String.js +1 -6
  60. package/dist/String.js.map +1 -1
  61. package/dist/Tags.d.ts +223 -181
  62. package/dist/Tags.js +31 -0
  63. package/dist/Tags.js.map +1 -1
  64. package/dist/TimeParsing.js +1 -1
  65. package/dist/TimeParsing.js.map +1 -1
  66. package/dist/Timezones.d.ts +11 -0
  67. package/dist/Timezones.js +54 -23
  68. package/dist/Timezones.js.map +1 -1
  69. package/dist/WriteTags.d.ts +18 -2
  70. package/eslint.config.mjs +37 -18
  71. package/package.json +31 -18
  72. package/dist/ExifToolTags.d.ts +0 -7
  73. package/dist/ExifToolTags.js +0 -19
  74. package/dist/ExifToolTags.js.map +0 -1
  75. package/dist/FileTags.d.ts +0 -7
  76. package/dist/FileTags.js +0 -41
  77. package/dist/FileTags.js.map +0 -1
package/eslint.config.mjs CHANGED
@@ -1,34 +1,53 @@
1
1
  // eslint.config.mjs
2
- import tsPlugin from "@typescript-eslint/eslint-plugin"
3
- import tsParser from "@typescript-eslint/parser"
2
+ import eslint from "@eslint/js";
3
+ import globals from "globals";
4
+ import tseslint from "typescript-eslint";
4
5
 
5
- export default [
6
+ export default tseslint.config(
7
+ {
8
+ ignores: ["dist/", "node_modules/", "**/*.d.ts", "coverage/", "docs/"],
9
+ },
10
+ eslint.configs.recommended,
11
+ ...tseslint.configs.recommended,
12
+ ...tseslint.configs.strict,
6
13
  {
7
14
  files: ["src/**/*.ts"],
8
15
  languageOptions: {
9
- parser: tsParser,
16
+ parser: tseslint.parser,
10
17
  parserOptions: {
18
+ project: "./tsconfig.json",
11
19
  ecmaVersion: "latest",
12
20
  sourceType: "module",
13
- project: "./tsconfig.json",
14
21
  },
22
+ globals: globals.node,
15
23
  },
16
- plugins: {
17
- "@typescript-eslint": tsPlugin,
24
+ rules: {
25
+ // Enable strict rules for main library code
26
+ "@typescript-eslint/no-explicit-any": "error",
27
+ "@typescript-eslint/no-unused-vars": [
28
+ "error",
29
+ { argsIgnorePattern: "^_" },
30
+ ],
31
+ "@typescript-eslint/prefer-nullish-coalescing": "error",
32
+ "@typescript-eslint/prefer-optional-chain": "error",
18
33
  },
34
+ },
35
+ {
36
+ files: ["src/**/*.spec.ts", "src/update/**/*.ts"],
19
37
  rules: {
20
- ...tsPlugin.configs.recommended.rules,
21
- // Add or override rules as needed
22
- // 'semi': ['error', 'always'],
38
+ // Relax rules for test files and build scripts
39
+ "@typescript-eslint/no-explicit-any": "off",
40
+ "@typescript-eslint/no-unused-expressions": "off",
41
+ "@typescript-eslint/no-non-null-assertion": "off",
23
42
  },
24
43
  },
25
44
  {
26
- ignores: [
27
- "**/*js",
28
- "**/*.spec.ts",
29
- "**/update/*.ts",
30
- "**/*.d.ts",
31
- "**/node_modules/**",
32
- ],
45
+ files: ["**/*.js", "**/*.mjs"],
46
+ languageOptions: {
47
+ globals: globals.node,
48
+ },
49
+ rules: {
50
+ "@typescript-eslint/no-require-imports": "off",
51
+ },
33
52
  },
34
- ]
53
+ );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exiftool-vendored",
3
- "version": "29.3.0",
3
+ "version": "30.1.0",
4
4
  "description": "Efficient, cross-platform access to ExifTool",
5
5
  "main": "./dist/ExifTool.js",
6
6
  "types": "./dist/ExifTool.d.ts",
@@ -17,6 +17,7 @@
17
17
  "compile:watch": "npm run precompile && tsc --watch",
18
18
  "premktags": "npm run compile",
19
19
  "mktags": "node dist/update/mktags.js",
20
+ "postmktags": "npm run fmt",
20
21
  "prelint": "npm run compile",
21
22
  "prepare": "npm run compile",
22
23
  "#lint": "the node.js GitHub Action will run `lint` on one node before running `test` with the matrix",
@@ -24,11 +25,10 @@
24
25
  "fmt": "prettier --write src/*.ts src/**/*.ts **/*.yml **/*.json **/*.md",
25
26
  "pretest": "npm run compile",
26
27
  "test": "mocha 'dist/*.spec.js'",
27
- "docs:1": "typedoc --options .typedoc.js",
28
- "docs:3": "cp .serve.json docs/serve.json",
29
- "docs:4": "touch docs/.nojekyll",
30
- "docs:5": "serve docs",
31
- "docs": "run-s docs:*"
28
+ "docs:build": "typedoc --options .typedoc.js",
29
+ "docs:serve": "npm run docs:build && cp .serve.json docs/serve.json && touch docs/.nojekyll && serve docs",
30
+ "docs": "npm run docs:serve",
31
+ "release": "release-it"
32
32
  },
33
33
  "repository": {
34
34
  "type": "git",
@@ -43,8 +43,16 @@
43
43
  "commitArgs": "-S",
44
44
  "tagArgs": "-S"
45
45
  },
46
+ "git": {
47
+ "requireBranch": "main",
48
+ "commitMessage": "Release ${version}",
49
+ "tagName": "${version}"
50
+ },
46
51
  "github": {
47
52
  "release": true
53
+ },
54
+ "npm": {
55
+ "publish": true
48
56
  }
49
57
  },
50
58
  "keywords": [
@@ -73,7 +81,7 @@
73
81
  ]
74
82
  },
75
83
  "devDependencies": {
76
- "@eslint/js": "^9.23.0",
84
+ "@eslint/js": "^9.27.0",
77
85
  "@types/chai": "^4.3.16",
78
86
  "@types/chai-as-promised": "^8.0.1",
79
87
  "@types/chai-subset": "^1.3.6",
@@ -81,48 +89,53 @@
81
89
  "@types/globule": "^1.1.9",
82
90
  "@types/he": "^1.2.3",
83
91
  "@types/mocha": "^10.0.10",
84
- "@types/node": "^22.14.0",
92
+ "@types/node": "^22.15.21",
85
93
  "@types/progress": "^2.0.7",
94
+ "@types/source-map-support": "^0.5.10",
86
95
  "@types/tmp": "^0.2.6",
87
96
  "@types/xmldom": "^0.1.34",
88
- "@typescript-eslint/eslint-plugin": "^8.29.0",
89
- "@typescript-eslint/parser": "^8.29.0",
97
+ "@typescript-eslint/eslint-plugin": "^8.32.1",
98
+ "@typescript-eslint/parser": "^8.32.1",
90
99
  "@xmldom/xmldom": "^0.9.8",
91
100
  "chai": "^4.5.0",
92
101
  "chai-as-promised": "^7.1.2",
93
102
  "deep-eql": "^4.1.4",
94
- "eslint": "^9.23.0",
103
+ "eslint": "^9.27.0",
95
104
  "eslint-plugin-import": "^2.31.0",
96
105
  "eslint-plugin-node": "^11.1.0",
97
106
  "eslint-plugin-redos": "^4.5.0",
98
107
  "eslint-plugin-regexp": "^2.7.0",
99
108
  "extract-zip": "^2.0.1",
100
109
  "geo-tz": "^8.1.4",
110
+ "globals": "^16.2.0",
101
111
  "globule": "^1.3.4",
102
112
  "mocha": "^10.8.2",
103
- "npm-check-updates": "^17.1.16",
113
+ "npm-check-updates": "^18.0.1",
104
114
  "npm-run-all": "^4.1.5",
105
115
  "prettier": "^3.5.3",
106
116
  "prettier-plugin-organize-imports": "^4.1.0",
107
117
  "progress": "^2.0.3",
118
+ "release-it": "^19.0.2",
108
119
  "rimraf": "^5.0.9",
109
120
  "serve": "^14.2.4",
110
121
  "source-map-support": "^0.5.21",
111
122
  "tmp": "^0.2.3",
112
- "typedoc": "^0.28.1",
113
- "typescript": "^5.8.2",
123
+ "ts-node": "^10.9.2",
124
+ "typedoc": "^0.28.5",
125
+ "typescript": "^5.8.3",
126
+ "typescript-eslint": "^8.32.1",
114
127
  "xpath": "^0.0.34"
115
128
  },
116
129
  "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>",
117
130
  "dependencies": {
118
131
  "@photostructure/tz-lookup": "^11.2.0",
119
- "@types/luxon": "^3.6.0",
120
- "batch-cluster": "^13.0.0",
132
+ "@types/luxon": "^3.6.2",
133
+ "batch-cluster": "^14.0.0",
121
134
  "he": "^1.2.0",
122
135
  "luxon": "^3.6.1"
123
136
  },
124
137
  "optionalDependencies": {
125
- "exiftool-vendored.exe": "13.26.0",
126
- "exiftool-vendored.pl": "13.26.0"
138
+ "exiftool-vendored.exe": "13.30.0",
139
+ "exiftool-vendored.pl": "13.30.0"
127
140
  }
128
141
  }
@@ -1,7 +0,0 @@
1
- import { ExifToolTags } from "./Tags";
2
- export declare const ExifToolTagNames: (keyof ExifToolTags)[];
3
- /**
4
- * Is the given tag name intrinsic to the content of a given file? In other
5
- * words, is it not an artifact of a metadata field?
6
- */
7
- export declare function isExifToolTag(name: string): name is keyof ExifToolTags;
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExifToolTagNames = void 0;
4
- exports.isExifToolTag = isExifToolTag;
5
- const Object_1 = require("./Object");
6
- exports.ExifToolTagNames = (0, Object_1.keysOf)({
7
- ExifToolVersion: true,
8
- SourceFile: true,
9
- Error: true,
10
- Warning: true,
11
- });
12
- /**
13
- * Is the given tag name intrinsic to the content of a given file? In other
14
- * words, is it not an artifact of a metadata field?
15
- */
16
- function isExifToolTag(name) {
17
- return exports.ExifToolTagNames.includes(name);
18
- }
19
- //# sourceMappingURL=ExifToolTags.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ExifToolTags.js","sourceRoot":"","sources":["../src/ExifToolTags.ts"],"names":[],"mappings":";;;AAcA,sCAEC;AAhBD,qCAAkC;AAGrB,QAAA,gBAAgB,GAAG,IAAA,eAAM,EAAe;IACnD,eAAe,EAAE,IAAI;IACrB,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,IAAI;CACd,CAAC,CAAC;AAEH;;;GAGG;AACH,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,wBAAgB,CAAC,QAAQ,CAAC,IAA0B,CAAC,CAAC;AAC/D,CAAC"}
@@ -1,7 +0,0 @@
1
- import { FileTags } from "./Tags";
2
- /**
3
- * Is the given tag name intrinsic to the content of a given file?
4
- *
5
- * In other words, is it not an artifact of a metadata field?
6
- */
7
- export declare function isFileTag(name: string): name is keyof FileTags;
package/dist/FileTags.js DELETED
@@ -1,41 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isFileTag = isFileTag;
4
- const Object_1 = require("./Object");
5
- const FileTagNames = (0, Object_1.keysOf)({
6
- BMPVersion: true,
7
- BitsPerSample: true,
8
- ColorComponents: true,
9
- CurrentIPTCDigest: true,
10
- Directory: true,
11
- EncodingProcess: true,
12
- ExifByteOrder: true,
13
- FileAccessDate: true,
14
- FileCreateDate: true,
15
- FileInodeChangeDate: true,
16
- FileModifyDate: true,
17
- FileName: true,
18
- FilePermissions: true,
19
- FileSize: true,
20
- FileType: true,
21
- FileTypeExtension: true,
22
- ImageDataMD5: true,
23
- ImageHeight: true,
24
- ImageWidth: true,
25
- MIMEType: true,
26
- NumColors: true,
27
- NumImportantColors: true,
28
- PixelsPerMeterX: true,
29
- PixelsPerMeterY: true,
30
- Planes: true,
31
- YCbCrSubSampling: true,
32
- });
33
- /**
34
- * Is the given tag name intrinsic to the content of a given file?
35
- *
36
- * In other words, is it not an artifact of a metadata field?
37
- */
38
- function isFileTag(name) {
39
- return FileTagNames.includes(name);
40
- }
41
- //# sourceMappingURL=FileTags.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FileTags.js","sourceRoot":"","sources":["../src/FileTags.ts"],"names":[],"mappings":";;AAqCA,8BAEC;AAvCD,qCAAkC;AAGlC,MAAM,YAAY,GAAG,IAAA,eAAM,EAAW;IACpC,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,IAAI;IACrB,iBAAiB,EAAE,IAAI;IACvB,SAAS,EAAE,IAAI;IACf,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,IAAI;IACnB,cAAc,EAAE,IAAI;IACpB,cAAc,EAAE,IAAI;IACpB,mBAAmB,EAAE,IAAI;IACzB,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,IAAI;IACrB,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;IACd,iBAAiB,EAAE,IAAI;IACvB,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,IAAI;IACf,kBAAkB,EAAE,IAAI;IACxB,eAAe,EAAE,IAAI;IACrB,eAAe,EAAE,IAAI;IACrB,MAAM,EAAE,IAAI;IACZ,gBAAgB,EAAE,IAAI;CACvB,CAAC,CAAC;AAEH;;;;GAIG;AACH,SAAgB,SAAS,CAAC,IAAY;IACpC,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAsB,CAAC,CAAC;AACvD,CAAC"}