exiftool-vendored
Advanced tools
Comparing version 27.0.0 to 28.0.0
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.sortBy = exports.shallowArrayEql = exports.uniq = exports.filterInPlace = exports.compact = exports.toA = exports.ifArr = exports.isIterable = void 0; | ||
exports.isIterable = isIterable; | ||
exports.ifArr = ifArr; | ||
exports.toA = toA; | ||
exports.compact = compact; | ||
exports.filterInPlace = filterInPlace; | ||
exports.uniq = uniq; | ||
exports.shallowArrayEql = shallowArrayEql; | ||
exports.sortBy = sortBy; | ||
const String_1 = require("./String"); | ||
@@ -10,7 +17,5 @@ function isIterable(obj) { | ||
} | ||
exports.isIterable = isIterable; | ||
function ifArr(arr) { | ||
return Array.isArray(arr) ? arr : undefined; | ||
} | ||
exports.ifArr = ifArr; | ||
function toA(arr) { | ||
@@ -27,7 +32,5 @@ return Array.isArray(arr) // < strings are not arrays | ||
} | ||
exports.toA = toA; | ||
function compact(array) { | ||
return array.filter((elem) => elem != null); | ||
} | ||
exports.compact = compact; | ||
/** | ||
@@ -49,3 +52,2 @@ * Remove all elements from the given array that return false from the given | ||
} | ||
exports.filterInPlace = filterInPlace; | ||
function uniq(arr) { | ||
@@ -58,3 +60,2 @@ return arr.reduce((acc, ea) => { | ||
} | ||
exports.uniq = uniq; | ||
// terrible implementation only for internal use | ||
@@ -67,3 +68,2 @@ function shallowArrayEql(a, b) { | ||
} | ||
exports.shallowArrayEql = shallowArrayEql; | ||
/** | ||
@@ -87,3 +87,2 @@ * Returns a copy of arr, stable sorted by the given constraint. Note that false | ||
} | ||
exports.sortBy = sortBy; | ||
function cmp(a, b) { | ||
@@ -90,0 +89,0 @@ // undefined == undefined: |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.retryOnReject = void 0; | ||
exports.retryOnReject = retryOnReject; | ||
function retryOnReject(f, maxRetries) { | ||
@@ -22,3 +22,2 @@ let retries = 0; | ||
} | ||
exports.retryOnReject = retryOnReject; | ||
//# sourceMappingURL=AsyncRetry.js.map |
@@ -7,4 +7,6 @@ "use strict"; | ||
const BinaryFieldRE = | ||
// /^\(?Binary data (\d+).*use -b option to extract\)?$/i | ||
/Binary(?: data)? (\d+) bytes/i; | ||
// 1000000000 bytes is 1 GB. The largest binary field I've seen is ~5 MB (7 | ||
// chars): 10 chars is absurdly large, and is just to avoid the | ||
// `js/polynomial-redos` eslint rule. | ||
/Binary(?: data)? (\d{1,10}) bytes/i; | ||
class BinaryField { | ||
@@ -11,0 +13,0 @@ constructor(bytes, rawValue) { |
@@ -1,2 +0,1 @@ | ||
/// <reference types="node" /> | ||
import { ExifToolTask, ExifToolTaskOptions } from "./ExifToolTask"; | ||
@@ -3,0 +2,0 @@ /** |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.hms = exports.toExifString = exports.dateTimeToExif = exports.isDateOrTime = exports.DayMs = exports.HourMs = exports.MinuteMs = exports.SecondMs = exports.validDateTime = void 0; | ||
exports.DayMs = exports.HourMs = exports.MinuteMs = exports.SecondMs = void 0; | ||
exports.validDateTime = validDateTime; | ||
exports.isDateOrTime = isDateOrTime; | ||
exports.dateTimeToExif = dateTimeToExif; | ||
exports.toExifString = toExifString; | ||
exports.hms = hms; | ||
const luxon_1 = require("luxon"); | ||
@@ -11,3 +16,2 @@ const ExifDate_1 = require("./ExifDate"); | ||
} | ||
exports.validDateTime = validDateTime; | ||
exports.SecondMs = 1000; | ||
@@ -23,3 +27,2 @@ exports.MinuteMs = 60 * exports.SecondMs; | ||
} | ||
exports.isDateOrTime = isDateOrTime; | ||
function dateTimeToExif(d, opts) { | ||
@@ -30,3 +33,2 @@ return d.toFormat("y:MM:dd HH:mm:ss" + | ||
} | ||
exports.dateTimeToExif = dateTimeToExif; | ||
function toExifString(d) { | ||
@@ -41,7 +43,5 @@ var _a; | ||
} | ||
exports.toExifString = toExifString; | ||
function hms(d, opts) { | ||
return d.toFormat("HH:mm:ss" + ((opts === null || opts === void 0 ? void 0 : opts.includeMilliseconds) === true ? ".SSS" : "")); | ||
} | ||
exports.hms = hms; | ||
//# sourceMappingURL=DateTime.js.map |
@@ -89,2 +89,15 @@ "use strict"; | ||
"Orientation", | ||
// NOT Rotation! Rotation can be encoded as degrees rotated clockwise, or a | ||
// EXIF-Orientation string (!!). If we ask ExifTool for numeric rotations of HEICs, | ||
// we get "3" (when it means "Rotate 90 CW"): | ||
// $ exiftool -j -Rotation -Orientation IMG_6947.HEIC | ||
// [{ | ||
// "Rotation": "Rotate 90 CW", | ||
// "Orientation": "Rotate 90 CW" | ||
// }] | ||
// $ exiftool -j -Rotation# -Orientation# IMG_6947.HEIC | ||
// [{ | ||
// "Rotation": 3, // < WTH is this? 3 means 180º (!?) | ||
// "Orientation": 6 // < expected | ||
// }] | ||
], | ||
@@ -91,0 +104,0 @@ useMWG: false, |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.errorsAndWarnings = void 0; | ||
exports.errorsAndWarnings = errorsAndWarnings; | ||
const Array_1 = require("./Array"); | ||
@@ -12,3 +12,2 @@ const String_1 = require("./String"); | ||
} | ||
exports.errorsAndWarnings = errorsAndWarnings; | ||
//# sourceMappingURL=ErrorsAndWarnings.js.map |
@@ -1,3 +0,3 @@ | ||
/// <reference types="node" /> | ||
import * as bc from "batch-cluster"; | ||
import { ContainerDirectoryItem } from "./ContainerDirectoryItem"; | ||
import { Defined, DefinedOrNullValued } from "./Defined"; | ||
@@ -19,3 +19,3 @@ import { ErrorsAndWarnings } from "./ErrorsAndWarnings"; | ||
import { Struct } from "./Struct"; | ||
import { APP12Tags, APP14Tags, APP1Tags, APP4Tags, APP5Tags, APP6Tags, CompositeTags, EXIFTags, ExifToolTags, FileTags, FlashPixTags, GeolocationTags, IPTCTags, JFIFTags, MPFTags, MakerNotesTags, MetaTags, PanasonicRawTags, PhotoshopTags, PrintIMTags, QuickTimeTags, RAFTags, RIFFTags, Tags, XMPTags } from "./Tags"; | ||
import { APPTags, CompositeTags, EXIFTags, ExifToolTags, FileTags, FlashPixTags, GeolocationTags, IPTCTags, JFIFTags, MPFTags, MakerNotesTags, MetaTags, PanasonicRawTags, PhotoshopTags, PrintIMTags, QuickTimeTags, RAFTags, RIFFTags, Tags, XMPTags } from "./Tags"; | ||
import { Version } from "./Version"; | ||
@@ -39,3 +39,3 @@ import { AdditionalWriteTags, ExpandedDateTags, MutableTags, StructAppendTags, WriteTags } from "./WriteTags"; | ||
export { DefaultWriteTaskOptions } from "./WriteTask"; | ||
export type { APP12Tags, APP14Tags, APP1Tags, APP4Tags, APP5Tags, APP6Tags, AdditionalWriteTags, IPTCApplicationRecordTags as ApplicationRecordTags, CollectionInfo, CompositeTags, Defined, DefinedOrNullValued, EXIFTags, ErrorsAndWarnings, ExifToolOptions, ExifToolTags, ExifToolTaskOptions, ExifToolVendoredTags, ExpandedDateTags, FileTags, FlashPixTags, GeolocationTags, ICCProfileTags, IPTCApplicationRecordTags, IPTCTags, JFIFTags, Json, KeywordInfoStruct, KeywordStruct, Literal, MPFTags, MWGCollectionsTags, MWGKeywordTags, MakerNotesTags, Maybe, MetaTags, MutableTags, Omit, PanasonicRawTags, PhotoshopTags, PrintIMTags, QuickTimeTags, RAFTags, RIFFTags, RawTags, ReadTaskOptions, ResourceEvent, ShortcutTags, Struct, StructAppendTags, Tags, Version, WriteTags, WriteTaskOptions, WriteTaskResult, XMPTags, }; | ||
export type { APPTags, AdditionalWriteTags, IPTCApplicationRecordTags as ApplicationRecordTags, CollectionInfo, CompositeTags, ContainerDirectoryItem, Defined, DefinedOrNullValued, EXIFTags, ErrorsAndWarnings, ExifToolOptions, ExifToolTags, ExifToolTaskOptions, ExifToolVendoredTags, ExpandedDateTags, FileTags, FlashPixTags, GeolocationTags, ICCProfileTags, IPTCApplicationRecordTags, IPTCTags, JFIFTags, Json, KeywordInfoStruct, KeywordStruct, Literal, MPFTags, MWGCollectionsTags, MWGKeywordTags, MakerNotesTags, Maybe, MetaTags, MutableTags, Omit, PanasonicRawTags, PhotoshopTags, PrintIMTags, QuickTimeTags, RAFTags, RIFFTags, RawTags, ReadTaskOptions, ResourceEvent, ShortcutTags, Struct, StructAppendTags, Tags, Version, WriteTags, WriteTaskOptions, WriteTaskResult, XMPTags, }; | ||
/** | ||
@@ -42,0 +42,0 @@ * Manages delegating calls to a cluster of ExifTool child processes. |
@@ -1,2 +0,1 @@ | ||
/// <reference types="node" /> | ||
import * as bc from "batch-cluster"; | ||
@@ -253,2 +252,2 @@ import { geoTz } from "./GeoTz"; | ||
} | ||
export declare function handleDeprecatedOptions<T extends Pick<ExifToolOptions, "includeImageDataMD5" | "imageHashType">>(options: T): T; | ||
export declare function handleDeprecatedOptions<T extends Partial<Pick<ExifToolOptions, "includeImageDataMD5" | "imageHashType">>>(options: T): T; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.handleDeprecatedOptions = void 0; | ||
exports.handleDeprecatedOptions = handleDeprecatedOptions; | ||
function handleDeprecatedOptions(options) { | ||
@@ -10,3 +10,2 @@ if (options.imageHashType == null && options.includeImageDataMD5 != null) { | ||
} | ||
exports.handleDeprecatedOptions = handleDeprecatedOptions; | ||
//# sourceMappingURL=ExifToolOptions.js.map |
@@ -26,3 +26,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.exiftoolPath = void 0; | ||
exports.exiftoolPath = exiftoolPath; | ||
const _fs = __importStar(require("node:fs")); | ||
@@ -103,3 +103,2 @@ const _path = __importStar(require("node:path")); | ||
} | ||
exports.exiftoolPath = exiftoolPath; | ||
//# sourceMappingURL=ExiftoolPath.js.map |
"use strict"; | ||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isExifToolTag = exports.ExifToolTagNames = void 0; | ||
exports.ExifToolTagNames = void 0; | ||
exports.isExifToolTag = isExifToolTag; | ||
const Object_1 = require("./Object"); | ||
@@ -19,3 +20,2 @@ exports.ExifToolTagNames = (0, Object_1.keysOf)({ | ||
} | ||
exports.isExifToolTag = isExifToolTag; | ||
//# sourceMappingURL=ExifToolTags.js.map |
@@ -1,2 +0,1 @@ | ||
/// <reference types="node" /> | ||
import * as bc from "batch-cluster"; | ||
@@ -3,0 +2,0 @@ import { ExifToolOptions } from "./ExifToolOptions"; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isExifToolVendoredTag = exports.ExifToolVendoredTagNames = void 0; | ||
exports.ExifToolVendoredTagNames = void 0; | ||
exports.isExifToolVendoredTag = isExifToolVendoredTag; | ||
const Object_1 = require("./Object"); | ||
@@ -18,3 +19,2 @@ exports.ExifToolVendoredTagNames = (0, Object_1.keysOf)({ | ||
} | ||
exports.isExifToolVendoredTag = isExifToolVendoredTag; | ||
//# sourceMappingURL=ExifToolVendoredTags.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isFileEmpty = void 0; | ||
exports.isFileEmpty = isFileEmpty; | ||
const node_fs_1 = require("node:fs"); | ||
@@ -29,3 +29,2 @@ const String_1 = require("./String"); | ||
} | ||
exports.isFileEmpty = isFileEmpty; | ||
//# sourceMappingURL=File.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isFileTag = void 0; | ||
exports.isFileTag = isFileTag; | ||
const Object_1 = require("./Object"); | ||
@@ -40,3 +40,2 @@ const FileTagNames = (0, Object_1.keysOf)({ | ||
} | ||
exports.isFileTag = isFileTag; | ||
//# sourceMappingURL=FileTags.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.firstDateTime = void 0; | ||
exports.firstDateTime = firstDateTime; | ||
const CapturedAtTagNames_1 = require("./CapturedAtTagNames"); | ||
@@ -26,3 +26,2 @@ const ExifDateTime_1 = require("./ExifDateTime"); | ||
} | ||
exports.firstDateTime = firstDateTime; | ||
//# sourceMappingURL=FirstDateTime.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isGeolocationTag = exports.GeolocationTagNames = void 0; | ||
exports.GeolocationTagNames = void 0; | ||
exports.isGeolocationTag = isGeolocationTag; | ||
const Object_1 = require("./Object"); | ||
@@ -27,3 +28,2 @@ exports.GeolocationTagNames = (0, Object_1.keysOf)({ | ||
} | ||
exports.isGeolocationTag = isGeolocationTag; | ||
//# sourceMappingURL=GeolocationTags.js.map |
@@ -6,3 +6,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.geoTz = void 0; | ||
exports.geoTz = geoTz; | ||
const tz_lookup_1 = __importDefault(require("@photostructure/tz-lookup")); | ||
@@ -15,3 +15,2 @@ /** | ||
} | ||
exports.geoTz = geoTz; | ||
//# sourceMappingURL=GeoTz.js.map |
export interface ImageDataHashTag { | ||
/** | ||
* This is calculated by ExifTool to be the SHA256 hash of the image data | ||
* (ignoring metadata). This tag is only included if the default | ||
* `ExifToolOptions.imageHashType` value is overridden with a valid string | ||
* value. | ||
* This is calculated by ExifTool to be the MD5, SHA256, or SHA512 hash of | ||
* just the image data, excluding metadata. | ||
* | ||
* This tag is only included if the default `ExifToolOptions.imageHashType` | ||
* value is overridden with a valid string value. | ||
* | ||
* @see ExifToolOptions.imageHashType | ||
@@ -9,0 +10,0 @@ */ |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isWarning = void 0; | ||
exports.isWarning = isWarning; | ||
const String_1 = require("./String"); | ||
@@ -18,3 +18,2 @@ // This is quite lax by design: it's up to the user to check .warnings! | ||
} | ||
exports.isWarning = isWarning; | ||
//# sourceMappingURL=IsWarning.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.parseJSON = void 0; | ||
exports.parseJSON = parseJSON; | ||
const BinaryField_1 = require("./BinaryField"); | ||
@@ -17,3 +17,2 @@ const ExifDate_1 = require("./ExifDate"); | ||
} | ||
exports.parseJSON = parseJSON; | ||
//# sourceMappingURL=JSON.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.lazy = void 0; | ||
exports.lazy = lazy; | ||
function lazy(thunk) { | ||
@@ -24,3 +24,2 @@ let invoked = false; | ||
} | ||
exports.lazy = lazy; | ||
//# sourceMappingURL=Lazy.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.denull = exports.firstDefinedThunk = exports.first = exports.map2 = exports.map = void 0; | ||
exports.map = map; | ||
exports.map2 = map2; | ||
exports.first = first; | ||
exports.firstDefinedThunk = firstDefinedThunk; | ||
exports.denull = denull; | ||
function map(maybeT, f) { | ||
return maybeT == null ? undefined : f(maybeT); | ||
} | ||
exports.map = map; | ||
function map2(a, b, f) { | ||
return a == null || b == null ? undefined : f(a, b); | ||
} | ||
exports.map2 = map2; | ||
function first(iter, f) { | ||
@@ -22,3 +24,2 @@ for (const t of iter) { | ||
} | ||
exports.first = first; | ||
function firstDefinedThunk(iter) { | ||
@@ -32,3 +33,2 @@ for (const f of iter) { | ||
} | ||
exports.firstDefinedThunk = firstDefinedThunk; | ||
/** | ||
@@ -40,3 +40,2 @@ * Convert functions that return `type | null` to `type | undefined` | ||
} | ||
exports.denull = denull; | ||
//# sourceMappingURL=Maybe.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.toInt = exports.toFloat = exports.isNumber = void 0; | ||
exports.isNumber = isNumber; | ||
exports.toFloat = toFloat; | ||
exports.toInt = toInt; | ||
function isNumber(n) { | ||
return typeof n === "number" && isFinite(n); | ||
} | ||
exports.isNumber = isNumber; | ||
function toFloat(n) { | ||
@@ -20,3 +21,2 @@ if (n == null) | ||
} | ||
exports.toFloat = toFloat; | ||
function toInt(n) { | ||
@@ -36,3 +36,2 @@ if (n == null) | ||
} | ||
exports.toInt = toInt; | ||
//# sourceMappingURL=Number.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.keysOf = exports.omit = exports.fromEntries = exports.isFunction = exports.keys = exports.isObject = void 0; | ||
exports.isObject = isObject; | ||
exports.keys = keys; | ||
exports.isFunction = isFunction; | ||
exports.fromEntries = fromEntries; | ||
exports.omit = omit; | ||
exports.keysOf = keysOf; | ||
function isObject(obj) { | ||
return typeof obj === "object" && obj !== null; | ||
} | ||
exports.isObject = isObject; | ||
// eslint-disable-next-line @typescript-eslint/ban-types | ||
@@ -14,7 +18,5 @@ function keys(o) { | ||
} | ||
exports.keys = keys; | ||
function isFunction(obj) { | ||
return typeof obj === "function"; | ||
} | ||
exports.isFunction = isFunction; | ||
function fromEntries(arr, obj) { | ||
@@ -37,3 +39,2 @@ if (arr == null || arr.length === 0) | ||
} | ||
exports.fromEntries = fromEntries; | ||
function omit(t, ...keysToOmit) { | ||
@@ -48,3 +49,2 @@ if (t == null) | ||
} | ||
exports.omit = omit; | ||
/** | ||
@@ -62,3 +62,2 @@ * Provides a type-safe exhaustive array of keys for a given interface. | ||
} | ||
exports.keysOf = keysOf; | ||
//# sourceMappingURL=Object.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.pick = void 0; | ||
exports.pick = pick; | ||
function pick(obj, ...keyNames) { | ||
@@ -15,3 +15,2 @@ if (obj == null) | ||
} | ||
exports.pick = pick; | ||
//# sourceMappingURL=Pick.js.map |
@@ -18,3 +18,3 @@ import { ExifToolTask } from "./ExifToolTask"; | ||
readonly ignoreMinorErrors: boolean; | ||
readonly struct: 0 | 1 | 2 | "undef"; | ||
readonly struct: "undef" | 0 | 1 | 2; | ||
readonly readArgs: string[]; | ||
@@ -34,3 +34,3 @@ }; | ||
*/ | ||
private constructor(); | ||
constructor(sourceFile: string, args: string[], options: Required<ReadTaskOptions>); | ||
static for(filename: string, options: ReadTaskOptions): ReadTask; | ||
@@ -37,0 +37,0 @@ toString(): string; |
@@ -38,3 +38,4 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.ReadTask = exports.DefaultReadTaskOptions = exports.nullish = exports.ReadTaskOptionFields = void 0; | ||
exports.ReadTask = exports.DefaultReadTaskOptions = exports.ReadTaskOptionFields = void 0; | ||
exports.nullish = nullish; | ||
const batch_cluster_1 = require("batch-cluster"); | ||
@@ -90,3 +91,2 @@ const _path = __importStar(require("node:path")); | ||
} | ||
exports.nullish = nullish; | ||
exports.DefaultReadTaskOptions = { | ||
@@ -231,3 +231,3 @@ ...(0, Pick_1.pick)(DefaultExifToolOptions_1.DefaultExifToolOptions, ...exports.ReadTaskOptionFields), | ||
var _a; | ||
return this.degroup ? (_a = k.split(":")[1]) !== null && _a !== void 0 ? _a : k : k; | ||
return this.degroup ? ((_a = k.split(":")[1]) !== null && _a !== void 0 ? _a : k) : k; | ||
}, _ReadTask_parseTags = function _ReadTask_parseTags() { | ||
@@ -234,0 +234,0 @@ if (this.degroup) { |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isResourceEvent = void 0; | ||
exports.isResourceEvent = isResourceEvent; | ||
const fields = [ | ||
@@ -15,3 +15,2 @@ "Action", | ||
} | ||
exports.isResourceEvent = isResourceEvent; | ||
//# sourceMappingURL=ResourceEvent.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isSidecarExt = exports.SidecarExts = void 0; | ||
exports.SidecarExts = void 0; | ||
exports.isSidecarExt = isSidecarExt; | ||
const node_path_1 = require("node:path"); | ||
@@ -10,3 +11,2 @@ exports.SidecarExts = [".exif", ".exv", ".mie", ".xmp"]; | ||
} | ||
exports.isSidecarExt = isSidecarExt; | ||
//# sourceMappingURL=Sidecars.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.splitLines = exports.stripSuffix = exports.stripPrefix = exports.pad3 = exports.pad2 = exports.leftPad = exports.toS = exports.compactBlanks = exports.toNotBlank = exports.notBlank = exports.blank = exports.isString = void 0; | ||
exports.isString = isString; | ||
exports.blank = blank; | ||
exports.notBlank = notBlank; | ||
exports.toNotBlank = toNotBlank; | ||
exports.compactBlanks = compactBlanks; | ||
exports.toS = toS; | ||
exports.leftPad = leftPad; | ||
exports.pad2 = pad2; | ||
exports.pad3 = pad3; | ||
exports.stripPrefix = stripPrefix; | ||
exports.stripSuffix = stripSuffix; | ||
exports.splitLines = splitLines; | ||
const Number_1 = require("./Number"); | ||
@@ -9,3 +20,2 @@ const Times_1 = require("./Times"); | ||
} | ||
exports.isString = isString; | ||
const spaces = (0, Times_1.times)(10, (i) => (0, Times_1.times)(i, () => " ").join("")); | ||
@@ -16,7 +26,5 @@ const zeroes = (0, Times_1.times)(10, (i) => (0, Times_1.times)(i, () => "0").join("")); | ||
} | ||
exports.blank = blank; | ||
function notBlank(s) { | ||
return !blank(s); | ||
} | ||
exports.notBlank = notBlank; | ||
function toNotBlank(s) { | ||
@@ -28,7 +36,5 @@ if (s == null) | ||
} | ||
exports.toNotBlank = toNotBlank; | ||
function compactBlanks(arr) { | ||
return arr.filter(notBlank); | ||
} | ||
exports.compactBlanks = compactBlanks; | ||
function padding(padChar, count) { | ||
@@ -44,3 +50,2 @@ if (count <= 0) | ||
} | ||
exports.toS = toS; | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
@@ -59,11 +64,8 @@ function leftPad(i, minLen, padChar) { | ||
} | ||
exports.leftPad = leftPad; | ||
function pad2(...numbers) { | ||
return numbers.map((i) => leftPad(i, 2, "0")); | ||
} | ||
exports.pad2 = pad2; | ||
function pad3(...numbers) { | ||
return numbers.map((i) => leftPad(i, 3, "0")); | ||
} | ||
exports.pad3 = pad3; | ||
/** | ||
@@ -77,3 +79,2 @@ * NOT FOR GENERAL USE, as this is latin-case-insensitive | ||
} | ||
exports.stripPrefix = stripPrefix; | ||
function stripSuffix(s, suffix) { | ||
@@ -83,3 +84,2 @@ const str = toS(s); | ||
} | ||
exports.stripSuffix = stripSuffix; | ||
/** | ||
@@ -95,3 +95,2 @@ * @return `arr` with all empty strings removed and all non-empty strings trimmed. | ||
} | ||
exports.splitLines = splitLines; | ||
//# sourceMappingURL=String.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isStruct = void 0; | ||
exports.isStruct = isStruct; | ||
const DateTime_1 = require("./DateTime"); | ||
@@ -14,3 +14,2 @@ function isStruct(o) { | ||
} | ||
exports.isStruct = isStruct; | ||
//# sourceMappingURL=Struct.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.setZone = exports.parseDateTime = exports.timeFormats = void 0; | ||
exports.timeFormats = timeFormats; | ||
exports.parseDateTime = parseDateTime; | ||
exports.setZone = setZone; | ||
const luxon_1 = require("luxon"); | ||
@@ -28,3 +30,2 @@ const String_1 = require("./String"); | ||
} | ||
exports.timeFormats = timeFormats; | ||
function parseDateTime(text, fmts) { | ||
@@ -64,3 +65,2 @@ var _a, _b, _c, _d; | ||
} | ||
exports.parseDateTime = parseDateTime; | ||
function setZone(args) { | ||
@@ -76,3 +76,2 @@ // This is a bit tricky... We want to keep the local time and just _say_ it | ||
} | ||
exports.setZone = setZone; | ||
//# sourceMappingURL=TimeParsing.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.times = void 0; | ||
exports.times = times; | ||
function times(n, f) { | ||
@@ -9,3 +9,2 @@ return Array(n) | ||
} | ||
exports.times = times; | ||
//# sourceMappingURL=Times.js.map |
@@ -63,3 +63,3 @@ import { Zone } from "luxon"; | ||
export declare function inferLikelyOffsetMinutes(deltaMinutes: number): number; | ||
export declare function extractTzOffsetFromUTCOffset(t: Pick<Tags, (typeof CapturedAtTagNames)[number] | "GPSDateTime" | "DateTimeUTC" | "GPSDateStamp" | "GPSTimeStamp">): Maybe<TzSrc>; | ||
export declare function extractTzOffsetFromUTCOffset(t: Pick<Tags, (typeof CapturedAtTagNames)[number] | "GPSDateTime" | "DateTimeUTC" | "GPSDateStamp" | "GPSTimeStamp" | "SonyDateTime2">): Maybe<TzSrc>; | ||
export declare function equivalentZones(a: Maybe<string | number | Zone>, b: Maybe<string | number | Zone>): boolean; | ||
@@ -66,0 +66,0 @@ export declare function getZoneName(args?: { |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.getZoneName = exports.equivalentZones = exports.extractTzOffsetFromUTCOffset = exports.inferLikelyOffsetMinutes = exports.extractTzOffsetFromDatestamps = exports.extractTzOffsetFromTags = exports.extractZone = exports.offsetMinutesToZoneName = exports.validTzOffsetMinutes = exports.zoneToShortOffset = exports.normalizeZone = exports.defaultVideosToUTC = exports.isZoneValid = exports.isUTC = exports.UnsetZoneName = exports.UnsetZone = exports.UnsetZoneOffsetMinutes = void 0; | ||
exports.defaultVideosToUTC = exports.UnsetZoneName = exports.UnsetZone = exports.UnsetZoneOffsetMinutes = void 0; | ||
exports.isUTC = isUTC; | ||
exports.isZoneValid = isZoneValid; | ||
exports.normalizeZone = normalizeZone; | ||
exports.zoneToShortOffset = zoneToShortOffset; | ||
exports.validTzOffsetMinutes = validTzOffsetMinutes; | ||
exports.offsetMinutesToZoneName = offsetMinutesToZoneName; | ||
exports.extractZone = extractZone; | ||
exports.extractTzOffsetFromTags = extractTzOffsetFromTags; | ||
exports.extractTzOffsetFromDatestamps = extractTzOffsetFromDatestamps; | ||
exports.inferLikelyOffsetMinutes = inferLikelyOffsetMinutes; | ||
exports.extractTzOffsetFromUTCOffset = extractTzOffsetFromUTCOffset; | ||
exports.equivalentZones = equivalentZones; | ||
exports.getZoneName = getZoneName; | ||
const luxon_1 = require("luxon"); | ||
@@ -116,7 +129,5 @@ const BinaryField_1 = require("./BinaryField"); | ||
} | ||
exports.isUTC = isUTC; | ||
function isZoneValid(zone) { | ||
return (zone != null && zone.isValid && Math.abs(zone.offset(Date.now())) < 14 * 60); | ||
} | ||
exports.isZoneValid = isZoneValid; | ||
/** | ||
@@ -169,3 +180,2 @@ * If `tzSource` matches this value, the tags are from a video, and we had to | ||
} | ||
exports.normalizeZone = normalizeZone; | ||
/** | ||
@@ -180,3 +190,2 @@ * @param ts must be provided if the zone is not a fixed offset | ||
} | ||
exports.zoneToShortOffset = zoneToShortOffset; | ||
function validTzOffsetMinutes(tzOffsetMinutes) { | ||
@@ -188,3 +197,2 @@ return (tzOffsetMinutes != null && | ||
} | ||
exports.validTzOffsetMinutes = validTzOffsetMinutes; | ||
/** | ||
@@ -206,3 +214,2 @@ * Returns a "zone name" (used by `luxon`) that encodes the given offset. | ||
} | ||
exports.offsetMinutesToZoneName = offsetMinutesToZoneName; | ||
function tzHourToOffset(n) { | ||
@@ -300,3 +307,2 @@ return (0, Number_1.isNumber)(n) && validTzOffsetMinutes(n * 60) | ||
} | ||
exports.extractZone = extractZone; | ||
const TimezoneOffsetTagnames = [ | ||
@@ -330,3 +336,2 @@ "TimeZone", | ||
} | ||
exports.extractTzOffsetFromTags = extractTzOffsetFromTags; | ||
function extractTzOffsetFromDatestamps(t, opts) { | ||
@@ -349,3 +354,2 @@ var _a; | ||
} | ||
exports.extractTzOffsetFromDatestamps = extractTzOffsetFromDatestamps; | ||
// timezone offsets may be on a 15 minute boundary, but if GPS acquisition is | ||
@@ -359,3 +363,2 @@ // old, this can be spurious. We get less mistakes with a larger multiple, so | ||
} | ||
exports.inferLikelyOffsetMinutes = inferLikelyOffsetMinutes; | ||
/** | ||
@@ -369,3 +372,3 @@ * Convert blank strings to undefined. | ||
const utcSources = { | ||
...(0, Pick_1.pick)(t, "GPSDateTime", "DateTimeUTC"), | ||
...(0, Pick_1.pick)(t, "GPSDateTime", "DateTimeUTC", "SonyDateTime2"), | ||
GPSDateTimeStamp: (0, Maybe_1.map2)(blankToNull(t.GPSDateStamp), // Example: "2022:04:13" | ||
@@ -376,3 +379,8 @@ blankToNull(t.GPSTimeStamp), // Example: "23:59:41.001" | ||
// We can always assume these are in UTC: | ||
const utc = (0, Maybe_1.first)(["GPSDateTime", "DateTimeUTC", "GPSDateTimeStamp"], (tagName) => { | ||
const utc = (0, Maybe_1.first)([ | ||
"GPSDateTime", | ||
"DateTimeUTC", | ||
"GPSDateTimeStamp", | ||
"SonyDateTime2", | ||
], (tagName) => { | ||
var _a; | ||
@@ -417,3 +425,2 @@ const v = utcSources[tagName]; | ||
} | ||
exports.extractTzOffsetFromUTCOffset = extractTzOffsetFromUTCOffset; | ||
function equivalentZones(a, b) { | ||
@@ -426,3 +433,2 @@ const az = normalizeZone(a); | ||
} | ||
exports.equivalentZones = equivalentZones; | ||
function getZoneName(args = {}) { | ||
@@ -433,3 +439,2 @@ var _a, _b, _c, _d; | ||
} | ||
exports.getZoneName = getZoneName; | ||
//# sourceMappingURL=Timezones.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isVersion = void 0; | ||
exports.isVersion = isVersion; | ||
const fields = ["Comments", "Event", "Modifier", "ModifyDate", "Version"]; | ||
@@ -8,3 +8,2 @@ function isVersion(obj) { | ||
} | ||
exports.isVersion = isVersion; | ||
//# sourceMappingURL=Version.js.map |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.which = void 0; | ||
exports.which = which; | ||
const node_fs_1 = require("node:fs"); | ||
@@ -23,3 +23,2 @@ const promises_1 = require("node:fs/promises"); | ||
} | ||
exports.which = which; | ||
async function canRX(fullpath) { | ||
@@ -26,0 +25,0 @@ if ((0, IsWin32_1.isWin32)()) |
@@ -8,3 +8,3 @@ import { ExifToolTask, ExifToolTaskOptions } from "./ExifToolTask"; | ||
readonly ignoreMinorErrors: boolean; | ||
readonly struct: 0 | 1 | 2 | "undef"; | ||
readonly struct: "undef" | 0 | 1 | 2; | ||
readonly writeArgs: string[]; | ||
@@ -41,6 +41,6 @@ }; | ||
readonly options: ExifToolTaskOptions; | ||
private constructor(); | ||
constructor(sourceFile: string, args: string[], options: ExifToolTaskOptions); | ||
static for(filename: string, tags: WriteTags, options: Partial<WriteTaskOptions> & Required<ExifToolTaskOptions>): WriteTask; | ||
toString(): string; | ||
protected parse(data: string, error?: Error): WriteTaskResult; | ||
parse(data: string, error?: Error): WriteTaskResult; | ||
} |
@@ -26,3 +26,4 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.WriteTask = exports.DefaultWriteTaskOptions = exports.WriteTaskOptionFields = exports.htmlEncode = void 0; | ||
exports.WriteTask = exports.DefaultWriteTaskOptions = exports.WriteTaskOptionFields = void 0; | ||
exports.htmlEncode = htmlEncode; | ||
const he_1 = require("he"); | ||
@@ -50,3 +51,2 @@ const _path = __importStar(require("node:path")); | ||
} | ||
exports.htmlEncode = htmlEncode; | ||
function enc(o, structValue = false) { | ||
@@ -136,5 +136,6 @@ if (o == null) { | ||
} | ||
// we're handling the stderr output ourselves, so we tell ExifToolTask that all stderr output is not ignorable so we can capture the warnings | ||
// we're handling the stderr output ourselves, so we tell ExifToolTask that | ||
// all stderr output is not ignorable so we can capture the warnings | ||
parse(data, error) { | ||
var _a, _b, _c, _d; | ||
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; | ||
if (error != null) | ||
@@ -146,5 +147,5 @@ throw error; | ||
for (const line of (0, String_1.splitLines)(data)) { | ||
const m_created = CreatedRE.exec(line); | ||
const m_created = (_b = (_a = CreatedRE.exec(line)) === null || _a === void 0 ? void 0 : _a.groups) === null || _b === void 0 ? void 0 : _b.count; | ||
if (m_created != null) { | ||
created += (_a = (0, Number_1.toInt)(m_created[1])) !== null && _a !== void 0 ? _a : 0; | ||
created += (_c = (0, Number_1.toInt)(m_created)) !== null && _c !== void 0 ? _c : 0; | ||
continue; | ||
@@ -154,16 +155,16 @@ } | ||
// "updated" | ||
const m_unchanged = UnchangedRE.exec(line); | ||
const m_unchanged = (_e = (_d = UnchangedRE.exec(line)) === null || _d === void 0 ? void 0 : _d.groups) === null || _e === void 0 ? void 0 : _e.count; | ||
if (m_unchanged != null) { | ||
unchanged += (_b = (0, Number_1.toInt)(m_unchanged[1])) !== null && _b !== void 0 ? _b : 0; | ||
unchanged += (_f = (0, Number_1.toInt)(m_unchanged)) !== null && _f !== void 0 ? _f : 0; | ||
continue; | ||
} | ||
const m_updated = UpdatedRE.exec(line); | ||
const m_updated = (_h = (_g = UpdatedRE.exec(line)) === null || _g === void 0 ? void 0 : _g.groups) === null || _h === void 0 ? void 0 : _h.count; | ||
if (m_updated != null) { | ||
updated += (_c = (0, Number_1.toInt)(m_updated[1])) !== null && _c !== void 0 ? _c : 0; | ||
updated += (_j = (0, Number_1.toInt)(m_updated)) !== null && _j !== void 0 ? _j : 0; | ||
continue; | ||
} | ||
// if we get here, we didn't match any of the expected patterns. | ||
this.warnings.push("Unexpected output from ExifTool: " + line); | ||
this.warnings.push("Unexpected output from ExifTool: " + JSON.stringify(line)); | ||
} | ||
const w = (_d = (0, ErrorsAndWarnings_1.errorsAndWarnings)(this).warnings) !== null && _d !== void 0 ? _d : []; | ||
const w = (_k = (0, ErrorsAndWarnings_1.errorsAndWarnings)(this).warnings) !== null && _k !== void 0 ? _k : []; | ||
return { | ||
@@ -178,7 +179,7 @@ created, | ||
exports.WriteTask = WriteTask; | ||
// "0 files created" | "0 file created" | ||
// "1 image files created" | ||
const CreatedRE = /(\d{1,4})(?:.{0,8} files?)? created\b/i; | ||
const UnchangedRE = /(\d{1,4})(?:.{0,8} files?)? (?:weren't updated|unchanged\b)/i; | ||
const UpdatedRE = /(\d{1,4})(?:.{0,8} files?)? updated\b/i; | ||
// "0 files created" | "0 file created" | "1 image files created" | ||
const CreatedRE = /(?<count>\d{1,5}) [\w ]{1,12}\bcreated$/i; | ||
const UnchangedRE = /(?<count>\d{1,5}) [\w ]{1,12}\b(?:weren't updated|unchanged)$/i; | ||
// "1 image files updated" | ||
const UpdatedRE = /(?<count>\d{1,5}) [\w ]{1,12}\bupdated$/i; | ||
//# sourceMappingURL=WriteTask.js.map |
{ | ||
"name": "exiftool-vendored", | ||
"version": "27.0.0", | ||
"version": "28.0.0", | ||
"description": "Efficient, cross-platform access to ExifTool", | ||
@@ -12,14 +12,13 @@ "main": "./dist/ExifTool.js", | ||
"scripts": { | ||
"u": "yarn npm-check-updates --upgrade --install always", | ||
"ci": "yarn install --frozen-lockfile", | ||
"u": "npm-check-updates --upgrade --install always", | ||
"clean": "rimraf lib dist coverage .nyc_output", | ||
"precompile": "yarn clean", | ||
"precompile": "npm run clean", | ||
"compile": "tsc", | ||
"compile:watch": "yarn precompile && tsc --watch", | ||
"premktags": "yarn compile", | ||
"compile:watch": "npm precompile && tsc --watch", | ||
"premktags": "npm run compile", | ||
"mktags": "node dist/update/mktags.js", | ||
"prelint": "yarn compile", | ||
"lint": "yarn eslint src --ext .ts", | ||
"prettier": "prettier --write src/*.ts src/**/*.ts", | ||
"pretest": "run-p lint compile", | ||
"prelint": "npm run compile", | ||
"lint": "eslint src --ext .ts", | ||
"prettier": "prettier --write src/*.ts src/**/*.ts **/*.yml **/*.json **/*.md", | ||
"pretest": "npm run compile", | ||
"test": "mocha 'dist/*.spec.js'", | ||
@@ -29,3 +28,3 @@ "docs:1": "typedoc --options .typedoc.js", | ||
"docs:4": "touch docs/.nojekyll", | ||
"docs:5": "yarn serve docs", | ||
"docs:5": "serve docs", | ||
"docs": "run-s docs:*" | ||
@@ -82,9 +81,9 @@ }, | ||
"@types/he": "^1.2.3", | ||
"@types/mocha": "^10.0.6", | ||
"@types/node": "^20.14.2", | ||
"@types/mocha": "^10.0.7", | ||
"@types/node": "^20.14.11", | ||
"@types/progress": "^2.0.7", | ||
"@types/tmp": "^0.2.6", | ||
"@types/xmldom": "^0.1.34", | ||
"@typescript-eslint/eslint-plugin": "^7.13.0", | ||
"@typescript-eslint/parser": "^7.13.0", | ||
"@typescript-eslint/eslint-plugin": "^7.16.1", | ||
"@typescript-eslint/parser": "^7.16.1", | ||
"@xmldom/xmldom": "^0.8.10", | ||
@@ -102,14 +101,14 @@ "chai": "^4.3.10", | ||
"globule": "^1.3.4", | ||
"mocha": "^10.4.0", | ||
"mocha": "^10.7.0", | ||
"npm-check-updates": "^16.14.20", | ||
"npm-run-all": "^4.1.5", | ||
"prettier": "^3.3.2", | ||
"prettier-plugin-organize-imports": "^3.2.4", | ||
"prettier": "^3.3.3", | ||
"prettier-plugin-organize-imports": "^4.0.0", | ||
"progress": "^2.0.3", | ||
"rimraf": "^5.0.7", | ||
"rimraf": "^5.0.9", | ||
"serve": "^14.2.3", | ||
"source-map-support": "^0.5.21", | ||
"tmp": "^0.2.3", | ||
"typedoc": "^0.25.13", | ||
"typescript": "^5.4.5", | ||
"typedoc": "^0.26.5", | ||
"typescript": "^5.5.3", | ||
"xpath": "^0.0.34" | ||
@@ -126,5 +125,5 @@ }, | ||
"optionalDependencies": { | ||
"exiftool-vendored.exe": "12.85.0", | ||
"exiftool-vendored.pl": "12.85.0" | ||
"exiftool-vendored.exe": "12.89.0", | ||
"exiftool-vendored.pl": "12.89.0" | ||
} | ||
} |
@@ -46,3 +46,3 @@ # exiftool-vendored | ||
npm install --save exiftool-vendored | ||
### Debug logging | ||
@@ -53,3 +53,3 @@ | ||
You can provide a [Logger implementation](https://photostructure.github.io/batch-cluster.js/interfaces/Logger.html) via [`ExifToolOptions.logger`](https://photostructure.github.io/exiftool-vendored.js/interfaces/ExifToolOptions.html#logger), or set the environment variable `NODE_DEBUG=exiftool-vendored`. [See the debuglog() documentation](https://nodejs.org/docs/latest/api/util.html#utildebuglogsection-callback) for more details. | ||
### Regarding use within Electron | ||
@@ -59,3 +59,3 @@ | ||
frequently have breaking changes, **do not ask for help by opening a github | ||
issue on this project.** | ||
issue on this project.** | ||
@@ -62,0 +62,0 @@ Please seek help via StackOverflow, the Electron discord, or other channels. |
@@ -14,4 +14,4 @@ # Releasing new versions of `exiftool-vendored` | ||
1. `git stash -u && git fetch && git checkout main && yarn install && yarn update && yarn test` | ||
1. Verify diffs are in order, and commit | ||
1. `git stash -u && git fetch && git checkout main && npm install && npm run update && npm run test` | ||
1. Verify diffs are reasonable, and commit | ||
1. `npx release-it --only-version` | ||
@@ -22,4 +22,4 @@ | ||
1. `git stash -u && git fetch && git checkout main && yarn install && yarn update && yarn test` | ||
1. Verify diffs are in order, and commit | ||
1. `git stash -u && git fetch && git checkout main && npm install && npm run update && npm run test` | ||
1. Verify diffs are reasonable, and commit | ||
1. `npx release-it --only-version` | ||
@@ -30,10 +30,7 @@ | ||
1. `cd ../exiftool-vendored.js` | ||
1. `yarn u` | ||
1. `yarn install` | ||
1. `yarn mktags ../test-images` # < assumes `../test-images` has the full ExifTool sample image suite | ||
1. `yarn prettier` | ||
1. `yarn lint` | ||
1. `yarn docs` | ||
1. `npm run u` | ||
1. `npm run mktags ../test-images` # < assumes `../test-images` has the full ExifTool sample image suite | ||
1. `npm run prettier && npm run lint && npm run docs` | ||
1. Verify docs were rebuilt successfully at <http://localhost:3000/index.html> | ||
1. `yarn test` | ||
1. `npm run test` | ||
1. Verify diffs are reasonable, `git commit` and `git push` | ||
@@ -40,0 +37,0 @@ 1. Verify [](https://github.com/photostructure/exiftool-vendored.js/actions/workflows/node.js.yml) |
@@ -9,3 +9,3 @@ # Security Policy | ||
If you find a vulnerability, *or even think you have*, please send an email to | ||
If you find a vulnerability, _or even think you have_, please send an email to | ||
the author. Each signed git release by `mceachen` contains a monitored email | ||
@@ -12,0 +12,0 @@ address. |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Native code
Supply chain riskContains native code (e.g., compiled binaries or shared libraries). Including native code can obscure malicious behavior.
Found 1 instance in 1 package
Deprecated
MaintenanceThe maintainer of the package marked it as deprecated. This could indicate that a single version should not be used, or that the package is no longer maintained and any new vulnerabilities will not be fixed.
Found 1 instance in 1 package
107227703
202
10198
0
1