@iconify/tools 2.0.14 → 2.0.15
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.
- package/lib/colors/attribs.cjs +30 -0
- package/lib/colors/attribs.d.ts +13 -10
- package/lib/colors/attribs.mjs +7 -13
- package/lib/colors/parse.cjs +269 -0
- package/lib/colors/parse.d.ts +15 -11
- package/lib/colors/parse.mjs +27 -31
- package/lib/colors/validate.cjs +52 -0
- package/lib/colors/validate.d.ts +11 -4
- package/lib/colors/validate.mjs +19 -6
- package/lib/css/parse.cjs +26 -0
- package/lib/css/parse.d.ts +3 -1
- package/lib/css/parse.mjs +8 -6
- package/lib/css/parser/error.cjs +25 -0
- package/lib/css/parser/error.d.ts +4 -2
- package/lib/css/parser/error.mjs +2 -4
- package/lib/css/parser/export.cjs +48 -0
- package/lib/css/parser/export.d.ts +5 -2
- package/lib/css/parser/export.mjs +4 -6
- package/lib/css/parser/strings.cjs +77 -0
- package/lib/css/parser/strings.d.ts +6 -3
- package/lib/css/parser/strings.mjs +4 -6
- package/lib/css/parser/text.cjs +135 -0
- package/lib/css/parser/text.d.ts +8 -5
- package/lib/css/parser/text.mjs +3 -8
- package/lib/css/parser/tokens.cjs +184 -0
- package/lib/css/parser/tokens.d.ts +6 -3
- package/lib/css/parser/tokens.mjs +7 -13
- package/lib/css/parser/tree.cjs +42 -0
- package/lib/css/parser/tree.d.ts +5 -2
- package/lib/css/parser/tree.mjs +2 -4
- package/lib/css/parser/types.cjs +2 -0
- package/lib/css/parser/types.d.ts +13 -11
- package/lib/css/parser/types.mjs +1 -0
- package/lib/download/api/cache.cjs +86 -0
- package/lib/download/api/cache.d.ts +8 -5
- package/lib/download/api/cache.mjs +14 -19
- package/lib/download/api/download.cjs +28 -0
- package/lib/download/api/download.d.ts +5 -2
- package/lib/download/api/download.mjs +8 -9
- package/lib/download/api/index.cjs +51 -0
- package/lib/download/api/index.d.ts +5 -2
- package/lib/download/api/index.mjs +8 -6
- package/lib/download/api/types.cjs +2 -0
- package/lib/download/api/types.d.ts +4 -2
- package/lib/download/api/types.mjs +1 -0
- package/lib/download/git/branch.cjs +22 -0
- package/lib/download/git/branch.d.ts +5 -2
- package/lib/download/git/branch.mjs +5 -5
- package/lib/download/git/hash.cjs +15 -0
- package/lib/download/git/hash.d.ts +5 -2
- package/lib/download/git/hash.mjs +5 -5
- package/lib/download/git/index.cjs +76 -0
- package/lib/download/git/index.d.ts +10 -8
- package/lib/download/git/index.mjs +41 -26
- package/lib/download/git/reset.cjs +41 -0
- package/lib/download/git/reset.d.ts +3 -1
- package/lib/download/git/reset.mjs +29 -5
- package/lib/download/github/hash.cjs +32 -0
- package/lib/download/github/hash.d.ts +5 -2
- package/lib/download/github/hash.mjs +10 -7
- package/lib/download/github/index.cjs +98 -0
- package/lib/download/github/index.d.ts +11 -9
- package/lib/download/github/index.mjs +23 -17
- package/lib/download/github/types.cjs +2 -0
- package/lib/download/github/types.d.ts +3 -1
- package/lib/download/github/types.mjs +1 -0
- package/lib/download/gitlab/hash.cjs +32 -0
- package/lib/download/gitlab/hash.d.ts +5 -2
- package/lib/download/gitlab/hash.mjs +10 -6
- package/lib/download/gitlab/index.cjs +98 -0
- package/lib/download/gitlab/index.d.ts +11 -9
- package/lib/download/gitlab/index.mjs +24 -18
- package/lib/download/gitlab/types.cjs +7 -0
- package/lib/download/gitlab/types.d.ts +4 -2
- package/lib/download/gitlab/types.mjs +3 -5
- package/lib/download/helpers/untar.cjs +14 -0
- package/lib/download/helpers/untar.d.ts +3 -1
- package/lib/download/helpers/untar.mjs +4 -5
- package/lib/download/helpers/unzip.cjs +19 -0
- package/lib/download/helpers/unzip.d.ts +3 -1
- package/lib/download/helpers/unzip.mjs +6 -7
- package/lib/download/index.cjs +64 -0
- package/lib/download/index.d.ts +18 -13
- package/lib/download/index.mjs +46 -19
- package/lib/download/npm/index.cjs +82 -0
- package/lib/download/npm/index.d.ts +10 -8
- package/lib/download/npm/index.mjs +16 -13
- package/lib/download/npm/types.cjs +2 -0
- package/lib/download/npm/types.d.ts +3 -1
- package/lib/download/npm/types.mjs +1 -0
- package/lib/download/npm/version.cjs +23 -0
- package/lib/download/npm/version.d.ts +7 -4
- package/lib/download/npm/version.mjs +8 -10
- package/lib/download/types/modified.cjs +2 -0
- package/lib/download/types/modified.d.ts +3 -1
- package/lib/download/types/modified.mjs +1 -0
- package/lib/download/types/sources.cjs +2 -0
- package/lib/download/types/sources.d.ts +4 -2
- package/lib/download/types/sources.mjs +1 -0
- package/lib/export/directory.cjs +45 -0
- package/lib/export/directory.d.ts +11 -4
- package/lib/export/directory.mjs +8 -8
- package/lib/export/helpers/custom-files.cjs +28 -0
- package/lib/export/helpers/custom-files.d.ts +4 -2
- package/lib/export/helpers/custom-files.mjs +8 -9
- package/lib/export/helpers/prepare.cjs +36 -0
- package/lib/export/helpers/prepare.d.ts +5 -3
- package/lib/export/helpers/prepare.mjs +7 -9
- package/lib/export/helpers/types-version.cjs +22 -0
- package/lib/export/helpers/types-version.d.ts +3 -1
- package/lib/export/helpers/types-version.mjs +15 -37
- package/lib/export/icon-package.cjs +59 -0
- package/lib/export/icon-package.d.ts +12 -5
- package/lib/export/icon-package.mjs +15 -16
- package/lib/export/json-package.cjs +133 -0
- package/lib/export/json-package.d.ts +12 -5
- package/lib/export/json-package.mjs +20 -21
- package/lib/icon-set/index.cjs +589 -0
- package/lib/icon-set/index.d.ts +9 -6
- package/lib/icon-set/index.mjs +40 -53
- package/lib/icon-set/match.cjs +58 -0
- package/lib/icon-set/match.d.ts +10 -3
- package/lib/icon-set/match.mjs +5 -6
- package/lib/icon-set/merge.cjs +83 -0
- package/lib/icon-set/merge.d.ts +9 -2
- package/lib/icon-set/merge.mjs +15 -10
- package/lib/icon-set/props.cjs +28 -0
- package/lib/icon-set/props.d.ts +8 -4
- package/lib/icon-set/props.mjs +7 -10
- package/lib/icon-set/types.cjs +2 -0
- package/lib/icon-set/types.d.ts +19 -17
- package/lib/icon-set/types.mjs +1 -0
- package/lib/import/directory.cjs +76 -0
- package/lib/import/directory.d.ts +11 -5
- package/lib/import/directory.mjs +36 -11
- package/lib/import/figma/index.cjs +105 -0
- package/lib/import/figma/index.d.ts +15 -5
- package/lib/import/figma/index.mjs +40 -13
- package/lib/import/figma/nodes.cjs +86 -0
- package/lib/import/figma/nodes.d.ts +13 -4
- package/lib/import/figma/nodes.mjs +3 -11
- package/lib/import/figma/query.cjs +218 -0
- package/lib/import/figma/query.d.ts +18 -9
- package/lib/import/figma/query.mjs +9 -12
- package/lib/import/figma/types/api.cjs +2 -0
- package/lib/import/figma/types/api.d.ts +8 -7
- package/lib/import/figma/types/api.mjs +1 -0
- package/lib/import/figma/types/nodes.cjs +2 -0
- package/lib/import/figma/types/nodes.d.ts +16 -9
- package/lib/import/figma/types/nodes.mjs +1 -0
- package/lib/import/figma/types/options.cjs +2 -0
- package/lib/import/figma/types/options.d.ts +17 -10
- package/lib/import/figma/types/options.mjs +1 -0
- package/lib/import/figma/types/result.cjs +2 -0
- package/lib/import/figma/types/result.d.ts +12 -5
- package/lib/import/figma/types/result.mjs +1 -0
- package/lib/index.cjs +137 -0
- package/lib/index.d.ts +65 -44
- package/lib/index.mjs +83 -94
- package/lib/misc/bump-version.cjs +17 -0
- package/lib/misc/bump-version.d.ts +3 -1
- package/lib/misc/bump-version.mjs +2 -4
- package/lib/misc/compare-dirs.cjs +75 -0
- package/lib/misc/compare-dirs.d.ts +4 -2
- package/lib/misc/compare-dirs.mjs +12 -12
- package/lib/misc/exec.cjs +25 -0
- package/lib/misc/exec.d.ts +6 -4
- package/lib/misc/exec.mjs +4 -5
- package/lib/misc/keyword.cjs +19 -0
- package/lib/misc/keyword.d.ts +3 -1
- package/lib/misc/keyword.mjs +2 -4
- package/lib/misc/scan.cjs +51 -0
- package/lib/misc/scan.d.ts +7 -6
- package/lib/misc/scan.mjs +6 -7
- package/lib/misc/write-json.cjs +11 -0
- package/lib/misc/write-json.d.ts +3 -1
- package/lib/misc/write-json.mjs +5 -6
- package/lib/optimise/flags.cjs +252 -0
- package/lib/optimise/flags.d.ts +7 -2
- package/lib/optimise/flags.mjs +18 -19
- package/lib/optimise/global-style.cjs +154 -0
- package/lib/optimise/global-style.d.ts +7 -2
- package/lib/optimise/global-style.mjs +18 -15
- package/lib/optimise/scale.cjs +26 -0
- package/lib/optimise/scale.d.ts +7 -2
- package/lib/optimise/scale.mjs +5 -5
- package/lib/optimise/svgo.cjs +83 -0
- package/lib/optimise/svgo.d.ts +10 -6
- package/lib/optimise/svgo.mjs +6 -9
- package/lib/svg/analyse/error.cjs +18 -0
- package/lib/svg/analyse/error.d.ts +5 -2
- package/lib/svg/analyse/error.mjs +2 -4
- package/lib/svg/analyse/types.cjs +2 -0
- package/lib/svg/analyse/types.d.ts +11 -11
- package/lib/svg/analyse/types.mjs +1 -0
- package/lib/svg/analyse.cjs +291 -0
- package/lib/svg/analyse.d.ts +8 -3
- package/lib/svg/analyse.mjs +15 -30
- package/lib/svg/cleanup/attribs.cjs +41 -0
- package/lib/svg/cleanup/attribs.d.ts +7 -2
- package/lib/svg/cleanup/attribs.mjs +6 -12
- package/lib/svg/cleanup/bad-tags.cjs +51 -0
- package/lib/svg/cleanup/bad-tags.d.ts +7 -2
- package/lib/svg/cleanup/bad-tags.mjs +10 -25
- package/lib/svg/cleanup/inline-style.cjs +64 -0
- package/lib/svg/cleanup/inline-style.d.ts +7 -2
- package/lib/svg/cleanup/inline-style.mjs +14 -19
- package/lib/svg/cleanup/root-svg.cjs +81 -0
- package/lib/svg/cleanup/root-svg.d.ts +7 -2
- package/lib/svg/cleanup/root-svg.mjs +7 -18
- package/lib/svg/cleanup/svgo-style.cjs +38 -0
- package/lib/svg/cleanup/svgo-style.d.ts +7 -2
- package/lib/svg/cleanup/svgo-style.mjs +16 -11
- package/lib/svg/cleanup.cjs +32 -0
- package/lib/svg/cleanup.d.ts +7 -2
- package/lib/svg/cleanup.mjs +21 -9
- package/lib/svg/data/attributes.cjs +355 -0
- package/lib/svg/data/attributes.d.ts +27 -25
- package/lib/svg/data/attributes.mjs +90 -115
- package/lib/svg/data/tags.cjs +137 -0
- package/lib/svg/data/tags.d.ts +25 -23
- package/lib/svg/data/tags.mjs +25 -49
- package/lib/svg/index.cjs +130 -0
- package/lib/svg/index.d.ts +16 -5
- package/lib/svg/index.mjs +48 -14
- package/lib/svg/parse-style.cjs +134 -0
- package/lib/svg/parse-style.d.ts +12 -8
- package/lib/svg/parse-style.mjs +11 -9
- package/lib/svg/parse.cjs +42 -0
- package/lib/svg/parse.d.ts +11 -7
- package/lib/svg/parse.mjs +2 -4
- package/package.json +99 -94
- package/lib/colors/attribs.js +0 -26
- package/lib/colors/parse.js +0 -341
- package/lib/colors/validate.js +0 -48
- package/lib/css/parse.js +0 -23
- package/lib/css/parser/error.js +0 -27
- package/lib/css/parser/export.js +0 -69
- package/lib/css/parser/strings.js +0 -93
- package/lib/css/parser/text.js +0 -171
- package/lib/css/parser/tokens.js +0 -200
- package/lib/css/parser/tree.js +0 -44
- package/lib/css/parser/types.js +0 -2
- package/lib/download/api/cache.js +0 -108
- package/lib/download/api/download.js +0 -27
- package/lib/download/api/index.js +0 -52
- package/lib/download/api/types.js +0 -2
- package/lib/download/git/branch.js +0 -22
- package/lib/download/git/hash.js +0 -14
- package/lib/download/git/index.js +0 -75
- package/lib/download/git/reset.js +0 -16
- package/lib/download/github/hash.js +0 -28
- package/lib/download/github/index.js +0 -116
- package/lib/download/github/types.js +0 -2
- package/lib/download/gitlab/hash.js +0 -27
- package/lib/download/gitlab/index.js +0 -115
- package/lib/download/gitlab/types.js +0 -7
- package/lib/download/helpers/untar.js +0 -14
- package/lib/download/helpers/unzip.js +0 -18
- package/lib/download/index.js +0 -27
- package/lib/download/npm/index.js +0 -91
- package/lib/download/npm/types.js +0 -2
- package/lib/download/npm/version.js +0 -27
- package/lib/download/types/modified.js +0 -2
- package/lib/download/types/sources.js +0 -2
- package/lib/export/directory.js +0 -52
- package/lib/export/helpers/custom-files.js +0 -32
- package/lib/export/helpers/prepare.js +0 -49
- package/lib/export/helpers/types-version.js +0 -12
- package/lib/export/icon-package.js +0 -77
- package/lib/export/json-package.js +0 -156
- package/lib/icon-set/index.js +0 -749
- package/lib/icon-set/match.js +0 -66
- package/lib/icon-set/merge.js +0 -90
- package/lib/icon-set/props.js +0 -34
- package/lib/icon-set/types.js +0 -2
- package/lib/import/directory.js +0 -59
- package/lib/import/figma/index.js +0 -90
- package/lib/import/figma/nodes.js +0 -106
- package/lib/import/figma/query.js +0 -244
- package/lib/import/figma/types/api.js +0 -12
- package/lib/import/figma/types/nodes.js +0 -2
- package/lib/import/figma/types/options.js +0 -2
- package/lib/import/figma/types/result.js +0 -2
- package/lib/index.js +0 -103
- package/lib/misc/bump-version.js +0 -19
- package/lib/misc/compare-dirs.js +0 -84
- package/lib/misc/exec.js +0 -26
- package/lib/misc/keyword.js +0 -31
- package/lib/misc/scan.js +0 -55
- package/lib/misc/write-json.js +0 -11
- package/lib/optimise/flags.js +0 -312
- package/lib/optimise/global-style.js +0 -185
- package/lib/optimise/scale.js +0 -42
- package/lib/optimise/svgo.js +0 -99
- package/lib/svg/analyse/error.js +0 -22
- package/lib/svg/analyse/types.js +0 -2
- package/lib/svg/analyse.js +0 -352
- package/lib/svg/cleanup/attribs.js +0 -51
- package/lib/svg/cleanup/bad-tags.js +0 -65
- package/lib/svg/cleanup/inline-style.js +0 -77
- package/lib/svg/cleanup/root-svg.js +0 -107
- package/lib/svg/cleanup/svgo-style.js +0 -35
- package/lib/svg/cleanup.js +0 -24
- package/lib/svg/data/attributes.js +0 -403
- package/lib/svg/data/tags.js +0 -188
- package/lib/svg/index.js +0 -134
- package/lib/svg/parse-style.js +0 -151
- package/lib/svg/parse.js +0 -49
package/lib/svg/analyse.js
DELETED
|
@@ -1,352 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.analyseSVGStructure = void 0;
|
|
4
|
-
const parse_1 = require("./parse");
|
|
5
|
-
const attributes_1 = require("./data/attributes");
|
|
6
|
-
const tags_1 = require("./data/tags");
|
|
7
|
-
const error_1 = require("./analyse/error");
|
|
8
|
-
/**
|
|
9
|
-
* Find all IDs, links, which elements use palette, which items aren't used
|
|
10
|
-
*
|
|
11
|
-
* Before running this function run cleanup functions to change inline style to attributes and fix attributes
|
|
12
|
-
*/
|
|
13
|
-
async function analyseSVGStructure(svg, options = {}) {
|
|
14
|
-
// Options
|
|
15
|
-
const fixErrors = options.fixErrors;
|
|
16
|
-
// Root element
|
|
17
|
-
let root = svg.$svg(':root').get(0);
|
|
18
|
-
if (root._parsed) {
|
|
19
|
-
// Reload to reset custom properties
|
|
20
|
-
svg.load(svg.toString());
|
|
21
|
-
root = svg.$svg(':root').get(0);
|
|
22
|
-
}
|
|
23
|
-
root._parsed = true;
|
|
24
|
-
const cheerio = svg.$svg;
|
|
25
|
-
// List of all elements
|
|
26
|
-
const elements = new Map();
|
|
27
|
-
// List of IDs
|
|
28
|
-
const ids = Object.create(null);
|
|
29
|
-
// Links
|
|
30
|
-
let links = [];
|
|
31
|
-
/**
|
|
32
|
-
* Found element with id
|
|
33
|
-
*/
|
|
34
|
-
function addID(element, id) {
|
|
35
|
-
if (ids[id]) {
|
|
36
|
-
throw new Error(`Duplicate id "${id}"`);
|
|
37
|
-
}
|
|
38
|
-
element._id = id;
|
|
39
|
-
ids[id] = element._index;
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Add _belongsTo
|
|
44
|
-
*/
|
|
45
|
-
function gotElementWithID(element, id, isMask) {
|
|
46
|
-
addID(element, id);
|
|
47
|
-
if (!element._belongsTo) {
|
|
48
|
-
element._belongsTo = [];
|
|
49
|
-
}
|
|
50
|
-
element._belongsTo.push({
|
|
51
|
-
id,
|
|
52
|
-
isMask,
|
|
53
|
-
indexes: new Set([element._index]),
|
|
54
|
-
});
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Mark element as reusable, set properties
|
|
59
|
-
*/
|
|
60
|
-
function gotReusableElement(item, isMask) {
|
|
61
|
-
const element = item.element;
|
|
62
|
-
const attribs = element.attribs;
|
|
63
|
-
const index = element._index;
|
|
64
|
-
const id = attribs['id'];
|
|
65
|
-
if (typeof id !== 'string') {
|
|
66
|
-
const message = `Definition element ${(0, error_1.analyseTagError)(element)} does not have id`;
|
|
67
|
-
if (fixErrors) {
|
|
68
|
-
item.removeNode = true;
|
|
69
|
-
item.testChildren = false;
|
|
70
|
-
console.warn(message);
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
throw new Error(message);
|
|
74
|
-
}
|
|
75
|
-
if (ids[id] && fixErrors) {
|
|
76
|
-
console.warn(`Duplicate id "${id}"`);
|
|
77
|
-
item.removeNode = true;
|
|
78
|
-
item.testChildren = false;
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
element._reusableElement = {
|
|
82
|
-
id,
|
|
83
|
-
isMask,
|
|
84
|
-
index,
|
|
85
|
-
};
|
|
86
|
-
gotElementWithID(element, id, isMask);
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Found element that uses another element
|
|
91
|
-
*/
|
|
92
|
-
function gotElementReference(item, id, usedAsMask) {
|
|
93
|
-
const element = item.element;
|
|
94
|
-
const usedByIndex = element._index;
|
|
95
|
-
const link = {
|
|
96
|
-
id,
|
|
97
|
-
usedByIndex,
|
|
98
|
-
usedAsMask,
|
|
99
|
-
};
|
|
100
|
-
// Add to global list
|
|
101
|
-
links.push(link);
|
|
102
|
-
// Add to element and parent elements
|
|
103
|
-
if (!element._linksTo) {
|
|
104
|
-
element._linksTo = [];
|
|
105
|
-
}
|
|
106
|
-
element._linksTo.push(link);
|
|
107
|
-
}
|
|
108
|
-
// Find all reusable elements and all usages
|
|
109
|
-
let index = 0;
|
|
110
|
-
await (0, parse_1.parseSVG)(svg, (item) => {
|
|
111
|
-
var _a;
|
|
112
|
-
const { tagName, parents } = item;
|
|
113
|
-
if (tags_1.styleTag.has(tagName)) {
|
|
114
|
-
item.testChildren = false;
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
const element = item.element;
|
|
118
|
-
const attribs = element.attribs;
|
|
119
|
-
// Set index
|
|
120
|
-
index++;
|
|
121
|
-
element._index = index;
|
|
122
|
-
elements.set(index, element);
|
|
123
|
-
if (!parents.length) {
|
|
124
|
-
// root <svg>
|
|
125
|
-
element._usedAsMask = false;
|
|
126
|
-
element._usedAsPaint = true;
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
element._usedAsMask = false;
|
|
130
|
-
element._usedAsPaint = false;
|
|
131
|
-
// Get parent element
|
|
132
|
-
const parentItem = parents[0];
|
|
133
|
-
const parentElement = parentItem.element;
|
|
134
|
-
// Check for mask or clip path
|
|
135
|
-
if (tags_1.maskTags.has(tagName)) {
|
|
136
|
-
// Element can only be used as mask or clip path
|
|
137
|
-
if (!gotReusableElement(item, true)) {
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
else if (tags_1.reusableElementsWithPalette.has(tagName)) {
|
|
142
|
-
// Reusable element that uses palette
|
|
143
|
-
if (!gotReusableElement(item, false)) {
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
else if (tags_1.defsTag.has(parentItem.tagName)) {
|
|
148
|
-
// Symbol without <symbol> tag
|
|
149
|
-
if (!gotReusableElement(item, false)) {
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
else if (!tags_1.defsTag.has(tagName)) {
|
|
154
|
-
// Not reusable element, not <defs>. Copy parent stuff
|
|
155
|
-
element._usedAsMask = parentElement._usedAsMask;
|
|
156
|
-
element._usedAsPaint = parentElement._usedAsPaint;
|
|
157
|
-
element._parentElement = parentElement._index;
|
|
158
|
-
if (!parentElement._childElements) {
|
|
159
|
-
parentElement._childElements = [];
|
|
160
|
-
}
|
|
161
|
-
parentElement._childElements.push(index);
|
|
162
|
-
// Copy id of reusable element from parent
|
|
163
|
-
const parentReusableElement = parentElement._reusableElement;
|
|
164
|
-
if (parentReusableElement) {
|
|
165
|
-
if (element._reusableElement) {
|
|
166
|
-
// Reusable element inside reusable element: should not happen!
|
|
167
|
-
throw new Error(`Reusable element ${(0, error_1.analyseTagError)(element)} is inside another reusable element id="${parentReusableElement.id}"`);
|
|
168
|
-
}
|
|
169
|
-
element._reusableElement = parentReusableElement;
|
|
170
|
-
}
|
|
171
|
-
// Copy all parent ids
|
|
172
|
-
const parentBelongsTo = parentElement._belongsTo;
|
|
173
|
-
if (parentBelongsTo) {
|
|
174
|
-
const list = element._belongsTo || (element._belongsTo = []);
|
|
175
|
-
parentBelongsTo.forEach((item) => {
|
|
176
|
-
item.indexes.add(index);
|
|
177
|
-
list.push(item);
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
// Check if element has its own id
|
|
181
|
-
if (element._id === void 0) {
|
|
182
|
-
const id = attribs['id'];
|
|
183
|
-
if (typeof id === 'string') {
|
|
184
|
-
if (ids[id] && fixErrors) {
|
|
185
|
-
console.warn(`Duplicate id "${id}"`);
|
|
186
|
-
cheerio(element).removeAttr('id');
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
gotElementWithID(element, id, false);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
// Check if element uses any ID
|
|
195
|
-
if ((_a = attributes_1.tagSpecificNonPresentationalAttributes[tagName]) === null || _a === void 0 ? void 0 : _a.has('href')) {
|
|
196
|
-
const href = attribs['href'] || attribs['xlink:href'];
|
|
197
|
-
if (typeof href === 'string') {
|
|
198
|
-
if (href.slice(0, 1) !== '#') {
|
|
199
|
-
throw new Error(`Invalid link in ${(0, error_1.analyseTagError)(element)}`);
|
|
200
|
-
}
|
|
201
|
-
const id = href.slice(1);
|
|
202
|
-
gotElementReference(item, id, false);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
// Check colors
|
|
206
|
-
Object.keys(attribs).forEach((attr) => {
|
|
207
|
-
// Get id
|
|
208
|
-
let value = attribs[attr];
|
|
209
|
-
if (value.slice(0, 5).toLowerCase() !== 'url(#') {
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
value = value.slice(5);
|
|
213
|
-
if (value.slice(-1) !== ')') {
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
const id = value.slice(0, value.length - 1).trim();
|
|
217
|
-
if (attributes_1.urlPresentationalAttributes.has(attr)) {
|
|
218
|
-
// Used as mask, clip path or filter
|
|
219
|
-
gotElementReference(item, id, attr !== 'filter');
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
if (attributes_1.commonColorPresentationalAttributes.has(attr) ||
|
|
223
|
-
attributes_1.markerAttributes.has(attr)) {
|
|
224
|
-
// Used as paint
|
|
225
|
-
gotElementReference(item, id, false);
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
// Make sure all required IDs exist
|
|
231
|
-
links = links.filter((item) => {
|
|
232
|
-
const id = item.id;
|
|
233
|
-
if (ids[id]) {
|
|
234
|
-
return true;
|
|
235
|
-
}
|
|
236
|
-
// Attempt to fix error
|
|
237
|
-
function fix() {
|
|
238
|
-
const index = item.usedByIndex;
|
|
239
|
-
const element = elements.get(index);
|
|
240
|
-
const tagName = element.tagName;
|
|
241
|
-
function remove() {
|
|
242
|
-
var _a;
|
|
243
|
-
const $element = cheerio(element);
|
|
244
|
-
const parent = element.parent;
|
|
245
|
-
if (parent) {
|
|
246
|
-
if (parent._childElements) {
|
|
247
|
-
parent._childElements = parent._childElements.filter((num) => num !== index);
|
|
248
|
-
}
|
|
249
|
-
(_a = parent._belongsTo) === null || _a === void 0 ? void 0 : _a.forEach((list) => {
|
|
250
|
-
list.indexes.delete(index);
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
$element.remove();
|
|
254
|
-
}
|
|
255
|
-
// Remove links
|
|
256
|
-
if (element._linksTo) {
|
|
257
|
-
element._linksTo = element._linksTo.filter((item) => item.id !== id);
|
|
258
|
-
}
|
|
259
|
-
// Remove <use /> without children
|
|
260
|
-
if (!element.children.length) {
|
|
261
|
-
if (tags_1.useTag.has(tagName)) {
|
|
262
|
-
remove();
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
// Remove attributes that use id
|
|
267
|
-
const matches = new Set(['#' + id, 'url(#' + id + ')']);
|
|
268
|
-
const attribs = element.attribs;
|
|
269
|
-
for (const attr in attribs) {
|
|
270
|
-
if (matches.has(attribs[attr])) {
|
|
271
|
-
cheerio(element).removeAttr(attr);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
const message = `Missing element with id="${id}"`;
|
|
276
|
-
if (fixErrors) {
|
|
277
|
-
fix();
|
|
278
|
-
console.warn(message);
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
281
|
-
throw new Error(message);
|
|
282
|
-
}
|
|
283
|
-
return false;
|
|
284
|
-
});
|
|
285
|
-
// Check if tree item already has child item
|
|
286
|
-
function hasChildItem(tree, child, canThrow) {
|
|
287
|
-
const item = tree.children.find((item) => item.index === child.index &&
|
|
288
|
-
item.usedAsMask === child.usedAsMask);
|
|
289
|
-
if (item && canThrow) {
|
|
290
|
-
throw new Error('Recursion');
|
|
291
|
-
}
|
|
292
|
-
return !!item;
|
|
293
|
-
}
|
|
294
|
-
// Generate tree
|
|
295
|
-
const tree = {
|
|
296
|
-
index: 1,
|
|
297
|
-
usedAsMask: false,
|
|
298
|
-
children: [],
|
|
299
|
-
};
|
|
300
|
-
function parseTreeItem(tree, usedItems, inMask) {
|
|
301
|
-
var _a, _b;
|
|
302
|
-
const element = elements.get(tree.index);
|
|
303
|
-
// Add usage
|
|
304
|
-
if (tree.usedAsMask || inMask) {
|
|
305
|
-
element._usedAsMask = true;
|
|
306
|
-
inMask = true;
|
|
307
|
-
}
|
|
308
|
-
else {
|
|
309
|
-
element._usedAsPaint = true;
|
|
310
|
-
}
|
|
311
|
-
usedItems = usedItems.slice(0);
|
|
312
|
-
usedItems.push(element._index);
|
|
313
|
-
// Add all child elements
|
|
314
|
-
(_a = element._childElements) === null || _a === void 0 ? void 0 : _a.forEach((childIndex) => {
|
|
315
|
-
if (usedItems.indexOf(childIndex) !== -1) {
|
|
316
|
-
throw new Error('Recursion');
|
|
317
|
-
}
|
|
318
|
-
const childItem = {
|
|
319
|
-
index: childIndex,
|
|
320
|
-
usedAsMask: false,
|
|
321
|
-
children: [],
|
|
322
|
-
parent: tree,
|
|
323
|
-
};
|
|
324
|
-
tree.children.push(childItem);
|
|
325
|
-
parseTreeItem(childItem, usedItems, inMask);
|
|
326
|
-
});
|
|
327
|
-
// Add all links
|
|
328
|
-
(_b = element._linksTo) === null || _b === void 0 ? void 0 : _b.forEach((link) => {
|
|
329
|
-
const linkIndex = ids[link.id];
|
|
330
|
-
const usedAsMask = link.usedAsMask;
|
|
331
|
-
const childItem = {
|
|
332
|
-
index: linkIndex,
|
|
333
|
-
usedAsMask,
|
|
334
|
-
children: [],
|
|
335
|
-
parent: tree,
|
|
336
|
-
};
|
|
337
|
-
if (hasChildItem(tree, childItem, false)) {
|
|
338
|
-
return;
|
|
339
|
-
}
|
|
340
|
-
tree.children.push(childItem);
|
|
341
|
-
parseTreeItem(childItem, usedItems, inMask || usedAsMask);
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
parseTreeItem(tree, [0], false);
|
|
345
|
-
return {
|
|
346
|
-
elements,
|
|
347
|
-
ids,
|
|
348
|
-
links,
|
|
349
|
-
tree,
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
exports.analyseSVGStructure = analyseSVGStructure;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.removeBadAttributes = void 0;
|
|
4
|
-
const attributes_1 = require("../data/attributes");
|
|
5
|
-
const tags_1 = require("../data/tags");
|
|
6
|
-
const parse_1 = require("../parse");
|
|
7
|
-
/**
|
|
8
|
-
* Remove useless attributes
|
|
9
|
-
*/
|
|
10
|
-
async function removeBadAttributes(svg) {
|
|
11
|
-
await (0, parse_1.parseSVG)(svg, (item) => {
|
|
12
|
-
const tagName = item.tagName;
|
|
13
|
-
const attribs = item.element.attribs;
|
|
14
|
-
const $element = item.$element;
|
|
15
|
-
// Common tags
|
|
16
|
-
Object.keys(attribs).forEach((attr) => {
|
|
17
|
-
// Bad attributes, events
|
|
18
|
-
if (attr.slice(0, 2) === 'on' ||
|
|
19
|
-
attributes_1.badAttributes.has(attr) ||
|
|
20
|
-
attributes_1.badSoftwareAttributes.has(attr) ||
|
|
21
|
-
attributes_1.badAttributePrefixes.has(attr.split('-').shift())) {
|
|
22
|
-
$element.removeAttr(attr);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
// Attributes on <defs> aren't passed to child nodes, so remove everything)
|
|
26
|
-
if (tags_1.defsTag.has(tagName) &&
|
|
27
|
-
!attributes_1.tagSpecificPresentationalAttributes[tagName].has(attr)) {
|
|
28
|
-
$element.removeAttr(attr);
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
// Check for namespace
|
|
32
|
-
const nsParts = attr.split(':');
|
|
33
|
-
if (nsParts.length > 1) {
|
|
34
|
-
const namespace = nsParts.shift();
|
|
35
|
-
const newAttr = nsParts.join(':');
|
|
36
|
-
switch (namespace) {
|
|
37
|
-
case 'xlink': {
|
|
38
|
-
// Deprecated: use without namespace
|
|
39
|
-
if (attribs[newAttr] === void 0) {
|
|
40
|
-
$element.attr(newAttr, attribs[attr]);
|
|
41
|
-
}
|
|
42
|
-
break;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// Remove all namespace attributes
|
|
46
|
-
$element.removeAttr(attr);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
exports.removeBadAttributes = removeBadAttributes;
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.checkBadTags = void 0;
|
|
4
|
-
const parse_1 = require("../parse");
|
|
5
|
-
const tags_1 = require("../data/tags");
|
|
6
|
-
// List of required parent tags
|
|
7
|
-
const requiredParentTags = new Map();
|
|
8
|
-
// <feFunc*> must be children of <feComponentTransfer>
|
|
9
|
-
requiredParentTags.set(new Set(['feComponentTransfer']), tags_1.feComponentTransferChildTag);
|
|
10
|
-
// <feMergeNode> must be children of <feMerge>
|
|
11
|
-
requiredParentTags.set(new Set(['feMerge']), tags_1.feMergeChildTags);
|
|
12
|
-
// Children of <fe*Lightning>
|
|
13
|
-
requiredParentTags.set(tags_1.feLightningTags, tags_1.feLightningChildTags);
|
|
14
|
-
// Filter tags must be children of <filter>
|
|
15
|
-
requiredParentTags.set(tags_1.filterTag, tags_1.filterChildTags);
|
|
16
|
-
// <stop> must be inside gradient
|
|
17
|
-
requiredParentTags.set(tags_1.gradientTags, tags_1.gradientChildTags);
|
|
18
|
-
// <mpath> must be inside <animateMotion>
|
|
19
|
-
requiredParentTags.set(new Set(['animateMotion']), tags_1.animateMotionChildTags);
|
|
20
|
-
/**
|
|
21
|
-
* Test for bag tags
|
|
22
|
-
*/
|
|
23
|
-
async function checkBadTags(svg) {
|
|
24
|
-
await (0, parse_1.parseSVG)(svg, (item) => {
|
|
25
|
-
var _a;
|
|
26
|
-
const tagName = item.tagName;
|
|
27
|
-
const $element = item.$element;
|
|
28
|
-
// SVG as root
|
|
29
|
-
if (tagName === 'svg') {
|
|
30
|
-
if (item.parents.length) {
|
|
31
|
-
// Technically code is correct, but it badly complicates parsing, so not supported
|
|
32
|
-
throw new Error(`Unexpected element: <${tagName}>`);
|
|
33
|
-
}
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
// Unsupported: quietly remove it
|
|
37
|
-
if (tags_1.unsupportedTags.has(tagName)) {
|
|
38
|
-
$element.remove();
|
|
39
|
-
item.testChildren = false;
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
// Bad or unknown element
|
|
43
|
-
if (tags_1.badTags.has(tagName) || !tags_1.allValidTags.has(tagName)) {
|
|
44
|
-
const parts = tagName.split(':');
|
|
45
|
-
if (parts.length > 1) {
|
|
46
|
-
// Custom tag, most likely Inkscape junk
|
|
47
|
-
$element.remove();
|
|
48
|
-
item.testChildren = false;
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
throw new Error(`Unexpected element: <${tagName}>`);
|
|
52
|
-
}
|
|
53
|
-
// Check for valid parent tag
|
|
54
|
-
const parentTagName = (_a = item.parents[0]) === null || _a === void 0 ? void 0 : _a.tagName;
|
|
55
|
-
for (const [parents, children] of requiredParentTags) {
|
|
56
|
-
if (children.has(tagName)) {
|
|
57
|
-
if (!parents.has(parentTagName)) {
|
|
58
|
-
throw new Error(`Element <${tagName}> has wrong parent element`);
|
|
59
|
-
}
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
exports.checkBadTags = checkBadTags;
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.cleanupInlineStyle = void 0;
|
|
4
|
-
const parse_1 = require("../../css/parse");
|
|
5
|
-
const attributes_1 = require("../data/attributes");
|
|
6
|
-
const parse_2 = require("../parse");
|
|
7
|
-
/**
|
|
8
|
-
* Expand inline style
|
|
9
|
-
*/
|
|
10
|
-
async function cleanupInlineStyle(svg) {
|
|
11
|
-
await (0, parse_2.parseSVG)(svg, (item) => {
|
|
12
|
-
const $element = item.$element;
|
|
13
|
-
const attribs = item.element.attribs;
|
|
14
|
-
const tagName = item.tagName;
|
|
15
|
-
// Expand style
|
|
16
|
-
if (attribs.style) {
|
|
17
|
-
const parsedStyle = (0, parse_1.parseInlineStyle)(attribs.style);
|
|
18
|
-
if (parsedStyle === null) {
|
|
19
|
-
// Ignore style
|
|
20
|
-
$element.removeAttr('style');
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
const newStyle = Object.create(null);
|
|
24
|
-
const checkRule = (prop, value) => {
|
|
25
|
-
var _a, _b, _c;
|
|
26
|
-
function warn() {
|
|
27
|
-
console.warn(`Removing unexpected style on "${tagName}": ${prop}`);
|
|
28
|
-
}
|
|
29
|
-
// Check for bad attributes that should be removed
|
|
30
|
-
if (attributes_1.badAttributes.has(prop) ||
|
|
31
|
-
((_a = attributes_1.tagSpecificNonPresentationalAttributes[tagName]) === null || _a === void 0 ? void 0 : _a.has(prop))) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
// Valid attributes
|
|
35
|
-
if (((_b = attributes_1.tagSpecificAnimatedAttributes[tagName]) === null || _b === void 0 ? void 0 : _b.has(prop)) ||
|
|
36
|
-
((_c = attributes_1.tagSpecificPresentationalAttributes[tagName]) === null || _c === void 0 ? void 0 : _c.has(prop))) {
|
|
37
|
-
$element.attr(prop, value);
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
// Attributes inside <clipPath>
|
|
41
|
-
if (attributes_1.insideClipPathAttributes.has(prop)) {
|
|
42
|
-
if (item.parents.find((item) => item.tagName === 'clipPath')) {
|
|
43
|
-
$element.attr(prop, value);
|
|
44
|
-
}
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
// Bad software stuff
|
|
48
|
-
if (attributes_1.badSoftwareAttributes.has(prop) ||
|
|
49
|
-
attributes_1.badAttributePrefixes.has(prop.split('-').shift())) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
// Vendor specific junk
|
|
53
|
-
if (prop.slice(0, 1) === '-') {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
// Unknown
|
|
57
|
-
warn();
|
|
58
|
-
};
|
|
59
|
-
// Check all properties
|
|
60
|
-
for (const prop in parsedStyle) {
|
|
61
|
-
checkRule(prop, parsedStyle[prop]);
|
|
62
|
-
}
|
|
63
|
-
// Update style
|
|
64
|
-
const newStyleStr = Object.keys(newStyle)
|
|
65
|
-
.map((key) => key + ':' + newStyle[key] + ';')
|
|
66
|
-
.join('');
|
|
67
|
-
if (newStyleStr.length) {
|
|
68
|
-
$element.attr('style', newStyleStr);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
$element.removeAttr('style');
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
exports.cleanupInlineStyle = cleanupInlineStyle;
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.cleanupSVGRoot = void 0;
|
|
4
|
-
const attributes_1 = require("../data/attributes");
|
|
5
|
-
const tags_1 = require("../data/tags");
|
|
6
|
-
/**
|
|
7
|
-
* Clean up SVG
|
|
8
|
-
*/
|
|
9
|
-
async function cleanupSVGRoot(svg) {
|
|
10
|
-
const cheerio = svg.$svg;
|
|
11
|
-
const $root = svg.$svg(':root');
|
|
12
|
-
const root = $root.get(0);
|
|
13
|
-
const tagName = 'svg';
|
|
14
|
-
if (root.tagName !== tagName) {
|
|
15
|
-
throw new Error(`Unexpected root tag <${root.tagName}>`);
|
|
16
|
-
}
|
|
17
|
-
const attribs = root.attribs;
|
|
18
|
-
// Check attributes
|
|
19
|
-
const moveToChildren = {};
|
|
20
|
-
Object.keys(attribs).forEach((attr) => {
|
|
21
|
-
var _a, _b;
|
|
22
|
-
const value = attribs[attr];
|
|
23
|
-
// Bad attributes, irrelevant common attributes, namespaces
|
|
24
|
-
if (attributes_1.commonAttributes.has(attr) ||
|
|
25
|
-
attributes_1.badAttributes.has(attr) ||
|
|
26
|
-
attributes_1.junkSVGAttributes.has(attr) ||
|
|
27
|
-
attributes_1.badSoftwareAttributes.has(attr) ||
|
|
28
|
-
attributes_1.badAttributePrefixes.has(attr.split('-').shift()) ||
|
|
29
|
-
attr.split(':').length > 1) {
|
|
30
|
-
$root.removeAttr(attr);
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
// Special handling for dimensions
|
|
34
|
-
switch (attr) {
|
|
35
|
-
case 'width':
|
|
36
|
-
case 'height':
|
|
37
|
-
// Cleanup dimensions
|
|
38
|
-
if (value.slice(-2) === 'px') {
|
|
39
|
-
// Remove 'px'
|
|
40
|
-
const num = value.replace('px', '');
|
|
41
|
-
if (parseFloat(num) + '' === num) {
|
|
42
|
-
$root.attr(attr, num);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
// Attributes that belong to <svg>
|
|
48
|
-
if ((_a = attributes_1.tagSpecificNonPresentationalAttributes[tagName]) === null || _a === void 0 ? void 0 : _a.has(attr)) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
// Presentational attributes: move to child elements
|
|
52
|
-
if (((_b = attributes_1.tagSpecificPresentationalAttributes[tagName]) === null || _b === void 0 ? void 0 : _b.has(attr)) &&
|
|
53
|
-
attributes_1.tagSpecificPresentationalAttributes.g.has(attr)) {
|
|
54
|
-
moveToChildren[attr] = value;
|
|
55
|
-
$root.removeAttr(attr);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
// Styling: 'style' should be checked by expandInlineStyle(), remove others
|
|
59
|
-
if (attributes_1.stylingAttributes.has(attr)) {
|
|
60
|
-
switch (attr) {
|
|
61
|
-
case 'style':
|
|
62
|
-
return;
|
|
63
|
-
case 'class':
|
|
64
|
-
$root.removeAttr(attr);
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
throw new Error(`Unexpected attribute "${attr}" on <${tagName}>`);
|
|
68
|
-
}
|
|
69
|
-
// Junk from bad editors, mostly Adobe Illustrator and Inkscape
|
|
70
|
-
if (
|
|
71
|
-
// Events
|
|
72
|
-
attr.slice(0, 2) === 'on' ||
|
|
73
|
-
// aria-stuff
|
|
74
|
-
attr.slice(0, 5) === 'aria-' ||
|
|
75
|
-
// Junk
|
|
76
|
-
attr.slice(0, 6) === 'xmlns:') {
|
|
77
|
-
$root.removeAttr(attr);
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
console.warn(`Removing unexpected attribute on SVG: ${attr}`);
|
|
81
|
-
$root.removeAttr(attr);
|
|
82
|
-
});
|
|
83
|
-
if (Object.keys(moveToChildren).length) {
|
|
84
|
-
// Wrap child elements
|
|
85
|
-
const $wrapper = cheerio('<g />');
|
|
86
|
-
for (const key in moveToChildren) {
|
|
87
|
-
$wrapper.attr(key, moveToChildren[key]);
|
|
88
|
-
}
|
|
89
|
-
$root.children().each((_index, child) => {
|
|
90
|
-
const $child = cheerio(child);
|
|
91
|
-
if (child.type !== 'tag') {
|
|
92
|
-
$child.appendTo($wrapper);
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
const tagName = child.tagName;
|
|
96
|
-
if (tagName === 'style' ||
|
|
97
|
-
tags_1.reusableElementsWithPalette.has(tagName) ||
|
|
98
|
-
tags_1.maskTags.has(tagName)) {
|
|
99
|
-
// Do not wrap these elements
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
$child.appendTo($wrapper);
|
|
103
|
-
});
|
|
104
|
-
$wrapper.appendTo($root);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
exports.cleanupSVGRoot = cleanupSVGRoot;
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.convertStyleToAttrs = void 0;
|
|
4
|
-
const attributes_1 = require("../data/attributes");
|
|
5
|
-
const parse_style_1 = require("../parse-style");
|
|
6
|
-
const svgo_1 = require("../../optimise/svgo");
|
|
7
|
-
/**
|
|
8
|
-
* Expand inline style
|
|
9
|
-
*/
|
|
10
|
-
async function convertStyleToAttrs(svg) {
|
|
11
|
-
let hasStyle = false;
|
|
12
|
-
// Clean up style, removing useless junk
|
|
13
|
-
await (0, parse_style_1.parseSVGStyle)(svg, (item) => {
|
|
14
|
-
const prop = item.prop;
|
|
15
|
-
if (
|
|
16
|
-
// Attributes / properties now allowed
|
|
17
|
-
attributes_1.badAttributes.has(prop) ||
|
|
18
|
-
attributes_1.badSoftwareAttributes.has(prop) ||
|
|
19
|
-
attributes_1.badAttributePrefixes.has(prop.split('-').shift())) {
|
|
20
|
-
return void 0;
|
|
21
|
-
}
|
|
22
|
-
hasStyle = true;
|
|
23
|
-
return item.value;
|
|
24
|
-
});
|
|
25
|
-
// Nothing to check?
|
|
26
|
-
if (!hasStyle) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
// Run SVGO
|
|
30
|
-
await (0, svgo_1.runSVGO)(svg, {
|
|
31
|
-
plugins: ['convertStyleToAttrs', 'inlineStyles'],
|
|
32
|
-
multipass: true,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
exports.convertStyleToAttrs = convertStyleToAttrs;
|