socket-function 1.2.2 → 1.2.4
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/SocketFunction.d.ts +1 -1
- package/SocketFunctionTypes.d.ts +1 -1
- package/hot/HotReloadController.d.ts +3 -3
- package/index.d.ts +25 -10
- package/package.json +1 -1
- package/require/CSSShim.d.ts +1 -1
- package/require/RequireController.d.ts +2 -2
- package/require/compileFlags.d.ts +1 -1
- package/require/require.d.ts +1 -1
- package/src/callManager.d.ts +1 -1
- package/test.ts +5 -11
- package/time/trueTimeShim.d.ts +16 -1
- package/time/trueTimeShim.ts +43 -7
- package/dist/SetProcessVariables.ts.cache +0 -9
- package/dist/SocketFunction.ts.cache +0 -467
- package/hot/dist/HotReloadController.ts.cache +0 -252
- package/require/dist/RequireController.ts.cache +0 -386
- package/require/dist/compileFlags.ts.cache +0 -41
- package/require/dist/extMapper.ts.cache +0 -368
- package/require/dist/require.ts.cache +0 -676
- package/src/JSONLACKS/dist/JSONLACKS.ts.cache +0 -469
- package/src/dist/CallFactory.ts.cache +0 -930
- package/src/dist/Zip.ts.cache +0 -156
- package/src/dist/batching.ts.cache +0 -377
- package/src/dist/bits.ts.cache +0 -121
- package/src/dist/buffers.ts.cache +0 -76
- package/src/dist/caching.ts.cache +0 -302
- package/src/dist/callHTTPHandler.ts.cache +0 -264
- package/src/dist/callManager.ts.cache +0 -159
- package/src/dist/certStore.ts.cache +0 -59
- package/src/dist/createSingleton.ts.cache +0 -62
- package/src/dist/fixLargeNetworkCalls.ts.cache +0 -17
- package/src/dist/forwardPort.ts.cache +0 -222
- package/src/dist/https.ts.cache +0 -141
- package/src/dist/misc.ts.cache +0 -499
- package/src/dist/nodeCache.ts.cache +0 -136
- package/src/dist/nodeProxy.ts.cache +0 -57
- package/src/dist/protocolNegotiation.ts.cache +0 -101
- package/src/dist/tlsParsing.ts.cache +0 -85
- package/src/dist/types.ts.cache +0 -9
- package/src/dist/webSocketServer.ts.cache +0 -365
- package/src/dist/websocketFactory.ts.cache +0 -53
- package/src/formatting/dist/colors.ts.cache +0 -98
- package/src/formatting/dist/format.ts.cache +0 -396
- package/src/formatting/dist/logColors.ts.cache +0 -28
- package/src/lz4/dist/LZ4.ts.cache +0 -53
- package/src/profiling/dist/getOwnTime.ts.cache +0 -100
- package/src/profiling/dist/measure.ts.cache +0 -338
- package/src/profiling/dist/stats.ts.cache +0 -202
- package/src/profiling/dist/statsFormat.ts.cache +0 -45
- package/time/dist/trueTimeShim.ts.cache +0 -707
|
@@ -1,368 +0,0 @@
|
|
|
1
|
-
"use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict"; var console = (function shimConsole() { let baseConsole = globalThis.console; if (typeof window !== "undefined") return baseConsole; let name = __filename.replaceAll("\\", "/").split("/").pop(); let dirName = __dirname.replaceAll("\\", "/").split("/").pop(); let context = { __FILE__: __filename, __DIR__: __dirname, __NAME__: name, __DIRNAME__: dirName }; let newConsole = { ...baseConsole }; for (let shim of ["log", "info", "warn", "error"]) { newConsole[shim] = (...args) => { args.push(context); baseConsole[shim](...args); }; } newConsole.__context = context; return newConsole; })(); "use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
|
-
//exports.getContentTypeFromBuffer = exports.getExtContentType = void 0;
|
|
4
|
-
function getExtContentType(ext) {
|
|
5
|
-
// Images
|
|
6
|
-
if (ext === ".svg")
|
|
7
|
-
return "image/svg+xml";
|
|
8
|
-
if (ext === ".ico")
|
|
9
|
-
return "image/x-icon";
|
|
10
|
-
if (ext === ".png")
|
|
11
|
-
return "image/png";
|
|
12
|
-
if (ext === ".jpg")
|
|
13
|
-
return "image/jpeg";
|
|
14
|
-
if (ext === ".jpeg")
|
|
15
|
-
return "image/jpeg";
|
|
16
|
-
if (ext === ".gif")
|
|
17
|
-
return "image/gif";
|
|
18
|
-
if (ext === ".webp")
|
|
19
|
-
return "image/webp";
|
|
20
|
-
if (ext === ".avif")
|
|
21
|
-
return "image/avif";
|
|
22
|
-
if (ext === ".heic")
|
|
23
|
-
return "image/heic";
|
|
24
|
-
if (ext === ".heif")
|
|
25
|
-
return "image/heif";
|
|
26
|
-
if (ext === ".bmp")
|
|
27
|
-
return "image/bmp";
|
|
28
|
-
if (ext === ".tiff")
|
|
29
|
-
return "image/tiff";
|
|
30
|
-
if (ext === ".tif")
|
|
31
|
-
return "image/tiff";
|
|
32
|
-
if (ext === ".jxl")
|
|
33
|
-
return "image/jxl";
|
|
34
|
-
// Audio
|
|
35
|
-
if (ext === ".mp3")
|
|
36
|
-
return "audio/mpeg";
|
|
37
|
-
if (ext === ".wav")
|
|
38
|
-
return "audio/wav";
|
|
39
|
-
if (ext === ".ogg")
|
|
40
|
-
return "audio/ogg";
|
|
41
|
-
if (ext === ".m4a")
|
|
42
|
-
return "audio/mp4";
|
|
43
|
-
if (ext === ".aac")
|
|
44
|
-
return "audio/aac";
|
|
45
|
-
if (ext === ".flac")
|
|
46
|
-
return "audio/flac";
|
|
47
|
-
if (ext === ".wma")
|
|
48
|
-
return "audio/x-ms-wma";
|
|
49
|
-
if (ext === ".opus")
|
|
50
|
-
return "audio/opus";
|
|
51
|
-
// Video
|
|
52
|
-
if (ext === ".mp4")
|
|
53
|
-
return "video/mp4";
|
|
54
|
-
if (ext === ".webm")
|
|
55
|
-
return "video/webm";
|
|
56
|
-
if (ext === ".mkv")
|
|
57
|
-
return "video/x-matroska";
|
|
58
|
-
if (ext === ".avi")
|
|
59
|
-
return "video/x-msvideo";
|
|
60
|
-
if (ext === ".mov")
|
|
61
|
-
return "video/quicktime";
|
|
62
|
-
if (ext === ".wmv")
|
|
63
|
-
return "video/x-ms-wmv";
|
|
64
|
-
if (ext === ".flv")
|
|
65
|
-
return "video/x-flv";
|
|
66
|
-
if (ext === ".m4v")
|
|
67
|
-
return "video/x-m4v";
|
|
68
|
-
// Web files
|
|
69
|
-
if (ext === ".html")
|
|
70
|
-
return "text/html";
|
|
71
|
-
if (ext === ".htm")
|
|
72
|
-
return "text/html";
|
|
73
|
-
if (ext === ".css")
|
|
74
|
-
return "text/css";
|
|
75
|
-
if (ext === ".js")
|
|
76
|
-
return "text/javascript";
|
|
77
|
-
if (ext === ".mjs")
|
|
78
|
-
return "text/javascript";
|
|
79
|
-
if (ext === ".json")
|
|
80
|
-
return "application/json";
|
|
81
|
-
if (ext === ".xml")
|
|
82
|
-
return "application/xml";
|
|
83
|
-
if (ext === ".rss")
|
|
84
|
-
return "application/rss+xml";
|
|
85
|
-
if (ext === ".atom")
|
|
86
|
-
return "application/atom+xml";
|
|
87
|
-
// Documents
|
|
88
|
-
if (ext === ".pdf")
|
|
89
|
-
return "application/pdf";
|
|
90
|
-
if (ext === ".doc")
|
|
91
|
-
return "application/msword";
|
|
92
|
-
if (ext === ".docx")
|
|
93
|
-
return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
94
|
-
if (ext === ".xls")
|
|
95
|
-
return "application/vnd.ms-excel";
|
|
96
|
-
if (ext === ".xlsx")
|
|
97
|
-
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
98
|
-
if (ext === ".ppt")
|
|
99
|
-
return "application/vnd.ms-powerpoint";
|
|
100
|
-
if (ext === ".pptx")
|
|
101
|
-
return "application/vnd.openxmlformats-officedocument.presentationml.presentation";
|
|
102
|
-
if (ext === ".odt")
|
|
103
|
-
return "application/vnd.oasis.opendocument.text";
|
|
104
|
-
if (ext === ".ods")
|
|
105
|
-
return "application/vnd.oasis.opendocument.spreadsheet";
|
|
106
|
-
if (ext === ".odp")
|
|
107
|
-
return "application/vnd.oasis.opendocument.presentation";
|
|
108
|
-
if (ext === ".rtf")
|
|
109
|
-
return "application/rtf";
|
|
110
|
-
// Text files
|
|
111
|
-
if (ext === ".txt")
|
|
112
|
-
return "text/plain";
|
|
113
|
-
if (ext === ".md")
|
|
114
|
-
return "text/markdown";
|
|
115
|
-
if (ext === ".csv")
|
|
116
|
-
return "text/csv";
|
|
117
|
-
if (ext === ".log")
|
|
118
|
-
return "text/plain";
|
|
119
|
-
// Programming files
|
|
120
|
-
if (ext === ".ts")
|
|
121
|
-
return "text/typescript";
|
|
122
|
-
if (ext === ".tsx")
|
|
123
|
-
return "text/typescript";
|
|
124
|
-
if (ext === ".jsx")
|
|
125
|
-
return "text/javascript";
|
|
126
|
-
if (ext === ".py")
|
|
127
|
-
return "text/x-python";
|
|
128
|
-
if (ext === ".java")
|
|
129
|
-
return "text/x-java-source";
|
|
130
|
-
if (ext === ".c")
|
|
131
|
-
return "text/x-c";
|
|
132
|
-
if (ext === ".cpp")
|
|
133
|
-
return "text/x-c++";
|
|
134
|
-
if (ext === ".h")
|
|
135
|
-
return "text/x-c";
|
|
136
|
-
if (ext === ".hpp")
|
|
137
|
-
return "text/x-c++";
|
|
138
|
-
if (ext === ".cs")
|
|
139
|
-
return "text/x-csharp";
|
|
140
|
-
if (ext === ".php")
|
|
141
|
-
return "text/x-php";
|
|
142
|
-
if (ext === ".rb")
|
|
143
|
-
return "text/x-ruby";
|
|
144
|
-
if (ext === ".go")
|
|
145
|
-
return "text/x-go";
|
|
146
|
-
if (ext === ".rs")
|
|
147
|
-
return "text/x-rust";
|
|
148
|
-
if (ext === ".swift")
|
|
149
|
-
return "text/x-swift";
|
|
150
|
-
if (ext === ".kt")
|
|
151
|
-
return "text/x-kotlin";
|
|
152
|
-
if (ext === ".scala")
|
|
153
|
-
return "text/x-scala";
|
|
154
|
-
if (ext === ".sh")
|
|
155
|
-
return "text/x-shellscript";
|
|
156
|
-
if (ext === ".bat")
|
|
157
|
-
return "text/x-msdos-batch";
|
|
158
|
-
if (ext === ".ps1")
|
|
159
|
-
return "text/x-powershell";
|
|
160
|
-
// Archives
|
|
161
|
-
if (ext === ".zip")
|
|
162
|
-
return "application/zip";
|
|
163
|
-
if (ext === ".rar")
|
|
164
|
-
return "application/vnd.rar";
|
|
165
|
-
if (ext === ".tar")
|
|
166
|
-
return "application/x-tar";
|
|
167
|
-
if (ext === ".gz")
|
|
168
|
-
return "application/gzip";
|
|
169
|
-
if (ext === ".bz2")
|
|
170
|
-
return "application/x-bzip2";
|
|
171
|
-
if (ext === ".7z")
|
|
172
|
-
return "application/x-7z-compressed";
|
|
173
|
-
if (ext === ".xz")
|
|
174
|
-
return "application/x-xz";
|
|
175
|
-
// Fonts
|
|
176
|
-
if (ext === ".ttf")
|
|
177
|
-
return "font/ttf";
|
|
178
|
-
if (ext === ".otf")
|
|
179
|
-
return "font/otf";
|
|
180
|
-
if (ext === ".woff")
|
|
181
|
-
return "font/woff";
|
|
182
|
-
if (ext === ".woff2")
|
|
183
|
-
return "font/woff2";
|
|
184
|
-
if (ext === ".eot")
|
|
185
|
-
return "application/vnd.ms-fontobject";
|
|
186
|
-
// Other common formats
|
|
187
|
-
if (ext === ".epub")
|
|
188
|
-
return "application/epub+zip";
|
|
189
|
-
if (ext === ".mobi")
|
|
190
|
-
return "application/x-mobipocket-ebook";
|
|
191
|
-
if (ext === ".apk")
|
|
192
|
-
return "application/vnd.android.package-archive";
|
|
193
|
-
if (ext === ".dmg")
|
|
194
|
-
return "application/x-apple-diskimage";
|
|
195
|
-
if (ext === ".iso")
|
|
196
|
-
return "application/x-iso9660-image";
|
|
197
|
-
if (ext === ".exe")
|
|
198
|
-
return "application/x-msdownload";
|
|
199
|
-
if (ext === ".msi")
|
|
200
|
-
return "application/x-msi";
|
|
201
|
-
if (ext === ".deb")
|
|
202
|
-
return "application/x-debian-package";
|
|
203
|
-
if (ext === ".rpm")
|
|
204
|
-
return "application/x-rpm";
|
|
205
|
-
console.warn(`Unknown extension, ${ext}`);
|
|
206
|
-
return "text/plain";
|
|
207
|
-
}
|
|
208
|
-
exports.getExtContentType = getExtContentType;
|
|
209
|
-
function getContentTypeFromBuffer(buffer) {
|
|
210
|
-
if (buffer.length < 4)
|
|
211
|
-
return undefined;
|
|
212
|
-
// Helper function to check if buffer starts with specific bytes
|
|
213
|
-
const startsWith = (bytes) => {
|
|
214
|
-
if (buffer.length < bytes.length)
|
|
215
|
-
return false;
|
|
216
|
-
for (let i = 0; i < bytes.length; i++) {
|
|
217
|
-
if (buffer[i] !== bytes[i])
|
|
218
|
-
return false;
|
|
219
|
-
}
|
|
220
|
-
return true;
|
|
221
|
-
};
|
|
222
|
-
// Helper function to check bytes at specific offset
|
|
223
|
-
const hasAtOffset = (offset, bytes) => {
|
|
224
|
-
if (buffer.length < offset + bytes.length)
|
|
225
|
-
return false;
|
|
226
|
-
for (let i = 0; i < bytes.length; i++) {
|
|
227
|
-
if (buffer[offset + i] !== bytes[i])
|
|
228
|
-
return false;
|
|
229
|
-
}
|
|
230
|
-
return true;
|
|
231
|
-
};
|
|
232
|
-
// Images
|
|
233
|
-
if (startsWith([0xFF, 0xD8, 0xFF]))
|
|
234
|
-
return "image/jpeg";
|
|
235
|
-
if (startsWith([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]))
|
|
236
|
-
return "image/png";
|
|
237
|
-
if (startsWith([0x47, 0x49, 0x46, 0x38]))
|
|
238
|
-
return "image/gif";
|
|
239
|
-
if (startsWith([0x42, 0x4D]))
|
|
240
|
-
return "image/bmp";
|
|
241
|
-
if (startsWith([0x49, 0x49, 0x2A, 0x00]) || startsWith([0x4D, 0x4D, 0x00, 0x2A]))
|
|
242
|
-
return "image/tiff";
|
|
243
|
-
if (startsWith([0x00, 0x00, 0x01, 0x00]))
|
|
244
|
-
return "image/x-icon";
|
|
245
|
-
if (buffer.toString("ascii", 0, 4) === "<svg" || buffer.toString("ascii", 0, 5) === "<?xml") {
|
|
246
|
-
if (buffer.toString("utf8").includes("<svg"))
|
|
247
|
-
return "image/svg+xml";
|
|
248
|
-
}
|
|
249
|
-
// WebP and modern image formats
|
|
250
|
-
if (startsWith([0x52, 0x49, 0x46, 0x46]) && hasAtOffset(8, [0x57, 0x45, 0x42, 0x50]))
|
|
251
|
-
return "image/webp";
|
|
252
|
-
if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66]))
|
|
253
|
-
return "image/avif";
|
|
254
|
-
if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70, 0x68, 0x65, 0x69, 0x63]))
|
|
255
|
-
return "image/heic";
|
|
256
|
-
if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70, 0x6D, 0x69, 0x66, 0x31]))
|
|
257
|
-
return "image/heif";
|
|
258
|
-
// Audio
|
|
259
|
-
if (startsWith([0xFF, 0xFB]) || startsWith([0xFF, 0xF3]) || startsWith([0xFF, 0xF2]))
|
|
260
|
-
return "audio/mpeg";
|
|
261
|
-
if (startsWith([0x49, 0x44, 0x33]))
|
|
262
|
-
return "audio/mpeg"; // MP3 with ID3
|
|
263
|
-
if (startsWith([0x52, 0x49, 0x46, 0x46]) && hasAtOffset(8, [0x57, 0x41, 0x56, 0x45]))
|
|
264
|
-
return "audio/wav";
|
|
265
|
-
if (startsWith([0x4F, 0x67, 0x67, 0x53]))
|
|
266
|
-
return "audio/ogg";
|
|
267
|
-
if (startsWith([0x66, 0x4C, 0x61, 0x43]))
|
|
268
|
-
return "audio/flac";
|
|
269
|
-
if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41]))
|
|
270
|
-
return "audio/mp4";
|
|
271
|
-
// Video
|
|
272
|
-
if (hasAtOffset(4, [0x66, 0x74, 0x79, 0x70])) {
|
|
273
|
-
const ftyp = buffer.toString("ascii", 8, 12);
|
|
274
|
-
if (ftyp.startsWith("mp4") || ftyp.startsWith("isom") || ftyp.startsWith("M4V"))
|
|
275
|
-
return "video/mp4";
|
|
276
|
-
if (ftyp.startsWith("qt"))
|
|
277
|
-
return "video/quicktime";
|
|
278
|
-
}
|
|
279
|
-
if (startsWith([0x1A, 0x45, 0xDF, 0xA3]))
|
|
280
|
-
return "video/webm"; // Also mkv
|
|
281
|
-
if (startsWith([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11]))
|
|
282
|
-
return "video/x-ms-wmv";
|
|
283
|
-
if (startsWith([0x46, 0x4C, 0x56, 0x01]))
|
|
284
|
-
return "video/x-flv";
|
|
285
|
-
if (startsWith([0x52, 0x49, 0x46, 0x46]) && hasAtOffset(8, [0x41, 0x56, 0x49, 0x20]))
|
|
286
|
-
return "video/x-msvideo";
|
|
287
|
-
// Documents
|
|
288
|
-
if (startsWith([0x25, 0x50, 0x44, 0x46]))
|
|
289
|
-
return "application/pdf";
|
|
290
|
-
if (startsWith([0x50, 0x4B, 0x03, 0x04]) || startsWith([0x50, 0x4B, 0x05, 0x06]) || startsWith([0x50, 0x4B, 0x07, 0x08])) {
|
|
291
|
-
// ZIP-based formats - need to check internal structure
|
|
292
|
-
const content = buffer.toString("ascii", 30, 100);
|
|
293
|
-
if (content.includes("word/"))
|
|
294
|
-
return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
295
|
-
if (content.includes("xl/"))
|
|
296
|
-
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
297
|
-
if (content.includes("ppt/"))
|
|
298
|
-
return "application/vnd.openxmlformats-officedocument.presentationml.presentation";
|
|
299
|
-
if (content.includes("META-INF/")) {
|
|
300
|
-
if (content.includes("content.xml"))
|
|
301
|
-
return "application/vnd.oasis.opendocument.text";
|
|
302
|
-
}
|
|
303
|
-
return "application/zip";
|
|
304
|
-
}
|
|
305
|
-
if (startsWith([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {
|
|
306
|
-
// Microsoft Office legacy formats
|
|
307
|
-
return "application/msword"; // Could also be Excel or PowerPoint
|
|
308
|
-
}
|
|
309
|
-
if (startsWith([0x7B, 0x5C, 0x72, 0x74, 0x66]))
|
|
310
|
-
return "application/rtf";
|
|
311
|
-
// Archives
|
|
312
|
-
if (startsWith([0x52, 0x61, 0x72, 0x21, 0x1A, 0x07]))
|
|
313
|
-
return "application/vnd.rar";
|
|
314
|
-
if (startsWith([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C]))
|
|
315
|
-
return "application/x-7z-compressed";
|
|
316
|
-
if (startsWith([0x1F, 0x8B]))
|
|
317
|
-
return "application/gzip";
|
|
318
|
-
if (startsWith([0x42, 0x5A, 0x68]))
|
|
319
|
-
return "application/x-bzip2";
|
|
320
|
-
if (startsWith([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00]))
|
|
321
|
-
return "application/x-xz";
|
|
322
|
-
if (startsWith([0x75, 0x73, 0x74, 0x61, 0x72]))
|
|
323
|
-
return "application/x-tar";
|
|
324
|
-
// Executables
|
|
325
|
-
if (startsWith([0x4D, 0x5A]))
|
|
326
|
-
return "application/x-msdownload"; // Windows PE
|
|
327
|
-
if (startsWith([0x7F, 0x45, 0x4C, 0x46]))
|
|
328
|
-
return "application/x-executable"; // Linux ELF
|
|
329
|
-
if (startsWith([0xCA, 0xFE, 0xBA, 0xBE]) || startsWith([0xFE, 0xED, 0xFA, 0xCE]))
|
|
330
|
-
return "application/x-mach-binary"; // macOS binary
|
|
331
|
-
if (startsWith([0x50, 0x4B, 0x03, 0x04]) && buffer.toString("ascii", 30, 50).includes("AndroidManifest.xml"))
|
|
332
|
-
return "application/vnd.android.package-archive";
|
|
333
|
-
// Fonts
|
|
334
|
-
if (startsWith([0x00, 0x01, 0x00, 0x00]))
|
|
335
|
-
return "font/ttf";
|
|
336
|
-
if (startsWith([0x4F, 0x54, 0x54, 0x4F]))
|
|
337
|
-
return "font/otf";
|
|
338
|
-
if (startsWith([0x77, 0x4F, 0x46, 0x46]))
|
|
339
|
-
return "font/woff";
|
|
340
|
-
if (startsWith([0x77, 0x4F, 0x46, 0x32]))
|
|
341
|
-
return "font/woff2";
|
|
342
|
-
// Web files (text-based, check for common patterns)
|
|
343
|
-
const textStart = buffer.toString("utf8", 0, Math.min(100, buffer.length)).toLowerCase();
|
|
344
|
-
if (textStart.includes("<!doctype html") || textStart.includes("<html"))
|
|
345
|
-
return "text/html";
|
|
346
|
-
if (textStart.includes("<?xml"))
|
|
347
|
-
return "application/xml";
|
|
348
|
-
if (textStart.startsWith("{") || textStart.startsWith("[")) {
|
|
349
|
-
try {
|
|
350
|
-
JSON.parse(buffer.toString("utf8"));
|
|
351
|
-
return "application/json";
|
|
352
|
-
}
|
|
353
|
-
catch (_a) {
|
|
354
|
-
// Not JSON
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
// Other formats
|
|
358
|
-
if (startsWith([0x25, 0x21, 0x50, 0x53]))
|
|
359
|
-
return "application/postscript";
|
|
360
|
-
if (startsWith([0x38, 0x42, 0x50, 0x53]))
|
|
361
|
-
return "image/vnd.adobe.photoshop";
|
|
362
|
-
if (startsWith([0x49, 0x49, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x43, 0x52]))
|
|
363
|
-
return "image/x-canon-cr2";
|
|
364
|
-
return undefined;
|
|
365
|
-
}
|
|
366
|
-
exports.getContentTypeFromBuffer = getContentTypeFromBuffer;
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0TWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXh0TWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQWdCLGlCQUFpQixDQUFDLEdBQVc7SUFDekMsU0FBUztJQUNULElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLGVBQWUsQ0FBQztJQUMzQyxJQUFJLEdBQUcsS0FBSyxNQUFNO1FBQUUsT0FBTyxjQUFjLENBQUM7SUFDMUMsSUFBSSxHQUFHLEtBQUssTUFBTTtRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ3ZDLElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN4QyxJQUFJLEdBQUcsS0FBSyxPQUFPO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDekMsSUFBSSxHQUFHLEtBQUssTUFBTTtRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ3ZDLElBQUksR0FBRyxLQUFLLE9BQU87UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN6QyxJQUFJLEdBQUcsS0FBSyxPQUFPO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDekMsSUFBSSxHQUFHLEtBQUssT0FBTztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ3pDLElBQUksR0FBRyxLQUFLLE9BQU87UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN6QyxJQUFJLEdBQUcsS0FBSyxNQUFNO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDdkMsSUFBSSxHQUFHLEtBQUssT0FBTztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ3pDLElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN4QyxJQUFJLEdBQUcsS0FBSyxNQUFNO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFFdkMsUUFBUTtJQUNSLElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLFlBQVksQ0FBQztJQUN4QyxJQUFJLEdBQUcsS0FBSyxNQUFNO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDdkMsSUFBSSxH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LGtCQUFrQixDQUFDO1FBQzlCLENBQUM7UUFBQyxXQUFNLENBQUM7WUFDTCxXQUFXO1FBQ2YsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sd0JBQXdCLENBQUM7SUFDMUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sMkJBQTJCLENBQUM7SUFDN0UsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sbUJBQW1CLENBQUM7SUFFekcsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQW5IRCw0REFtSEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2V0RXh0Q29udGVudFR5cGUoZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIEltYWdlc1xuICAgIGlmIChleHQgPT09IFwiLnN2Z1wiKSByZXR1cm4gXCJpbWFnZS9zdmcreG1sXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuaWNvXCIpIHJldHVybiBcImltYWdlL3gtaWNvblwiO1xuICAgIGlmIChleHQgPT09IFwiLnBuZ1wiKSByZXR1cm4gXCJpbWFnZS9wbmdcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5qcGdcIikgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICAgIGlmIChleHQgPT09IFwiLmpwZWdcIikgcmV0dXJuIFwiaW1hZ2UvanBlZ1wiO1xuICAgIGlmIChleHQgPT09IFwiLmdpZlwiKSByZXR1cm4gXCJpbWFnZS9naWZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi53ZWJwXCIpIHJldHVybiBcImltYWdlL3dlYnBcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5hdmlmXCIpIHJldHVybiBcImltYWdlL2F2aWZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5oZWljXCIpIHJldHVybiBcImltYWdlL2hlaWNcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5oZWlmXCIpIHJldHVybiBcImltYWdlL2hlaWZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5ibXBcIikgcmV0dXJuIFwiaW1hZ2UvYm1wXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIudGlmZlwiKSByZXR1cm4gXCJpbWFnZS90aWZmXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIudGlmXCIpIHJldHVybiBcImltYWdlL3RpZmZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5qeGxcIikgcmV0dXJuIFwiaW1hZ2UvanhsXCI7XG5cbiAgICAvLyBBdWRpb1xuICAgIGlmIChleHQgPT09IFwiLm1wM1wiKSByZXR1cm4gXCJhdWRpby9tcGVnXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIud2F2XCIpIHJldHVybiBcImF1ZGlvL3dhdlwiO1xuICAgIGlmIChleHQgPT09IFwiLm9nZ1wiKSByZXR1cm4gXCJhdWRpby9vZ2dcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5tNGFcIikgcmV0dXJuIFwiYXVkaW8vbXA0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuYWFjXCIpIHJldHVybiBcImF1ZGlvL2FhY1wiO1xuICAgIGlmIChleHQgPT09IFwiLmZsYWNcIikgcmV0dXJuIFwiYXVkaW8vZmxhY1wiO1xuICAgIGlmIChleHQgPT09IFwiLndtYVwiKSByZXR1cm4gXCJhdWRpby94LW1zLXdtYVwiO1xuICAgIGlmIChleHQgPT09IFwiLm9wdXNcIikgcmV0dXJuIFwiYXVkaW8vb3B1c1wiO1xuXG4gICAgLy8gVmlkZW9cbiAgICBpZiAoZXh0ID09PSBcIi5tcDRcIikgcmV0dXJuIFwidmlkZW8vbXA0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIud2VibVwiKSByZXR1cm4gXCJ2aWRlby93ZWJtXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIubWt2XCIpIHJldHVybiBcInZpZGVvL3gtbWF0cm9za2FcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5hdmlcIikgcmV0dXJuIFwidmlkZW8veC1tc3ZpZGVvXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIubW92XCIpIHJldHVybiBcInZpZGVvL3F1aWNrdGltZVwiO1xuICAgIGlmIChleHQgPT09IFwiLndtdlwiKSByZXR1cm4gXCJ2aWRlby94LW1zLXdtdlwiO1xuICAgIGlmIChleHQgPT09IFwiLmZsdlwiKSByZXR1cm4gXCJ2aWRlby94LWZsdlwiO1xuICAgIGlmIChleHQgPT09IFwiLm00dlwiKSByZXR1cm4gXCJ2aWRlby94LW00dlwiO1xuXG4gICAgLy8gV2ViIGZpbGVzXG4gICAgaWYgKGV4dCA9PT0gXCIuaHRtbFwiKSByZXR1cm4gXCJ0ZXh0L2h0bWxcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5odG1cIikgcmV0dXJuIFwidGV4dC9odG1sXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuY3NzXCIpIHJldHVybiBcInRleHQvY3NzXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuanNcIikgcmV0dXJuIFwidGV4dC9qYXZhc2NyaXB0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIubWpzXCIpIHJldHVybiBcInRleHQvamF2YXNjcmlwdFwiO1xuICAgIGlmIChleHQgPT09IFwiLmpzb25cIikgcmV0dXJuIFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgIGlmIChleHQgPT09IFwiLnhtbFwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94bWxcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5yc3NcIikgcmV0dXJuIFwiYXBwbGljYXRpb24vcnNzK3htbFwiO1xuICAgIGlmIChleHQgPT09IFwiLmF0b21cIikgcmV0dXJuIFwiYXBwbGljYXRpb24vYXRvbSt4bWxcIjtcblxuICAgIC8vIERvY3VtZW50c1xuICAgIGlmIChleHQgPT09IFwiLnBkZlwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi9wZGZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5kb2NcIikgcmV0dXJuIFwiYXBwbGljYXRpb24vbXN3b3JkXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuZG9jeFwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiO1xuICAgIGlmIChleHQgPT09IFwiLnhsc1wiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIjtcbiAgICBpZiAoZXh0ID09PSBcIi54bHN4XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucHB0XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucHB0eFwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIub2R0XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dFwiO1xuICAgIGlmIChleHQgPT09IFwiLm9kc1wiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIub2RwXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucnRmXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3J0ZlwiO1xuXG4gICAgLy8gVGV4dCBmaWxlc1xuICAgIGlmIChleHQgPT09IFwiLnR4dFwiKSByZXR1cm4gXCJ0ZXh0L3BsYWluXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIubWRcIikgcmV0dXJuIFwidGV4dC9tYXJrZG93blwiO1xuICAgIGlmIChleHQgPT09IFwiLmNzdlwiKSByZXR1cm4gXCJ0ZXh0L2NzdlwiO1xuICAgIGlmIChleHQgPT09IFwiLmxvZ1wiKSByZXR1cm4gXCJ0ZXh0L3BsYWluXCI7XG5cbiAgICAvLyBQcm9ncmFtbWluZyBmaWxlc1xuICAgIGlmIChleHQgPT09IFwiLnRzXCIpIHJldHVybiBcInRleHQvdHlwZXNjcmlwdFwiO1xuICAgIGlmIChleHQgPT09IFwiLnRzeFwiKSByZXR1cm4gXCJ0ZXh0L3R5cGVzY3JpcHRcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5qc3hcIikgcmV0dXJuIFwidGV4dC9qYXZhc2NyaXB0XCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucHlcIikgcmV0dXJuIFwidGV4dC94LXB5dGhvblwiO1xuICAgIGlmIChleHQgPT09IFwiLmphdmFcIikgcmV0dXJuIFwidGV4dC94LWphdmEtc291cmNlXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuY1wiKSByZXR1cm4gXCJ0ZXh0L3gtY1wiO1xuICAgIGlmIChleHQgPT09IFwiLmNwcFwiKSByZXR1cm4gXCJ0ZXh0L3gtYysrXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuaFwiKSByZXR1cm4gXCJ0ZXh0L3gtY1wiO1xuICAgIGlmIChleHQgPT09IFwiLmhwcFwiKSByZXR1cm4gXCJ0ZXh0L3gtYysrXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuY3NcIikgcmV0dXJuIFwidGV4dC94LWNzaGFycFwiO1xuICAgIGlmIChleHQgPT09IFwiLnBocFwiKSByZXR1cm4gXCJ0ZXh0L3gtcGhwXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucmJcIikgcmV0dXJuIFwidGV4dC94LXJ1YnlcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5nb1wiKSByZXR1cm4gXCJ0ZXh0L3gtZ29cIjtcbiAgICBpZiAoZXh0ID09PSBcIi5yc1wiKSByZXR1cm4gXCJ0ZXh0L3gtcnVzdFwiO1xuICAgIGlmIChleHQgPT09IFwiLnN3aWZ0XCIpIHJldHVybiBcInRleHQveC1zd2lmdFwiO1xuICAgIGlmIChleHQgPT09IFwiLmt0XCIpIHJldHVybiBcInRleHQveC1rb3RsaW5cIjtcbiAgICBpZiAoZXh0ID09PSBcIi5zY2FsYVwiKSByZXR1cm4gXCJ0ZXh0L3gtc2NhbGFcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5zaFwiKSByZXR1cm4gXCJ0ZXh0L3gtc2hlbGxzY3JpcHRcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5iYXRcIikgcmV0dXJuIFwidGV4dC94LW1zZG9zLWJhdGNoXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucHMxXCIpIHJldHVybiBcInRleHQveC1wb3dlcnNoZWxsXCI7XG5cbiAgICAvLyBBcmNoaXZlc1xuICAgIGlmIChleHQgPT09IFwiLnppcFwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi96aXBcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5yYXJcIikgcmV0dXJuIFwiYXBwbGljYXRpb24vdm5kLnJhclwiO1xuICAgIGlmIChleHQgPT09IFwiLnRhclwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LXRhclwiO1xuICAgIGlmIChleHQgPT09IFwiLmd6XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL2d6aXBcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5iejJcIikgcmV0dXJuIFwiYXBwbGljYXRpb24veC1iemlwMlwiO1xuICAgIGlmIChleHQgPT09IFwiLjd6XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZFwiO1xuICAgIGlmIChleHQgPT09IFwiLnh6XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gteHpcIjtcblxuICAgIC8vIEZvbnRzXG4gICAgaWYgKGV4dCA9PT0gXCIudHRmXCIpIHJldHVybiBcImZvbnQvdHRmXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIub3RmXCIpIHJldHVybiBcImZvbnQvb3RmXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIud29mZlwiKSByZXR1cm4gXCJmb250L3dvZmZcIjtcbiAgICBpZiAoZXh0ID09PSBcIi53b2ZmMlwiKSByZXR1cm4gXCJmb250L3dvZmYyXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuZW90XCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0XCI7XG5cbiAgICAvLyBPdGhlciBjb21tb24gZm9ybWF0c1xuICAgIGlmIChleHQgPT09IFwiLmVwdWJcIikgcmV0dXJuIFwiYXBwbGljYXRpb24vZXB1Yit6aXBcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5tb2JpXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtbW9iaXBvY2tldC1lYm9va1wiO1xuICAgIGlmIChleHQgPT09IFwiLmFwa1wiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQuYW5kcm9pZC5wYWNrYWdlLWFyY2hpdmVcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5kbWdcIikgcmV0dXJuIFwiYXBwbGljYXRpb24veC1hcHBsZS1kaXNraW1hZ2VcIjtcbiAgICBpZiAoZXh0ID09PSBcIi5pc29cIikgcmV0dXJuIFwiYXBwbGljYXRpb24veC1pc285NjYwLWltYWdlXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIuZXhlXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtbXNkb3dubG9hZFwiO1xuICAgIGlmIChleHQgPT09IFwiLm1zaVwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LW1zaVwiO1xuICAgIGlmIChleHQgPT09IFwiLmRlYlwiKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LWRlYmlhbi1wYWNrYWdlXCI7XG4gICAgaWYgKGV4dCA9PT0gXCIucnBtXCIpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtcnBtXCI7XG5cbiAgICBjb25zb2xlLndhcm4oYFVua25vd24gZXh0ZW5zaW9uLCAke2V4dH1gKTtcbiAgICByZXR1cm4gXCJ0ZXh0L3BsYWluXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZW50VHlwZUZyb21CdWZmZXIoYnVmZmVyOiBCdWZmZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChidWZmZXIubGVuZ3RoIDwgNCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBidWZmZXIgc3RhcnRzIHdpdGggc3BlY2lmaWMgYnl0ZXNcbiAgICBjb25zdCBzdGFydHNXaXRoID0gKGJ5dGVzOiBudW1iZXJbXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IGJ5dGVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyW2ldICE9PSBieXRlc1tpXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgYnl0ZXMgYXQgc3BlY2lmaWMgb2Zmc2V0XG4gICAgY29uc3QgaGFzQXRPZmZzZXQgPSAob2Zmc2V0OiBudW1iZXIsIGJ5dGVzOiBudW1iZXJbXSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IG9mZnNldCArIGJ5dGVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyW29mZnNldCArIGldICE9PSBieXRlc1tpXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICAvLyBJbWFnZXNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHhGRiwgMHhEOCwgMHhGRl0pKSByZXR1cm4gXCJpbWFnZS9qcGVnXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4ODksIDB4NTAsIDB4NEUsIDB4NDcsIDB4MEQsIDB4MEEsIDB4MUEsIDB4MEFdKSkgcmV0dXJuIFwiaW1hZ2UvcG5nXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NDcsIDB4NDksIDB4NDYsIDB4MzhdKSkgcmV0dXJuIFwiaW1hZ2UvZ2lmXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NDIsIDB4NERdKSkgcmV0dXJuIFwiaW1hZ2UvYm1wXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NDksIDB4NDksIDB4MkEsIDB4MDBdKSB8fCBzdGFydHNXaXRoKFsweDRELCAweDRELCAweDAwLCAweDJBXSkpIHJldHVybiBcImltYWdlL3RpZmZcIjtcbiAgICBpZiAoc3RhcnRzV2l0aChbMHgwMCwgMHgwMCwgMHgwMSwgMHgwMF0pKSByZXR1cm4gXCJpbWFnZS94LWljb25cIjtcbiAgICBpZiAoYnVmZmVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMCwgNCkgPT09IFwiPHN2Z1wiIHx8IGJ1ZmZlci50b1N0cmluZyhcImFzY2lpXCIsIDAsIDUpID09PSBcIjw/eG1sXCIpIHtcbiAgICAgICAgaWYgKGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIikuaW5jbHVkZXMoXCI8c3ZnXCIpKSByZXR1cm4gXCJpbWFnZS9zdmcreG1sXCI7XG4gICAgfVxuXG4gICAgLy8gV2ViUCBhbmQgbW9kZXJuIGltYWdlIGZvcm1hdHNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg1MiwgMHg0OSwgMHg0NiwgMHg0Nl0pICYmIGhhc0F0T2Zmc2V0KDgsIFsweDU3LCAweDQ1LCAweDQyLCAweDUwXSkpIHJldHVybiBcImltYWdlL3dlYnBcIjtcbiAgICBpZiAoaGFzQXRPZmZzZXQoNCwgWzB4NjYsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjEsIDB4NzYsIDB4NjksIDB4NjZdKSkgcmV0dXJuIFwiaW1hZ2UvYXZpZlwiO1xuICAgIGlmIChoYXNBdE9mZnNldCg0LCBbMHg2NiwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2OCwgMHg2NSwgMHg2OSwgMHg2M10pKSByZXR1cm4gXCJpbWFnZS9oZWljXCI7XG4gICAgaWYgKGhhc0F0T2Zmc2V0KDQsIFsweDY2LCAweDc0LCAweDc5LCAweDcwLCAweDZELCAweDY5LCAweDY2LCAweDMxXSkpIHJldHVybiBcImltYWdlL2hlaWZcIjtcblxuICAgIC8vIEF1ZGlvXG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4RkYsIDB4RkJdKSB8fCBzdGFydHNXaXRoKFsweEZGLCAweEYzXSkgfHwgc3RhcnRzV2l0aChbMHhGRiwgMHhGMl0pKSByZXR1cm4gXCJhdWRpby9tcGVnXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NDksIDB4NDQsIDB4MzNdKSkgcmV0dXJuIFwiYXVkaW8vbXBlZ1wiOyAvLyBNUDMgd2l0aCBJRDNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg1MiwgMHg0OSwgMHg0NiwgMHg0Nl0pICYmIGhhc0F0T2Zmc2V0KDgsIFsweDU3LCAweDQxLCAweDU2LCAweDQ1XSkpIHJldHVybiBcImF1ZGlvL3dhdlwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDRGLCAweDY3LCAweDY3LCAweDUzXSkpIHJldHVybiBcImF1ZGlvL29nZ1wiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDY2LCAweDRDLCAweDYxLCAweDQzXSkpIHJldHVybiBcImF1ZGlvL2ZsYWNcIjtcbiAgICBpZiAoaGFzQXRPZmZzZXQoNCwgWzB4NjYsIDB4NzQsIDB4NzksIDB4NzAsIDB4NEQsIDB4MzQsIDB4NDFdKSkgcmV0dXJuIFwiYXVkaW8vbXA0XCI7XG5cbiAgICAvLyBWaWRlb1xuICAgIGlmIChoYXNBdE9mZnNldCg0LCBbMHg2NiwgMHg3NCwgMHg3OSwgMHg3MF0pKSB7XG4gICAgICAgIGNvbnN0IGZ0eXAgPSBidWZmZXIudG9TdHJpbmcoXCJhc2NpaVwiLCA4LCAxMik7XG4gICAgICAgIGlmIChmdHlwLnN0YXJ0c1dpdGgoXCJtcDRcIikgfHwgZnR5cC5zdGFydHNXaXRoKFwiaXNvbVwiKSB8fCBmdHlwLnN0YXJ0c1dpdGgoXCJNNFZcIikpIHJldHVybiBcInZpZGVvL21wNFwiO1xuICAgICAgICBpZiAoZnR5cC5zdGFydHNXaXRoKFwicXRcIikpIHJldHVybiBcInZpZGVvL3F1aWNrdGltZVwiO1xuICAgIH1cbiAgICBpZiAoc3RhcnRzV2l0aChbMHgxQSwgMHg0NSwgMHhERiwgMHhBM10pKSByZXR1cm4gXCJ2aWRlby93ZWJtXCI7IC8vIEFsc28gbWt2XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4MzAsIDB4MjYsIDB4QjIsIDB4NzUsIDB4OEUsIDB4NjYsIDB4Q0YsIDB4MTFdKSkgcmV0dXJuIFwidmlkZW8veC1tcy13bXZcIjtcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg0NiwgMHg0QywgMHg1NiwgMHgwMV0pKSByZXR1cm4gXCJ2aWRlby94LWZsdlwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDUyLCAweDQ5LCAweDQ2LCAweDQ2XSkgJiYgaGFzQXRPZmZzZXQoOCwgWzB4NDEsIDB4NTYsIDB4NDksIDB4MjBdKSkgcmV0dXJuIFwidmlkZW8veC1tc3ZpZGVvXCI7XG5cbiAgICAvLyBEb2N1bWVudHNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHgyNSwgMHg1MCwgMHg0NCwgMHg0Nl0pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi9wZGZcIjtcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg1MCwgMHg0QiwgMHgwMywgMHgwNF0pIHx8IHN0YXJ0c1dpdGgoWzB4NTAsIDB4NEIsIDB4MDUsIDB4MDZdKSB8fCBzdGFydHNXaXRoKFsweDUwLCAweDRCLCAweDA3LCAweDA4XSkpIHtcbiAgICAgICAgLy8gWklQLWJhc2VkIGZvcm1hdHMgLSBuZWVkIHRvIGNoZWNrIGludGVybmFsIHN0cnVjdHVyZVxuICAgICAgICBjb25zdCBjb250ZW50ID0gYnVmZmVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMzAsIDEwMCk7XG4gICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFwid29yZC9cIikpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50XCI7XG4gICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFwieGwvXCIpKSByZXR1cm4gXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiO1xuICAgICAgICBpZiAoY29udGVudC5pbmNsdWRlcyhcInBwdC9cIikpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb25cIjtcbiAgICAgICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoXCJNRVRBLUlORi9cIikpIHtcbiAgICAgICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKFwiY29udGVudC54bWxcIikpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dFwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImFwcGxpY2F0aW9uL3ppcFwiO1xuICAgIH1cbiAgICBpZiAoc3RhcnRzV2l0aChbMHhEMCwgMHhDRiwgMHgxMSwgMHhFMCwgMHhBMSwgMHhCMSwgMHgxQSwgMHhFMV0pKSB7XG4gICAgICAgIC8vIE1pY3Jvc29mdCBPZmZpY2UgbGVnYWN5IGZvcm1hdHNcbiAgICAgICAgcmV0dXJuIFwiYXBwbGljYXRpb24vbXN3b3JkXCI7IC8vIENvdWxkIGFsc28gYmUgRXhjZWwgb3IgUG93ZXJQb2ludFxuICAgIH1cbiAgICBpZiAoc3RhcnRzV2l0aChbMHg3QiwgMHg1QywgMHg3MiwgMHg3NCwgMHg2Nl0pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi9ydGZcIjtcblxuICAgIC8vIEFyY2hpdmVzXG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NTIsIDB4NjEsIDB4NzIsIDB4MjEsIDB4MUEsIDB4MDddKSkgcmV0dXJuIFwiYXBwbGljYXRpb24vdm5kLnJhclwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDM3LCAweDdBLCAweEJDLCAweEFGLCAweDI3LCAweDFDXSkpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZFwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDFGLCAweDhCXSkpIHJldHVybiBcImFwcGxpY2F0aW9uL2d6aXBcIjtcbiAgICBpZiAoc3RhcnRzV2l0aChbMHg0MiwgMHg1QSwgMHg2OF0pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LWJ6aXAyXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4RkQsIDB4MzcsIDB4N0EsIDB4NTgsIDB4NUEsIDB4MDBdKSkgcmV0dXJuIFwiYXBwbGljYXRpb24veC14elwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDc1LCAweDczLCAweDc0LCAweDYxLCAweDcyXSkpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtdGFyXCI7XG5cbiAgICAvLyBFeGVjdXRhYmxlc1xuICAgIGlmIChzdGFydHNXaXRoKFsweDRELCAweDVBXSkpIHJldHVybiBcImFwcGxpY2F0aW9uL3gtbXNkb3dubG9hZFwiOyAvLyBXaW5kb3dzIFBFXG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4N0YsIDB4NDUsIDB4NEMsIDB4NDZdKSkgcmV0dXJuIFwiYXBwbGljYXRpb24veC1leGVjdXRhYmxlXCI7IC8vIExpbnV4IEVMRlxuICAgIGlmIChzdGFydHNXaXRoKFsweENBLCAweEZFLCAweEJBLCAweEJFXSkgfHwgc3RhcnRzV2l0aChbMHhGRSwgMHhFRCwgMHhGQSwgMHhDRV0pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi94LW1hY2gtYmluYXJ5XCI7IC8vIG1hY09TIGJpbmFyeVxuICAgIGlmIChzdGFydHNXaXRoKFsweDUwLCAweDRCLCAweDAzLCAweDA0XSkgJiYgYnVmZmVyLnRvU3RyaW5nKFwiYXNjaWlcIiwgMzAsIDUwKS5pbmNsdWRlcyhcIkFuZHJvaWRNYW5pZmVzdC54bWxcIikpIHJldHVybiBcImFwcGxpY2F0aW9uL3ZuZC5hbmRyb2lkLnBhY2thZ2UtYXJjaGl2ZVwiO1xuXG4gICAgLy8gRm9udHNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHgwMCwgMHgwMSwgMHgwMCwgMHgwMF0pKSByZXR1cm4gXCJmb250L3R0ZlwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDRGLCAweDU0LCAweDU0LCAweDRGXSkpIHJldHVybiBcImZvbnQvb3RmXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NzcsIDB4NEYsIDB4NDYsIDB4NDZdKSkgcmV0dXJuIFwiZm9udC93b2ZmXCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4NzcsIDB4NEYsIDB4NDYsIDB4MzJdKSkgcmV0dXJuIFwiZm9udC93b2ZmMlwiO1xuXG4gICAgLy8gV2ViIGZpbGVzICh0ZXh0LWJhc2VkLCBjaGVjayBmb3IgY29tbW9uIHBhdHRlcm5zKVxuICAgIGNvbnN0IHRleHRTdGFydCA9IGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIiwgMCwgTWF0aC5taW4oMTAwLCBidWZmZXIubGVuZ3RoKSkudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGV4dFN0YXJ0LmluY2x1ZGVzKFwiPCFkb2N0eXBlIGh0bWxcIikgfHwgdGV4dFN0YXJ0LmluY2x1ZGVzKFwiPGh0bWxcIikpIHJldHVybiBcInRleHQvaHRtbFwiO1xuICAgIGlmICh0ZXh0U3RhcnQuaW5jbHVkZXMoXCI8P3htbFwiKSkgcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCI7XG4gICAgaWYgKHRleHRTdGFydC5zdGFydHNXaXRoKFwie1wiKSB8fCB0ZXh0U3RhcnQuc3RhcnRzV2l0aChcIltcIikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIEpTT04ucGFyc2UoYnVmZmVyLnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gICAgICAgICAgICByZXR1cm4gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gTm90IEpTT05cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE90aGVyIGZvcm1hdHNcbiAgICBpZiAoc3RhcnRzV2l0aChbMHgyNSwgMHgyMSwgMHg1MCwgMHg1M10pKSByZXR1cm4gXCJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0XCI7XG4gICAgaWYgKHN0YXJ0c1dpdGgoWzB4MzgsIDB4NDIsIDB4NTAsIDB4NTNdKSkgcmV0dXJuIFwiaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcFwiO1xuICAgIGlmIChzdGFydHNXaXRoKFsweDQ5LCAweDQ5LCAweDJBLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDUyXSkpIHJldHVybiBcImltYWdlL3gtY2Fub24tY3IyXCI7XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufSJdfQ==
|
|
368
|
-
/* _JS_SOURCE_HASH = "66e32b7cef5067e77b95f00bec4f25914748cecfc4aa12ab1b4651458459871f"; */
|