svgo 0.1.7 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.eslintrc.yml +5 -104
- data/README.MD +26 -26
- data/bin/svgo-ruby +0 -3
- data/lib/svgo.rb +15 -26
- data/lib/version.rb +1 -1
- data/svgo-js/svgo-built.js +184 -113
- data/svgo-js/svgo-wrapper.js +182 -111
- data/svgo.gemspec +1 -2
- data/yarn.lock +11 -1661
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9736533516c323e32c469677ffe1077df1aa9643
|
4
|
+
data.tar.gz: 9979d1903f52702ab52c6a556156cc8ee5ab57b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c6e546856027895bbc54696ce96c53c2c190e4482c80896ba21bf87470b79d04639774599488a5c6696338e07e4d96fe1773777345cc5ed00b58b47a93d075a
|
7
|
+
data.tar.gz: 5dea61b7b5e8f201c81ffa257d91c72d7ba026fbd18aa685d648c80537df272e16d87e8a968ed940087ad275e7de5249e23048bfdd9d08f6a5d074a711b4d900
|
data/.eslintrc.yml
CHANGED
@@ -1,106 +1,7 @@
|
|
1
|
+
root: true
|
2
|
+
parserOptions:
|
3
|
+
ecmaVersion: 6
|
1
4
|
env:
|
2
5
|
node: true
|
3
|
-
extends:
|
4
|
-
|
5
|
-
ecmaVersion: 5
|
6
|
-
globals:
|
7
|
-
$: false
|
8
|
-
jQuery: false
|
9
|
-
I18n: false
|
10
|
-
locale: true
|
11
|
-
rules:
|
12
|
-
indent:
|
13
|
-
- warn
|
14
|
-
- 2
|
15
|
-
-
|
16
|
-
SwitchCase: 1
|
17
|
-
MemberExpression: 1
|
18
|
-
FunctionDeclaration:
|
19
|
-
body: 1
|
20
|
-
parameters: 2
|
21
|
-
CallExpression:
|
22
|
-
arguments: 1
|
23
|
-
ArrayExpression: 1
|
24
|
-
ObjectExpression: 1
|
25
|
-
|
26
|
-
linebreak-style:
|
27
|
-
- warn
|
28
|
-
- unix
|
29
|
-
quotes:
|
30
|
-
- warn
|
31
|
-
- double
|
32
|
-
-
|
33
|
-
avoidEscape: true
|
34
|
-
semi:
|
35
|
-
- error
|
36
|
-
- always
|
37
|
-
camelcase:
|
38
|
-
- warn
|
39
|
-
-
|
40
|
-
properties: never
|
41
|
-
ignoreDestructuring: false
|
42
|
-
brace-style:
|
43
|
-
- warn
|
44
|
-
- 1tbs
|
45
|
-
-
|
46
|
-
allowSingleLine: true
|
47
|
-
comma-spacing:
|
48
|
-
- warn
|
49
|
-
multiline-comment-style:
|
50
|
-
- warn
|
51
|
-
- separate-lines
|
52
|
-
spaced-comment:
|
53
|
-
- warn
|
54
|
-
- always
|
55
|
-
-
|
56
|
-
line:
|
57
|
-
markers:
|
58
|
-
- "="
|
59
|
-
block:
|
60
|
-
exceptions:
|
61
|
-
- "*"
|
62
|
-
balanced: true
|
63
|
-
no-multiple-empty-lines:
|
64
|
-
- error
|
65
|
-
-
|
66
|
-
max: 2
|
67
|
-
maxBOF: 0
|
68
|
-
maxEOF: 1
|
69
|
-
unicode-bom:
|
70
|
-
- error
|
71
|
-
- never
|
72
|
-
dot-location:
|
73
|
-
- error
|
74
|
-
- property
|
75
|
-
dot-notation:
|
76
|
-
- warn
|
77
|
-
no-alert:
|
78
|
-
warn
|
79
|
-
no-console:
|
80
|
-
warn
|
81
|
-
no-eval:
|
82
|
-
error
|
83
|
-
valid-jsdoc:
|
84
|
-
- error
|
85
|
-
-
|
86
|
-
prefer:
|
87
|
-
arg: param
|
88
|
-
argument: param
|
89
|
-
return: returns
|
90
|
-
preferType:
|
91
|
-
object: Object
|
92
|
-
array: Array
|
93
|
-
list: Array
|
94
|
-
hash: Object
|
95
|
-
dict: Object
|
96
|
-
requireReturn: false
|
97
|
-
requireReturnType: true
|
98
|
-
requireParamType: true
|
99
|
-
requireParamDescription: true
|
100
|
-
matchDescription: ".+"
|
101
|
-
requireReturnDescription: true
|
102
|
-
no-unused-vars:
|
103
|
-
- error
|
104
|
-
-
|
105
|
-
vars: all
|
106
|
-
argsIgnorePattern: "window|document|event|el|element|_"
|
6
|
+
extends:
|
7
|
+
- standard
|
data/README.MD
CHANGED
@@ -7,6 +7,15 @@ Removes metadata and editor data elements and attributes that are redundant
|
|
7
7
|
from SVG files. Can strip files so they are optimised for web use. Go to
|
8
8
|
[SVGO](https://github.com/svg/svgo) for more documentation on features.
|
9
9
|
|
10
|
+
# Note to users of 1.x versions
|
11
|
+
|
12
|
+
`execjs` is no longer used as a wrapper around JavaScript run times, instead
|
13
|
+
[`mini_racer`](https://github.com/discourse/mini_racer) is used directly. That
|
14
|
+
means one dependency is removed. `mini_racer` was already a dependency so it
|
15
|
+
should not make a difference during installation.
|
16
|
+
|
17
|
+
|
18
|
+
|
10
19
|
## How to use?
|
11
20
|
|
12
21
|
### As a library
|
@@ -63,14 +72,14 @@ require('svgo')
|
|
63
72
|
svg_file = "path/to/a.svg"
|
64
73
|
options = {
|
65
74
|
plugins: {
|
66
|
-
:
|
67
|
-
:
|
68
|
-
:
|
69
|
-
:
|
70
|
-
:
|
71
|
-
:
|
72
|
-
:
|
73
|
-
:
|
75
|
+
addAttributesToSVGElement: true,
|
76
|
+
addClassesToSVGElement: true,
|
77
|
+
cleanupAttrs: false,
|
78
|
+
cleanupEnableBackground: true,
|
79
|
+
cleanupIDs: false,
|
80
|
+
cleanupListOfValues: true,
|
81
|
+
collapseGroups: true,
|
82
|
+
cleanupNumericValues: true,
|
74
83
|
#etc..
|
75
84
|
}
|
76
85
|
}
|
@@ -109,33 +118,24 @@ docker run -i svgo < test/fixtures/ruby.svg > test/fixtures/ruby.optim.svg
|
|
109
118
|
|
110
119
|
## How this works
|
111
120
|
|
112
|
-
[`
|
113
|
-
library. The SVGO library returns a JavaScript Promise, which
|
114
|
-
supported by `
|
115
|
-
functions are also disabled in `
|
116
|
-
fulfilled. Therefore there is a small
|
121
|
+
[`mini_racer`](https://github.com/discourse/mini_racer) is used to run the
|
122
|
+
Node SVGO as a library. The SVGO library returns a JavaScript Promise, which
|
123
|
+
is currently not supported by `mini_racer` and perhaps never will be.
|
124
|
+
`setTimeout` and sleep-like functions are also disabled in `mini_racer` so we
|
125
|
+
can't wait for the Promise to get fulfilled. Therefore there is a small
|
126
|
+
wrapper JavaScript in this repository
|
117
127
|
that calls all the components that SVGO is made up of, but without the
|
118
128
|
`Promise`. It also wraps up the configuration of plugins the way it is expected
|
119
|
-
by SVGO's components. Lastly `require` is not supported by `
|
120
|
-
this is transpiled to one monolithic JavaScript file - that is completely
|
129
|
+
by SVGO's components. Lastly `require` is not supported by `mini_racer` so all
|
130
|
+
of this is transpiled to one monolithic JavaScript file - that is completely
|
121
131
|
self-contained, using [browserify](http://browserify.org/).
|
122
132
|
|
123
|
-
__NOTE:__ `execjs` supports a variety of JavaSript runtimes, notably
|
124
|
-
[`therubyracer`](https://github.com/cowboyd/therubyracer), but `therubyracer`
|
125
|
-
depends on an ancient [`libv8`](https://github.com/cowboyd/libv8), which
|
126
|
-
doesn't support some of the modern syntax used in SVGO. Therefore `mini_racer`
|
127
|
-
(a drop in replacement for `therubyracer`) is a dependency, which uses a much
|
128
|
-
more recent `libv8`.
|
129
|
-
|
130
|
-
If you have [Node](https://nodejs.org/) installed you could also use that as a
|
131
|
-
runtime.
|
132
|
-
|
133
133
|
### Transpiling Node SVGO
|
134
134
|
|
135
135
|
__TL;DR:__ A transpiled version of SVGO is included in the repository, so you
|
136
136
|
don't need to transpile anything.
|
137
137
|
|
138
|
-
Because `
|
138
|
+
Because `mini_racer` supports only self-contained modules, and does not allow
|
139
139
|
`require()`, `Promise` etc.. The SGVO library is wrapped in a JavaScript that
|
140
140
|
requires all the main parts of SVGO and makes an SVGO function without
|
141
141
|
JavaScript Promises. The wrapper is then transpiled to a self-contained module
|
data/bin/svgo-ruby
CHANGED
@@ -104,9 +104,6 @@ sortAttrs:
|
|
104
104
|
"sorts element attributes (disabled by default)"
|
105
105
|
}
|
106
106
|
|
107
|
-
options.plugins = Hash[
|
108
|
-
plugins.map { |k, str| [k, !str.include?("disabled by default")]}
|
109
|
-
]
|
110
107
|
parser = OptionParser.new do |opts|
|
111
108
|
opts.banner = "Usage: svgo-ruby [options] [input file]"
|
112
109
|
opts.separator ""
|
data/lib/svgo.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
require '
|
1
|
+
require 'mini_racer'
|
2
2
|
require 'json'
|
3
3
|
require 'pry'
|
4
4
|
require 'ostruct'
|
5
5
|
|
6
6
|
PLUGINS_DEFAULT = [
|
7
7
|
:addAttributesToSVGElement,
|
8
|
-
:addClassesToSVGElement,
|
9
8
|
:cleanupAttrs,
|
10
9
|
:cleanupEnableBackground,
|
11
10
|
:cleanupIDs,
|
@@ -47,8 +46,7 @@ class SvgoOptions
|
|
47
46
|
def initialize
|
48
47
|
@options = OpenStruct.new(
|
49
48
|
js2svg: OpenStruct.new(pretty: false),
|
50
|
-
plugins: PLUGINS_DEFAULT,
|
51
|
-
floatPrecision: 6,
|
49
|
+
plugins: PLUGINS_DEFAULT.map { | p | [ p, true ] }.to_h,
|
52
50
|
multipass: false
|
53
51
|
)
|
54
52
|
yield @options if block_given?
|
@@ -57,6 +55,9 @@ class SvgoOptions
|
|
57
55
|
def get_options(*args)
|
58
56
|
options = @options.to_h
|
59
57
|
options[:js2svg] = options[:js2svg].to_h
|
58
|
+
options[:plugins] = options[:plugins].map { | plugin, params |
|
59
|
+
{plugin => params}
|
60
|
+
}
|
60
61
|
options
|
61
62
|
end
|
62
63
|
|
@@ -110,6 +111,7 @@ class SvgoOptions
|
|
110
111
|
end
|
111
112
|
|
112
113
|
class SvgOptimizer
|
114
|
+
attr_accessor :options
|
113
115
|
def initialize(options=SvgoOptions.new)
|
114
116
|
yield options if block_given?
|
115
117
|
if options.is_a? SvgoOptions
|
@@ -117,37 +119,24 @@ class SvgOptimizer
|
|
117
119
|
else
|
118
120
|
@options = options
|
119
121
|
end
|
120
|
-
|
121
|
-
runtime = @options.delete "runtime"
|
122
|
-
unless runtime
|
123
|
-
# therubyracer is a first choice for execjs but its libv8 is too
|
124
|
-
# old for the svgo library and its dependencies.
|
125
|
-
runtimes = [
|
126
|
-
ExecJS::Runtimes::MiniRacer,
|
127
|
-
ExecJS::Runtimes::Node
|
128
|
-
]
|
129
|
-
runtime = runtimes.select {|r| r.available?}.first
|
130
|
-
unless runtime
|
131
|
-
raise ExecJS::RuntimeUnavailable.new(
|
132
|
-
"No supported runtime available please install " \
|
133
|
-
"`mini_racer` or `NodeJS`."
|
134
|
-
)
|
135
|
-
end
|
136
|
-
end
|
137
|
-
ExecJS.runtime = runtime
|
138
122
|
if not @options[:plugins]
|
139
123
|
@options[:plugins] = PLUGINS_DEFAULT
|
140
124
|
end
|
141
|
-
if @options[:plugins].is_a? Array
|
142
|
-
|
125
|
+
if not @options[:plugins].is_a? Array
|
126
|
+
raise StandardError.new("`options.plugins` should be an Array.")
|
143
127
|
end
|
128
|
+
@options[:plugins] = @options[:plugins].map { | p |
|
129
|
+
p.is_a?(Hash) ? p : {p => true}
|
130
|
+
}
|
144
131
|
svgo_js = File.expand_path("../../svgo-js/svgo-built.js", __FILE__)
|
145
132
|
svgo_module = File.open(svgo_js, "r:utf-8", &:read)
|
146
|
-
@context =
|
133
|
+
@context = MiniRacer::Context.new
|
134
|
+
@context.eval svgo_module
|
135
|
+
@context.call("svgo", {setup: @options})
|
147
136
|
end
|
148
137
|
|
149
138
|
def optimize(svg_data)
|
150
|
-
result = @context.call("svgo",
|
139
|
+
result = @context.call("svgo", {optimize: svg_data.to_s})
|
151
140
|
if not result
|
152
141
|
raise StandardError.new("Bad response from JavaScript runtime.")
|
153
142
|
end
|
data/lib/version.rb
CHANGED
data/svgo-js/svgo-built.js
CHANGED
@@ -45381,144 +45381,215 @@ function config (name) {
|
|
45381
45381
|
|
45382
45382
|
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
45383
45383
|
},{}],448:[function(require,module,exports){
|
45384
|
-
|
45385
|
-
|
45386
|
-
|
45387
|
-
|
45388
|
-
|
45389
|
-
|
45390
|
-
addAttributesToSVGElement:
|
45391
|
-
|
45392
|
-
|
45393
|
-
|
45394
|
-
|
45395
|
-
|
45396
|
-
|
45397
|
-
|
45398
|
-
|
45399
|
-
|
45400
|
-
|
45401
|
-
|
45402
|
-
|
45403
|
-
|
45404
|
-
|
45405
|
-
|
45406
|
-
|
45407
|
-
|
45408
|
-
|
45409
|
-
|
45410
|
-
|
45411
|
-
|
45412
|
-
|
45413
|
-
|
45414
|
-
|
45415
|
-
|
45416
|
-
|
45417
|
-
|
45418
|
-
|
45419
|
-
|
45420
|
-
|
45421
|
-
|
45422
|
-
|
45423
|
-
|
45424
|
-
|
45425
|
-
|
45426
|
-
|
45427
|
-
|
45428
|
-
|
45429
|
-
|
45430
|
-
|
45431
|
-
|
45432
|
-
|
45433
|
-
|
45434
|
-
|
45435
|
-
|
45436
|
-
|
45437
|
-
|
45438
|
-
|
45439
|
-
|
45440
|
-
|
45441
|
-
|
45442
|
-
|
45443
|
-
|
45444
|
-
|
45445
|
-
|
45446
|
-
|
45447
|
-
|
45448
|
-
|
45449
|
-
|
45450
|
-
|
45451
|
-
|
45452
|
-
|
45453
|
-
|
45384
|
+
'use strict'
|
45385
|
+
let CONFIG = require('../node_modules/svgo/lib/svgo/config.js')
|
45386
|
+
let SVG2JS = require('../node_modules/svgo/lib/svgo/svg2js.js')
|
45387
|
+
let PLUGINS = require('../node_modules/svgo/lib/svgo/plugins.js')
|
45388
|
+
let JS2SVG = require('../node_modules/svgo/lib/svgo/js2svg.js')
|
45389
|
+
let pluginModules = {
|
45390
|
+
addAttributesToSVGElement:
|
45391
|
+
require('../node_modules/svgo/plugins/addAttributesToSVGElement'),
|
45392
|
+
addClassesToSVGElement:
|
45393
|
+
require('../node_modules/svgo/plugins/addClassesToSVGElement'),
|
45394
|
+
cleanupAttrs:
|
45395
|
+
require('../node_modules/svgo/plugins/cleanupAttrs'),
|
45396
|
+
cleanupEnableBackground:
|
45397
|
+
require('../node_modules/svgo/plugins/cleanupEnableBackground'),
|
45398
|
+
cleanupIDs:
|
45399
|
+
require('../node_modules/svgo/plugins/cleanupIDs'),
|
45400
|
+
cleanupListOfValues:
|
45401
|
+
require('../node_modules/svgo/plugins/cleanupListOfValues'),
|
45402
|
+
cleanupNumericValues:
|
45403
|
+
require('../node_modules/svgo/plugins/cleanupNumericValues'),
|
45404
|
+
collapseGroups:
|
45405
|
+
require('../node_modules/svgo/plugins/collapseGroups'),
|
45406
|
+
convertColors:
|
45407
|
+
require('../node_modules/svgo/plugins/convertColors'),
|
45408
|
+
convertPathData:
|
45409
|
+
require('../node_modules/svgo/plugins/convertPathData'),
|
45410
|
+
convertShapeToPath:
|
45411
|
+
require('../node_modules/svgo/plugins/convertShapeToPath'),
|
45412
|
+
convertStyleToAttrs:
|
45413
|
+
require('../node_modules/svgo/plugins/convertStyleToAttrs'),
|
45414
|
+
convertTransform:
|
45415
|
+
require('../node_modules/svgo/plugins/convertTransform'),
|
45416
|
+
inlineStyles:
|
45417
|
+
require('../node_modules/svgo/plugins/inlineStyles'),
|
45418
|
+
mergePaths:
|
45419
|
+
require('../node_modules/svgo/plugins/mergePaths'),
|
45420
|
+
minifyStyles:
|
45421
|
+
require('../node_modules/svgo/plugins/minifyStyles'),
|
45422
|
+
moveElemsAttrsToGroup:
|
45423
|
+
require('../node_modules/svgo/plugins/moveElemsAttrsToGroup'),
|
45424
|
+
moveGroupAttrsToElems:
|
45425
|
+
require('../node_modules/svgo/plugins/moveGroupAttrsToElems'),
|
45426
|
+
prefixIds:
|
45427
|
+
require('../node_modules/svgo/plugins/prefixIds'),
|
45428
|
+
removeComments:
|
45429
|
+
require('../node_modules/svgo/plugins/removeComments'),
|
45430
|
+
removeDesc:
|
45431
|
+
require('../node_modules/svgo/plugins/removeDesc'),
|
45432
|
+
removeDimensions:
|
45433
|
+
require('../node_modules/svgo/plugins/removeDimensions'),
|
45434
|
+
removeDoctype:
|
45435
|
+
require('../node_modules/svgo/plugins/removeDoctype'),
|
45436
|
+
removeEditorsNSData:
|
45437
|
+
require('../node_modules/svgo/plugins/removeEditorsNSData'),
|
45438
|
+
removeElementsByAttr:
|
45439
|
+
require('../node_modules/svgo/plugins/removeElementsByAttr'),
|
45440
|
+
removeEmptyAttrs:
|
45441
|
+
require('../node_modules/svgo/plugins/removeEmptyAttrs'),
|
45442
|
+
removeEmptyContainers:
|
45443
|
+
require('../node_modules/svgo/plugins/removeEmptyContainers'),
|
45444
|
+
removeEmptyText:
|
45445
|
+
require('../node_modules/svgo/plugins/removeEmptyText'),
|
45446
|
+
removeHiddenElems:
|
45447
|
+
require('../node_modules/svgo/plugins/removeHiddenElems'),
|
45448
|
+
removeMetadata:
|
45449
|
+
require('../node_modules/svgo/plugins/removeMetadata'),
|
45450
|
+
removeNonInheritableGroupAttrs:
|
45451
|
+
require('../node_modules/svgo/plugins/removeNonInheritableGroupAttrs'),
|
45452
|
+
removeRasterImages:
|
45453
|
+
require('../node_modules/svgo/plugins/removeRasterImages'),
|
45454
|
+
removeScriptElement:
|
45455
|
+
require('../node_modules/svgo/plugins/removeScriptElement'),
|
45456
|
+
removeStyleElement:
|
45457
|
+
require('../node_modules/svgo/plugins/removeStyleElement'),
|
45458
|
+
removeTitle:
|
45459
|
+
require('../node_modules/svgo/plugins/removeTitle'),
|
45460
|
+
removeUnknownsAndDefaults:
|
45461
|
+
require('../node_modules/svgo/plugins/removeUnknownsAndDefaults'),
|
45462
|
+
removeUnusedNS:
|
45463
|
+
require('../node_modules/svgo/plugins/removeUnusedNS'),
|
45464
|
+
removeUselessDefs:
|
45465
|
+
require('../node_modules/svgo/plugins/removeUselessDefs'),
|
45466
|
+
removeUselessStrokeAndFill:
|
45467
|
+
require('../node_modules/svgo/plugins/removeUselessStrokeAndFill'),
|
45468
|
+
removeViewBox:
|
45469
|
+
require('../node_modules/svgo/plugins/removeViewBox'),
|
45470
|
+
removeXMLNS:
|
45471
|
+
require('../node_modules/svgo/plugins/removeXMLNS'),
|
45472
|
+
removeXMLProcInst:
|
45473
|
+
require('../node_modules/svgo/plugins/removeXMLProcInst'),
|
45474
|
+
sortAttrs:
|
45475
|
+
require('../node_modules/svgo/plugins/sortAttrs'),
|
45476
|
+
removeAttrs:
|
45477
|
+
require('../node_modules/svgo/plugins/removeAttrs')
|
45478
|
+
}
|
45479
|
+
|
45480
|
+
function isObject (item) {
|
45481
|
+
return (item && typeof item === 'object' && !Array.isArray(item))
|
45482
|
+
}
|
45483
|
+
|
45484
|
+
function mergeDeep (target, source) {
|
45485
|
+
let output = Object.assign({}, target)
|
45486
|
+
if (isObject(target) && isObject(source)) {
|
45487
|
+
Object.keys(source).forEach(key => {
|
45488
|
+
if (isObject(source[key])) {
|
45489
|
+
if (!(key in target)) {
|
45490
|
+
Object.assign(output, { [key]: source[key] })
|
45491
|
+
} else {
|
45492
|
+
output[key] = mergeDeep(target[key], source[key])
|
45493
|
+
}
|
45494
|
+
} else {
|
45495
|
+
Object.assign(output, { [key]: source[key] })
|
45496
|
+
}
|
45497
|
+
})
|
45498
|
+
}
|
45499
|
+
return output
|
45500
|
+
}
|
45501
|
+
|
45502
|
+
function SVGO (options) {
|
45503
|
+
let self = this
|
45504
|
+
let errors = []
|
45505
|
+
let log = []
|
45506
|
+
options.full = true
|
45507
|
+
options.plugins = options.plugins.map((plugin) => {
|
45508
|
+
let name = Object.keys(plugin)[0]
|
45509
|
+
let params = plugin[name]
|
45510
|
+
if (params) {
|
45511
|
+
params = typeof params === 'object' ? params : {}
|
45512
|
+
params = mergeDeep(pluginModules[name], params)
|
45513
|
+
params.active = true
|
45514
|
+
plugin[name] = params
|
45515
|
+
return plugin
|
45454
45516
|
}
|
45455
|
-
})
|
45456
|
-
|
45457
|
-
this.
|
45458
|
-
|
45459
|
-
|
45460
|
-
|
45461
|
-
|
45462
|
-
|
45463
|
-
|
45464
|
-
|
45465
|
-
self.svgjs = undefined
|
45466
|
-
SVG2JS(svgstr, function(svgjs) {
|
45517
|
+
})
|
45518
|
+
this.options = CONFIG(options)
|
45519
|
+
this.optimize = function (svgstr) {
|
45520
|
+
if (self.options.error) {
|
45521
|
+
errors.push('Configuration error: ' + self.options.error)
|
45522
|
+
}
|
45523
|
+
let passes = self.options.multipass ? 10 : 1
|
45524
|
+
let lastSize = Number.POSITIVE_INFINITY
|
45525
|
+
let newSize = 0
|
45526
|
+
let counter = 0
|
45527
|
+
self.svgjs = undefined
|
45528
|
+
SVG2JS(svgstr, function (svgjs) {
|
45467
45529
|
if (svgjs.error) {
|
45468
45530
|
// If we don't have anything yet, throw an exception.
|
45469
|
-
errors.push(
|
45531
|
+
errors.push('Error before optimization: ' + svgjs.error)
|
45470
45532
|
} else {
|
45471
45533
|
while (counter++ <= passes && newSize < lastSize) {
|
45472
|
-
lastSize = newSize
|
45534
|
+
lastSize = newSize
|
45473
45535
|
try {
|
45474
|
-
svgjs = self._optimize(svgjs, self.options.plugins)
|
45475
|
-
newSize = JS2SVG(svgjs, self.options.js2svg).data.length
|
45536
|
+
svgjs = self._optimize(svgjs, self.options.plugins)
|
45537
|
+
newSize = JS2SVG(svgjs, self.options.js2svg).data.length
|
45476
45538
|
} catch (exc) {
|
45477
45539
|
// Nothing to return yet..
|
45478
|
-
if (counter
|
45479
|
-
throw exc
|
45540
|
+
if (counter === 1) {
|
45541
|
+
throw exc
|
45542
|
+
}
|
45480
45543
|
// Get out of while loop, we have something to return
|
45481
45544
|
// that is somewhat optimized, only the last iteration
|
45482
45545
|
// failed.
|
45483
45546
|
errors.push(
|
45484
|
-
|
45485
|
-
|
45486
|
-
)
|
45487
|
-
break
|
45547
|
+
'Error occurred during optimization pass ' + counter +
|
45548
|
+
', returning data from pass ' + (counter - 1) + '.'
|
45549
|
+
)
|
45550
|
+
break
|
45488
45551
|
}
|
45489
45552
|
}
|
45490
|
-
self.svgjs = svgjs
|
45553
|
+
self.svgjs = svgjs
|
45491
45554
|
}
|
45492
|
-
})
|
45493
|
-
|
45494
|
-
if (self.svgjs !== undefined && typeof self.svgjs.content !==
|
45495
|
-
xml = JS2SVG(self.svgjs, self.options.js2svg).data
|
45555
|
+
})
|
45556
|
+
let xml
|
45557
|
+
if (self.svgjs !== undefined && typeof self.svgjs.content !== 'undefined') {
|
45558
|
+
xml = JS2SVG(self.svgjs, self.options.js2svg).data
|
45496
45559
|
}
|
45497
45560
|
return {
|
45498
45561
|
data: xml,
|
45499
|
-
errors
|
45562
|
+
errors,
|
45563
|
+
log,
|
45564
|
+
options,
|
45500
45565
|
passes: counter
|
45501
|
-
}
|
45502
|
-
}
|
45566
|
+
}
|
45567
|
+
}
|
45503
45568
|
}
|
45504
45569
|
|
45505
|
-
SVGO.prototype._optimize =
|
45570
|
+
SVGO.prototype._optimize = (svgjs, plugins) => {
|
45506
45571
|
// Optimization round..
|
45507
|
-
svgjs = PLUGINS(svgjs, {}, plugins)
|
45572
|
+
svgjs = PLUGINS(svgjs, {}, plugins)
|
45508
45573
|
if (svgjs.error) {
|
45509
|
-
// If we don
|
45510
|
-
throw
|
45574
|
+
// If we don't have anything yet, throw an exception.
|
45575
|
+
throw Error(
|
45576
|
+
`Error during optimization: ${svgjs.error} ${JSON.stringify(plugins)}`)
|
45511
45577
|
}
|
45512
45578
|
// If all went well keep the result.
|
45513
|
-
return svgjs
|
45514
|
-
}
|
45515
|
-
|
45516
|
-
module.exports =
|
45517
|
-
|
45518
|
-
|
45519
|
-
|
45520
|
-
|
45521
|
-
|
45579
|
+
return svgjs
|
45580
|
+
}
|
45581
|
+
let svgoContext
|
45582
|
+
module.exports = (obj) => {
|
45583
|
+
let command = Object.keys(obj)[0]
|
45584
|
+
let payload = obj[command]
|
45585
|
+
if (command === 'setup') {
|
45586
|
+
svgoContext = new SVGO(payload)
|
45587
|
+
return true
|
45588
|
+
} else if (command === 'optimize' && svgoContext) {
|
45589
|
+
return svgoContext.optimize(payload)
|
45590
|
+
}
|
45591
|
+
throw Error('You need to call `setup([options])` before calling optimize.')
|
45592
|
+
}
|
45522
45593
|
|
45523
45594
|
},{"../node_modules/svgo/lib/svgo/config.js":389,"../node_modules/svgo/lib/svgo/js2svg.js":393,"../node_modules/svgo/lib/svgo/plugins.js":395,"../node_modules/svgo/lib/svgo/svg2js.js":396,"../node_modules/svgo/plugins/addAttributesToSVGElement":401,"../node_modules/svgo/plugins/addClassesToSVGElement":402,"../node_modules/svgo/plugins/cleanupAttrs":403,"../node_modules/svgo/plugins/cleanupEnableBackground":404,"../node_modules/svgo/plugins/cleanupIDs":405,"../node_modules/svgo/plugins/cleanupListOfValues":406,"../node_modules/svgo/plugins/cleanupNumericValues":407,"../node_modules/svgo/plugins/collapseGroups":408,"../node_modules/svgo/plugins/convertColors":409,"../node_modules/svgo/plugins/convertPathData":410,"../node_modules/svgo/plugins/convertShapeToPath":411,"../node_modules/svgo/plugins/convertStyleToAttrs":412,"../node_modules/svgo/plugins/convertTransform":413,"../node_modules/svgo/plugins/inlineStyles":414,"../node_modules/svgo/plugins/mergePaths":415,"../node_modules/svgo/plugins/minifyStyles":416,"../node_modules/svgo/plugins/moveElemsAttrsToGroup":417,"../node_modules/svgo/plugins/moveGroupAttrsToElems":418,"../node_modules/svgo/plugins/prefixIds":419,"../node_modules/svgo/plugins/removeAttrs":420,"../node_modules/svgo/plugins/removeComments":421,"../node_modules/svgo/plugins/removeDesc":422,"../node_modules/svgo/plugins/removeDimensions":423,"../node_modules/svgo/plugins/removeDoctype":424,"../node_modules/svgo/plugins/removeEditorsNSData":425,"../node_modules/svgo/plugins/removeElementsByAttr":426,"../node_modules/svgo/plugins/removeEmptyAttrs":427,"../node_modules/svgo/plugins/removeEmptyContainers":428,"../node_modules/svgo/plugins/removeEmptyText":429,"../node_modules/svgo/plugins/removeHiddenElems":430,"../node_modules/svgo/plugins/removeMetadata":431,"../node_modules/svgo/plugins/removeNonInheritableGroupAttrs":432,"../node_modules/svgo/plugins/removeRasterImages":433,"../node_modules/svgo/plugins/removeScriptElement":434,"../node_modules/svgo/plugins/removeStyleElement":435,"../node_modules/svgo/plugins/removeTitle":436,"../node_modules/svgo/plugins/removeUnknownsAndDefaults":437,"../node_modules/svgo/plugins/removeUnusedNS":438,"../node_modules/svgo/plugins/removeUselessDefs":439,"../node_modules/svgo/plugins/removeUselessStrokeAndFill":440,"../node_modules/svgo/plugins/removeViewBox":441,"../node_modules/svgo/plugins/removeXMLNS":442,"../node_modules/svgo/plugins/removeXMLProcInst":443,"../node_modules/svgo/plugins/sortAttrs":444}]},{},[448])(448)
|
45524
45595
|
});
|