/
lostSun
/
project-client-server-apps
Обзор
Документация
Войти
/
lostSun
/
project-client-server-apps
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
node_modules/data-urls/lib/parser.js
74 строки
2 KB
1lostsun
initial commit
05 май 2025, 11:35
05 май 2025, 11:35
fe8f535
Код
Авторство
О чём код?
"use strict"; const MIMEType = require("whatwg-mimetype"); const { parseURL, serializeURL } = require("whatwg-url"); const { stripLeadingAndTrailingASCIIWhitespace, stringPercentDecode, isomorphicDecode, forgivingBase64Decode } = require("./utils.js"); module.exports = stringInput => { const urlRecord = parseURL(stringInput); if (urlRecord === null) { return null; } return module.exports.fromURLRecord(urlRecord); }; module.exports.fromURLRecord = urlRecord => { if (urlRecord.scheme !== "data") { return null; } const input = serializeURL(urlRecord, true).substring("data:".length); let position = 0; let mimeType = ""; while (position < input.length && input[position] !== ",") { mimeType += input[position]; ++position; } mimeType = stripLeadingAndTrailingASCIIWhitespace(mimeType); if (position === input.length) { return null; } ++position; const encodedBody = input.substring(position); let body = stringPercentDecode(encodedBody); // Can't use /i regexp flag because it isn't restricted to ASCII. const mimeTypeBase64MatchResult = /(.*); *[Bb][Aa][Ss][Ee]64$/.exec(mimeType); if (mimeTypeBase64MatchResult) { const stringBody = isomorphicDecode(body); body = forgivingBase64Decode(stringBody); if (body === null) { return null; } mimeType = mimeTypeBase64MatchResult[1]; } if (mimeType.startsWith(";")) { mimeType = "text/plain" + mimeType; } let mimeTypeRecord; try { mimeTypeRecord = new MIMEType(mimeType); } catch (e) { mimeTypeRecord = new MIMEType("text/plain;charset=US-ASCII"); } return { mimeType: mimeTypeRecord, body }; };