diff options
| author | Joel Kronqvist <joel.h.kronqvist@gmail.com> | 2022-03-05 19:02:27 +0200 | 
|---|---|---|
| committer | Joel Kronqvist <joel.h.kronqvist@gmail.com> | 2022-03-05 19:02:27 +0200 | 
| commit | 5d309ff52cd399a6b71968a6b9a70c8ac0b98981 (patch) | |
| tree | 360f7eb50f956e2367ef38fa1fc6ac7ac5258042 /node_modules/data-urls/lib | |
| parent | b500a50f1b97d93c98b36ed9a980f8188d648147 (diff) | |
| download | LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.tar.gz LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.zip  | |
Added node_modules for the updating to work properly.
Diffstat (limited to 'node_modules/data-urls/lib')
| -rw-r--r-- | node_modules/data-urls/lib/parser.js | 74 | ||||
| -rw-r--r-- | node_modules/data-urls/lib/utils.js | 23 | 
2 files changed, 97 insertions, 0 deletions
diff --git a/node_modules/data-urls/lib/parser.js b/node_modules/data-urls/lib/parser.js new file mode 100644 index 0000000..37be0ef --- /dev/null +++ b/node_modules/data-urls/lib/parser.js @@ -0,0 +1,74 @@ +"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 +  }; +}; diff --git a/node_modules/data-urls/lib/utils.js b/node_modules/data-urls/lib/utils.js new file mode 100644 index 0000000..213029f --- /dev/null +++ b/node_modules/data-urls/lib/utils.js @@ -0,0 +1,23 @@ +"use strict"; +const { percentDecode } = require("whatwg-url"); +const { atob } = require("abab"); + +exports.stripLeadingAndTrailingASCIIWhitespace = string => { +  return string.replace(/^[ \t\n\f\r]+/, "").replace(/[ \t\n\f\r]+$/, ""); +}; + +exports.stringPercentDecode = input => { +  return percentDecode(Buffer.from(input, "utf-8")); +}; + +exports.isomorphicDecode = input => { +  return input.toString("binary"); +}; + +exports.forgivingBase64Decode = data => { +  const asString = atob(data); +  if (asString === null) { +    return null; +  } +  return Buffer.from(asString, "binary"); +};  | 
