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
@@ -29,11 +29,27 @@ export type AdditionalWriteTags = {
29
29
  */
30
30
  export type MutableTags = Omit<Tags, keyof (ExifToolTags & FileTags & ErrorsAndWarnings)>;
31
31
  export type ExpandedDateTags = {
32
- [K in keyof MutableTags]: (MutableTags[K] extends ExifDateTime ? ExifDate | ExifDateTime : MutableTags[K]) | string;
32
+ [K in keyof MutableTags]: (MutableTags[K] extends ExifDateTime | string ? ExifDate | ExifDateTime | number : MutableTags[K]) | string | number;
33
33
  };
34
34
  export type WritableGPSRefs = {
35
35
  GPSAltitudeRef?: string | number | null;
36
36
  GPSLatitudeRef?: string | number | null;
37
37
  GPSLongitudeRef?: string | number | null;
38
38
  };
39
- export type WriteTags = Omit<DefinedOrNullValued<ShortcutTags & AdditionalWriteTags & ExpandedDateTags & StructAppendTags>, keyof WritableGPSRefs> & WritableGPSRefs;
39
+ type XMPPartialDateTags = {
40
+ "XMP:CreateDate"?: ExifDate | ExifDateTime | string | number;
41
+ "XMP:MetadataDate"?: ExifDate | ExifDateTime | string | number;
42
+ "XMP:ModifyDate"?: ExifDate | ExifDateTime | string | number;
43
+ "XMP:DateCreated"?: ExifDate | ExifDateTime | string | number;
44
+ "XMP:DateTimeOriginal"?: ExifDate | ExifDateTime | string | number;
45
+ "XMP:DateTimeDigitized"?: ExifDate | ExifDateTime | string | number;
46
+ };
47
+ type EXIFStrictDateTags = {
48
+ "EXIF:CreateDate"?: ExifDateTime | string;
49
+ "EXIF:DateTimeOriginal"?: ExifDateTime | string;
50
+ "EXIF:ModifyDate"?: ExifDateTime | string;
51
+ "EXIF:DateTimeDigitized"?: ExifDateTime | string;
52
+ };
53
+ type GroupPrefixedTags = XMPPartialDateTags & EXIFStrictDateTags;
54
+ export type WriteTags = Omit<DefinedOrNullValued<ShortcutTags & AdditionalWriteTags & ExpandedDateTags & StructAppendTags>, keyof WritableGPSRefs> & WritableGPSRefs & GroupPrefixedTags;
55
+ export {};
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": "30.0.0",
3
+ "version": "30.2.0",
4
4
  "description": "Efficient, cross-platform access to ExifTool",
5
5
  "main": "./dist/ExifTool.js",
6
6
  "types": "./dist/ExifTool.d.ts",
@@ -25,11 +25,9 @@
25
25
  "fmt": "prettier --write src/*.ts src/**/*.ts **/*.yml **/*.json **/*.md",
26
26
  "pretest": "npm run compile",
27
27
  "test": "mocha 'dist/*.spec.js'",
28
- "docs:1": "typedoc --options .typedoc.js",
29
- "docs:3": "cp .serve.json docs/serve.json",
30
- "docs:4": "touch docs/.nojekyll",
31
- "docs:5": "serve docs",
32
- "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",
33
31
  "release": "release-it"
34
32
  },
35
33
  "repository": {
@@ -91,8 +89,9 @@
91
89
  "@types/globule": "^1.1.9",
92
90
  "@types/he": "^1.2.3",
93
91
  "@types/mocha": "^10.0.10",
94
- "@types/node": "^22.15.18",
92
+ "@types/node": "^22.15.21",
95
93
  "@types/progress": "^2.0.7",
94
+ "@types/source-map-support": "^0.5.10",
96
95
  "@types/tmp": "^0.2.6",
97
96
  "@types/xmldom": "^0.1.34",
98
97
  "@typescript-eslint/eslint-plugin": "^8.32.1",
@@ -108,6 +107,7 @@
108
107
  "eslint-plugin-regexp": "^2.7.0",
109
108
  "extract-zip": "^2.0.1",
110
109
  "geo-tz": "^8.1.4",
110
+ "globals": "^16.2.0",
111
111
  "globule": "^1.3.4",
112
112
  "mocha": "^10.8.2",
113
113
  "npm-check-updates": "^18.0.1",
@@ -121,20 +121,21 @@
121
121
  "source-map-support": "^0.5.21",
122
122
  "tmp": "^0.2.3",
123
123
  "ts-node": "^10.9.2",
124
- "typedoc": "^0.28.4",
124
+ "typedoc": "^0.28.5",
125
125
  "typescript": "^5.8.3",
126
+ "typescript-eslint": "^8.32.1",
126
127
  "xpath": "^0.0.34"
127
128
  },
128
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>",
129
130
  "dependencies": {
130
131
  "@photostructure/tz-lookup": "^11.2.0",
131
132
  "@types/luxon": "^3.6.2",
132
- "batch-cluster": "^13.0.0",
133
+ "batch-cluster": "^14.0.0",
133
134
  "he": "^1.2.0",
134
135
  "luxon": "^3.6.1"
135
136
  },
136
137
  "optionalDependencies": {
137
- "exiftool-vendored.exe": "13.29.0",
138
- "exiftool-vendored.pl": "13.29.0"
138
+ "exiftool-vendored.exe": "13.30.0",
139
+ "exiftool-vendored.pl": "13.30.0"
139
140
  }
140
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"}