@ryuzaki13/react-foundation-lib 2.34.0 → 2.36.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/analytical-table/index.js +3 -3
- package/dist/binary/binaryToBlob.d.ts +4 -0
- package/dist/binary/binaryToBlob.d.ts.map +1 -1
- package/dist/binary/index.d.ts +2 -2
- package/dist/binary/index.d.ts.map +1 -1
- package/dist/binary/index.js +73 -54
- package/dist/binary/index.js.map +1 -1
- package/dist/binary/useBinaryFile.d.ts +14 -5
- package/dist/binary/useBinaryFile.d.ts.map +1 -1
- package/dist/chunks/{formatDate-CNPcfNte.js → formatDate-SviDwHVE.js} +2 -2
- package/dist/chunks/{formatDate-CNPcfNte.js.map → formatDate-SviDwHVE.js.map} +1 -1
- package/dist/chunks/{formatters-4P9iq3wB.js → formatters-BuMl2-6q.js} +4 -4
- package/dist/chunks/{formatters-4P9iq3wB.js.map → formatters-BuMl2-6q.js.map} +1 -1
- package/dist/chunks/{scalarTypeClassification-D4YcGxtQ.js → scalarTypeClassification-DT-sUKOU.js} +141 -136
- package/dist/chunks/scalarTypeClassification-DT-sUKOU.js.map +1 -0
- package/dist/chunks/{validate-Drrm-CCz.js → validate-CNMgSfgA.js} +2 -2
- package/dist/chunks/{validate-Drrm-CCz.js.map → validate-CNMgSfgA.js.map} +1 -1
- package/dist/error-report/index.js +2 -2
- package/dist/excel/index.js +2 -2
- package/dist/formatters/date/parseDate.d.ts +1 -1
- package/dist/formatters/date/parseDate.d.ts.map +1 -1
- package/dist/formatters/index.js +4 -4
- package/dist/odata-service/index.js +2 -2
- package/package.json +1 -1
- package/src/binary/README.mdx +38 -78
- package/src/formatters/date/README.mdx +11 -2
- package/dist/chunks/scalarTypeClassification-D4YcGxtQ.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ct as e, dt as t, ft as n, lt as r, mt as i, ot as a, pt as o, st as s } from "../chunks/formatters-
|
|
1
|
+
import { ct as e, dt as t, ft as n, lt as r, mt as i, ot as a, pt as o, st as s } from "../chunks/formatters-BuMl2-6q.js";
|
|
2
2
|
import { a as c, y as l } from "../chunks/array-bd7LYFto.js";
|
|
3
|
-
import { c as u, o as d } from "../chunks/scalarTypeClassification-
|
|
3
|
+
import { c as u, o as d } from "../chunks/scalarTypeClassification-DT-sUKOU.js";
|
|
4
4
|
import { r as f } from "../chunks/formulas-BZtCqzBj.js";
|
|
5
5
|
import { a as p } from "../chunks/utils-DW0Yso1Q.js";
|
|
6
|
-
import { o as m, y as h } from "../chunks/formatDate-
|
|
6
|
+
import { o as m, y as h } from "../chunks/formatDate-SviDwHVE.js";
|
|
7
7
|
import { t as g } from "../chunks/string-comparison-BKT7PXmq.js";
|
|
8
8
|
import { buildTreeTableRows as _ } from "../tree-table/index.js";
|
|
9
9
|
var v = "group", y = "grand";
|
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
* Data URL с префиксом `data:*;base64,` поддерживается, сам URL здесь не создаётся.
|
|
5
5
|
*/
|
|
6
6
|
export declare const binaryToBlob: (binaryData: string, mimeType?: string, isBase64?: boolean) => Blob;
|
|
7
|
+
/**
|
|
8
|
+
* Ищет MIME-тип по метаданным или сигнатуре без подстановки значения по умолчанию.
|
|
9
|
+
*/
|
|
10
|
+
export declare const findMimeType: (fileName?: string, binaryData?: string) => string | null;
|
|
7
11
|
/**
|
|
8
12
|
* Определяет MIME-тип по имени файла, data URL или сигнатуре base64-данных.
|
|
9
13
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binaryToBlob.d.ts","sourceRoot":"","sources":["../../src/binary/binaryToBlob.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"binaryToBlob.d.ts","sourceRoot":"","sources":["../../src/binary/binaryToBlob.ts"],"names":[],"mappings":"AA8MA;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,YAAY,MAAM,EAAE,WAAU,MAA+B,EAAE,kBAAe,KAAG,IAmB7G,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,EAAE,aAAa,MAAM,KAAG,MAAM,GAAG,IAwB9E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,MAAM,EAAE,aAAa,MAAM,KAAG,MAA6D,CAAC"}
|
package/dist/binary/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { binaryToBlob, detectMimeType } from "./binaryToBlob";
|
|
2
2
|
export { getBase64DecodedSize } from "./getBase64DecodedSize";
|
|
3
|
-
export
|
|
3
|
+
export { useBinaryFile, type UseBinaryFileResult } from "./useBinaryFile";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/binary/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/binary/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/binary/index.js
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
import { l as e } from "../chunks/utils-DW0Yso1Q.js";
|
|
2
2
|
import { a as t, c as n, d as r, g as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "../chunks/mimeTypeConstants-BzONV-b1.js";
|
|
3
3
|
import { t as g } from "../chunks/hasSignatureBytes-D2wO_Myl.js";
|
|
4
|
-
import { useEffect as _,
|
|
4
|
+
import { useEffect as _, useMemo as v } from "react";
|
|
5
5
|
//#region src/binary/binaryToBlob.ts
|
|
6
|
-
var
|
|
6
|
+
var y = /^data:([^,]*);base64,([\s\S]*)$/i, b = 128, x = 16, S = [
|
|
7
7
|
37,
|
|
8
8
|
80,
|
|
9
9
|
68,
|
|
10
10
|
70
|
|
11
|
-
],
|
|
11
|
+
], C = [
|
|
12
12
|
255,
|
|
13
13
|
216,
|
|
14
14
|
255
|
|
15
|
-
],
|
|
15
|
+
], w = [
|
|
16
16
|
137,
|
|
17
17
|
80,
|
|
18
18
|
78,
|
|
19
19
|
71
|
|
20
|
-
],
|
|
20
|
+
], T = [
|
|
21
21
|
71,
|
|
22
22
|
73,
|
|
23
23
|
70
|
|
24
|
-
],
|
|
24
|
+
], E = [
|
|
25
25
|
82,
|
|
26
26
|
73,
|
|
27
27
|
70,
|
|
28
28
|
70
|
|
29
|
-
],
|
|
29
|
+
], D = [80, 75], O = {
|
|
30
30
|
bmp: "image/bmp",
|
|
31
31
|
csv: "text/csv",
|
|
32
32
|
doc: p,
|
|
@@ -48,12 +48,12 @@ var b = /^data:([^,]*);base64,([\s\S]*)$/i, x = 128, S = 16, C = [
|
|
|
48
48
|
xlsx: c,
|
|
49
49
|
xml: a,
|
|
50
50
|
zip: i
|
|
51
|
-
},
|
|
51
|
+
}, k = (e) => {
|
|
52
52
|
let t = e.replace(/\s/g, "").replace(/-/g, "+").replace(/_/g, "/"), n = t.length % 4;
|
|
53
53
|
if (n === 1 || !/^[A-Za-z0-9+/]*={0,2}$/.test(t)) throw Error("Некорректный формат base64");
|
|
54
54
|
return n === 0 ? t : `${t}${"=".repeat(4 - n)}`;
|
|
55
|
-
},
|
|
56
|
-
let t = e.match(
|
|
55
|
+
}, A = (e) => {
|
|
56
|
+
let t = e.match(y);
|
|
57
57
|
if (!t) return {
|
|
58
58
|
data: e,
|
|
59
59
|
mimeType: null
|
|
@@ -63,68 +63,72 @@ var b = /^data:([^,]*);base64,([\s\S]*)$/i, x = 128, S = 16, C = [
|
|
|
63
63
|
data: r,
|
|
64
64
|
mimeType: n.split(";")[0].trim() || null
|
|
65
65
|
};
|
|
66
|
-
},
|
|
67
|
-
let t =
|
|
66
|
+
}, j = (e) => {
|
|
67
|
+
let t = A(e);
|
|
68
68
|
return {
|
|
69
|
-
data:
|
|
69
|
+
data: k(t.data),
|
|
70
70
|
mimeType: t.mimeType
|
|
71
71
|
};
|
|
72
|
-
},
|
|
73
|
-
let t = e.match(
|
|
72
|
+
}, M = (e) => {
|
|
73
|
+
let t = e.match(y);
|
|
74
74
|
return t && t[1].split(";")[0].trim() || null;
|
|
75
|
-
},
|
|
76
|
-
let { data: t } =
|
|
75
|
+
}, N = (e) => {
|
|
76
|
+
let { data: t } = j(e), n = atob(t), r = new Uint8Array(n.length);
|
|
77
77
|
for (let e = 0; e < n.length; e++) r[e] = n.charCodeAt(e);
|
|
78
78
|
return r;
|
|
79
|
-
},
|
|
79
|
+
}, P = (e) => {
|
|
80
80
|
let t = new Uint8Array(e.length);
|
|
81
81
|
for (let n = 0; n < e.length; n++) t[n] = e.charCodeAt(n);
|
|
82
82
|
return t;
|
|
83
|
-
},
|
|
83
|
+
}, F = (e) => {
|
|
84
84
|
let t = new ArrayBuffer(e.byteLength);
|
|
85
85
|
return new Uint8Array(t).set(e), t;
|
|
86
|
-
},
|
|
86
|
+
}, I = (e) => {
|
|
87
87
|
try {
|
|
88
|
-
let { data: t } =
|
|
89
|
-
|
|
88
|
+
let { data: t } = A(e), n = "";
|
|
89
|
+
for (let e = 0; e < t.length && n.length < b; e++) {
|
|
90
|
+
let r = t[e];
|
|
91
|
+
/\s/.test(r) || (n += r);
|
|
92
|
+
}
|
|
93
|
+
return atob(k(n));
|
|
90
94
|
} catch {
|
|
91
95
|
return null;
|
|
92
96
|
}
|
|
93
|
-
},
|
|
94
|
-
let t =
|
|
97
|
+
}, L = (e) => {
|
|
98
|
+
let t = I(e);
|
|
95
99
|
if (!t) return null;
|
|
96
100
|
let n = new Uint8Array(t.length);
|
|
97
101
|
for (let e = 0; e < t.length; e++) n[e] = t.charCodeAt(e);
|
|
98
|
-
if (g(n,
|
|
99
|
-
if (g(n,
|
|
100
|
-
if (g(n,
|
|
101
|
-
if (g(n,
|
|
102
|
-
if (g(n,
|
|
103
|
-
if (g(n,
|
|
104
|
-
let r = t.replace(/^\uFEFF/, "").trimStart().slice(0,
|
|
102
|
+
if (g(n, S)) return s;
|
|
103
|
+
if (g(n, C)) return f;
|
|
104
|
+
if (g(n, w)) return o;
|
|
105
|
+
if (g(n, T)) return l;
|
|
106
|
+
if (g(n, E)) return u;
|
|
107
|
+
if (g(n, D)) return i;
|
|
108
|
+
let r = t.replace(/^\uFEFF/, "").trimStart().slice(0, x);
|
|
105
109
|
return r.startsWith("<?xml") || r.startsWith("<") ? a : null;
|
|
106
|
-
},
|
|
110
|
+
}, R = (e, t = n, r = !0) => {
|
|
107
111
|
if (!e) throw Error("Не переданы бинарные данные");
|
|
108
112
|
try {
|
|
109
|
-
let n = r ?
|
|
113
|
+
let n = r ? N(e) : P(e);
|
|
110
114
|
if (n.length === 0) throw Error("После преобразования не осталось данных");
|
|
111
|
-
return new Blob([
|
|
115
|
+
return new Blob([F(n)], { type: t.trim() || "application/octet-stream" });
|
|
112
116
|
} catch (e) {
|
|
113
117
|
throw e instanceof Error ? e : Error("Некорректный формат бинарных данных");
|
|
114
118
|
}
|
|
115
|
-
},
|
|
119
|
+
}, z = (e, t) => {
|
|
116
120
|
if (e) {
|
|
117
121
|
let t = e.toLowerCase().split(".").pop();
|
|
118
|
-
if (t &&
|
|
122
|
+
if (t && O[t]) return O[t];
|
|
119
123
|
}
|
|
120
124
|
if (t) {
|
|
121
|
-
let e =
|
|
125
|
+
let e = M(t);
|
|
122
126
|
if (e) return e;
|
|
123
|
-
let n =
|
|
127
|
+
let n = L(t);
|
|
124
128
|
if (n) return n;
|
|
125
129
|
}
|
|
126
|
-
return
|
|
127
|
-
}, V = /[^A-Za-z0-9+/=]/;
|
|
130
|
+
return null;
|
|
131
|
+
}, B = (e, t) => z(e, t) ?? "application/pdf", V = /[^A-Za-z0-9+/=]/;
|
|
128
132
|
function H(e) {
|
|
129
133
|
if (e.length % 4 != 0 || V.test(e)) return null;
|
|
130
134
|
let t = e.endsWith("==") ? 2 : +!!e.endsWith("="), n = e.indexOf("=");
|
|
@@ -133,24 +137,39 @@ function H(e) {
|
|
|
133
137
|
//#endregion
|
|
134
138
|
//#region src/binary/useBinaryFile.ts
|
|
135
139
|
function U(t) {
|
|
136
|
-
let
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
140
|
+
let { data: n, failure: r } = v(() => {
|
|
141
|
+
if (!t) return {
|
|
142
|
+
data: null,
|
|
143
|
+
failure: null
|
|
144
|
+
};
|
|
145
|
+
try {
|
|
146
|
+
let e = z(void 0, t), n = e ?? "application/octet-stream";
|
|
147
|
+
return {
|
|
148
|
+
data: {
|
|
149
|
+
blob: R(t, n, !0),
|
|
150
|
+
mime: n,
|
|
151
|
+
isMimeDetected: e !== null
|
|
152
|
+
},
|
|
153
|
+
failure: null
|
|
154
|
+
};
|
|
155
|
+
} catch (e) {
|
|
156
|
+
return {
|
|
157
|
+
data: null,
|
|
158
|
+
failure: {
|
|
159
|
+
cause: e,
|
|
160
|
+
message: String(e)
|
|
161
|
+
}
|
|
162
|
+
};
|
|
146
163
|
}
|
|
147
|
-
|
|
148
|
-
|
|
164
|
+
}, [t]);
|
|
165
|
+
return _(() => {
|
|
166
|
+
r && e(r.cause);
|
|
167
|
+
}, [r]), {
|
|
149
168
|
data: n,
|
|
150
|
-
error:
|
|
169
|
+
error: r?.message ?? null
|
|
151
170
|
};
|
|
152
171
|
}
|
|
153
172
|
//#endregion
|
|
154
|
-
export {
|
|
173
|
+
export { R as binaryToBlob, B as detectMimeType, H as getBase64DecodedSize, U as useBinaryFile };
|
|
155
174
|
|
|
156
175
|
//# sourceMappingURL=index.js.map
|
package/dist/binary/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/binary/binaryToBlob.ts","../../src/binary/getBase64DecodedSize.ts","../../src/binary/useBinaryFile.ts"],"sourcesContent":["import {\n\tMIME_TYPE_DOCX,\n\tMIME_TYPE_IMAGE_GIF,\n\tMIME_TYPE_IMAGE_JPEG,\n\tMIME_TYPE_IMAGE_PNG,\n\tMIME_TYPE_IMAGE_TIFF,\n\tMIME_TYPE_IMAGE_WEBP,\n\tMIME_TYPE_MSWORD,\n\tMIME_TYPE_OCTET_STREAM,\n\tMIME_TYPE_PDF,\n\tMIME_TYPE_PPT,\n\tMIME_TYPE_PPTX,\n\tMIME_TYPE_XLS,\n\tMIME_TYPE_XLSX,\n\tMIME_TYPE_XML,\n\tMIME_TYPE_ZIP\n} from \"../file/mimeTypeConstants\";\nimport { hasSignatureBytes } from \"../file/signature/hasSignatureBytes\";\n\nimport { BASE64_ENCODED_BLOCK_CHARACTERS, BASE64_PADDING } from \"./base64Constants\";\n\nconst BASE64_DATA_URL_PATTERN = /^data:([^,]*);base64,([\\s\\S]*)$/i;\nconst BASE64_HEADER_SCAN_CHARACTERS = 128;\nconst XML_HEADER_SCAN_CHARACTERS = 16;\n// Здесь распознаётся только прежний короткий prefix, без усиления проверки формата.\nconst PDF_HEADER_PREFIX = [0x25, 0x50, 0x44, 0x46];\nconst JPEG_HEADER_PREFIX = [0xff, 0xd8, 0xff];\nconst PNG_HEADER_PREFIX = [0x89, 0x50, 0x4e, 0x47];\nconst GIF_HEADER_PREFIX = [0x47, 0x49, 0x46];\nconst WEBP_HEADER_PREFIX = [0x52, 0x49, 0x46, 0x46];\nconst ZIP_HEADER_PREFIX = [0x50, 0x4b];\n\nconst MIME_TYPE_BY_EXTENSION: Record<string, string> = {\n\tbmp: \"image/bmp\",\n\tcsv: \"text/csv\",\n\tdoc: MIME_TYPE_MSWORD,\n\tdocx: MIME_TYPE_DOCX,\n\tgif: MIME_TYPE_IMAGE_GIF,\n\tjpeg: MIME_TYPE_IMAGE_JPEG,\n\tjpg: MIME_TYPE_IMAGE_JPEG,\n\tjson: \"application/json\",\n\tpdf: MIME_TYPE_PDF,\n\tpng: MIME_TYPE_IMAGE_PNG,\n\tppt: MIME_TYPE_PPT,\n\tpptx: MIME_TYPE_PPTX,\n\tsvg: \"image/svg+xml\",\n\ttif: MIME_TYPE_IMAGE_TIFF,\n\ttiff: MIME_TYPE_IMAGE_TIFF,\n\ttxt: \"text/plain\",\n\twebp: MIME_TYPE_IMAGE_WEBP,\n\txls: MIME_TYPE_XLS,\n\txlsx: MIME_TYPE_XLSX,\n\txml: MIME_TYPE_XML,\n\tzip: MIME_TYPE_ZIP\n};\n\nconst normalizeBase64 = (value: string): string => {\n\tconst normalized = value.replace(/\\s/g, \"\").replace(/-/g, \"+\").replace(/_/g, \"/\");\n\tconst paddingRest = normalized.length % BASE64_ENCODED_BLOCK_CHARACTERS;\n\n\tif (paddingRest === 1 || !/^[A-Za-z0-9+/]*={0,2}$/.test(normalized)) {\n\t\tthrow new Error(\"Некорректный формат base64\");\n\t}\n\n\treturn paddingRest === 0 ? normalized : `${normalized}${BASE64_PADDING.repeat(BASE64_ENCODED_BLOCK_CHARACTERS - paddingRest)}`;\n};\n\nconst getBase64RawPayload = (binaryData: string): { data: string; mimeType: string | null } => {\n\tconst dataUrlMatch = binaryData.match(BASE64_DATA_URL_PATTERN);\n\n\tif (!dataUrlMatch) {\n\t\treturn { data: binaryData, mimeType: null };\n\t}\n\n\tconst [, rawMimeType, rawData] = dataUrlMatch;\n\tconst mimeType = rawMimeType.split(\";\")[0].trim();\n\n\treturn {\n\t\tdata: rawData,\n\t\tmimeType: mimeType || null\n\t};\n};\n\nconst getBase64Payload = (binaryData: string): { data: string; mimeType: string | null } => {\n\tconst payload = getBase64RawPayload(binaryData);\n\n\treturn {\n\t\tdata: normalizeBase64(payload.data),\n\t\tmimeType: payload.mimeType\n\t};\n};\n\nconst getDataUrlMimeType = (binaryData: string): string | null => {\n\tconst dataUrlMatch = binaryData.match(BASE64_DATA_URL_PATTERN);\n\n\tif (!dataUrlMatch) {\n\t\treturn null;\n\t}\n\n\tconst mimeType = dataUrlMatch[1].split(\";\")[0].trim();\n\n\treturn mimeType || null;\n};\n\nconst decodeBase64ToBytes = (binaryData: string): Uint8Array => {\n\tconst { data } = getBase64Payload(binaryData);\n\tconst binaryString = atob(data);\n\tconst byteArray = new Uint8Array(binaryString.length);\n\n\tfor (let index = 0; index < binaryString.length; index++) {\n\t\tbyteArray[index] = binaryString.charCodeAt(index);\n\t}\n\n\treturn byteArray;\n};\n\nconst binaryStringToBytes = (binaryData: string): Uint8Array => {\n\tconst byteArray = new Uint8Array(binaryData.length);\n\n\tfor (let index = 0; index < binaryData.length; index++) {\n\t\tbyteArray[index] = binaryData.charCodeAt(index);\n\t}\n\n\treturn byteArray;\n};\n\nconst copyBytesToArrayBuffer = (byteArray: Uint8Array): ArrayBuffer => {\n\tconst buffer = new ArrayBuffer(byteArray.byteLength);\n\tconst view = new Uint8Array(buffer);\n\n\tview.set(byteArray);\n\n\treturn buffer;\n};\n\nconst decodeHeaderFromBase64 = (binaryData: string): string | null => {\n\ttry {\n\t\tconst { data } = getBase64RawPayload(binaryData);\n\t\tconst headerData = data.slice(0, BASE64_HEADER_SCAN_CHARACTERS);\n\t\tconst binaryString = atob(normalizeBase64(headerData));\n\n\t\treturn binaryString;\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nconst detectMimeTypeBySignature = (binaryData: string): string | null => {\n\tconst header = decodeHeaderFromBase64(binaryData);\n\n\tif (!header) {\n\t\treturn null;\n\t}\n\n\tconst bytes = new Uint8Array(header.length);\n\n\tfor (let index = 0; index < header.length; index++) {\n\t\tbytes[index] = header.charCodeAt(index);\n\t}\n\n\tif (hasSignatureBytes(bytes, PDF_HEADER_PREFIX)) {\n\t\treturn MIME_TYPE_PDF;\n\t}\n\n\tif (hasSignatureBytes(bytes, JPEG_HEADER_PREFIX)) {\n\t\treturn MIME_TYPE_IMAGE_JPEG;\n\t}\n\n\tif (hasSignatureBytes(bytes, PNG_HEADER_PREFIX)) {\n\t\treturn MIME_TYPE_IMAGE_PNG;\n\t}\n\n\tif (hasSignatureBytes(bytes, GIF_HEADER_PREFIX)) {\n\t\treturn MIME_TYPE_IMAGE_GIF;\n\t}\n\n\tif (hasSignatureBytes(bytes, WEBP_HEADER_PREFIX)) {\n\t\treturn MIME_TYPE_IMAGE_WEBP;\n\t}\n\n\tif (hasSignatureBytes(bytes, ZIP_HEADER_PREFIX)) {\n\t\treturn MIME_TYPE_ZIP;\n\t}\n\n\tconst textHeader = header\n\t\t.replace(/^\\uFEFF/, \"\")\n\t\t.trimStart()\n\t\t.slice(0, XML_HEADER_SCAN_CHARACTERS);\n\n\tif (textHeader.startsWith(\"<?xml\") || textHeader.startsWith(\"<\")) {\n\t\treturn MIME_TYPE_XML;\n\t}\n\n\treturn null;\n};\n\n/**\n * Преобразует base64 или бинарную строку в Blob.\n *\n * Data URL с префиксом `data:*;base64,` поддерживается, сам URL здесь не создаётся.\n */\nexport const binaryToBlob = (binaryData: string, mimeType: string = MIME_TYPE_OCTET_STREAM, isBase64 = true): Blob => {\n\tif (!binaryData) {\n\t\tthrow new Error(\"Не переданы бинарные данные\");\n\t}\n\n\ttry {\n\t\tconst byteArray = isBase64 ? decodeBase64ToBytes(binaryData) : binaryStringToBytes(binaryData);\n\n\t\tif (byteArray.length === 0) {\n\t\t\tthrow new Error(\"После преобразования не осталось данных\");\n\t\t}\n\n\t\treturn new Blob([copyBytesToArrayBuffer(byteArray)], { type: mimeType.trim() || MIME_TYPE_OCTET_STREAM });\n\t} catch (error) {\n\t\tif (error instanceof Error) {\n\t\t\tthrow error;\n\t\t}\n\t\tthrow new Error(\"Некорректный формат бинарных данных\");\n\t}\n};\n\n/**\n * Определяет MIME-тип по имени файла, data URL или сигнатуре base64-данных.\n *\n * Если определить тип не удалось, используется PDF: большинство документов в этом контуре приходят именно так.\n */\nexport const detectMimeType = (fileName?: string, binaryData?: string): string => {\n\tif (fileName) {\n\t\tconst extension = fileName.toLowerCase().split(\".\").pop();\n\n\t\tif (extension && MIME_TYPE_BY_EXTENSION[extension]) {\n\t\t\treturn MIME_TYPE_BY_EXTENSION[extension];\n\t\t}\n\t}\n\n\tif (binaryData) {\n\t\tconst dataUrlMimeType = getDataUrlMimeType(binaryData);\n\n\t\tif (dataUrlMimeType) {\n\t\t\treturn dataUrlMimeType;\n\t\t}\n\n\t\tconst signatureMimeType = detectMimeTypeBySignature(binaryData);\n\n\t\tif (signatureMimeType) {\n\t\t\treturn signatureMimeType;\n\t\t}\n\t}\n\n\treturn MIME_TYPE_PDF;\n};\n","import { BASE64_DECODED_BLOCK_BYTES, BASE64_DOUBLE_PADDING, BASE64_ENCODED_BLOCK_CHARACTERS, BASE64_PADDING } from \"./base64Constants\";\n\nconst INVALID_BASE64_CHARACTER_PATTERN = /[^A-Za-z0-9+/=]/;\n\n/**\n * Проверяет стандартную Base64-форму и считает байты без декодирования или создания Buffer/Blob.\n * Невалидный payload возвращает null, пустая строка — 0; допустимый размер определяет вызывающий контракт.\n * Data URL, whitespace, URL-safe алфавит и отсутствующий padding здесь не нормализуются.\n */\nexport function getBase64DecodedSize(value: string): number | null {\n\tif (value.length % BASE64_ENCODED_BLOCK_CHARACTERS !== 0 || INVALID_BASE64_CHARACTER_PATTERN.test(value)) return null;\n\tconst paddingLength = value.endsWith(BASE64_DOUBLE_PADDING) ? 2 : value.endsWith(BASE64_PADDING) ? 1 : 0;\n\tconst firstPaddingIndex = value.indexOf(BASE64_PADDING);\n\tif (firstPaddingIndex !== -1 && firstPaddingIndex !== value.length - paddingLength) return null;\n\treturn Math.floor((value.length * BASE64_DECODED_BLOCK_BYTES) / BASE64_ENCODED_BLOCK_CHARACTERS) - paddingLength;\n}\n","import { useEffect, useEffectEvent, useState } from \"react\";\n\nimport { logError } from \"../utils\";\n\nimport { binaryToBlob, detectMimeType } from \"./binaryToBlob\";\n\nexport function useBinaryFile(bin: string | undefined) {\n\tconst [entry, setEntry] = useState<{ blob: Blob; mime: string } | null>(null);\n\tconst [error, setError] = useState<string | null>(null);\n\n\tconst updateEntry = useEffectEvent((data: { blob: Blob; mime: string } | null) => setEntry(data));\n\tconst updateError = useEffectEvent((error: string | null) => setError(error));\n\n\tuseEffect(() => {\n\t\tif (bin) {\n\t\t\ttry {\n\t\t\t\tconst mime = detectMimeType(undefined, bin);\n\t\t\t\tconst blob = binaryToBlob(bin, mime, true);\n\n\t\t\t\tupdateEntry({ blob, mime });\n\t\t\t\tupdateError(null);\n\t\t\t} catch (e) {\n\t\t\t\tlogError(e);\n\n\t\t\t\tupdateError(String(e));\n\t\t\t\tupdateEntry(null);\n\t\t\t}\n\t\t} else {\n\t\t\tupdateEntry(null);\n\t\t\tupdateError(null);\n\t\t}\n\t}, [bin]);\n\n\treturn { data: entry, error };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/binary/binaryToBlob.ts","../../src/binary/getBase64DecodedSize.ts","../../src/binary/useBinaryFile.ts"],"sourcesContent":["import {\n\tMIME_TYPE_DOCX,\n\tMIME_TYPE_IMAGE_GIF,\n\tMIME_TYPE_IMAGE_JPEG,\n\tMIME_TYPE_IMAGE_PNG,\n\tMIME_TYPE_IMAGE_TIFF,\n\tMIME_TYPE_IMAGE_WEBP,\n\tMIME_TYPE_MSWORD,\n\tMIME_TYPE_OCTET_STREAM,\n\tMIME_TYPE_PDF,\n\tMIME_TYPE_PPT,\n\tMIME_TYPE_PPTX,\n\tMIME_TYPE_XLS,\n\tMIME_TYPE_XLSX,\n\tMIME_TYPE_XML,\n\tMIME_TYPE_ZIP\n} from \"../file/mimeTypeConstants\";\nimport { hasSignatureBytes } from \"../file/signature/hasSignatureBytes\";\n\nimport { BASE64_ENCODED_BLOCK_CHARACTERS, BASE64_PADDING } from \"./base64Constants\";\n\nconst BASE64_DATA_URL_PATTERN = /^data:([^,]*);base64,([\\s\\S]*)$/i;\nconst BASE64_HEADER_SCAN_CHARACTERS = 128;\nconst XML_HEADER_SCAN_CHARACTERS = 16;\n// Здесь распознаётся только прежний короткий prefix, без усиления проверки формата.\nconst PDF_HEADER_PREFIX = [0x25, 0x50, 0x44, 0x46];\nconst JPEG_HEADER_PREFIX = [0xff, 0xd8, 0xff];\nconst PNG_HEADER_PREFIX = [0x89, 0x50, 0x4e, 0x47];\nconst GIF_HEADER_PREFIX = [0x47, 0x49, 0x46];\nconst WEBP_HEADER_PREFIX = [0x52, 0x49, 0x46, 0x46];\nconst ZIP_HEADER_PREFIX = [0x50, 0x4b];\n\nconst MIME_TYPE_BY_EXTENSION: Record<string, string> = {\n\tbmp: \"image/bmp\",\n\tcsv: \"text/csv\",\n\tdoc: MIME_TYPE_MSWORD,\n\tdocx: MIME_TYPE_DOCX,\n\tgif: MIME_TYPE_IMAGE_GIF,\n\tjpeg: MIME_TYPE_IMAGE_JPEG,\n\tjpg: MIME_TYPE_IMAGE_JPEG,\n\tjson: \"application/json\",\n\tpdf: MIME_TYPE_PDF,\n\tpng: MIME_TYPE_IMAGE_PNG,\n\tppt: MIME_TYPE_PPT,\n\tpptx: MIME_TYPE_PPTX,\n\tsvg: \"image/svg+xml\",\n\ttif: MIME_TYPE_IMAGE_TIFF,\n\ttiff: MIME_TYPE_IMAGE_TIFF,\n\ttxt: \"text/plain\",\n\twebp: MIME_TYPE_IMAGE_WEBP,\n\txls: MIME_TYPE_XLS,\n\txlsx: MIME_TYPE_XLSX,\n\txml: MIME_TYPE_XML,\n\tzip: MIME_TYPE_ZIP\n};\n\nconst normalizeBase64 = (value: string): string => {\n\tconst normalized = value.replace(/\\s/g, \"\").replace(/-/g, \"+\").replace(/_/g, \"/\");\n\tconst paddingRest = normalized.length % BASE64_ENCODED_BLOCK_CHARACTERS;\n\n\tif (paddingRest === 1 || !/^[A-Za-z0-9+/]*={0,2}$/.test(normalized)) {\n\t\tthrow new Error(\"Некорректный формат base64\");\n\t}\n\n\treturn paddingRest === 0 ? normalized : `${normalized}${BASE64_PADDING.repeat(BASE64_ENCODED_BLOCK_CHARACTERS - paddingRest)}`;\n};\n\nconst getBase64RawPayload = (binaryData: string): { data: string; mimeType: string | null } => {\n\tconst dataUrlMatch = binaryData.match(BASE64_DATA_URL_PATTERN);\n\n\tif (!dataUrlMatch) {\n\t\treturn { data: binaryData, mimeType: null };\n\t}\n\n\tconst [, rawMimeType, rawData] = dataUrlMatch;\n\tconst mimeType = rawMimeType.split(\";\")[0].trim();\n\n\treturn {\n\t\tdata: rawData,\n\t\tmimeType: mimeType || null\n\t};\n};\n\nconst getBase64Payload = (binaryData: string): { data: string; mimeType: string | null } => {\n\tconst payload = getBase64RawPayload(binaryData);\n\n\treturn {\n\t\tdata: normalizeBase64(payload.data),\n\t\tmimeType: payload.mimeType\n\t};\n};\n\nconst getDataUrlMimeType = (binaryData: string): string | null => {\n\tconst dataUrlMatch = binaryData.match(BASE64_DATA_URL_PATTERN);\n\n\tif (!dataUrlMatch) {\n\t\treturn null;\n\t}\n\n\tconst mimeType = dataUrlMatch[1].split(\";\")[0].trim();\n\n\treturn mimeType || null;\n};\n\nconst decodeBase64ToBytes = (binaryData: string): Uint8Array => {\n\tconst { data } = getBase64Payload(binaryData);\n\tconst binaryString = atob(data);\n\tconst byteArray = new Uint8Array(binaryString.length);\n\n\tfor (let index = 0; index < binaryString.length; index++) {\n\t\tbyteArray[index] = binaryString.charCodeAt(index);\n\t}\n\n\treturn byteArray;\n};\n\nconst binaryStringToBytes = (binaryData: string): Uint8Array => {\n\tconst byteArray = new Uint8Array(binaryData.length);\n\n\tfor (let index = 0; index < binaryData.length; index++) {\n\t\tbyteArray[index] = binaryData.charCodeAt(index);\n\t}\n\n\treturn byteArray;\n};\n\nconst copyBytesToArrayBuffer = (byteArray: Uint8Array): ArrayBuffer => {\n\tconst buffer = new ArrayBuffer(byteArray.byteLength);\n\tconst view = new Uint8Array(buffer);\n\n\tview.set(byteArray);\n\n\treturn buffer;\n};\n\nconst decodeHeaderFromBase64 = (binaryData: string): string | null => {\n\ttry {\n\t\tconst { data } = getBase64RawPayload(binaryData);\n\t\tlet headerData = \"\";\n\n\t\t// Пробелы и переносы допустимы в Base64 и не должны обрывать блок заголовка.\n\t\tfor (let index = 0; index < data.length && headerData.length < BASE64_HEADER_SCAN_CHARACTERS; index++) {\n\t\t\tconst character = data[index];\n\n\t\t\tif (!/\\s/.test(character)) {\n\t\t\t\theaderData += character;\n\t\t\t}\n\t\t}\n\n\t\tconst binaryString = atob(normalizeBase64(headerData));\n\n\t\treturn binaryString;\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nconst detectMimeTypeBySignature = (binaryData: string): string | null => {\n\tconst header = decodeHeaderFromBase64(binaryData);\n\n\tif (!header) {\n\t\treturn null;\n\t}\n\n\tconst bytes = new Uint8Array(header.length);\n\n\tfor (let index = 0; index < header.length; index++) {\n\t\tbytes[index] = header.charCodeAt(index);\n\t}\n\n\tif (hasSignatureBytes(bytes, PDF_HEADER_PREFIX)) {\n\t\treturn MIME_TYPE_PDF;\n\t}\n\n\tif (hasSignatureBytes(bytes, JPEG_HEADER_PREFIX)) {\n\t\treturn MIME_TYPE_IMAGE_JPEG;\n\t}\n\n\tif (hasSignatureBytes(bytes, PNG_HEADER_PREFIX)) {\n\t\treturn MIME_TYPE_IMAGE_PNG;\n\t}\n\n\tif (hasSignatureBytes(bytes, GIF_HEADER_PREFIX)) {\n\t\treturn MIME_TYPE_IMAGE_GIF;\n\t}\n\n\tif (hasSignatureBytes(bytes, WEBP_HEADER_PREFIX)) {\n\t\treturn MIME_TYPE_IMAGE_WEBP;\n\t}\n\n\tif (hasSignatureBytes(bytes, ZIP_HEADER_PREFIX)) {\n\t\treturn MIME_TYPE_ZIP;\n\t}\n\n\tconst textHeader = header\n\t\t.replace(/^\\uFEFF/, \"\")\n\t\t.trimStart()\n\t\t.slice(0, XML_HEADER_SCAN_CHARACTERS);\n\n\tif (textHeader.startsWith(\"<?xml\") || textHeader.startsWith(\"<\")) {\n\t\treturn MIME_TYPE_XML;\n\t}\n\n\treturn null;\n};\n\n/**\n * Преобразует base64 или бинарную строку в Blob.\n *\n * Data URL с префиксом `data:*;base64,` поддерживается, сам URL здесь не создаётся.\n */\nexport const binaryToBlob = (binaryData: string, mimeType: string = MIME_TYPE_OCTET_STREAM, isBase64 = true): Blob => {\n\tif (!binaryData) {\n\t\tthrow new Error(\"Не переданы бинарные данные\");\n\t}\n\n\ttry {\n\t\tconst byteArray = isBase64 ? decodeBase64ToBytes(binaryData) : binaryStringToBytes(binaryData);\n\n\t\tif (byteArray.length === 0) {\n\t\t\tthrow new Error(\"После преобразования не осталось данных\");\n\t\t}\n\n\t\treturn new Blob([copyBytesToArrayBuffer(byteArray)], { type: mimeType.trim() || MIME_TYPE_OCTET_STREAM });\n\t} catch (error) {\n\t\tif (error instanceof Error) {\n\t\t\tthrow error;\n\t\t}\n\t\tthrow new Error(\"Некорректный формат бинарных данных\");\n\t}\n};\n\n/**\n * Ищет MIME-тип по метаданным или сигнатуре без подстановки значения по умолчанию.\n */\nexport const findMimeType = (fileName?: string, binaryData?: string): string | null => {\n\tif (fileName) {\n\t\tconst extension = fileName.toLowerCase().split(\".\").pop();\n\n\t\tif (extension && MIME_TYPE_BY_EXTENSION[extension]) {\n\t\t\treturn MIME_TYPE_BY_EXTENSION[extension];\n\t\t}\n\t}\n\n\tif (binaryData) {\n\t\tconst dataUrlMimeType = getDataUrlMimeType(binaryData);\n\n\t\tif (dataUrlMimeType) {\n\t\t\treturn dataUrlMimeType;\n\t\t}\n\n\t\tconst signatureMimeType = detectMimeTypeBySignature(binaryData);\n\n\t\tif (signatureMimeType) {\n\t\t\treturn signatureMimeType;\n\t\t}\n\t}\n\n\treturn null;\n};\n\n/**\n * Определяет MIME-тип по имени файла, data URL или сигнатуре base64-данных.\n *\n * Если определить тип не удалось, используется PDF: большинство документов в этом контуре приходят именно так.\n */\nexport const detectMimeType = (fileName?: string, binaryData?: string): string => findMimeType(fileName, binaryData) ?? MIME_TYPE_PDF;\n","import { BASE64_DECODED_BLOCK_BYTES, BASE64_DOUBLE_PADDING, BASE64_ENCODED_BLOCK_CHARACTERS, BASE64_PADDING } from \"./base64Constants\";\n\nconst INVALID_BASE64_CHARACTER_PATTERN = /[^A-Za-z0-9+/=]/;\n\n/**\n * Проверяет стандартную Base64-форму и считает байты без декодирования или создания Buffer/Blob.\n * Невалидный payload возвращает null, пустая строка — 0; допустимый размер определяет вызывающий контракт.\n * Data URL, whitespace, URL-safe алфавит и отсутствующий padding здесь не нормализуются.\n */\nexport function getBase64DecodedSize(value: string): number | null {\n\tif (value.length % BASE64_ENCODED_BLOCK_CHARACTERS !== 0 || INVALID_BASE64_CHARACTER_PATTERN.test(value)) return null;\n\tconst paddingLength = value.endsWith(BASE64_DOUBLE_PADDING) ? 2 : value.endsWith(BASE64_PADDING) ? 1 : 0;\n\tconst firstPaddingIndex = value.indexOf(BASE64_PADDING);\n\tif (firstPaddingIndex !== -1 && firstPaddingIndex !== value.length - paddingLength) return null;\n\treturn Math.floor((value.length * BASE64_DECODED_BLOCK_BYTES) / BASE64_ENCODED_BLOCK_CHARACTERS) - paddingLength;\n}\n","import { useEffect, useMemo } from \"react\";\n\nimport { MIME_TYPE_OCTET_STREAM } from \"../file/mimeTypeConstants\";\nimport { logError } from \"../utils\";\n\nimport { binaryToBlob, findMimeType } from \"./binaryToBlob\";\n\ntype BinaryFileData = {\n\tblob: Blob;\n\tmime: string;\n\t/** MIME взят из data URL или определён по сигнатуре. Значение false обозначает подстановку нейтрального MIME. */\n\tisMimeDetected: boolean;\n};\n\nexport type UseBinaryFileResult = {\n\tdata: BinaryFileData | null;\n\terror: string | null;\n};\n\n/**\n * Декодирует текущий bin при рендере. Мемоизация позволяет просмотрщику\n * переиспользовать Blob при повторном рендере с тем же входом.\n */\nexport function useBinaryFile(bin: string | undefined): UseBinaryFileResult {\n\tconst { data, failure } = useMemo(() => {\n\t\tif (!bin) {\n\t\t\treturn { data: null, failure: null };\n\t\t}\n\n\t\ttry {\n\t\t\tconst detectedMime = findMimeType(undefined, bin);\n\t\t\tconst mime = detectedMime ?? MIME_TYPE_OCTET_STREAM;\n\t\t\tconst blob = binaryToBlob(bin, mime, true);\n\n\t\t\treturn { data: { blob, mime, isMimeDetected: detectedMime !== null }, failure: null };\n\t\t} catch (cause) {\n\t\t\treturn { data: null, failure: { cause, message: String(cause) } };\n\t\t}\n\t}, [bin]);\n\n\tuseEffect(() => {\n\t\tif (failure) {\n\t\t\tlogError(failure.cause);\n\t\t}\n\t}, [failure]);\n\n\treturn { data, error: failure?.message ?? null };\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
type BinaryFileData = {
|
|
2
|
+
blob: Blob;
|
|
3
|
+
mime: string;
|
|
4
|
+
/** MIME взят из data URL или определён по сигнатуре. Значение false обозначает подстановку нейтрального MIME. */
|
|
5
|
+
isMimeDetected: boolean;
|
|
6
|
+
};
|
|
7
|
+
export type UseBinaryFileResult = {
|
|
8
|
+
data: BinaryFileData | null;
|
|
6
9
|
error: string | null;
|
|
7
10
|
};
|
|
11
|
+
/**
|
|
12
|
+
* Декодирует текущий bin при рендере. Мемоизация позволяет просмотрщику
|
|
13
|
+
* переиспользовать Blob при повторном рендере с тем же входом.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useBinaryFile(bin: string | undefined): UseBinaryFileResult;
|
|
16
|
+
export {};
|
|
8
17
|
//# sourceMappingURL=useBinaryFile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBinaryFile.d.ts","sourceRoot":"","sources":["../../src/binary/useBinaryFile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useBinaryFile.d.ts","sourceRoot":"","sources":["../../src/binary/useBinaryFile.ts"],"names":[],"mappings":"AAOA,KAAK,cAAc,GAAG;IACrB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iHAAiH;IACjH,cAAc,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,mBAAmB,CAwB1E"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as e, B as t, F as n, G as r, H as i, I as a, J as o, K as s, L as c, M as l, N as u, P as d, Q as f, R as p, U as m, V as h, W as g, X as _, Y as v, Z as y, g as b, h as x, j as S, k as C, q as w, u as T, z as E } from "./scalarTypeClassification-
|
|
1
|
+
import { A as e, B as t, F as n, G as r, H as i, I as a, J as o, K as s, L as c, M as l, N as u, P as d, Q as f, R as p, U as m, V as h, W as g, X as _, Y as v, Z as y, g as b, h as x, j as S, k as C, q as w, u as T, z as E } from "./scalarTypeClassification-DT-sUKOU.js";
|
|
2
2
|
//#region src/formatters/boolean/parseAbapBoolean.ts
|
|
3
3
|
function D(e) {
|
|
4
4
|
return !!(e && typeof e == "string" && e === "X");
|
|
@@ -130,4 +130,4 @@ function se(e, t) {
|
|
|
130
130
|
//#endregion
|
|
131
131
|
export { Y as C, $ as D, q as E, D as O, R as S, z as T, K as _, te as a, oe as b, ee as c, Q as d, Z as f, H as g, U as h, ne as i, O as k, B as l, W as m, re as n, I as o, X as p, ie as r, V as s, F as t, L as u, G as v, J as w, se as x, ae as y };
|
|
132
132
|
|
|
133
|
-
//# sourceMappingURL=formatDate-
|
|
133
|
+
//# sourceMappingURL=formatDate-SviDwHVE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatDate-CNPcfNte.js","names":[],"sources":["../../src/formatters/boolean/parseAbapBoolean.ts","../../src/formatters/date/formatDate.ts"],"sourcesContent":["import { ABAP_BOOLEAN_TRUE } from \"../../types/abapBooleanConstants\";\n\nexport function parseAbapBoolean(value: unknown): boolean {\n\tif (value && typeof value === \"string\" && value === ABAP_BOOLEAN_TRUE) return true;\n\treturn false;\n}\n\nexport function parseBoolean(value: unknown): boolean {\n\tif (!value) return false;\n\tif (typeof value === \"string\") {\n\t\treturn [\"true\", \"x\", \"1\"].includes(value.toLowerCase());\n\t}\n\treturn Boolean(value);\n}\n","import { DATE_FORMAT_PRECISION_DAY } from \"./dateFormatConstants\";\nimport {\n\tDATE_PRESET_NAME_DATE,\n\tDATE_PRESET_NAME_DATE_SHORT,\n\tDATE_PRESET_NAME_DATE_MEDIUM,\n\tDATE_PRESET_NAME_DATE_LONG,\n\tDATE_PRESET_NAME_MONTH_SHORT,\n\tDATE_PRESET_NAME_MONTH_MEDIUM,\n\tDATE_PRESET_NAME_MONTH_LONG,\n\tDATE_PRESET_NAME_MONTH_YEAR_MEDIUM,\n\tDATE_PRESET_NAME_MONTH_YEAR_LONG,\n\tDATE_PRESET_NAME_DATETIME,\n\tDATE_PRESET_NAME_DATETIME_SHORT,\n\tDATE_PRESET_NAME_DATETIME_MEDIUM,\n\tDATE_PRESET_NAME_DATETIME_LONG,\n\tDATE_PRESET_NAME_TIME,\n\tDATE_PRESET_NAME_TIME_SECONDS,\n\tDATE_PRESET_NAME_TIME_SHORT,\n\tDATE_PRESET_NAME_TIME_MEDIUM,\n\tDATE_PRESET_NAME_TIME_LONG,\n\tDATE_PRESET_NAME_ODATA_DATE,\n\tDATE_PRESET_NAME_ODATA_DATETIME,\n\tDATE_PRESET_NAME_ABAP_DATETIME,\n\tDATE_PRESET_NAME_ABAP_DATE,\n\tDATE_PRESET_NAME_ABAP_MONTH,\n\tDATE_PRESET_NAME_ABAP_YEAR\n} from \"./datePresetNameConstants\";\nimport { PARSED_DATE_KIND_DURATION } from \"./dateValueConstants\";\nimport { parseDateValue } from \"./parseDate\";\nimport { compileDatePreset, CompiledDateFormatPreset, getCompiledDatePreset } from \"./presets\";\nimport { DateFormatPrecision, DateFormatPreset, FormatDateOptions, ParsedDateValue } from \"./types\";\n\nconst ODATA_DURATION_ZERO_PART = \"00\";\n\n/**\n * Кеш скомпилированных объектных предустановок.\n *\n * Именованные предустановки компилируются в реестре, а объектные могут\n * передаваться напрямую в горячем пути таблиц. WeakMap сохраняет готовый\n * Intl.DateTimeFormat на время жизни объекта и не мешает сборке мусора.\n */\nconst objectPresetCache = new WeakMap<DateFormatPreset, CompiledDateFormatPreset>();\n\n/**\n * Дополняет числовую часть даты ведущим нулём.\n */\nfunction padDatePart(value: number): string {\n\treturn String(value).padStart(2, \"0\");\n}\n\n/**\n * Разрешает предустановку по имени или объекту.\n */\nfunction resolvePreset(presetOrName: string | DateFormatPreset): CompiledDateFormatPreset {\n\tif (typeof presetOrName !== \"string\") {\n\t\tconst cachedPreset = objectPresetCache.get(presetOrName);\n\t\tif (cachedPreset) return cachedPreset;\n\n\t\tconst compiledPreset = compileDatePreset(presetOrName);\n\t\tobjectPresetCache.set(presetOrName, compiledPreset);\n\t\treturn compiledPreset;\n\t}\n\n\tconst preset = getCompiledDatePreset(presetOrName);\n\tif (!preset) {\n\t\tthrow new Error(`Предустановка даты \"${presetOrName}\" не найдена`);\n\t}\n\treturn preset;\n}\n\n/**\n * Определяет fallback с учётом опций вызова и предустановки.\n */\nfunction resolveFallback(preset: CompiledDateFormatPreset, options?: FormatDateOptions): string {\n\treturn options?.fallback ?? preset.invalidFallback;\n}\n\n/**\n * Форматирует уже распарсенное значение.\n */\nfunction formatParsedValue(\n\tparsed: ParsedDateValue,\n\tpreset: CompiledDateFormatPreset,\n\tfallback: string,\n\tprecision: DateFormatPrecision\n): string {\n\tif (parsed.kind === PARSED_DATE_KIND_DURATION) {\n\t\treturn preset.formatDuration ? preset.formatDuration(parsed.durationMs, fallback) : fallback;\n\t}\n\n\treturn preset.formatDateTime(parsed.date, precision);\n}\n\n/**\n * Универсально форматирует дату/время по предустановке или её имени.\n */\nexport function formatDate(\n\tvalue: unknown,\n\tpresetOrName: string | DateFormatPreset = DATE_PRESET_NAME_DATE,\n\toptions?: FormatDateOptions\n): string {\n\tconst preset = resolvePreset(presetOrName);\n\tconst fallback = resolveFallback(preset, options);\n\tconst precision = options?.precision ?? DATE_FORMAT_PRECISION_DAY;\n\tconst parsed = parseDateValue(value);\n\n\tif (!parsed) return fallback;\n\treturn formatParsedValue(parsed, preset, fallback, precision);\n}\n\n/**\n * Форматирует значение как дату `dd.MM.yyyy`.\n */\nexport function formatDateAsDate(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATE, options);\n}\n\n/**\n * Форматирует значение как дату и время `dd.MM.yyyy HH:mm`.\n */\nexport function formatDateAsDateTime(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATETIME, options);\n}\n\n/**\n * Форматирует значение как время `HH:mm`.\n */\nexport function formatDateAsTime(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_TIME, options);\n}\n\n/**\n * Форматирует значение как время `HH:mm:ss`.\n */\nexport function formatDateAsTimeSeconds(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_TIME_SECONDS, options);\n}\n\n/**\n * Форматирует значение как короткую дату `03.03.2026`.\n */\nexport function formatDateAsDateShort(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATE_SHORT, options);\n}\n\n/**\n * Форматирует значение как среднюю дату `3 мар. 2026 г.`.\n */\nexport function formatDateAsDateMedium(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATE_MEDIUM, options);\n}\n\n/**\n * Форматирует значение как длинную дату `3 марта 2026 г.`.\n */\nexport function formatDateAsDateLong(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATE_LONG, options);\n}\n\n/**\n * Форматирует значение как короткую дату без года `03.03`.\n */\nexport function formatDateAsMonthShort(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_MONTH_SHORT, options);\n}\n\n/**\n * Форматирует значение как среднюю дату без года `3 мар.`.\n */\nexport function formatDateAsMonthMedium(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_MONTH_MEDIUM, options);\n}\n\n/**\n * Форматирует значение как длинную дату без года `3 марта`.\n */\nexport function formatDateAsMonthLong(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_MONTH_LONG, options);\n}\n\n/**\n * Форматирует значение как сокращённый месяц и год `мар. 2026`.\n */\nexport function formatDateAsMonthYearMedium(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_MONTH_YEAR_MEDIUM, options);\n}\n\n/**\n * Форматирует значение как полный месяц и год `март 2026`.\n */\nexport function formatDateAsMonthYearLong(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_MONTH_YEAR_LONG, options);\n}\n\n/**\n * Форматирует значение как короткое время `18:03`.\n */\nexport function formatDateAsTimeShort(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_TIME_SHORT, options);\n}\n\n/**\n * Форматирует значение как среднее время `18:03:50`.\n */\nexport function formatDateAsTimeMedium(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_TIME_MEDIUM, options);\n}\n\n/**\n * Форматирует значение как длинное время `18:03:50`.\n */\nexport function formatDateAsTimeLong(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_TIME_LONG, options);\n}\n\n/**\n * Форматирует значение как короткую дату и время `03.03.2026 18:03`.\n */\nexport function formatDateAsDatetimeShort(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATETIME_SHORT, options);\n}\n\n/**\n * Форматирует значение как среднюю дату и время `3 мар. 2026 г. 18:03:50`.\n */\nexport function formatDateAsDatetimeMedium(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATETIME_MEDIUM, options);\n}\n\n/**\n * Форматирует значение как длинную дату и время `3 марта 2026 г. 18:03:50`.\n */\nexport function formatDateAsDatetimeLong(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATETIME_LONG, options);\n}\n\n/**\n * Форматирует диапазон дат через разделитель ` - `.\n */\nexport function formatDateRange(\n\tstartValue: unknown,\n\tendValue: unknown,\n\tpresetOrName: string | DateFormatPreset = DATE_PRESET_NAME_DATE,\n\toptions?: FormatDateOptions\n): string {\n\tconst preset = resolvePreset(presetOrName);\n\tconst fallback = resolveFallback(preset, options);\n\tconst precision = options?.precision ?? DATE_FORMAT_PRECISION_DAY;\n\n\tconst startParsed = parseDateValue(startValue);\n\tconst endParsed = parseDateValue(endValue);\n\tif (!startParsed || !endParsed) return fallback;\n\n\tconst start = formatParsedValue(startParsed, preset, fallback, precision);\n\tconst end = formatParsedValue(endParsed, preset, fallback, precision);\n\tif (!start || !end) return fallback;\n\n\treturn `${start} - ${end}`;\n}\n\n/**\n * Форматирует значение как год `yyyy`.\n */\nexport function formatDateAsAbapYear(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_ABAP_YEAR, options);\n}\n\n/**\n * Форматирует значение как календарный месяц `yyyyMM`.\n */\nexport function formatDateAsAbapMonth(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_ABAP_MONTH, options);\n}\n\n/**\n * Форматирует значение как дату `yyyyMMdd`.\n */\nexport function formatDateAsAbapDate(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_ABAP_DATE, options);\n}\n\n/**\n * Форматирует значение как дату `yyyyMMddHHmmss`.\n */\nexport function formatDateAsAbapDatetime(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_ABAP_DATETIME, options);\n}\n\n/**\n * Форматирует значение как дату `yyyy-MM-dd`.\n */\nexport function formatDateAsODataDate(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_ODATA_DATE, options);\n}\n\n/**\n * Форматирует значение как дату и время `yyyy-MM-ddTHH:mm:ss`.\n */\nexport function formatDateAsODataDatetime(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_ODATA_DATETIME, options);\n}\n\n/**\n * Форматирует значение как время `PT00H00M00S`.\n */\nexport function formatDateAsODataTime(value: unknown, options?: FormatDateOptions): string {\n\tconst fallback = options?.fallback ?? \"\";\n\tconst parsed = parseDateValue(value);\n\tif (!parsed) return fallback;\n\n\tif (parsed.kind === PARSED_DATE_KIND_DURATION) {\n\t\tconst timePreset = resolvePreset(DATE_PRESET_NAME_TIME_SECONDS);\n\t\tconst formattedDuration = timePreset.formatDuration?.(parsed.durationMs, fallback) ?? fallback;\n\t\tif (formattedDuration === fallback) return fallback;\n\n\t\tconst [hours = ODATA_DURATION_ZERO_PART, minutes = ODATA_DURATION_ZERO_PART, seconds = ODATA_DURATION_ZERO_PART] =\n\t\t\tformattedDuration.split(\":\");\n\t\treturn `PT${hours}H${minutes}M${seconds}S`;\n\t}\n\n\tconst date = parsed.date;\n\treturn `PT${padDatePart(date.getHours())}H${padDatePart(date.getMinutes())}M${padDatePart(date.getSeconds())}S`;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"formatDate-SviDwHVE.js","names":[],"sources":["../../src/formatters/boolean/parseAbapBoolean.ts","../../src/formatters/date/formatDate.ts"],"sourcesContent":["import { ABAP_BOOLEAN_TRUE } from \"../../types/abapBooleanConstants\";\n\nexport function parseAbapBoolean(value: unknown): boolean {\n\tif (value && typeof value === \"string\" && value === ABAP_BOOLEAN_TRUE) return true;\n\treturn false;\n}\n\nexport function parseBoolean(value: unknown): boolean {\n\tif (!value) return false;\n\tif (typeof value === \"string\") {\n\t\treturn [\"true\", \"x\", \"1\"].includes(value.toLowerCase());\n\t}\n\treturn Boolean(value);\n}\n","import { DATE_FORMAT_PRECISION_DAY } from \"./dateFormatConstants\";\nimport {\n\tDATE_PRESET_NAME_DATE,\n\tDATE_PRESET_NAME_DATE_SHORT,\n\tDATE_PRESET_NAME_DATE_MEDIUM,\n\tDATE_PRESET_NAME_DATE_LONG,\n\tDATE_PRESET_NAME_MONTH_SHORT,\n\tDATE_PRESET_NAME_MONTH_MEDIUM,\n\tDATE_PRESET_NAME_MONTH_LONG,\n\tDATE_PRESET_NAME_MONTH_YEAR_MEDIUM,\n\tDATE_PRESET_NAME_MONTH_YEAR_LONG,\n\tDATE_PRESET_NAME_DATETIME,\n\tDATE_PRESET_NAME_DATETIME_SHORT,\n\tDATE_PRESET_NAME_DATETIME_MEDIUM,\n\tDATE_PRESET_NAME_DATETIME_LONG,\n\tDATE_PRESET_NAME_TIME,\n\tDATE_PRESET_NAME_TIME_SECONDS,\n\tDATE_PRESET_NAME_TIME_SHORT,\n\tDATE_PRESET_NAME_TIME_MEDIUM,\n\tDATE_PRESET_NAME_TIME_LONG,\n\tDATE_PRESET_NAME_ODATA_DATE,\n\tDATE_PRESET_NAME_ODATA_DATETIME,\n\tDATE_PRESET_NAME_ABAP_DATETIME,\n\tDATE_PRESET_NAME_ABAP_DATE,\n\tDATE_PRESET_NAME_ABAP_MONTH,\n\tDATE_PRESET_NAME_ABAP_YEAR\n} from \"./datePresetNameConstants\";\nimport { PARSED_DATE_KIND_DURATION } from \"./dateValueConstants\";\nimport { parseDateValue } from \"./parseDate\";\nimport { compileDatePreset, CompiledDateFormatPreset, getCompiledDatePreset } from \"./presets\";\nimport { DateFormatPrecision, DateFormatPreset, FormatDateOptions, ParsedDateValue } from \"./types\";\n\nconst ODATA_DURATION_ZERO_PART = \"00\";\n\n/**\n * Кеш скомпилированных объектных предустановок.\n *\n * Именованные предустановки компилируются в реестре, а объектные могут\n * передаваться напрямую в горячем пути таблиц. WeakMap сохраняет готовый\n * Intl.DateTimeFormat на время жизни объекта и не мешает сборке мусора.\n */\nconst objectPresetCache = new WeakMap<DateFormatPreset, CompiledDateFormatPreset>();\n\n/**\n * Дополняет числовую часть даты ведущим нулём.\n */\nfunction padDatePart(value: number): string {\n\treturn String(value).padStart(2, \"0\");\n}\n\n/**\n * Разрешает предустановку по имени или объекту.\n */\nfunction resolvePreset(presetOrName: string | DateFormatPreset): CompiledDateFormatPreset {\n\tif (typeof presetOrName !== \"string\") {\n\t\tconst cachedPreset = objectPresetCache.get(presetOrName);\n\t\tif (cachedPreset) return cachedPreset;\n\n\t\tconst compiledPreset = compileDatePreset(presetOrName);\n\t\tobjectPresetCache.set(presetOrName, compiledPreset);\n\t\treturn compiledPreset;\n\t}\n\n\tconst preset = getCompiledDatePreset(presetOrName);\n\tif (!preset) {\n\t\tthrow new Error(`Предустановка даты \"${presetOrName}\" не найдена`);\n\t}\n\treturn preset;\n}\n\n/**\n * Определяет fallback с учётом опций вызова и предустановки.\n */\nfunction resolveFallback(preset: CompiledDateFormatPreset, options?: FormatDateOptions): string {\n\treturn options?.fallback ?? preset.invalidFallback;\n}\n\n/**\n * Форматирует уже распарсенное значение.\n */\nfunction formatParsedValue(\n\tparsed: ParsedDateValue,\n\tpreset: CompiledDateFormatPreset,\n\tfallback: string,\n\tprecision: DateFormatPrecision\n): string {\n\tif (parsed.kind === PARSED_DATE_KIND_DURATION) {\n\t\treturn preset.formatDuration ? preset.formatDuration(parsed.durationMs, fallback) : fallback;\n\t}\n\n\treturn preset.formatDateTime(parsed.date, precision);\n}\n\n/**\n * Универсально форматирует дату/время по предустановке или её имени.\n */\nexport function formatDate(\n\tvalue: unknown,\n\tpresetOrName: string | DateFormatPreset = DATE_PRESET_NAME_DATE,\n\toptions?: FormatDateOptions\n): string {\n\tconst preset = resolvePreset(presetOrName);\n\tconst fallback = resolveFallback(preset, options);\n\tconst precision = options?.precision ?? DATE_FORMAT_PRECISION_DAY;\n\tconst parsed = parseDateValue(value);\n\n\tif (!parsed) return fallback;\n\treturn formatParsedValue(parsed, preset, fallback, precision);\n}\n\n/**\n * Форматирует значение как дату `dd.MM.yyyy`.\n */\nexport function formatDateAsDate(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATE, options);\n}\n\n/**\n * Форматирует значение как дату и время `dd.MM.yyyy HH:mm`.\n */\nexport function formatDateAsDateTime(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATETIME, options);\n}\n\n/**\n * Форматирует значение как время `HH:mm`.\n */\nexport function formatDateAsTime(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_TIME, options);\n}\n\n/**\n * Форматирует значение как время `HH:mm:ss`.\n */\nexport function formatDateAsTimeSeconds(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_TIME_SECONDS, options);\n}\n\n/**\n * Форматирует значение как короткую дату `03.03.2026`.\n */\nexport function formatDateAsDateShort(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATE_SHORT, options);\n}\n\n/**\n * Форматирует значение как среднюю дату `3 мар. 2026 г.`.\n */\nexport function formatDateAsDateMedium(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATE_MEDIUM, options);\n}\n\n/**\n * Форматирует значение как длинную дату `3 марта 2026 г.`.\n */\nexport function formatDateAsDateLong(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATE_LONG, options);\n}\n\n/**\n * Форматирует значение как короткую дату без года `03.03`.\n */\nexport function formatDateAsMonthShort(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_MONTH_SHORT, options);\n}\n\n/**\n * Форматирует значение как среднюю дату без года `3 мар.`.\n */\nexport function formatDateAsMonthMedium(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_MONTH_MEDIUM, options);\n}\n\n/**\n * Форматирует значение как длинную дату без года `3 марта`.\n */\nexport function formatDateAsMonthLong(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_MONTH_LONG, options);\n}\n\n/**\n * Форматирует значение как сокращённый месяц и год `мар. 2026`.\n */\nexport function formatDateAsMonthYearMedium(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_MONTH_YEAR_MEDIUM, options);\n}\n\n/**\n * Форматирует значение как полный месяц и год `март 2026`.\n */\nexport function formatDateAsMonthYearLong(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_MONTH_YEAR_LONG, options);\n}\n\n/**\n * Форматирует значение как короткое время `18:03`.\n */\nexport function formatDateAsTimeShort(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_TIME_SHORT, options);\n}\n\n/**\n * Форматирует значение как среднее время `18:03:50`.\n */\nexport function formatDateAsTimeMedium(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_TIME_MEDIUM, options);\n}\n\n/**\n * Форматирует значение как длинное время `18:03:50`.\n */\nexport function formatDateAsTimeLong(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_TIME_LONG, options);\n}\n\n/**\n * Форматирует значение как короткую дату и время `03.03.2026 18:03`.\n */\nexport function formatDateAsDatetimeShort(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATETIME_SHORT, options);\n}\n\n/**\n * Форматирует значение как среднюю дату и время `3 мар. 2026 г. 18:03:50`.\n */\nexport function formatDateAsDatetimeMedium(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATETIME_MEDIUM, options);\n}\n\n/**\n * Форматирует значение как длинную дату и время `3 марта 2026 г. 18:03:50`.\n */\nexport function formatDateAsDatetimeLong(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_DATETIME_LONG, options);\n}\n\n/**\n * Форматирует диапазон дат через разделитель ` - `.\n */\nexport function formatDateRange(\n\tstartValue: unknown,\n\tendValue: unknown,\n\tpresetOrName: string | DateFormatPreset = DATE_PRESET_NAME_DATE,\n\toptions?: FormatDateOptions\n): string {\n\tconst preset = resolvePreset(presetOrName);\n\tconst fallback = resolveFallback(preset, options);\n\tconst precision = options?.precision ?? DATE_FORMAT_PRECISION_DAY;\n\n\tconst startParsed = parseDateValue(startValue);\n\tconst endParsed = parseDateValue(endValue);\n\tif (!startParsed || !endParsed) return fallback;\n\n\tconst start = formatParsedValue(startParsed, preset, fallback, precision);\n\tconst end = formatParsedValue(endParsed, preset, fallback, precision);\n\tif (!start || !end) return fallback;\n\n\treturn `${start} - ${end}`;\n}\n\n/**\n * Форматирует значение как год `yyyy`.\n */\nexport function formatDateAsAbapYear(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_ABAP_YEAR, options);\n}\n\n/**\n * Форматирует значение как календарный месяц `yyyyMM`.\n */\nexport function formatDateAsAbapMonth(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_ABAP_MONTH, options);\n}\n\n/**\n * Форматирует значение как дату `yyyyMMdd`.\n */\nexport function formatDateAsAbapDate(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_ABAP_DATE, options);\n}\n\n/**\n * Форматирует значение как дату `yyyyMMddHHmmss`.\n */\nexport function formatDateAsAbapDatetime(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_ABAP_DATETIME, options);\n}\n\n/**\n * Форматирует значение как дату `yyyy-MM-dd`.\n */\nexport function formatDateAsODataDate(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_ODATA_DATE, options);\n}\n\n/**\n * Форматирует значение как дату и время `yyyy-MM-ddTHH:mm:ss`.\n */\nexport function formatDateAsODataDatetime(value: unknown, options?: FormatDateOptions): string {\n\treturn formatDate(value, DATE_PRESET_NAME_ODATA_DATETIME, options);\n}\n\n/**\n * Форматирует значение как время `PT00H00M00S`.\n */\nexport function formatDateAsODataTime(value: unknown, options?: FormatDateOptions): string {\n\tconst fallback = options?.fallback ?? \"\";\n\tconst parsed = parseDateValue(value);\n\tif (!parsed) return fallback;\n\n\tif (parsed.kind === PARSED_DATE_KIND_DURATION) {\n\t\tconst timePreset = resolvePreset(DATE_PRESET_NAME_TIME_SECONDS);\n\t\tconst formattedDuration = timePreset.formatDuration?.(parsed.durationMs, fallback) ?? fallback;\n\t\tif (formattedDuration === fallback) return fallback;\n\n\t\tconst [hours = ODATA_DURATION_ZERO_PART, minutes = ODATA_DURATION_ZERO_PART, seconds = ODATA_DURATION_ZERO_PART] =\n\t\t\tformattedDuration.split(\":\");\n\t\treturn `PT${hours}H${minutes}M${seconds}S`;\n\t}\n\n\tconst date = parsed.date;\n\treturn `PT${padDatePart(date.getHours())}H${padDatePart(date.getMinutes())}M${padDatePart(date.getSeconds())}S`;\n}\n"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { _ as e, r as t, x as n } from "./array-bd7LYFto.js";
|
|
2
|
-
import { N as r, _ as i, d as a, o, ot as s, rt as c, t as l } from "./scalarTypeClassification-
|
|
2
|
+
import { N as r, _ as i, d as a, o, ot as s, rt as c, t as l } from "./scalarTypeClassification-DT-sUKOU.js";
|
|
3
3
|
import { m as u, r as d } from "./formulas-BZtCqzBj.js";
|
|
4
4
|
import { i as f } from "./isRecord-DXDTW-jA.js";
|
|
5
|
-
import { t as p } from "./formatDate-
|
|
6
|
-
import { $ as ee, A as te, B as ne, D as re, F as ie, G as ae, I as oe, J as se, K as m, L as ce, O as le, P as ue, S as de, T as fe, W as pe, X as me, Y as he, Z as ge, b as h, c as _e, ct as ve, et as ye, h as be, j as xe, k as Se, lt as Ce, n as we, nt as Te, p as Ee, q as De, rt as Oe, t as g, tt as ke, u as Ae, v as _, w as je, x as v, y, z as Me } from "./validate-
|
|
5
|
+
import { t as p } from "./formatDate-SviDwHVE.js";
|
|
6
|
+
import { $ as ee, A as te, B as ne, D as re, F as ie, G as ae, I as oe, J as se, K as m, L as ce, O as le, P as ue, S as de, T as fe, W as pe, X as me, Y as he, Z as ge, b as h, c as _e, ct as ve, et as ye, h as be, j as xe, k as Se, lt as Ce, n as we, nt as Te, p as Ee, q as De, rt as Oe, t as g, tt as ke, u as Ae, v as _, w as je, x as v, y, z as Me } from "./validate-CNMgSfgA.js";
|
|
7
7
|
import "./scalarTypeConstants-CnSsjpGO.js";
|
|
8
8
|
import { isSafe as Ne } from "../validators/index.js";
|
|
9
9
|
import { t as Pe } from "./string-comparison-BKT7PXmq.js";
|
|
@@ -1219,4 +1219,4 @@ function ti(e, t) {
|
|
|
1219
1219
|
//#endregion
|
|
1220
1220
|
export { F as $, jn as A, w as At, wn as B, Ge as Bt, Qn as C, Ct, Hn as D, vt as Dt, Vn as E, Tt as Et, xn as F, Ot as Ft, z as G, Be as Gt, Sn as H, We as Ht, R as I, xt as It, Dn as J, Le as Jt, En as K, ze as Kt, bn as L, kt as Lt, Mn as M, yt as Mt, Nn as N, Dt as Nt, H as O, Et as Ot, kn as P, bt as Pt, N as Q, V as R, st as Rt, tr as S, ht as St, Gn as T, _t as Tt, Cn as U, Ue as Ut, B as V, Ke as Vt, On as W, He as Wt, fn as X, P as Y, sn as Z, Zn as _, It as _t, Zr as a, rn as at, er as b, At as bt, Lr as c, Vt as ct, yr as d, k as dt, cn as et, Z as f, j as ft, ar as g, Lt as gt, or as h, Ht as ht, Xr as i, an as it, An as j, St as jt, Pn as k, wt as kt, Ir as l, O as lt, fr as m, Rt as mt, $r as n, ln as nt, Qr as o, M as ot, pr as p, zt as pt, L as q, Re as qt, ei as r, nn as rt, Hr as s, Bt as st, ti as t, un as tt, Nr as u, A as ut, X as v, Pt as vt, Wn as w, gt as wt, Y as x, C as xt, $n as y, jt as yt, Tn as z, x as zt };
|
|
1221
1221
|
|
|
1222
|
-
//# sourceMappingURL=formatters-
|
|
1222
|
+
//# sourceMappingURL=formatters-BuMl2-6q.js.map
|