Gathering detailed insights and metrics for svg-path-parser
Gathering detailed insights and metrics for svg-path-parser
Gathering detailed insights and metrics for svg-path-parser
Gathering detailed insights and metrics for svg-path-parser
npm install svg-path-parser
Typescript
Module System
Node Version
NPM Version
100
Supply Chain
99.6
Quality
77.6
Maintenance
100
Vulnerability
100
License
JavaScript (100%)
Total Downloads
7,114,273
Last Day
2,601
Last Week
93,546
Last Month
374,657
Last Year
3,134,357
MIT License
225 Stars
24 Commits
19 Forks
10 Watchers
1 Branches
3 Contributors
Updated on Apr 28, 2025
Minified
Minified + Gzipped
Latest Version
1.1.0
Package Id
svg-path-parser@1.1.0
Size
9.08 kB
NPM Version
3.10.10
Node Version
6.9.4
Published on
Jun 19, 2017
Cumulative downloads
Total Downloads
Last Day
-69.7%
2,601
Compared to previous day
Last Week
-23.2%
93,546
Compared to previous week
Last Month
24.6%
374,657
Compared to previous month
Last Year
76.8%
3,134,357
Compared to previous year
1
An SVG path parser, originally built from the PEG.js grammar specified here, published as an NPM module.
Grammar originally written by Gavin Kistner.
require('svg-path-parser')(d)
Takes an SVG path string. The following code…
1var parseSVG = require('svg-path-parser'); 2var d='M3,7 5-6 L1,7 1e2-.4 m-10,10 l10,0 \ 3 V27 89 H23 v10 h10 \ 4 C33,43 38,47 43,47 c0,5 5,10 10,10 \ 5 S63,67 63,67 s-10,10 10,10 \ 6 Q50,50 73,57 q20,-5 0,-10 \ 7 T70,40 t0,-15 \ 8 A5,5 45 1,0 40,20 a5,5 20 0,1 -10-10 Z'; 9console.log(parseSVG(d));
…will yield an array of commands that define the path, like so:
1[ { code:'M', command:'moveto', x:3, y:7 }, 2 { code:'L', command:'lineto', x:5, y:-6 }, 3 { code:'L', command:'lineto', x:1, y:7 }, 4 { code:'L', command:'lineto', x:100, y:-0.4 }, 5 { code:'m', command:'moveto', relative:true, x:-10, y:10 }, 6 { code:'l', command:'lineto', relative:true, x:10, y:0 }, 7 { code:'V', command:'vertical lineto', y:27 }, 8 { code:'V', command:'vertical lineto', y:89 }, 9 { code:'H', command:'horizontal lineto', x:23 }, 10 { code:'v', command:'vertical lineto', relative:true, y:10 }, 11 { code:'h', command:'horizontal lineto', relative:true, x:10 }, 12 { code:'C', command:'curveto', x1:33, y1:43, x2:38, y2:47, x:43, y:47 }, 13 { code:'c', command:'curveto', relative:true, x1:0, y1:5, x2:5, y2:10, x:10, y:10 }, 14 { code:'S', command:'smooth curveto', x2:63, y2:67, x:63, y:67 }, 15 { code:'s', command:'smooth curveto', relative:true, x2:-10, y2:10, x:10, y:10 }, 16 { code:'Q', command:'quadratic curveto', x1:50, y1:50, x:73, y:57 }, 17 { code:'q', command:'quadratic curveto', relative:true, x1:20, y1:-5, x:0, y:-10 }, 18 { code:'T', command:'smooth quadratic curveto', x:70, y:40 }, 19 { code:'t', command:'smooth quadratic curveto', relative:true, x:0, y:-15 }, 20 { code:'A', command:'elliptical arc', rx:5, ry:5, xAxisRotation:45, largeArc:true, sweep:false, x:40, y:20 }, 21 { code:'a', command:'elliptical arc', relative:true, rx:5, ry:5, xAxisRotation:20, largeArc:false, sweep:true, x:-10, y:-10 }, 22 { code:'Z', command:'closepath' } ]
Alternatively, from version 1.1 on, the module exports multiple functions that you can separately use:
1const {parseSVG, makeAbsolute} = require('svg-path-parser');
Version 1.1 adds the ability to convert an array of path commands into their absolute-coordinate equivalents. This modifies the parsed command objects in place, and also returns the array of commands. Continuing the example above:
1const {parseSVG, makeAbsolute} = require('svg-path-parser'); 2const commands = parseSVG(d); 3makeAbsolute(commands); // Note: mutates the commands in place! 4console.log(commands);
1[ { code:'M', command:'moveto', x0:0, y0:0 x:3, y:7 }, 2 { code:'L', command:'lineto', x0:3, y0:7 x:5, y:-6 }, 3 { code:'L', command:'lineto', x0:5, y0:-6 x:1, y:7 }, 4 { code:'L', command:'lineto', x0:1, y0:7 x:100, y:-0.4 }, 5 { code:'M', command:'moveto', x0:100, y0:-0.4 x:90, y:9.6 }, 6 { code:'L', command:'lineto', x0:90, y0:9.6 x:100, y:9.6 }, 7 { code:'V', command:'vertical lineto', x0:100, y0:9.6, x:100, y:27 }, 8 { code:'V', command:'vertical lineto', x0:100, y0:27, x:100, y:89 }, 9 { code:'H', command:'horizontal lineto', x0:100, y0:89, x:23, y:89 }, 10 { code:'V', command:'vertical lineto', x0:23, y0:89, y:99, x:23 }, 11 { code:'H', command:'horizontal lineto', x0:23, y0:99, x:33, y:99 }, 12 { code:'C', command:'curveto', x0:33, y0:99 x1:33, y1:43, x2:38, y2:47, x:43, y:47 }, 13 { code:'C', command:'curveto', x0:43, y0:47 x1:43, y1:52, x2:48, y2:57, x:53, y:57 }, 14 { code:'S', command:'smooth curveto', x0:53, y0:57 x2:63, y2:67, x:63, y:67 }, 15 { code:'S', command:'smooth curveto', x0:63, y0:67 x2:53, y2:77, x:73, y:77 }, 16 { code:'Q', command:'quadratic curveto', x0:73, y0:77 x1:50, y1:50, x:73, y:57 }, 17 { code:'Q', command:'quadratic curveto', x0:73, y0:57 x1:93, y1:52, x:73, y:47 }, 18 { code:'T', command:'smooth quadratic curveto', x0:73, y0:47 x:70, y:40 }, 19 { code:'T', command:'smooth quadratic curveto', x0:70, y0:40 x:70, y:25 }, 20 { code:'A', command:'elliptical arc', x0:70, y0:25 rx:5, ry:5, xAxisRotation:45, largeArc:true, sweep:false, x:40, y:20 }, 21 { code:'A', command:'elliptical arc', x0:40, y0:20 rx:5, ry:5, xAxisRotation:20, largeArc:false, sweep:true, x:30, y:10 }, 22 { code:'Z', command:'closepath', x0:30, y0:10, x:90, y:9.6 } ]
In addition to converting all commands to absolute coordinates, the makeAbsolute
function ensures that:
x0
and y0
properties showing the start point for the command.x
and y
properties showing the finish point for the command.
H
, V
, and Z
commands equivalent to an L
command.makeAbsolute(cmds)
..x
) are no longer in a .args
array of values, but are instead part
of the command object itself.moveto
command is always absolute.This library is released under an MIT-style license. That generally means that you are free to do almost anything you want with it as long as you give a bit of credit where credit is due. See the LICENSE file included for the actual legal limitations.
No vulnerabilities found.
Reason
no binaries found in the repo
Reason
license file detected
Details
Reason
0 existing vulnerabilities detected
Reason
Found 1/23 approved changesets -- score normalized to 0
Reason
0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
project is not fuzzed
Details
Reason
security policy file not detected
Details
Reason
branch protection not enabled on development/release branches
Details
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
Score
Last Scanned on 2025-06-16
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More