@spinajs/fs 2.0.481 → 2.0.484
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/lib/cjs/cli/cat.d.ts +11 -0
- package/lib/cjs/cli/cat.d.ts.map +1 -0
- package/lib/cjs/cli/cat.js +40 -0
- package/lib/cjs/cli/cat.js.map +1 -0
- package/lib/cjs/cli/cp.d.ts +11 -0
- package/lib/cjs/cli/cp.d.ts.map +1 -0
- package/lib/cjs/cli/cp.js +41 -0
- package/lib/cjs/cli/cp.js.map +1 -0
- package/lib/cjs/cli/download.d.ts +7 -0
- package/lib/cjs/cli/download.d.ts.map +1 -0
- package/lib/cjs/cli/download.js +39 -0
- package/lib/cjs/cli/download.js.map +1 -0
- package/lib/cjs/cli/exists.d.ts +7 -0
- package/lib/cjs/cli/exists.d.ts.map +1 -0
- package/lib/cjs/cli/exists.js +39 -0
- package/lib/cjs/cli/exists.js.map +1 -0
- package/lib/cjs/cli/fs.d.ts +11 -0
- package/lib/cjs/cli/fs.d.ts.map +1 -1
- package/lib/cjs/cli/fs.js +47 -21
- package/lib/cjs/cli/fs.js.map +1 -1
- package/lib/cjs/cli/hash.d.ts +11 -0
- package/lib/cjs/cli/hash.d.ts.map +1 -0
- package/lib/cjs/cli/hash.js +40 -0
- package/lib/cjs/cli/hash.js.map +1 -0
- package/lib/cjs/cli/info.d.ts +7 -0
- package/lib/cjs/cli/info.d.ts.map +1 -0
- package/lib/cjs/cli/info.js +45 -0
- package/lib/cjs/cli/info.js.map +1 -0
- package/lib/cjs/cli/ls.d.ts +7 -0
- package/lib/cjs/cli/ls.d.ts.map +1 -0
- package/lib/cjs/cli/ls.js +40 -0
- package/lib/cjs/cli/ls.js.map +1 -0
- package/lib/cjs/cli/mkdir.d.ts +7 -0
- package/lib/cjs/cli/mkdir.d.ts.map +1 -0
- package/lib/cjs/cli/mkdir.js +39 -0
- package/lib/cjs/cli/mkdir.js.map +1 -0
- package/lib/cjs/cli/mv.d.ts +11 -0
- package/lib/cjs/cli/mv.d.ts.map +1 -0
- package/lib/cjs/cli/mv.js +41 -0
- package/lib/cjs/cli/mv.js.map +1 -0
- package/lib/cjs/cli/rm.d.ts +1 -6
- package/lib/cjs/cli/rm.d.ts.map +1 -1
- package/lib/cjs/cli/rm.js +14 -4
- package/lib/cjs/cli/rm.js.map +1 -1
- package/lib/cjs/cli/stat.d.ts +1 -5
- package/lib/cjs/cli/stat.d.ts.map +1 -1
- package/lib/cjs/cli/stat.js +20 -3
- package/lib/cjs/cli/stat.js.map +1 -1
- package/lib/cjs/cli/unzip.d.ts +11 -0
- package/lib/cjs/cli/unzip.d.ts.map +1 -0
- package/lib/cjs/cli/unzip.js +47 -0
- package/lib/cjs/cli/unzip.js.map +1 -0
- package/lib/cjs/cli/upload.d.ts +7 -0
- package/lib/cjs/cli/upload.d.ts.map +1 -0
- package/lib/cjs/cli/upload.js +40 -0
- package/lib/cjs/cli/upload.js.map +1 -0
- package/lib/cjs/cli/write.d.ts +13 -0
- package/lib/cjs/cli/write.d.ts.map +1 -0
- package/lib/cjs/cli/write.js +54 -0
- package/lib/cjs/cli/write.js.map +1 -0
- package/lib/cjs/cli/zip.d.ts +12 -0
- package/lib/cjs/cli/zip.d.ts.map +1 -0
- package/lib/cjs/cli/zip.js +51 -0
- package/lib/cjs/cli/zip.js.map +1 -0
- package/lib/cjs/config/fs.d.ts +9 -0
- package/lib/cjs/config/fs.d.ts.map +1 -0
- package/lib/cjs/config/fs.js +22 -0
- package/lib/cjs/config/fs.js.map +1 -0
- package/lib/cjs/file-hasher.d.ts +85 -5
- package/lib/cjs/file-hasher.d.ts.map +1 -1
- package/lib/cjs/file-hasher.js +106 -14
- package/lib/cjs/file-hasher.js.map +1 -1
- package/lib/cjs/file-info.d.ts +94 -5
- package/lib/cjs/file-info.d.ts.map +1 -1
- package/lib/cjs/file-info.js +267 -73
- package/lib/cjs/file-info.js.map +1 -1
- package/lib/cjs/fp.d.ts +80 -2
- package/lib/cjs/fp.d.ts.map +1 -1
- package/lib/cjs/fp.js +149 -3
- package/lib/cjs/fp.js.map +1 -1
- package/lib/cjs/index.d.ts +2 -1
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +7 -2
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interfaces.d.ts +89 -12
- package/lib/cjs/interfaces.d.ts.map +1 -1
- package/lib/cjs/interfaces.js +13 -13
- package/lib/cjs/interfaces.js.map +1 -1
- package/lib/cjs/local-provider.d.ts +51 -6
- package/lib/cjs/local-provider.d.ts.map +1 -1
- package/lib/cjs/local-provider.js +254 -76
- package/lib/cjs/local-provider.js.map +1 -1
- package/lib/cjs/temp-cleanup-strategy.d.ts +70 -0
- package/lib/cjs/temp-cleanup-strategy.d.ts.map +1 -0
- package/lib/cjs/temp-cleanup-strategy.js +157 -0
- package/lib/cjs/temp-cleanup-strategy.js.map +1 -0
- package/lib/cjs/temp-provider.d.ts +59 -0
- package/lib/cjs/temp-provider.d.ts.map +1 -0
- package/lib/cjs/temp-provider.js +150 -0
- package/lib/cjs/temp-provider.js.map +1 -0
- package/lib/mjs/cli/cat.d.ts +11 -0
- package/lib/mjs/cli/cat.d.ts.map +1 -0
- package/lib/mjs/cli/cat.js +37 -0
- package/lib/mjs/cli/cat.js.map +1 -0
- package/lib/mjs/cli/cp.d.ts +11 -0
- package/lib/mjs/cli/cp.d.ts.map +1 -0
- package/lib/mjs/cli/cp.js +38 -0
- package/lib/mjs/cli/cp.js.map +1 -0
- package/lib/mjs/cli/download.d.ts +7 -0
- package/lib/mjs/cli/download.d.ts.map +1 -0
- package/lib/mjs/cli/download.js +36 -0
- package/lib/mjs/cli/download.js.map +1 -0
- package/lib/mjs/cli/exists.d.ts +7 -0
- package/lib/mjs/cli/exists.d.ts.map +1 -0
- package/lib/mjs/cli/exists.js +36 -0
- package/lib/mjs/cli/exists.js.map +1 -0
- package/lib/mjs/cli/fs.d.ts +11 -1
- package/lib/mjs/cli/fs.d.ts.map +1 -1
- package/lib/mjs/cli/fs.js +43 -22
- package/lib/mjs/cli/fs.js.map +1 -1
- package/lib/mjs/cli/hash.d.ts +11 -0
- package/lib/mjs/cli/hash.d.ts.map +1 -0
- package/lib/mjs/cli/hash.js +37 -0
- package/lib/mjs/cli/hash.js.map +1 -0
- package/lib/mjs/cli/info.d.ts +7 -0
- package/lib/mjs/cli/info.d.ts.map +1 -0
- package/lib/mjs/cli/info.js +42 -0
- package/lib/mjs/cli/info.js.map +1 -0
- package/lib/mjs/cli/ls.d.ts +7 -0
- package/lib/mjs/cli/ls.d.ts.map +1 -0
- package/lib/mjs/cli/ls.js +37 -0
- package/lib/mjs/cli/ls.js.map +1 -0
- package/lib/mjs/cli/mkdir.d.ts +7 -0
- package/lib/mjs/cli/mkdir.d.ts.map +1 -0
- package/lib/mjs/cli/mkdir.js +36 -0
- package/lib/mjs/cli/mkdir.js.map +1 -0
- package/lib/mjs/cli/mv.d.ts +11 -0
- package/lib/mjs/cli/mv.d.ts.map +1 -0
- package/lib/mjs/cli/mv.js +38 -0
- package/lib/mjs/cli/mv.js.map +1 -0
- package/lib/mjs/cli/rm.d.ts +1 -6
- package/lib/mjs/cli/rm.d.ts.map +1 -1
- package/lib/mjs/cli/rm.js +15 -5
- package/lib/mjs/cli/rm.js.map +1 -1
- package/lib/mjs/cli/stat.d.ts +1 -5
- package/lib/mjs/cli/stat.d.ts.map +1 -1
- package/lib/mjs/cli/stat.js +21 -4
- package/lib/mjs/cli/stat.js.map +1 -1
- package/lib/mjs/cli/unzip.d.ts +11 -0
- package/lib/mjs/cli/unzip.d.ts.map +1 -0
- package/lib/mjs/cli/unzip.js +44 -0
- package/lib/mjs/cli/unzip.js.map +1 -0
- package/lib/mjs/cli/upload.d.ts +7 -0
- package/lib/mjs/cli/upload.d.ts.map +1 -0
- package/lib/mjs/cli/upload.js +37 -0
- package/lib/mjs/cli/upload.js.map +1 -0
- package/lib/mjs/cli/write.d.ts +13 -0
- package/lib/mjs/cli/write.d.ts.map +1 -0
- package/lib/mjs/cli/write.js +51 -0
- package/lib/mjs/cli/write.js.map +1 -0
- package/lib/mjs/cli/zip.d.ts +12 -0
- package/lib/mjs/cli/zip.d.ts.map +1 -0
- package/lib/mjs/cli/zip.js +48 -0
- package/lib/mjs/cli/zip.js.map +1 -0
- package/lib/mjs/config/fs.d.ts +9 -0
- package/lib/mjs/config/fs.d.ts.map +1 -0
- package/lib/mjs/config/fs.js +20 -0
- package/lib/mjs/config/fs.js.map +1 -0
- package/lib/mjs/file-hasher.d.ts +85 -5
- package/lib/mjs/file-hasher.d.ts.map +1 -1
- package/lib/mjs/file-hasher.js +106 -14
- package/lib/mjs/file-hasher.js.map +1 -1
- package/lib/mjs/file-info.d.ts +94 -5
- package/lib/mjs/file-info.d.ts.map +1 -1
- package/lib/mjs/file-info.js +233 -73
- package/lib/mjs/file-info.js.map +1 -1
- package/lib/mjs/fp.d.ts +80 -2
- package/lib/mjs/fp.d.ts.map +1 -1
- package/lib/mjs/fp.js +135 -4
- package/lib/mjs/fp.js.map +1 -1
- package/lib/mjs/index.d.ts +2 -1
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +8 -3
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/interfaces.d.ts +89 -12
- package/lib/mjs/interfaces.d.ts.map +1 -1
- package/lib/mjs/interfaces.js +13 -13
- package/lib/mjs/interfaces.js.map +1 -1
- package/lib/mjs/local-provider.d.ts +51 -6
- package/lib/mjs/local-provider.d.ts.map +1 -1
- package/lib/mjs/local-provider.js +257 -79
- package/lib/mjs/local-provider.js.map +1 -1
- package/lib/mjs/temp-cleanup-strategy.d.ts +70 -0
- package/lib/mjs/temp-cleanup-strategy.d.ts.map +1 -0
- package/lib/mjs/temp-cleanup-strategy.js +153 -0
- package/lib/mjs/temp-cleanup-strategy.js.map +1 -0
- package/lib/mjs/temp-provider.d.ts +59 -0
- package/lib/mjs/temp-provider.d.ts.map +1 -0
- package/lib/mjs/temp-provider.js +147 -0
- package/lib/mjs/temp-provider.js.map +1 -0
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +12 -6
- package/lib/cjs/local-temp-provider.d.ts +0 -18
- package/lib/cjs/local-temp-provider.d.ts.map +0 -1
- package/lib/cjs/local-temp-provider.js +0 -63
- package/lib/cjs/local-temp-provider.js.map +0 -1
- package/lib/mjs/local-temp-provider.d.ts +0 -18
- package/lib/mjs/local-temp-provider.d.ts.map +0 -1
- package/lib/mjs/local-temp-provider.js +0 -60
- package/lib/mjs/local-temp-provider.js.map +0 -1
package/lib/cjs/file-info.js
CHANGED
|
@@ -1,124 +1,318 @@
|
|
|
1
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
|
+
});
|
|
2
18
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
19
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
20
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
21
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
22
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
23
|
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
8
41
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
42
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
43
|
};
|
|
11
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
45
|
exports.DefaultFileInfo = void 0;
|
|
46
|
+
exports.resolveExifToolPath = resolveExifToolPath;
|
|
47
|
+
/// <reference path="./typings/exiftool.d.ts" />
|
|
13
48
|
const node_child_process_1 = require("node:child_process");
|
|
14
49
|
const di_1 = require("@spinajs/di");
|
|
15
|
-
const
|
|
50
|
+
const configuration_1 = require("@spinajs/configuration");
|
|
51
|
+
const log_common_1 = require("@spinajs/log-common");
|
|
16
52
|
const exceptions_1 = require("@spinajs/exceptions");
|
|
17
53
|
const fs_1 = require("fs");
|
|
18
54
|
const interfaces_js_1 = require("./interfaces.js");
|
|
19
55
|
const luxon_1 = require("luxon");
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Default process timeout ( ms ) for the exiftool invocation.
|
|
58
|
+
*/
|
|
59
|
+
const DEFAULT_TIMEOUT = 30_000;
|
|
60
|
+
/**
|
|
61
|
+
* Default exiftool arguments. `-n` disables print-conversion ( numeric values ).
|
|
62
|
+
* Extend via the `fs.fileInfo.args` configuration ( eg. add `-a`, `-G`, `-ee`,
|
|
63
|
+
* `-All` ) to widen what is extracted.
|
|
64
|
+
*/
|
|
65
|
+
const DEFAULT_ARGS = ['-n'];
|
|
66
|
+
/**
|
|
67
|
+
* Friendly aliases: normalised exiftool tag -> {@link IFileInfo} field name.
|
|
68
|
+
*
|
|
69
|
+
* This is NOT an allow-list - every tag emitted by exiftool is extracted and
|
|
70
|
+
* promoted ( see {@link DefaultFileInfo.toFileInfo} ). Aliases only give the
|
|
71
|
+
* most common tags stable, typed names and keep existing consumers working.
|
|
72
|
+
* Several source tags may collapse onto one field ( eg. duration / playDuration ).
|
|
73
|
+
*/
|
|
74
|
+
const TAG_ALIASES = {
|
|
23
75
|
imageWidth: 'Width',
|
|
76
|
+
imageHeight: 'Height',
|
|
24
77
|
duration: 'Duration',
|
|
25
78
|
playDuration: 'Duration',
|
|
26
79
|
frameCount: 'FrameCount',
|
|
27
80
|
frameRate: 'FrameRate',
|
|
28
81
|
videoFrameRate: 'FrameRate',
|
|
82
|
+
audioChannels: 'AudioChannels',
|
|
29
83
|
maxBitrate: 'Bitrate',
|
|
30
84
|
maxDataRate: 'Bitrate',
|
|
31
85
|
avgBitrate: 'Bitrate',
|
|
32
86
|
compressorID: 'Codec',
|
|
33
|
-
fileSize:
|
|
34
|
-
'
|
|
35
|
-
'
|
|
36
|
-
'
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
87
|
+
fileSize: 'FileSize',
|
|
88
|
+
mimeType: 'MimeType',
|
|
89
|
+
mimeEncoding: 'Encoding',
|
|
90
|
+
wordCount: 'WordCount',
|
|
91
|
+
lineCount: 'LineCount',
|
|
92
|
+
fileAccessDateTime: 'AccessDate',
|
|
93
|
+
fileCreationDateTime: 'CreationDate',
|
|
94
|
+
fileModificationDateTime: 'ModificationDate',
|
|
41
95
|
};
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Matches the leading part of an exiftool date value, eg. `2024:01:15 10:30:45`.
|
|
98
|
+
*/
|
|
99
|
+
const EXIFTOOL_DATE = /^\d{4}:\d{2}:\d{2} \d{2}:\d{2}:\d{2}/;
|
|
100
|
+
/**
|
|
101
|
+
* Date formats exiftool may emit ( with/without sub-seconds and timezone ).
|
|
102
|
+
*/
|
|
103
|
+
const EXIFTOOL_DATE_FORMATS = [
|
|
104
|
+
'yyyy:MM:dd HH:mm:ssZZ',
|
|
105
|
+
'yyyy:MM:dd HH:mm:ss.SSSZZ',
|
|
106
|
+
'yyyy:MM:dd HH:mm:ss.SSS',
|
|
107
|
+
'yyyy:MM:dd HH:mm:ss',
|
|
108
|
+
];
|
|
109
|
+
/**
|
|
110
|
+
* Normalises a raw exiftool tag name ( eg. "Image Width", "File
|
|
111
|
+
* Modification Date/Time" ) into a stable camelCase key ( "imageWidth",
|
|
112
|
+
* "fileModificationDateTime" ) by splitting on any non-alphanumeric run.
|
|
113
|
+
*/
|
|
114
|
+
function normalizeTag(rawTag) {
|
|
115
|
+
return rawTag
|
|
116
|
+
.split(/[^a-zA-Z0-9]+/)
|
|
117
|
+
.filter((token) => token.length > 0)
|
|
118
|
+
.map((token, index) => (index === 0 ? token.toLowerCase() : token[0].toUpperCase() + token.slice(1)))
|
|
119
|
+
.join('');
|
|
54
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Coerces a raw exiftool string value into a typed value: date-shaped strings
|
|
123
|
+
* become {@link DateTime} ( detected by value shape, not by a hardcoded field
|
|
124
|
+
* list ), purely numeric strings become numbers, everything else stays a string.
|
|
125
|
+
*/
|
|
126
|
+
function coerceValue(value) {
|
|
127
|
+
if (EXIFTOOL_DATE.test(value)) {
|
|
128
|
+
for (const format of EXIFTOOL_DATE_FORMATS) {
|
|
129
|
+
const parsed = luxon_1.DateTime.fromFormat(value, format);
|
|
130
|
+
if (parsed.isValid) {
|
|
131
|
+
return parsed;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (value !== '' && +value === +value) {
|
|
136
|
+
return parseFloat(value);
|
|
137
|
+
}
|
|
138
|
+
return value;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Resolves the path to the exiftool binary.
|
|
142
|
+
*
|
|
143
|
+
* Prefers the vendored binary shipped with the `exiftool-vendored` platform
|
|
144
|
+
* packages ( no system installation required ), and falls back to `exiftool`
|
|
145
|
+
* available on PATH.
|
|
146
|
+
*/
|
|
147
|
+
async function resolveExifToolPath() {
|
|
148
|
+
try {
|
|
149
|
+
const mod = process.platform === 'win32' ? await Promise.resolve().then(() => __importStar(require('exiftool-vendored.exe'))) : await Promise.resolve().then(() => __importStar(require('exiftool-vendored.pl')));
|
|
150
|
+
const binaryPath = (mod.default ?? mod);
|
|
151
|
+
if (typeof binaryPath === 'string' && (0, fs_1.existsSync)(binaryPath)) {
|
|
152
|
+
return binaryPath;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
/* vendored package not installed for this platform - fall back to PATH */
|
|
157
|
+
}
|
|
158
|
+
return 'exiftool';
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Default {@link FileInfoService} implementation backed by the `exiftool`
|
|
162
|
+
* command line tool.
|
|
163
|
+
*
|
|
164
|
+
* The binary is auto-resolved ( vendored, then PATH ) unless overridden with
|
|
165
|
+
* the `fs.fileInfo.exifToolPath` configuration key. The invocation is bounded
|
|
166
|
+
* by the `fs.fileInfo.timeout` configuration ( default {@link DEFAULT_TIMEOUT} ).
|
|
167
|
+
*/
|
|
55
168
|
let DefaultFileInfo = class DefaultFileInfo extends interfaces_js_1.FileInfoService {
|
|
169
|
+
/**
|
|
170
|
+
* Extracts file information from a file on disk.
|
|
171
|
+
*
|
|
172
|
+
* @param pathToFile absolute path to the file
|
|
173
|
+
* @throws {IOFail} when the file does not exist or exiftool fails
|
|
174
|
+
*/
|
|
56
175
|
async getInfo(pathToFile) {
|
|
57
176
|
if (!(0, fs_1.existsSync)(pathToFile)) {
|
|
58
177
|
throw new exceptions_1.IOFail(`Path ${pathToFile} not exists`);
|
|
59
178
|
}
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
179
|
+
const raw = await this.runExifTool(pathToFile);
|
|
180
|
+
return this.toFileInfo(this.parseMetadata(raw));
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Extracts file information from a readable stream by piping its content to
|
|
184
|
+
* exiftool via stdin ( `exiftool -n -` ).
|
|
185
|
+
*
|
|
186
|
+
* @param stream readable stream with the file content
|
|
187
|
+
* @throws {IOFail} when exiftool fails or the stream errors
|
|
188
|
+
*/
|
|
189
|
+
async getInfoFromStream(stream) {
|
|
190
|
+
const raw = await this.runExifTool('-', stream);
|
|
191
|
+
return this.toFileInfo(this.parseMetadata(raw));
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Resolves the exiftool binary path, preferring the configured override.
|
|
195
|
+
*/
|
|
196
|
+
async binaryPath() {
|
|
197
|
+
if (this.ConfiguredPath) {
|
|
198
|
+
return this.ConfiguredPath;
|
|
73
199
|
}
|
|
74
|
-
|
|
200
|
+
if (!this.ExifToolPath) {
|
|
201
|
+
this.ExifToolPath = await resolveExifToolPath();
|
|
202
|
+
this.Log.trace(`Using exiftool binary: ${this.ExifToolPath}`);
|
|
203
|
+
}
|
|
204
|
+
return this.ExifToolPath;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Spawns the exiftool process. Extracted so it can be overridden ( eg. in tests ).
|
|
208
|
+
*/
|
|
209
|
+
spawnExif(binary, args) {
|
|
210
|
+
return (0, node_child_process_1.spawn)(binary, args);
|
|
75
211
|
}
|
|
76
|
-
|
|
212
|
+
/**
|
|
213
|
+
* Runs exiftool against a file spec ( a path, or `-` for stdin ) and returns
|
|
214
|
+
* its stdout.
|
|
215
|
+
*
|
|
216
|
+
* Success/failure is determined by the process exit code ( not by the mere
|
|
217
|
+
* presence of stderr, which exiftool uses for non-fatal warnings ). The call
|
|
218
|
+
* is bounded by {@link Timeout} and any failure is surfaced as {@link IOFail}.
|
|
219
|
+
*
|
|
220
|
+
* @param fileArg file path or `-` to read from stdin
|
|
221
|
+
* @param input optional readable stream piped to the process stdin
|
|
222
|
+
*/
|
|
223
|
+
async runExifTool(fileArg, input) {
|
|
224
|
+
const binary = await this.binaryPath();
|
|
225
|
+
const child = this.spawnExif(binary, [...this.ExifArgs, fileArg]);
|
|
77
226
|
return new Promise((resolve, reject) => {
|
|
78
|
-
|
|
79
|
-
let
|
|
80
|
-
let
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
227
|
+
let stdout = '';
|
|
228
|
+
let stderr = '';
|
|
229
|
+
let settled = false;
|
|
230
|
+
const finish = (fn) => {
|
|
231
|
+
if (settled) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
settled = true;
|
|
235
|
+
clearTimeout(timer);
|
|
236
|
+
fn();
|
|
237
|
+
};
|
|
238
|
+
const timer = setTimeout(() => {
|
|
239
|
+
child.kill('SIGKILL');
|
|
240
|
+
finish(() => reject(new exceptions_1.IOFail(`exiftool timed out after ${this.Timeout}ms`)));
|
|
241
|
+
}, this.Timeout);
|
|
242
|
+
child.on('error', (err) => finish(() => reject(new exceptions_1.IOFail(`Cannot run exiftool ( ${binary} )`, err))));
|
|
243
|
+
child.on('close', (code) => finish(() => code === 0
|
|
244
|
+
? resolve(stdout)
|
|
245
|
+
: reject(new exceptions_1.IOFail(`exiftool exited with code ${code}${stderr ? `: ${stderr.trim()}` : ''}`))));
|
|
246
|
+
child.stdout.on('data', (data) => (stdout += data.toString('utf-8')));
|
|
247
|
+
child.stderr.on('data', (data) => (stderr += data.toString('utf-8')));
|
|
248
|
+
if (input) {
|
|
249
|
+
input.on('error', (err) => finish(() => {
|
|
250
|
+
child.kill('SIGKILL');
|
|
251
|
+
reject(new exceptions_1.IOFail('Error reading input stream for exiftool', err));
|
|
252
|
+
}));
|
|
253
|
+
input.pipe(child.stdin);
|
|
254
|
+
}
|
|
85
255
|
});
|
|
86
256
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
257
|
+
/**
|
|
258
|
+
* Parses raw exiftool text output into a `{ normalisedTag: value }` map with
|
|
259
|
+
* EVERY emitted tag ( nothing is filtered ).
|
|
260
|
+
*
|
|
261
|
+
* Each line is split on the FIRST `': '` only, so values that themselves
|
|
262
|
+
* contain `': '` are preserved. Values are coerced by {@link coerceValue}
|
|
263
|
+
* ( numbers and date-shaped strings ).
|
|
264
|
+
*/
|
|
265
|
+
parseMetadata(raw) {
|
|
92
266
|
const metaData = {};
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
//Turn the plain text data key into a camel case key.
|
|
98
|
-
var key = pieces[0].trim().split(' ').map(function (tokenInKey, tokenNumber) {
|
|
99
|
-
if (tokenNumber === 0)
|
|
100
|
-
return tokenInKey.toLowerCase();
|
|
101
|
-
else
|
|
102
|
-
return tokenInKey[0].toUpperCase() + tokenInKey.slice(1);
|
|
103
|
-
}).join('');
|
|
104
|
-
//Trim the value associated with the key to make it nice.
|
|
105
|
-
var value = pieces[1].trim();
|
|
106
|
-
if (+value === +value) {
|
|
107
|
-
metaData[key] = parseFloat(value);
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
metaData[key] = value;
|
|
111
|
-
}
|
|
267
|
+
for (const line of raw.split('\n')) {
|
|
268
|
+
const sep = line.indexOf(': ');
|
|
269
|
+
if (sep === -1) {
|
|
270
|
+
continue;
|
|
112
271
|
}
|
|
113
|
-
|
|
272
|
+
const rawKey = line.slice(0, sep).trim();
|
|
273
|
+
const value = line.slice(sep + 2).trim();
|
|
274
|
+
if (!rawKey) {
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
metaData[normalizeTag(rawKey)] = coerceValue(value);
|
|
278
|
+
}
|
|
114
279
|
return metaData;
|
|
115
280
|
}
|
|
281
|
+
/**
|
|
282
|
+
* Projects a parsed metadata map onto {@link IFileInfo}.
|
|
283
|
+
*
|
|
284
|
+
* Every extracted tag is promoted: known tags via their {@link TAG_ALIASES}
|
|
285
|
+
* friendly field name, all others under their PascalCased tag name. The full
|
|
286
|
+
* unmodified map is always available under `Raw`.
|
|
287
|
+
*/
|
|
288
|
+
toFileInfo(metadata) {
|
|
289
|
+
const fInfo = { FileSize: 0 };
|
|
290
|
+
for (const tag in metadata) {
|
|
291
|
+
const field = TAG_ALIASES[tag] ?? tag[0].toUpperCase() + tag.slice(1);
|
|
292
|
+
fInfo[field] = metadata[tag];
|
|
293
|
+
}
|
|
294
|
+
// set Raw last so a stray `Raw` tag can never clobber the full map
|
|
295
|
+
fInfo.Raw = metadata;
|
|
296
|
+
return fInfo;
|
|
297
|
+
}
|
|
116
298
|
};
|
|
117
299
|
exports.DefaultFileInfo = DefaultFileInfo;
|
|
118
300
|
__decorate([
|
|
119
|
-
(0,
|
|
120
|
-
__metadata("design:type",
|
|
301
|
+
(0, log_common_1.Logger)('fs'),
|
|
302
|
+
__metadata("design:type", log_common_1.Log)
|
|
121
303
|
], DefaultFileInfo.prototype, "Log", void 0);
|
|
304
|
+
__decorate([
|
|
305
|
+
(0, configuration_1.Config)('fs.fileInfo.exifToolPath'),
|
|
306
|
+
__metadata("design:type", String)
|
|
307
|
+
], DefaultFileInfo.prototype, "ConfiguredPath", void 0);
|
|
308
|
+
__decorate([
|
|
309
|
+
(0, configuration_1.Config)('fs.fileInfo.timeout', { defaultValue: DEFAULT_TIMEOUT }),
|
|
310
|
+
__metadata("design:type", Number)
|
|
311
|
+
], DefaultFileInfo.prototype, "Timeout", void 0);
|
|
312
|
+
__decorate([
|
|
313
|
+
(0, configuration_1.Config)('fs.fileInfo.args', { defaultValue: DEFAULT_ARGS }),
|
|
314
|
+
__metadata("design:type", Array)
|
|
315
|
+
], DefaultFileInfo.prototype, "ExifArgs", void 0);
|
|
122
316
|
exports.DefaultFileInfo = DefaultFileInfo = __decorate([
|
|
123
317
|
(0, di_1.Injectable)(interfaces_js_1.FileInfoService)
|
|
124
318
|
], DefaultFileInfo);
|
package/lib/cjs/file-info.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-info.js","sourceRoot":"","sources":["../../src/file-info.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-info.js","sourceRoot":"","sources":["../../src/file-info.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/fp.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { fs, IFileInfo } from './interfaces.js';
|
|
1
|
+
import { fs, IFileInfo, IStat } from './interfaces.js';
|
|
2
2
|
import { Abortable } from 'events';
|
|
3
3
|
/**
|
|
4
4
|
* Gets filesystem by its name
|
|
@@ -31,7 +31,85 @@ export declare function _fileInfo(path: string): Promise<IFileInfo>;
|
|
|
31
31
|
* @returns
|
|
32
32
|
*/
|
|
33
33
|
export declare function _file_hash(path: string): Promise<string>;
|
|
34
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Checks if a path exists.
|
|
36
|
+
*
|
|
37
|
+
* Without a filesystem, checks an absolute local path directly. With a filesystem
|
|
38
|
+
* ( name or instance ), delegates to that provider ( path relative to its base ).
|
|
39
|
+
*
|
|
40
|
+
* @param path path to check
|
|
41
|
+
* @param fileSystem optional provider name / instance
|
|
42
|
+
*/
|
|
43
|
+
export declare function _exists(path: string, fileSystem?: string | fs): () => Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Reads whole file content through a filesystem provider.
|
|
46
|
+
*
|
|
47
|
+
* @param path path relative to provider base
|
|
48
|
+
* @param encoding optional encoding ( raw Buffer when omitted )
|
|
49
|
+
* @param fileSystem provider name / instance, or default provider
|
|
50
|
+
*/
|
|
51
|
+
export declare function _read(path: string, encoding?: BufferEncoding, fileSystem?: string | fs): Promise<string | Buffer>;
|
|
52
|
+
/**
|
|
53
|
+
* Writes data to a file through a filesystem provider.
|
|
54
|
+
*/
|
|
55
|
+
export declare function _write(path: string, data: string | Uint8Array, encoding?: BufferEncoding, fileSystem?: string | fs): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Appends data to a file through a filesystem provider.
|
|
58
|
+
*/
|
|
59
|
+
export declare function _append(path: string, data: string | Uint8Array, encoding?: BufferEncoding, fileSystem?: string | fs): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Copies a file / dir, optionally into another filesystem.
|
|
62
|
+
*
|
|
63
|
+
* @param src source path ( relative to srcFs )
|
|
64
|
+
* @param dst destination path
|
|
65
|
+
* @param srcFs source provider name / instance ( default provider when omitted )
|
|
66
|
+
* @param dstFs optional destination provider - copy within srcFs when omitted
|
|
67
|
+
*/
|
|
68
|
+
export declare function _copy(src: string, dst: string, srcFs?: string | fs, dstFs?: string | fs): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Moves a file / dir, optionally into another filesystem.
|
|
71
|
+
*/
|
|
72
|
+
export declare function _move(src: string, dst: string, srcFs?: string | fs, dstFs?: string | fs): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Renames a file within a single filesystem.
|
|
75
|
+
*/
|
|
76
|
+
export declare function _rename(oldPath: string, newPath: string, fileSystem?: string | fs): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Removes a file or a directory ( recursively ).
|
|
79
|
+
*/
|
|
80
|
+
export declare function _rm(path: string, fileSystem?: string | fs): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Creates a directory ( recursively ).
|
|
83
|
+
*/
|
|
84
|
+
export declare function _mkdir(path: string, fileSystem?: string | fs): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Lists directory content.
|
|
87
|
+
*/
|
|
88
|
+
export declare function _list(path: string, fileSystem?: string | fs): Promise<string[]>;
|
|
89
|
+
/**
|
|
90
|
+
* Returns file / dir statistics.
|
|
91
|
+
*/
|
|
92
|
+
export declare function _stat(path: string, fileSystem?: string | fs): Promise<IStat>;
|
|
93
|
+
/**
|
|
94
|
+
* Checks if a path is an existing directory.
|
|
95
|
+
*/
|
|
96
|
+
export declare function _dir_exists(path: string, fileSystem?: string | fs): Promise<boolean>;
|
|
97
|
+
/**
|
|
98
|
+
* Checks if a path is a directory.
|
|
99
|
+
*/
|
|
100
|
+
export declare function _is_dir(path: string, fileSystem?: string | fs): Promise<boolean>;
|
|
101
|
+
/**
|
|
102
|
+
* Downloads a file to local storage and returns the local path.
|
|
103
|
+
*/
|
|
104
|
+
export declare function _download(path: string, fileSystem?: string | fs): Promise<string>;
|
|
105
|
+
/**
|
|
106
|
+
* Uploads a local file into a filesystem provider.
|
|
107
|
+
*/
|
|
108
|
+
export declare function _upload(srcPath: string, dstPath?: string, fileSystem?: string | fs): Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* Hashes a file through a filesystem provider.
|
|
111
|
+
*/
|
|
112
|
+
export declare function _hash(path: string, algo?: string, fileSystem?: string | fs): Promise<string>;
|
|
35
113
|
export declare function _is_of_type(path: string, extension: string): () => Promise<void>;
|
|
36
114
|
export declare function _is_of_mimetype(path: string, mimetype: string): () => Promise<void>;
|
|
37
115
|
export declare function _read_file(path: string, options?: ({
|
package/lib/cjs/fp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fp.d.ts","sourceRoot":"","sources":["../../src/fp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fp.d.ts","sourceRoot":"","sources":["../../src/fp.ts"],"names":[],"mappings":"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"}
|