|
2 | 2 |
|
3 | 3 | var spritezero = require('@mapbox/spritezero'); |
4 | 4 | var fs = require('fs'); |
5 | | -var queue = require('queue-async'); |
6 | | -var multiline = require('multiline'); |
7 | 5 | var path = require('path'); |
8 | | -var stringify = require('json-stable-stringify'); |
| 6 | +var glob = require('glob'); |
9 | 7 | var argv = require('minimist')(process.argv.slice(2), { |
10 | | - boolean: ['retina', 'unique', 'h', 'help'] |
| 8 | + default: { _: ['.', '.'] }, |
| 9 | + boolean: ['retina', 'unique', 'h', 'help'] |
11 | 10 | }); |
12 | | - |
13 | | -function filepaths (dir) { |
14 | | - return fs.readdirSync(dir) |
15 | | - .filter(function (d) { |
16 | | - return !d.match(/^\./); |
17 | | - }) |
18 | | - .map(function (d) { |
19 | | - return path.join(dir, d); |
20 | | - }); |
21 | | -} |
22 | | - |
23 | | -function showHelp () { |
24 | | - console.log(multiline(function () { |
25 | | - /* |
26 | | - spritezero |
27 | | -
|
28 | | - Generate sprite sheets for maps and the web using SVG files as input |
29 | | -
|
30 | | - Usage |
31 | | - <output> <inputdir> |
32 | | -
|
33 | | - Example |
34 | | - spritezero maki maki/ |
35 | | - */ })); |
| 11 | + |
| 12 | +function showHelp() { |
| 13 | + console.log(` |
| 14 | + spritezero |
| 15 | + Generate sprite sheets for maps and the web using SVG files as input |
| 16 | + Usage |
| 17 | +
|
| 18 | + <output> <inputdir> |
| 19 | +
|
| 20 | + Example |
| 21 | + spritezero maki maki |
| 22 | + `); |
36 | 23 | } |
37 | 24 |
|
38 | 25 | if (argv.help || argv._.length < 2) { |
39 | | - showHelp(); |
40 | | - /* istanbul ignore next */ |
41 | | - process.exit(1); |
| 26 | + showHelp(); |
| 27 | + /* istanbul ignore next */ |
| 28 | + process.exit(1); |
42 | 29 | } |
43 | 30 |
|
44 | 31 | var ratio = 1; |
45 | 32 | var unique = false; |
46 | 33 |
|
47 | 34 | if (argv.retina) { |
48 | | - ratio = 2; |
| 35 | + ratio = 2; |
49 | 36 | } else if (argv.ratio) { |
50 | | - ratio = parseFloat(argv.ratio); |
| 37 | + ratio = parseFloat(argv.ratio); |
51 | 38 | } |
52 | 39 |
|
53 | 40 | if (argv.unique) { |
54 | | - unique = true; |
| 41 | + unique = true; |
55 | 42 | } |
56 | 43 |
|
57 | 44 | var outfile = argv._[0]; |
58 | 45 | var input = argv._[1]; |
59 | 46 |
|
60 | | -function loadFile (file, callback) { |
61 | | - fs.readFile(file, function (err, res) { |
62 | | - return callback(err, { |
63 | | - svg: res, |
64 | | - id: path.basename(file).replace('.svg', '') |
65 | | - }); |
66 | | - }); |
| 47 | +function sortById(a, b) { |
| 48 | + return b.id < a.id; |
67 | 49 | } |
68 | 50 |
|
69 | | -function sortById (a, b) { |
70 | | - return b.id < a.id; |
| 51 | +const buffers = glob |
| 52 | + .sync(input + '/*.svg') |
| 53 | + .map((f) => ({ |
| 54 | + svg: fs.readFileSync(f), |
| 55 | + id: path.basename(f).replace('.svg', '') |
| 56 | + })) |
| 57 | + .sort(sortById); |
| 58 | + |
| 59 | +var genLayout = unique ? spritezero.generateLayoutUnique : spritezero.generateLayout; |
| 60 | +genLayout({ imgs: buffers, pixelRatio: ratio, format: true }, saveLayout); |
| 61 | +genLayout({ imgs: buffers, pixelRatio: ratio, format: false }, saveImage); |
| 62 | + |
| 63 | +function saveLayout(err, formattedLayout) { |
| 64 | + if (err) throw err; |
| 65 | + fs.writeFileSync(outfile + '.json', JSON.stringify(formattedLayout, undefined, ' ')); |
71 | 66 | } |
72 | 67 |
|
73 | | -var q = queue(16); |
74 | | - |
75 | | -filepaths(input).forEach(function (file) { |
76 | | - q.defer(loadFile, file); |
77 | | -}); |
78 | | - |
79 | | -q.awaitAll(function (err, buffers) { |
| 68 | +function saveImage(err, layout) { |
| 69 | + if (err) throw err; |
| 70 | + spritezero.generateImage(layout, function (err, image) { |
80 | 71 | if (err) throw err; |
81 | | - |
82 | | - buffers.sort(sortById); |
83 | | - |
84 | | - function saveLayout (err, formattedLayout) { |
85 | | - if (err) throw err; |
86 | | - fs.writeFile(outfile + '.json', stringify(formattedLayout, {space: ' '}), 'utf8', function (err) { |
87 | | - if (err) throw err; |
88 | | - }); |
89 | | - } |
90 | | - |
91 | | - function saveImage (err, layout) { |
92 | | - if (err) throw err; |
93 | | - spritezero.generateImage(layout, function (err, image) { |
94 | | - if (err) throw err; |
95 | | - fs.writeFile(outfile + '.png', image, function (err) { |
96 | | - if (err) throw err; |
97 | | - }); |
98 | | - }); |
99 | | - } |
100 | | - |
101 | | - var genLayout = unique ? spritezero.generateLayoutUnique : spritezero.generateLayout; |
102 | | - genLayout({ imgs: buffers, pixelRatio: ratio, format: true }, saveLayout); |
103 | | - genLayout({ imgs: buffers, pixelRatio: ratio, format: false }, saveImage); |
104 | | -}); |
| 72 | + fs.writeFileSync(outfile + '.png', image, function (err) { |
| 73 | + if (err) throw err; |
| 74 | + }); |
| 75 | + }); |
| 76 | +} |
0 commit comments