@ryuzaki13/react-foundation-lib 2.18.1 → 2.20.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.
- package/dist/error-report/diagnostics.d.ts.map +1 -1
- package/dist/error-report/drafts.d.ts.map +1 -1
- package/dist/error-report/errorReportStorage.d.ts +18 -0
- package/dist/error-report/errorReportStorage.d.ts.map +1 -0
- package/dist/error-report/index.d.ts +1 -0
- package/dist/error-report/index.d.ts.map +1 -1
- package/dist/error-report/index.js +552 -535
- package/dist/error-report/index.js.map +1 -1
- package/dist/file/checkFileSignature.d.ts +8 -0
- package/dist/file/checkFileSignature.d.ts.map +1 -0
- package/dist/file/fileSignatureConstants.d.ts +20 -0
- package/dist/file/fileSignatureConstants.d.ts.map +1 -0
- package/dist/file/fileSignatureTypes.d.ts +15 -0
- package/dist/file/fileSignatureTypes.d.ts.map +1 -0
- package/dist/file/index.d.ts +2 -0
- package/dist/file/index.d.ts.map +1 -1
- package/dist/file/index.js +237 -68
- package/dist/file/index.js.map +1 -1
- package/dist/file/signature/checkArchiveSignature.d.ts +3 -0
- package/dist/file/signature/checkArchiveSignature.d.ts.map +1 -0
- package/dist/file/signature/checkPdfSignature.d.ts +8 -0
- package/dist/file/signature/checkPdfSignature.d.ts.map +1 -0
- package/dist/file/signature/hasSignatureBytes.d.ts +5 -0
- package/dist/file/signature/hasSignatureBytes.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/error-report/README.mdx +44 -5
- package/src/file/README.mdx +63 -6
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type FileSignatureCheckOptions, type FileSignatureCheckResult } from "./fileSignatureTypes";
|
|
2
|
+
/**
|
|
3
|
+
* Частичная pure-проверка fixed headers: нет FileReader, Node API, декодирования,
|
|
4
|
+
* распаковки или чтения всего файла. Любой match относится только к header.
|
|
5
|
+
* Общий ZIP/OLE marker не подтверждает Office/ODF/XFL; allowlist принадлежит caller.
|
|
6
|
+
*/
|
|
7
|
+
export declare function checkFileSignature({ extension, bytes }: FileSignatureCheckOptions): FileSignatureCheckResult;
|
|
8
|
+
//# sourceMappingURL=checkFileSignature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkFileSignature.d.ts","sourceRoot":"","sources":["../../src/file/checkFileSignature.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,yBAAyB,EAAE,KAAK,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAmErG;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,yBAAyB,GAAG,wBAAwB,CAuB5G"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Приватный словарь результатов; значения сохраняют публичный string union. */
|
|
2
|
+
export declare const FILE_SIGNATURE_RESULT: {
|
|
3
|
+
readonly MATCH: "match";
|
|
4
|
+
readonly MISMATCH: "mismatch";
|
|
5
|
+
readonly UNSUPPORTED: "unsupported";
|
|
6
|
+
};
|
|
7
|
+
/** Только dispatch поддержанных проверок; это не предметный allowlist caller. */
|
|
8
|
+
export declare const FILE_SIGNATURE_EXTENSION: {
|
|
9
|
+
readonly PNG: "png";
|
|
10
|
+
readonly JPG: "jpg";
|
|
11
|
+
readonly JPEG: "jpeg";
|
|
12
|
+
readonly BMP: "bmp";
|
|
13
|
+
readonly PSD: "psd";
|
|
14
|
+
readonly RTF: "rtf";
|
|
15
|
+
readonly RAR: "rar";
|
|
16
|
+
readonly ZIP: "zip";
|
|
17
|
+
readonly SEVEN_ZIP: "7z";
|
|
18
|
+
readonly PDF: "pdf";
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=fileSignatureConstants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileSignatureConstants.d.ts","sourceRoot":"","sources":["../../src/file/fileSignatureConstants.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,eAAO,MAAM,qBAAqB;;;;CAIxB,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,wBAAwB;;;;;;;;;;;CAW3B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type FILE_SIGNATURE_EXTENSION, type FILE_SIGNATURE_RESULT } from "./fileSignatureConstants";
|
|
2
|
+
/** Bytes принадлежат caller; расширение передаётся без точки и имени файла. */
|
|
3
|
+
export type FileSignatureCheckOptions = Readonly<{
|
|
4
|
+
extension: string;
|
|
5
|
+
bytes: Uint8Array;
|
|
6
|
+
}>;
|
|
7
|
+
/**
|
|
8
|
+
* match подтверждает только поддержанный header, не целостность или безопасность
|
|
9
|
+
* файла. unsupported означает отсутствие надёжного решения этой проверкой;
|
|
10
|
+
* допустимость такого файла определяет вызывающая policy, а не foundation.
|
|
11
|
+
*/
|
|
12
|
+
export type FileSignatureCheckResult = (typeof FILE_SIGNATURE_RESULT)[keyof typeof FILE_SIGNATURE_RESULT];
|
|
13
|
+
/** Внутренний archive dispatch; public index не публикует этот тип. */
|
|
14
|
+
export type ArchiveFileSignatureExtension = typeof FILE_SIGNATURE_EXTENSION.RAR | typeof FILE_SIGNATURE_EXTENSION.ZIP | typeof FILE_SIGNATURE_EXTENSION.SEVEN_ZIP;
|
|
15
|
+
//# sourceMappingURL=fileSignatureTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileSignatureTypes.d.ts","sourceRoot":"","sources":["../../src/file/fileSignatureTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAErG,+EAA+E;AAC/E,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC;CAClB,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAC;AAE1G,uEAAuE;AACvE,MAAM,MAAM,6BAA6B,GACxC,OAAO,wBAAwB,CAAC,GAAG,GAAG,OAAO,wBAAwB,CAAC,GAAG,GAAG,OAAO,wBAAwB,CAAC,SAAS,CAAC"}
|
package/dist/file/index.d.ts
CHANGED
package/dist/file/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/file/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/file/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,KAAK,yBAAyB,EAAE,KAAK,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrG,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
|
package/dist/file/index.js
CHANGED
|
@@ -1,50 +1,219 @@
|
|
|
1
|
+
//#region src/file/fileSignatureConstants.ts
|
|
2
|
+
var e = {
|
|
3
|
+
MATCH: "match",
|
|
4
|
+
MISMATCH: "mismatch",
|
|
5
|
+
UNSUPPORTED: "unsupported"
|
|
6
|
+
}, t = {
|
|
7
|
+
PNG: "png",
|
|
8
|
+
JPG: "jpg",
|
|
9
|
+
JPEG: "jpeg",
|
|
10
|
+
BMP: "bmp",
|
|
11
|
+
PSD: "psd",
|
|
12
|
+
RTF: "rtf",
|
|
13
|
+
RAR: "rar",
|
|
14
|
+
ZIP: "zip",
|
|
15
|
+
SEVEN_ZIP: "7z",
|
|
16
|
+
PDF: "pdf"
|
|
17
|
+
};
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/file/signature/hasSignatureBytes.ts
|
|
20
|
+
function n(e, t, n = 0) {
|
|
21
|
+
return n + t.length > e.length ? !1 : t.every((t, r) => e[n + r] === t);
|
|
22
|
+
}
|
|
23
|
+
function r(e, t) {
|
|
24
|
+
return e.length < t.length && e.every((e, n) => e === t[n]);
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/file/signature/checkArchiveSignature.ts
|
|
28
|
+
var i = [
|
|
29
|
+
82,
|
|
30
|
+
97,
|
|
31
|
+
114,
|
|
32
|
+
33
|
|
33
|
+
], a = [26, 7], o = 0, s = 1, c = 0, l = [80, 75], u = [3, 4], d = [5, 6], f = 30, ee = 22, te = [55, 122], p = [
|
|
34
|
+
55,
|
|
35
|
+
122,
|
|
36
|
+
188,
|
|
37
|
+
175,
|
|
38
|
+
39,
|
|
39
|
+
28
|
|
40
|
+
], ne = 2, re = 0, m = 32;
|
|
41
|
+
function ie(t) {
|
|
42
|
+
if (r(t, i)) return e.MISMATCH;
|
|
43
|
+
if (!n(t, i)) return e.UNSUPPORTED;
|
|
44
|
+
let l = i.length + a.length;
|
|
45
|
+
return t.length <= l || !n(t, a, i.length) ? e.MISMATCH : t[l] === o ? e.MATCH : t[l] === s ? t[l + 1] === c ? e.MATCH : e.MISMATCH : e.UNSUPPORTED;
|
|
46
|
+
}
|
|
47
|
+
function ae(t) {
|
|
48
|
+
if (r(t, l)) return e.MISMATCH;
|
|
49
|
+
if (!n(t, l)) return e.UNSUPPORTED;
|
|
50
|
+
let i = l.length;
|
|
51
|
+
return t.length <= i ? e.MISMATCH : t[i] === u[0] ? t.length >= f && n(t, u, i) ? e.MATCH : e.MISMATCH : t[i] === d[0] ? t.length >= ee && n(t, d, i) ? e.MATCH : e.MISMATCH : e.UNSUPPORTED;
|
|
52
|
+
}
|
|
53
|
+
function h(t) {
|
|
54
|
+
return r(t, p) ? e.MISMATCH : n(t, p) ? t.length < p.length + ne ? e.MISMATCH : t[p.length] === re ? t.length >= m ? e.MATCH : e.MISMATCH : e.UNSUPPORTED : n(t, te) ? e.MISMATCH : e.UNSUPPORTED;
|
|
55
|
+
}
|
|
56
|
+
function oe(e, n) {
|
|
57
|
+
return e === t.RAR ? ie(n) : e === t.ZIP ? ae(n) : h(n);
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region src/file/signature/checkPdfSignature.ts
|
|
61
|
+
var g = [
|
|
62
|
+
37,
|
|
63
|
+
80,
|
|
64
|
+
68,
|
|
65
|
+
70
|
|
66
|
+
], _ = 1024, v = 8, y = 4, b = 45, x = 5, S = 6, se = 46, ce = 7, C = 48, w = 57, le = 49, ue = 55, de = 50, T = 48;
|
|
67
|
+
function E(t) {
|
|
68
|
+
if (r(t, g)) return e.MISMATCH;
|
|
69
|
+
let i = Math.min(t.length, _), a = !1, o = !1;
|
|
70
|
+
for (let r = 0; r + g.length <= i; r += 1) {
|
|
71
|
+
if (!n(t, g, r)) continue;
|
|
72
|
+
if (r + v > i) {
|
|
73
|
+
r + v > t.length ? a = !0 : o = !0;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
let s = t[r + x], c = t[r + ce];
|
|
77
|
+
if (t[r + y] !== b || t[r + S] !== se || s < C || s > w || c < C || c > w) {
|
|
78
|
+
a = !0;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (s === le && c <= ue || s === de && c === T) return e.MATCH;
|
|
82
|
+
o = !0;
|
|
83
|
+
}
|
|
84
|
+
return o ? e.UNSUPPORTED : a ? e.MISMATCH : e.UNSUPPORTED;
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region src/file/checkFileSignature.ts
|
|
88
|
+
var D = [
|
|
89
|
+
137,
|
|
90
|
+
80,
|
|
91
|
+
78,
|
|
92
|
+
71,
|
|
93
|
+
13,
|
|
94
|
+
10,
|
|
95
|
+
26,
|
|
96
|
+
10
|
|
97
|
+
], O = 255, k = 216, A = 32, j = [66, 77], M = 14, N = 6, P = [
|
|
98
|
+
0,
|
|
99
|
+
0,
|
|
100
|
+
0,
|
|
101
|
+
0
|
|
102
|
+
], F = [
|
|
103
|
+
56,
|
|
104
|
+
66,
|
|
105
|
+
80,
|
|
106
|
+
83
|
|
107
|
+
], I = [0, 1], L = [
|
|
108
|
+
0,
|
|
109
|
+
0,
|
|
110
|
+
0,
|
|
111
|
+
0,
|
|
112
|
+
0,
|
|
113
|
+
0
|
|
114
|
+
], R = [
|
|
115
|
+
123,
|
|
116
|
+
92,
|
|
117
|
+
114,
|
|
118
|
+
116,
|
|
119
|
+
102
|
|
120
|
+
], z = [
|
|
121
|
+
123,
|
|
122
|
+
92,
|
|
123
|
+
114,
|
|
124
|
+
116,
|
|
125
|
+
102,
|
|
126
|
+
49
|
|
127
|
+
], B = {
|
|
128
|
+
digit: [48, 57],
|
|
129
|
+
uppercase: [65, 90],
|
|
130
|
+
lowercase: [97, 122]
|
|
131
|
+
};
|
|
132
|
+
function V(t) {
|
|
133
|
+
if (t[0] !== O) return e.MISMATCH;
|
|
134
|
+
let n = 1;
|
|
135
|
+
for (; n < Math.min(t.length, A) && t[n] === O;) n += 1;
|
|
136
|
+
return n === A && t.length > n ? e.UNSUPPORTED : t[n] === k ? e.MATCH : e.MISMATCH;
|
|
137
|
+
}
|
|
138
|
+
function H(t) {
|
|
139
|
+
return r(t, j) ? e.MISMATCH : n(t, j) ? t.length < M ? e.MISMATCH : n(t, P, N) ? e.MATCH : e.MISMATCH : e.UNSUPPORTED;
|
|
140
|
+
}
|
|
141
|
+
function fe(t) {
|
|
142
|
+
if (!n(t, F)) return e.MISMATCH;
|
|
143
|
+
let r = F.length + I.length;
|
|
144
|
+
return t.length < r ? e.MISMATCH : n(t, I, F.length) ? n(t, L, r) ? e.MATCH : e.MISMATCH : e.UNSUPPORTED;
|
|
145
|
+
}
|
|
146
|
+
function pe(t) {
|
|
147
|
+
if (r(t, z)) return e.MISMATCH;
|
|
148
|
+
if (!n(t, R)) return e.UNSUPPORTED;
|
|
149
|
+
if (!n(t, z) || t.length <= z.length) return e.MISMATCH;
|
|
150
|
+
let i = t[z.length];
|
|
151
|
+
return i >= B.digit[0] && i <= B.digit[1] || i >= B.uppercase[0] && i <= B.uppercase[1] || i >= B.lowercase[0] && i <= B.lowercase[1] ? e.MISMATCH : e.MATCH;
|
|
152
|
+
}
|
|
153
|
+
function me({ extension: r, bytes: i }) {
|
|
154
|
+
let a = r.trim().toLowerCase();
|
|
155
|
+
switch (a) {
|
|
156
|
+
case t.PNG: return n(i, D) ? e.MATCH : e.MISMATCH;
|
|
157
|
+
case t.JPG:
|
|
158
|
+
case t.JPEG: return V(i);
|
|
159
|
+
case t.BMP: return H(i);
|
|
160
|
+
case t.PSD: return fe(i);
|
|
161
|
+
case t.RTF: return pe(i);
|
|
162
|
+
case t.RAR:
|
|
163
|
+
case t.ZIP:
|
|
164
|
+
case t.SEVEN_ZIP: return oe(a, i);
|
|
165
|
+
case t.PDF: return E(i);
|
|
166
|
+
default: return e.UNSUPPORTED;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//#endregion
|
|
1
170
|
//#region src/file/contentDisposition.ts
|
|
2
|
-
function
|
|
171
|
+
function U(e, t = "file") {
|
|
3
172
|
let n = e.replace(/[\r\n]/g, " ").replace(/"/g, "'").trim();
|
|
4
173
|
return n.length > 0 ? n : t;
|
|
5
174
|
}
|
|
6
|
-
function
|
|
175
|
+
function W(e) {
|
|
7
176
|
return encodeURIComponent(e).replace(/['()]/g, (e) => `%${e.charCodeAt(0).toString(16).toUpperCase()}`).replace(/\*/g, "%2A");
|
|
8
177
|
}
|
|
9
|
-
function
|
|
178
|
+
function G(e, t = "file.bin") {
|
|
10
179
|
let n = e.replace(/[\r\n]/g, " ").replace(/["\\]/g, "_").replace(/[^\x20-\x7E]/g, "_").replace(/\s+/g, " ").trim();
|
|
11
180
|
return n.length > 0 ? n : t;
|
|
12
181
|
}
|
|
13
|
-
function
|
|
14
|
-
let
|
|
15
|
-
return `${
|
|
182
|
+
function he({ disposition: e, filename: t, asciiFallback: n = "file.bin" }) {
|
|
183
|
+
let r = U(t, n);
|
|
184
|
+
return `${e}; filename="${G(r, n)}"; filename*=UTF-8''${W(r)}`;
|
|
16
185
|
}
|
|
17
186
|
//#endregion
|
|
18
187
|
//#region src/file/read-file/types.ts
|
|
19
|
-
var
|
|
188
|
+
var K = class extends Error {
|
|
20
189
|
code;
|
|
21
190
|
cause;
|
|
22
191
|
constructor(e, t, n) {
|
|
23
192
|
super(t ?? e), this.name = "ReadFileError", this.code = e, this.cause = n;
|
|
24
193
|
}
|
|
25
|
-
},
|
|
26
|
-
function
|
|
194
|
+
}, q = "[a-z0-9!#$&^_.+-]+", ge = RegExp(`^${q}\\/${q}$`, "i"), _e = RegExp(`^${q}\\/(?:${q}|\\*)$`, "i"), ve = /^\.[^\s,]+$/;
|
|
195
|
+
function ye(e) {
|
|
27
196
|
if (e) {
|
|
28
|
-
for (let [t, n] of e.entries()) if (!
|
|
197
|
+
for (let [t, n] of e.entries()) if (!ge.test(n)) throw Error(`DropZone: некорректный allowedMime[${t}]="${n}". Ожидается полный MIME-тип вида "application/pdf" без wildcard и параметров.`);
|
|
29
198
|
}
|
|
30
199
|
}
|
|
31
|
-
function
|
|
200
|
+
function be(e) {
|
|
32
201
|
if (e) {
|
|
33
|
-
for (let [t, n] of e.entries()) if (!(
|
|
202
|
+
for (let [t, n] of e.entries()) if (!(ve.test(n) || _e.test(n))) throw Error(`DropZone: некорректный accept[${t}]="${n}". Ожидается расширение вида ".pdf" или MIME-тип вида "application/pdf" / "image/*".`);
|
|
34
203
|
}
|
|
35
204
|
}
|
|
36
|
-
function
|
|
37
|
-
if (e?.aborted) throw new
|
|
205
|
+
function J(e) {
|
|
206
|
+
if (e?.aborted) throw new K("READ_ABORTED", "Прервано по сигналу");
|
|
38
207
|
}
|
|
39
208
|
//#endregion
|
|
40
209
|
//#region src/file/read-file/readFile.ts
|
|
41
|
-
function
|
|
210
|
+
function Y(e) {
|
|
42
211
|
return e?.trim().toLowerCase() ?? "";
|
|
43
212
|
}
|
|
44
|
-
function
|
|
45
|
-
return
|
|
213
|
+
function xe(e) {
|
|
214
|
+
return Y(e.split(".").pop());
|
|
46
215
|
}
|
|
47
|
-
function
|
|
216
|
+
function X(e) {
|
|
48
217
|
return {
|
|
49
218
|
mime: e.type,
|
|
50
219
|
size: e.size,
|
|
@@ -52,7 +221,7 @@ function m(e) {
|
|
|
52
221
|
lastModified: e.lastModified
|
|
53
222
|
};
|
|
54
223
|
}
|
|
55
|
-
function
|
|
224
|
+
function Z(e, t) {
|
|
56
225
|
if (!e) return;
|
|
57
226
|
let n = () => {
|
|
58
227
|
try {
|
|
@@ -61,81 +230,81 @@ function h(e, t) {
|
|
|
61
230
|
};
|
|
62
231
|
return e.addEventListener("abort", n, { once: !0 }), () => e.removeEventListener("abort", n);
|
|
63
232
|
}
|
|
64
|
-
function
|
|
233
|
+
function Se(e, t) {
|
|
65
234
|
if (t.allowedMime && t.allowedMime.length > 0) {
|
|
66
|
-
let n = new Set(t.allowedMime.map((e) =>
|
|
67
|
-
if (!n.has(r)) throw new
|
|
235
|
+
let n = new Set(t.allowedMime.map((e) => Y(e))), r = Y(e.type);
|
|
236
|
+
if (!n.has(r)) throw new K("MIME_NOT_ALLOWED", `Неподдерживаемый MIME тип: ${e.type}`);
|
|
68
237
|
} else if (t.accept && t.accept.length > 0) {
|
|
69
|
-
let n =
|
|
70
|
-
if (!n) throw new
|
|
71
|
-
if (!t.accept.map((e) =>
|
|
238
|
+
let n = xe(e.name) || e.type.split("/").pop();
|
|
239
|
+
if (!n) throw new K("MIME_NOT_ALLOWED", "Неопределенный MIME тип");
|
|
240
|
+
if (!t.accept.map((e) => Y(e)).some((e) => e.includes(n))) throw new K("MIME_NOT_ALLOWED", `Неподдерживаемый MIME тип: ${n}`);
|
|
72
241
|
}
|
|
73
|
-
if (typeof t.maxBytes == "number" && e.size > t.maxBytes) throw new
|
|
242
|
+
if (typeof t.maxBytes == "number" && e.size > t.maxBytes) throw new K("FILE_TOO_LARGE", `Файл слишком большой: ${e.size} > ${t.maxBytes}`);
|
|
74
243
|
}
|
|
75
|
-
function
|
|
244
|
+
function Ce(e, t) {
|
|
76
245
|
return new Promise((n, r) => {
|
|
77
|
-
let
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
},
|
|
81
|
-
|
|
82
|
-
},
|
|
83
|
-
|
|
84
|
-
let e =
|
|
246
|
+
let i = new FileReader(), a = Z(t.signal, i);
|
|
247
|
+
i.onerror = () => {
|
|
248
|
+
a?.(), r(new K("READ_FAILED", "Не удалось прочитать файл как DataURL", i.error));
|
|
249
|
+
}, i.onabort = () => {
|
|
250
|
+
a?.(), r(new K("READ_ABORTED", "Чтение файла прервано"));
|
|
251
|
+
}, i.onload = () => {
|
|
252
|
+
a?.();
|
|
253
|
+
let e = i.result;
|
|
85
254
|
if (typeof e != "string") {
|
|
86
|
-
r(new
|
|
255
|
+
r(new K("READ_FAILED", "Неожиданный тип результата FileReader"));
|
|
87
256
|
return;
|
|
88
257
|
}
|
|
89
258
|
n(e);
|
|
90
259
|
};
|
|
91
260
|
try {
|
|
92
|
-
|
|
261
|
+
i.readAsDataURL(e);
|
|
93
262
|
} catch (e) {
|
|
94
|
-
|
|
263
|
+
a?.(), r(new K("READ_FAILED", "При чтении DataURL функция FileReader выдала ошибку", e));
|
|
95
264
|
}
|
|
96
265
|
});
|
|
97
266
|
}
|
|
98
|
-
function
|
|
267
|
+
function we(e, t) {
|
|
99
268
|
return new Promise((n, r) => {
|
|
100
|
-
let
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
},
|
|
104
|
-
|
|
105
|
-
},
|
|
106
|
-
|
|
107
|
-
let e =
|
|
269
|
+
let i = new FileReader(), a = Z(t.signal, i);
|
|
270
|
+
i.onerror = () => {
|
|
271
|
+
a?.(), r(new K("READ_FAILED", "Не удалось прочитать файл как ArrayBuffer.", i.error));
|
|
272
|
+
}, i.onabort = () => {
|
|
273
|
+
a?.(), r(new K("READ_ABORTED", "Чтение файла прервано"));
|
|
274
|
+
}, i.onload = () => {
|
|
275
|
+
a?.();
|
|
276
|
+
let e = i.result;
|
|
108
277
|
if (!(e instanceof ArrayBuffer)) {
|
|
109
|
-
r(new
|
|
278
|
+
r(new K("READ_FAILED", "Неожиданный тип результата FileReader"));
|
|
110
279
|
return;
|
|
111
280
|
}
|
|
112
281
|
n(e);
|
|
113
282
|
};
|
|
114
283
|
try {
|
|
115
|
-
|
|
284
|
+
i.readAsArrayBuffer(e);
|
|
116
285
|
} catch (e) {
|
|
117
|
-
|
|
286
|
+
a?.(), r(new K("READ_FAILED", "При чтении ArrayBuffer возникла ошибка FileReader", e));
|
|
118
287
|
}
|
|
119
288
|
});
|
|
120
289
|
}
|
|
121
|
-
async function
|
|
122
|
-
|
|
123
|
-
let n = t.mode ?? "data-url", r =
|
|
290
|
+
async function Q(e, t = {}) {
|
|
291
|
+
J(t.signal), Se(e, t);
|
|
292
|
+
let n = t.mode ?? "data-url", r = X(e);
|
|
124
293
|
return n === "array-buffer" ? {
|
|
125
294
|
mode: "array-buffer",
|
|
126
295
|
meta: r,
|
|
127
|
-
buffer: await
|
|
296
|
+
buffer: await we(e, t),
|
|
128
297
|
file: e
|
|
129
298
|
} : {
|
|
130
299
|
mode: "data-url",
|
|
131
300
|
meta: r,
|
|
132
|
-
dataUrl: await
|
|
301
|
+
dataUrl: await Ce(e, t),
|
|
133
302
|
file: e
|
|
134
303
|
};
|
|
135
304
|
}
|
|
136
305
|
//#endregion
|
|
137
306
|
//#region src/file/image/types.ts
|
|
138
|
-
var
|
|
307
|
+
var $ = class extends Error {
|
|
139
308
|
code;
|
|
140
309
|
cause;
|
|
141
310
|
constructor(e, t, n) {
|
|
@@ -144,11 +313,11 @@ var b = class extends Error {
|
|
|
144
313
|
};
|
|
145
314
|
//#endregion
|
|
146
315
|
//#region src/file/image/readImageFile.ts
|
|
147
|
-
function
|
|
316
|
+
function Te(e) {
|
|
148
317
|
return e.startsWith("image/");
|
|
149
318
|
}
|
|
150
|
-
async function
|
|
151
|
-
|
|
319
|
+
async function Ee(e, t) {
|
|
320
|
+
J(t);
|
|
152
321
|
let n = new Image();
|
|
153
322
|
return n.decoding = "async", n.src = e, await new Promise((e, t) => {
|
|
154
323
|
let r = () => {
|
|
@@ -159,23 +328,23 @@ async function S(e, t) {
|
|
|
159
328
|
}, n.onerror = (e) => {
|
|
160
329
|
r(), t(e);
|
|
161
330
|
};
|
|
162
|
-
}),
|
|
331
|
+
}), J(t), {
|
|
163
332
|
width: n.naturalWidth,
|
|
164
333
|
height: n.naturalHeight
|
|
165
334
|
};
|
|
166
335
|
}
|
|
167
|
-
async function
|
|
168
|
-
if (!
|
|
336
|
+
async function De(e, t = {}) {
|
|
337
|
+
if (!Te(e.type)) throw new $("NOT_AN_IMAGE", `Файл не является изображением. mime=${e.type || "unknown"}`);
|
|
169
338
|
let n = {
|
|
170
339
|
allowedMime: t.allowedMime,
|
|
171
340
|
maxBytes: t.maxBytes,
|
|
172
341
|
signal: t.signal
|
|
173
342
|
};
|
|
174
|
-
if (t.mode === "array-buffer") return
|
|
343
|
+
if (t.mode === "array-buffer") return Q(e, {
|
|
175
344
|
...n,
|
|
176
345
|
mode: "array-buffer"
|
|
177
346
|
});
|
|
178
|
-
let r = await
|
|
347
|
+
let r = await Q(e, n), i = await Ee(r.dataUrl, t.signal);
|
|
179
348
|
return {
|
|
180
349
|
...r,
|
|
181
350
|
dimensions: i
|
|
@@ -183,7 +352,7 @@ async function C(e, t = {}) {
|
|
|
183
352
|
}
|
|
184
353
|
//#endregion
|
|
185
354
|
//#region src/file/mimeType.ts
|
|
186
|
-
var
|
|
355
|
+
var Oe = {
|
|
187
356
|
pdf: "application/pdf",
|
|
188
357
|
doc: "application/msword",
|
|
189
358
|
docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
@@ -202,10 +371,10 @@ var w = {
|
|
|
202
371
|
gif: "image/gif",
|
|
203
372
|
webp: "image/webp"
|
|
204
373
|
};
|
|
205
|
-
function
|
|
206
|
-
return
|
|
374
|
+
function ke(e) {
|
|
375
|
+
return Oe[e.trim().toLowerCase()] ?? "application/octet-stream";
|
|
207
376
|
}
|
|
208
377
|
//#endregion
|
|
209
|
-
export {
|
|
378
|
+
export { K as ReadFileError, $ as ReadImageError, J as assertNotAborted, be as assertValidAccept, ye as assertValidAllowedMime, Z as attachAbort, X as buildMeta, me as checkFileSignature, G as createAsciiFilenameFallback, he as createContentDispositionHeader, W as encodeFilenameRFC5987, Q as readFile, De as readImageFile, ke as resolveMimeTypeByExtension, U as sanitizeFileName };
|
|
210
379
|
|
|
211
380
|
//# sourceMappingURL=index.js.map
|