Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

svg-parser

Package Overview
Dependencies
Maintainers
2
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

svg-parser - npm Package Compare versions

Comparing version 2.0.2 to 2.0.3

dist/svg-parser.esm.js

435

dist/svg-parser.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.svgParser = global.svgParser || {})));
(global = global || self, factory(global.svgParser = {}));
}(this, (function (exports) { 'use strict';
function getLocator(source, options) {
if (options === void 0) { options = {}; }
var offsetLine = options.offsetLine || 0;
var offsetColumn = options.offsetColumn || 0;
var originalLines = source.split('\n');
var start = 0;
var lineRanges = originalLines.map(function (line, i) {
var end = start + line.length + 1;
var range = { start: start, end: end, line: i };
start = end;
return range;
});
var i = 0;
function rangeContains(range, index) {
return range.start <= index && index < range.end;
}
function getLocation(range, index) {
return { line: offsetLine + range.line, column: offsetColumn + index - range.start, character: index };
}
function locate(search, startIndex) {
if (typeof search === 'string') {
search = source.indexOf(search, startIndex || 0);
function getLocator(source, options) {
if (options === void 0) { options = {}; }
var offsetLine = options.offsetLine || 0;
var offsetColumn = options.offsetColumn || 0;
var originalLines = source.split('\n');
var start = 0;
var lineRanges = originalLines.map(function (line, i) {
var end = start + line.length + 1;
var range = { start: start, end: end, line: i };
start = end;
return range;
});
var i = 0;
function rangeContains(range, index) {
return range.start <= index && index < range.end;
}
var range = lineRanges[i];
var d = search >= range.end ? 1 : -1;
while (range) {
if (rangeContains(range, search))
return getLocation(range, search);
i += d;
range = lineRanges[i];
function getLocation(range, index) {
return { line: offsetLine + range.line, column: offsetColumn + index - range.start, character: index };
}
function locate(search, startIndex) {
if (typeof search === 'string') {
search = source.indexOf(search, startIndex || 0);
}
var range = lineRanges[i];
var d = search >= range.end ? 1 : -1;
while (range) {
if (rangeContains(range, search))
return getLocation(range, search);
i += d;
range = lineRanges[i];
}
}
return locate;
}
;
return locate;
}
function locate(source, search, options) {
if (typeof options === 'number') {
throw new Error('locate takes a { startIndex, offsetLine, offsetColumn } object as the third argument');
function locate(source, search, options) {
if (typeof options === 'number') {
throw new Error('locate takes a { startIndex, offsetLine, offsetColumn } object as the third argument');
}
return getLocator(source, options)(search, options && options.startIndex);
}
return getLocator(source, options)(search, options && options.startIndex);
}
var validNameCharacters = /[a-zA-Z0-9:_-]/;
var whitespace = /[\s\t\r\n]/;
var quotemark = /['"]/;
var validNameCharacters = /[a-zA-Z0-9:_-]/;
var whitespace = /[\s\t\r\n]/;
var quotemark = /['"]/;
function repeat(str, i) {
var result = '';
while (i--) result += str;
return result;
}
function repeat(str, i) {
var result = '';
while (i--) { result += str; }
return result;
}
function parse(source) {
var header = '';
var stack = [];
function parse(source) {
var header = '';
var stack = [];
var state = metadata;
var currentElement = null;
var root = null;
var state = metadata;
var currentElement = null;
var root = null;
function error(message) {
var ref = locate(source, i);
var line = ref.line;
var column = ref.column;
var before = source.slice(0, i).replace(/^\t+/, function (match) { return repeat(' ', match.length); });
var beforeLine = /(^|\n).*$/.exec(before)[0];
var after = source.slice(i);
var afterLine = /.*(\n|$)/.exec(after)[0];
function error(message) {
var ref = locate(source, i);
var line = ref.line;
var column = ref.column;
var before = source.slice(0, i);
var beforeLine = /(^|\n).*$/.exec(before)[0].replace(/\t/g, ' ');
var after = source.slice(i);
var afterLine = /.*(\n|$)/.exec(after)[0];
var snippet = "" + beforeLine + afterLine + "\n" + (repeat(' ', beforeLine.length)) + "^";
var snippet = "" + beforeLine + afterLine + "\n" + (repeat(' ', beforeLine.length)) + "^";
throw new Error(
(message + " (" + line + ":" + column + "). If this is valid SVG, it's probably a bug in svg-parser. Please raise an issue at https://github.com/Rich-Harris/svg-parser/issues – thanks!\n\n" + snippet)
);
}
throw new Error(
(message + " (" + line + ":" + column + "). If this is valid SVG, it's probably a bug in svg-parser. Please raise an issue at https://github.com/Rich-Harris/svg-parser/issues – thanks!\n\n" + snippet)
);
}
function metadata() {
while ((i < source.length && source[i] !== '<') || !validNameCharacters.test(source[i + 1])) {
header += source[i++];
}
function metadata() {
while ((i < source.length && source[i] !== '<') || !validNameCharacters.test(source[i + 1])) {
header += source[i++];
}
return neutral();
}
return neutral();
}
function neutral() {
var text = '';
while (i < source.length && source[i] !== '<') text += source[i++];
function neutral() {
var text = '';
while (i < source.length && source[i] !== '<') { text += source[i++]; }
if (/\S/.test(text)) {
currentElement.children.push({ type: 'text', value: text });
}
if (/\S/.test(text)) {
currentElement.children.push({ type: 'text', value: text });
}
if (source[i] === '<') {
return tag;
}
if (source[i] === '<') {
return tag;
}
return neutral;
}
return neutral;
}
function tag() {
var char = source[i];
function tag() {
var char = source[i];
if (char === '?') return neutral; // <?xml...
if (char === '?') { return neutral; } // <?xml...
if (char === '!') {
if (source.slice(i + 1, i + 3) === '--') return comment;
if (source.slice(i + 1, i + 8) === '[CDATA[') return cdata;
if (/doctype/i.test(source.slice(i + 1, i + 8))) return neutral;
}
if (char === '!') {
if (source.slice(i + 1, i + 3) === '--') { return comment; }
if (source.slice(i + 1, i + 8) === '[CDATA[') { return cdata; }
if (/doctype/i.test(source.slice(i + 1, i + 8))) { return neutral; }
}
if (char === '/') return closingTag;
if (char === '/') { return closingTag; }
var tagName = getName();
var tagName = getName();
var element = {
type: 'element',
tagName: tagName,
properties: {},
children: []
};
var element = {
type: 'element',
tagName: tagName,
properties: {},
children: []
};
if (currentElement) {
currentElement.children.push(element);
} else {
root = element;
}
if (currentElement) {
currentElement.children.push(element);
} else {
root = element;
}
var attribute;
while (i < source.length && (attribute = getAttribute())) {
element.properties[attribute.name] = attribute.value;
}
var attribute;
while (i < source.length && (attribute = getAttribute())) {
element.properties[attribute.name] = attribute.value;
}
var selfClosing = false;
var selfClosing = false;
if (source[i] === '/') {
i += 1;
selfClosing = true;
}
if (source[i] === '/') {
i += 1;
selfClosing = true;
}
if (source[i] !== '>') {
error('Expected >');
}
if (source[i] !== '>') {
error('Expected >');
}
if (!selfClosing) {
currentElement = element;
stack.push(element);
}
if (!selfClosing) {
currentElement = element;
stack.push(element);
}
return neutral;
}
return neutral;
}
function comment() {
var index = source.indexOf('-->', i);
if (!~index) error('expected -->');
function comment() {
var index = source.indexOf('-->', i);
if (!~index) { error('expected -->'); }
i = index + 2;
return neutral;
}
i = index + 2;
return neutral;
}
function cdata() {
var index = source.indexOf(']]>', i);
if (!~index) error('expected ]]>');
function cdata() {
var index = source.indexOf(']]>', i);
if (!~index) { error('expected ]]>'); }
currentElement.children.push(source.slice(i + 7, index));
currentElement.children.push(source.slice(i + 7, index));
i = index + 2;
return neutral;
}
i = index + 2;
return neutral;
}
function closingTag() {
var tagName = getName();
function closingTag() {
var tagName = getName();
if (!tagName) error('Expected tag name');
if (!tagName) { error('Expected tag name'); }
if (tagName !== currentElement.tagName) {
error(("Expected closing tag </" + tagName + "> to match opening tag <" + (currentElement.tagName) + ">"));
}
if (tagName !== currentElement.tagName) {
error(("Expected closing tag </" + tagName + "> to match opening tag <" + (currentElement.tagName) + ">"));
}
if (source[i] !== '>') {
error('Expected >');
}
if (source[i] !== '>') {
error('Expected >');
}
stack.pop();
currentElement = stack[stack.length - 1];
stack.pop();
currentElement = stack[stack.length - 1];
return neutral;
}
return neutral;
}
function getName() {
var name = '';
while (i < source.length && validNameCharacters.test(source[i])) name += source[i++];
function getName() {
var name = '';
while (i < source.length && validNameCharacters.test(source[i])) { name += source[i++]; }
return name;
}
return name;
}
function getAttribute() {
if (!whitespace.test(source[i])) return null;
allowSpaces();
function getAttribute() {
if (!whitespace.test(source[i])) { return null; }
allowSpaces();
var name = getName();
if (!name) return null;
var name = getName();
if (!name) { return null; }
var value = true;
var value = true;
allowSpaces();
if (source[i] === '=') {
i += 1;
allowSpaces();
allowSpaces();
if (source[i] === '=') {
i += 1;
allowSpaces();
value = getAttributeValue();
if (!isNaN(value) && value.trim() !== '') value = +value; // TODO whitelist numeric attributes?
}
value = getAttributeValue();
if (!isNaN(value) && value.trim() !== '') { value = +value; } // TODO whitelist numeric attributes?
}
return { name: name, value: value };
}
return { name: name, value: value };
}
function getAttributeValue() {
return quotemark.test(source[i]) ? getQuotedAttributeValue() : getUnquotedAttributeValue();
}
function getAttributeValue() {
return quotemark.test(source[i]) ? getQuotedAttributeValue() : getUnquotedAttributeValue();
}
function getUnquotedAttributeValue() {
var value = '';
do {
var char = source[i];
if (char === ' ' || char === '>' || char === '/') {
return value;
}
function getUnquotedAttributeValue() {
var value = '';
do {
var char = source[i];
if (char === ' ' || char === '>' || char === '/') {
return value;
}
value += char;
i += 1;
} while (i < source.length);
value += char;
i += 1;
} while (i < source.length);
return value;
}
return value;
}
function getQuotedAttributeValue() {
var quotemark = source[i++];
function getQuotedAttributeValue() {
var quotemark = source[i++];
var value = '';
var escaped = false;
var value = '';
var escaped = false;
while (i < source.length) {
var char = source[i++];
if (char === quotemark && !escaped) {
return value;
}
while (i < source.length) {
var char = source[i++];
if (char === quotemark && !escaped) {
return value;
}
if (char === '\\' && !escaped) {
escaped = true;
}
if (char === '\\' && !escaped) {
escaped = true;
}
value += escaped ? ("\\" + char) : char;
escaped = false;
}
}
value += escaped ? ("\\" + char) : char;
escaped = false;
}
}
function allowSpaces() {
while (i < source.length && whitespace.test(source[i])) i += 1;
}
function allowSpaces() {
while (i < source.length && whitespace.test(source[i])) { i += 1; }
}
var i = metadata.length;
while (i < source.length) {
if (!state) error('Unexpected character');
state = state();
i += 1;
}
var i = metadata.length;
while (i < source.length) {
if (!state) { error('Unexpected character'); }
state = state();
i += 1;
}
if (state !== neutral) {
error('Unexpected end of input');
}
if (state !== neutral) {
error('Unexpected end of input');
}
if (root.tagName === 'svg') root.metadata = header;
return {
type: 'root',
children: [root]
};
}
if (root.tagName === 'svg') { root.metadata = header; }
return {
type: 'root',
children: [root]
};
}
exports.parse = parse;
exports.parse = parse;
Object.defineProperty(exports, '__esModule', { value: true });
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=svg-parser.umd.js.map
{
"name": "svg-parser",
"version": "2.0.2",
"version": "2.0.3",
"description": "Create a JSON-friendly object from an SVG string",
"main": "dist/svg-parser.umd.js",
"jsnext:main": "dist/svg-parser.es.js",
"module": "dist/svg-parser.es.js",
"jsnext:main": "dist/svg-parser.esm.js",
"module": "dist/svg-parser.esm.js",
"files": [

@@ -14,3 +14,3 @@ "dist",

"test": "mocha",
"build": "rollup -c",
"build": "rm -rf dist && rollup -c",
"pretest": "npm run build",

@@ -42,2 +42,4 @@ "prepublish": "npm run lint && npm test",

"devDependencies": {
"@rollup/plugin-buble": "^0.21.0",
"@rollup/plugin-node-resolve": "^7.0.0",
"eslint": "^3.2.2",

@@ -47,7 +49,5 @@ "locate-character": "^2.0.5",

"prettier": "^1.18.2",
"rollup": "^0.34.7",
"rollup-plugin-buble": "^0.12.1",
"rollup-plugin-node-resolve": "^2.0.0",
"rollup": "^1.29.0",
"source-map-support": "^0.4.2"
}
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc