exiftool-vendored 31.2.0 → 32.0.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.
@@ -33,22 +33,39 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ReadRawTask = void 0;
36
+ exports.ReadRawTask = exports.DefaultReadRawTaskOptions = exports.ReadRawTaskOptionFields = void 0;
37
37
  const batch_cluster_1 = require("batch-cluster");
38
38
  const _path = __importStar(require("node:path"));
39
+ const DefaultExifToolOptions_1 = require("./DefaultExifToolOptions");
39
40
  const ErrorsAndWarnings_1 = require("./ErrorsAndWarnings");
40
41
  const ExifToolTask_1 = require("./ExifToolTask");
41
42
  const FilenameCharsetArgs_1 = require("./FilenameCharsetArgs");
43
+ const Pick_1 = require("./Pick");
44
+ exports.ReadRawTaskOptionFields = [
45
+ "readArgs",
46
+ "ignoreMinorErrors",
47
+ "useMWG",
48
+ ];
49
+ exports.DefaultReadRawTaskOptions = {
50
+ ...(0, Pick_1.pick)(DefaultExifToolOptions_1.DefaultExifToolOptions, ...exports.ReadRawTaskOptionFields),
51
+ };
42
52
  class ReadRawTask extends ExifToolTask_1.ExifToolTask {
43
53
  sourceFile;
44
54
  args;
45
- static for(filename, exiftoolArgs = [], options) {
46
- const args = [...FilenameCharsetArgs_1.Utf8FilenameCharsetArgs, ...exiftoolArgs];
55
+ static for(filename, options) {
56
+ const args = [
57
+ ...FilenameCharsetArgs_1.Utf8FilenameCharsetArgs,
58
+ ...(options?.readArgs ?? []),
59
+ ];
60
+ const opts = { ...exports.DefaultReadRawTaskOptions, ...options };
47
61
  if (!args.includes("-json"))
48
62
  args.push("-json");
63
+ if (opts.useMWG) {
64
+ args.push("-use", "MWG");
65
+ }
49
66
  const sourceFile = _path.resolve(filename);
50
67
  args.push(sourceFile);
51
- return new ReadRawTask(sourceFile, args, options);
68
+ return new ReadRawTask(sourceFile, args, opts);
52
69
  }
53
70
  constructor(sourceFile, args, options) {
54
71
  super(args, options);
@@ -1 +1 @@
1
- {"version":3,"file":"ReadRawTask.js","sourceRoot":"","sources":["../src/ReadRawTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAuC;AACvC,iDAAmC;AACnC,2DAAwD;AACxD,iDAAmE;AACnE,+DAAgE;AAGhE,MAAa,WAAY,SAAQ,2BAAqB;IAczC;IACS;IAdpB,MAAM,CAAC,GAAG,CACR,QAAgB,EAChB,eAAyB,EAAE,EAC3B,OAA6B;QAE7B,MAAM,IAAI,GAAa,CAAC,GAAG,6CAAuB,EAAE,GAAG,YAAY,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,OAAO,IAAI,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,YACW,UAAkB,EACT,IAAc,EAChC,OAA6B;QAE7B,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAJZ,eAAU,GAAV,UAAU,CAAQ;QACT,SAAI,GAAJ,IAAI,CAAU;IAIlC,CAAC;IAEQ,QAAQ;QACf,OAAO,aAAa,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IAC/C,CAAC;IAES,KAAK,CAAC,IAAY,EAAE,GAAW;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,qCAAiB,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,SAAS,EAAE,CAAC;YACnB,IAAA,sBAAM,GAAE,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,GAAG,IAAI,SAAS,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AArCD,kCAqCC"}
1
+ {"version":3,"file":"ReadRawTask.js","sourceRoot":"","sources":["../src/ReadRawTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAuC;AACvC,iDAAmC;AACnC,qEAAkE;AAClE,2DAAwD;AAExD,iDAA8C;AAC9C,+DAAgE;AAChE,iCAA8B;AAGjB,QAAA,uBAAuB,GAAG;IACrC,UAAU;IACV,mBAAmB;IACnB,QAAQ;CACoC,CAAC;AAElC,QAAA,yBAAyB,GAAG;IACvC,GAAG,IAAA,WAAI,EAAC,+CAAsB,EAAE,GAAG,+BAAuB,CAAC;CAChB,CAAC;AAI9C,MAAa,WAAY,SAAQ,2BAAqB;IAkBzC;IACS;IAlBpB,MAAM,CAAC,GAAG,CAAC,QAAgB,EAAE,OAA4B;QACvD,MAAM,IAAI,GAAa;YACrB,GAAG,6CAAuB;YAC1B,GAAG,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;SAC7B,CAAC;QACF,MAAM,IAAI,GAAG,EAAE,GAAG,iCAAyB,EAAE,GAAG,OAAO,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,OAAO,IAAI,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,YACW,UAAkB,EACT,IAAc,EAChC,OAAqC;QAErC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAJZ,eAAU,GAAV,UAAU,CAAQ;QACT,SAAI,GAAJ,IAAI,CAAU;IAIlC,CAAC;IAEQ,QAAQ;QACf,OAAO,aAAa,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IAC/C,CAAC;IAES,KAAK,CAAC,IAAY,EAAE,GAAW;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,qCAAiB,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,SAAS,EAAE,CAAC;YACnB,IAAA,sBAAM,GAAE,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,GAAG,IAAI,SAAS,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAzCD,kCAyCC"}
@@ -0,0 +1,82 @@
1
+ import * as bc from "batch-cluster";
2
+ /**
3
+ * A function that unsubscribes from a Setting change listener.
4
+ * @see Setting.onChange
5
+ */
6
+ export type UnsubscribeFunction = () => void;
7
+ /**
8
+ * A setting value that can be observed for changes.
9
+ *
10
+ * Each Setting instance manages its own value and listeners, providing
11
+ * a clean, composable alternative to global event buses or proxies.
12
+ */
13
+ export declare class Setting<T> {
14
+ #private;
15
+ readonly defaultValue: T;
16
+ constructor(defaultValue: T);
17
+ /** Get the current value */
18
+ get value(): T;
19
+ /** Set a new value, notifying listeners if changed */
20
+ set value(newValue: T);
21
+ /**
22
+ * Subscribe to value changes.
23
+ *
24
+ * @returns Unsubscribe function
25
+ */
26
+ onChange(listener: (oldValue: T, newValue: T) => void): UnsubscribeFunction;
27
+ /** Reset to default value */
28
+ reset(): void;
29
+ /** Allow implicit coercion in conditionals */
30
+ valueOf(): T;
31
+ toString(): string;
32
+ }
33
+ /**
34
+ * Library-wide configuration settings for exiftool-vendored
35
+ *
36
+ * @see ExifToolOptions for per-instance settings.
37
+ */
38
+ export declare const Settings: {
39
+ /**
40
+ * Allow parsing of archaic timezone offsets that are no longer in use.
41
+ *
42
+ * These include historical offsets like:
43
+ * - "-10:30" (Hawaii 1896-1947)
44
+ * - "-04:30" (Venezuela 1912-1965, 2007-2016)
45
+ * - "+04:51" (Bombay until 1955)
46
+ * - and others from
47
+ * https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
48
+ *
49
+ * **Warning**: Enabling this may lead to incorrect timezone parsing for
50
+ * modern files, as these offsets are not currently used anywhere. Only enable
51
+ * this if you are specifically working with historical photographs or scanned
52
+ * archival material.
53
+ *
54
+ * @default false
55
+ */
56
+ allowArchaicTimezoneOffsets: Setting<boolean>;
57
+ /**
58
+ * Allow parsing of the UTC-12:00 timezone offset ("Baker Island Time") as a
59
+ * valid timezone.
60
+ *
61
+ * This timezone is not used for any populated land, and is disabled by
62
+ * default to prevent incorrect timezone parsing from files with mangled
63
+ * metadata.
64
+ *
65
+ * @default false
66
+ */
67
+ allowBakerIslandTime: Setting<boolean>;
68
+ /**
69
+ * Logger instance used throughout exiftool-vendored.
70
+ *
71
+ * By default, this is set to ConsoleLogger if NODE_DEBUG=exiftool-vendored is
72
+ * set, otherwise NoLogger.
73
+ *
74
+ * This can be changed at runtime to redirect logging output. When changed,
75
+ * the batch-cluster global logger is also updated for consistency.
76
+ *
77
+ * @default ConsoleLogger or NoLogger based on NODE_DEBUG
78
+ */
79
+ logger: Setting<() => bc.Logger>;
80
+ /** Reset all settings to their default values */
81
+ reset(): void;
82
+ };
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Settings = exports.Setting = void 0;
37
+ const bc = __importStar(require("batch-cluster"));
38
+ const node_util_1 = require("node:util");
39
+ /**
40
+ * A setting value that can be observed for changes.
41
+ *
42
+ * Each Setting instance manages its own value and listeners, providing
43
+ * a clean, composable alternative to global event buses or proxies.
44
+ */
45
+ class Setting {
46
+ defaultValue;
47
+ #value;
48
+ #listeners = new Set();
49
+ constructor(defaultValue) {
50
+ this.defaultValue = defaultValue;
51
+ this.#value = this.defaultValue;
52
+ }
53
+ /** Get the current value */
54
+ get value() {
55
+ return this.#value;
56
+ }
57
+ /** Set a new value, notifying listeners if changed */
58
+ set value(newValue) {
59
+ if (this.#value !== newValue) {
60
+ const old = this.#value;
61
+ this.#value = newValue;
62
+ for (const ea of this.#listeners) {
63
+ ea(old, newValue);
64
+ }
65
+ }
66
+ }
67
+ /**
68
+ * Subscribe to value changes.
69
+ *
70
+ * @returns Unsubscribe function
71
+ */
72
+ onChange(listener) {
73
+ this.#listeners.add(listener);
74
+ return () => this.#listeners.delete(listener);
75
+ }
76
+ /** Reset to default value */
77
+ reset() {
78
+ this.value = this.defaultValue;
79
+ }
80
+ /** Allow implicit coercion in conditionals */
81
+ valueOf() {
82
+ return this.#value;
83
+ }
84
+ toString() {
85
+ return String(this.#value);
86
+ }
87
+ }
88
+ exports.Setting = Setting;
89
+ const _debuglog = (0, node_util_1.debuglog)("exiftool-vendored");
90
+ function noop() { }
91
+ const ConsoleLogger = {
92
+ trace: noop,
93
+ debug: _debuglog,
94
+ info: _debuglog,
95
+ warn: console.warn,
96
+ error: console.error,
97
+ };
98
+ const defaultLogger = () => (_debuglog.enabled ? ConsoleLogger : bc.NoLogger);
99
+ /**
100
+ * Library-wide configuration settings for exiftool-vendored
101
+ *
102
+ * @see ExifToolOptions for per-instance settings.
103
+ */
104
+ exports.Settings = {
105
+ /**
106
+ * Allow parsing of archaic timezone offsets that are no longer in use.
107
+ *
108
+ * These include historical offsets like:
109
+ * - "-10:30" (Hawaii 1896-1947)
110
+ * - "-04:30" (Venezuela 1912-1965, 2007-2016)
111
+ * - "+04:51" (Bombay until 1955)
112
+ * - and others from
113
+ * https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
114
+ *
115
+ * **Warning**: Enabling this may lead to incorrect timezone parsing for
116
+ * modern files, as these offsets are not currently used anywhere. Only enable
117
+ * this if you are specifically working with historical photographs or scanned
118
+ * archival material.
119
+ *
120
+ * @default false
121
+ */
122
+ allowArchaicTimezoneOffsets: new Setting(false),
123
+ /**
124
+ * Allow parsing of the UTC-12:00 timezone offset ("Baker Island Time") as a
125
+ * valid timezone.
126
+ *
127
+ * This timezone is not used for any populated land, and is disabled by
128
+ * default to prevent incorrect timezone parsing from files with mangled
129
+ * metadata.
130
+ *
131
+ * @default false
132
+ */
133
+ allowBakerIslandTime: new Setting(false),
134
+ /**
135
+ * Logger instance used throughout exiftool-vendored.
136
+ *
137
+ * By default, this is set to ConsoleLogger if NODE_DEBUG=exiftool-vendored is
138
+ * set, otherwise NoLogger.
139
+ *
140
+ * This can be changed at runtime to redirect logging output. When changed,
141
+ * the batch-cluster global logger is also updated for consistency.
142
+ *
143
+ * @default ConsoleLogger or NoLogger based on NODE_DEBUG
144
+ */
145
+ logger: new Setting(defaultLogger),
146
+ /** Reset all settings to their default values */
147
+ reset() {
148
+ for (const ea of Object.values(this)) {
149
+ if (ea instanceof Setting)
150
+ ea.reset();
151
+ }
152
+ },
153
+ };
154
+ //# sourceMappingURL=Settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Settings.js","sourceRoot":"","sources":["../src/Settings.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAoC;AACpC,yCAAqC;AAQrC;;;;;GAKG;AACH,MAAa,OAAO;IAIG;IAHrB,MAAM,CAAI;IACD,UAAU,GAAG,IAAI,GAAG,EAAsC,CAAC;IAEpE,YAAqB,YAAe;QAAf,iBAAY,GAAZ,YAAY,CAAG;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;IAClC,CAAC;IAED,4BAA4B;IAC5B,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,sDAAsD;IACtD,IAAI,KAAK,CAAC,QAAW;QACnB,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YACvB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,QAA4C;QACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,6BAA6B;IAC7B,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;IACjC,CAAC;IAED,8CAA8C;IAC9C,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;CACF;AA/CD,0BA+CC;AAED,MAAM,SAAS,GAAG,IAAA,oBAAQ,EAAC,mBAAmB,CAAC,CAAC;AAChD,SAAS,IAAI,KAAI,CAAC;AAElB,MAAM,aAAa,GAAc;IAC/B,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,KAAK,EAAE,OAAO,CAAC,KAAK;CACrB,CAAC;AAEF,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAE9E;;;;GAIG;AACU,QAAA,QAAQ,GAAG;IACtB;;;;;;;;;;;;;;;;OAgBG;IACH,2BAA2B,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC;IAE/C;;;;;;;;;OASG;IACH,oBAAoB,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC;IAExC;;;;;;;;;;OAUG;IACH,MAAM,EAAE,IAAI,OAAO,CAAkB,aAAa,CAAC;IAEnD,iDAAiD;IACjD,KAAK;QACH,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,EAAE,YAAY,OAAO;gBAAE,EAAE,CAAC,KAAK,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;CACF,CAAC"}