1 | const _ = require('lodash');
|
2 |
|
3 | function checkForDuplicates(assets) {
|
4 | let duplicateIds = _(assets)
|
5 | .map('id')
|
6 | .countBy()
|
7 | .pickBy((value) => value > 1)
|
8 | .keys()
|
9 | .value();
|
10 |
|
11 | if (!duplicateIds.length) {
|
12 | return;
|
13 | }
|
14 |
|
15 | let invalidAssets = _.flatMap(duplicateIds, (id) => _.filter(assets, { id }));
|
16 | return ['Duplicate IDs found:']
|
17 | .concat(invalidAssets.map((asset) => `ID: "${asset.id}" Path: ${asset.relativePath}`))
|
18 | .join('\n');
|
19 | }
|
20 |
|
21 | function validateViewBox(assets) {
|
22 | let invalidAssets = _.filter(assets, (asset) => (
|
23 | _.isUndefined(asset.svgData.attrs.viewBox)
|
24 | ));
|
25 |
|
26 | if (!invalidAssets.length) {
|
27 | return;
|
28 | }
|
29 |
|
30 | return ['SVG files without viewBox found:']
|
31 | .concat(invalidAssets.map((asset) => `Path: ${asset.relativePath}`))
|
32 | .join('\n');
|
33 | }
|
34 |
|
35 | module.exports = function validateAssets(assets, strategy, ui) {
|
36 | let validators = [
|
37 | checkForDuplicates,
|
38 | validateViewBox
|
39 | ];
|
40 |
|
41 | validators.forEach((validate) => {
|
42 | let message = validate(assets);
|
43 |
|
44 | if (message) {
|
45 | ui.write('\n');
|
46 | ui.writeWarnLine(`[ember-svg-jar][${strategy}] ${message}`);
|
47 | }
|
48 | });
|
49 | };
|