isDataURI.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = isDataURI;
  6. var _assertString = _interopRequireDefault(require("./util/assertString"));
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8. var validMediaType = /^[a-z]+\/[a-z0-9\-\+]+$/i;
  9. var validAttribute = /^[a-z\-]+=[a-z0-9\-]+$/i;
  10. var validData = /^[a-z0-9!\$&'\(\)\*\+,;=\-\._~:@\/\?%\s]*$/i;
  11. function isDataURI(str) {
  12. (0, _assertString.default)(str);
  13. var data = str.split(',');
  14. if (data.length < 2) {
  15. return false;
  16. }
  17. var attributes = data.shift().trim().split(';');
  18. var schemeAndMediaType = attributes.shift();
  19. if (schemeAndMediaType.substr(0, 5) !== 'data:') {
  20. return false;
  21. }
  22. var mediaType = schemeAndMediaType.substr(5);
  23. if (mediaType !== '' && !validMediaType.test(mediaType)) {
  24. return false;
  25. }
  26. for (var i = 0; i < attributes.length; i++) {
  27. if (i === attributes.length - 1 && attributes[i].toLowerCase() === 'base64') {// ok
  28. } else if (!validAttribute.test(attributes[i])) {
  29. return false;
  30. }
  31. }
  32. for (var _i = 0; _i < data.length; _i++) {
  33. if (!validData.test(data[_i])) {
  34. return false;
  35. }
  36. }
  37. return true;
  38. }
  39. module.exports = exports.default;
  40. module.exports.default = exports.default;