1 | #!/usr/bin/env node
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | "use strict";
|
14 |
|
15 | var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
16 |
|
17 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
18 |
|
19 | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
20 |
|
21 | function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
22 |
|
23 | function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
24 |
|
25 | var fs = require('fs');
|
26 |
|
27 | var path = require('path');
|
28 |
|
29 | var prettier = require('prettier');
|
30 |
|
31 | function capitalize(str) {
|
32 | return str.charAt(0).toUpperCase() + str.slice(1);
|
33 | }
|
34 |
|
35 | function pascalCase(str) {
|
36 | return str.split('-').map(capitalize).join('');
|
37 | }
|
38 |
|
39 | function titleCase(str) {
|
40 | return str.split('-').map(capitalize).join(' ');
|
41 | }
|
42 |
|
43 |
|
44 | function removeChevronFromTitle(str) {
|
45 | return str.replace('Chevron ', '');
|
46 | }
|
47 |
|
48 |
|
49 | function reactify(svgString) {
|
50 | return svgString.replace(/<!--.*-->\n/gm, '').replace(/<\/?svg[^>]*>/gm, '').replace(/^\s*\n/gm, '').replace(/\n$/, '').replace(/\t/g, ' ').replace(/fill-rule/g, 'fillRule').replace(/clip-rule/g, 'clipRule').replace(/fill-opacity/g, 'fillOpacity').trim();
|
51 | }
|
52 |
|
53 | function cleanOldIcons() {
|
54 | var allJsFiles = fs.readdirSync(path.resolve(__dirname)).filter(function (f) {
|
55 | return f.endsWith('.js');
|
56 | });
|
57 | allJsFiles.forEach(function (f) {
|
58 | if (fs.readFileSync(path.resolve(__dirname, f), 'utf8').match(/^\/\/ BASEUI-GENERATED-REACT-ICON/m)) {
|
59 | fs.unlinkSync(path.resolve(__dirname, f));
|
60 | }
|
61 | });
|
62 | }
|
63 |
|
64 | function generateNewIcons() {
|
65 | var iconTemplate, svgs, prettierOptions, iconExports;
|
66 | return _regenerator.default.async(function generateNewIcons$(_context2) {
|
67 | while (1) {
|
68 | switch (_context2.prev = _context2.next) {
|
69 | case 0:
|
70 | iconTemplate = fs.readFileSync(path.resolve(__dirname, './icon-template.txt'), 'utf8');
|
71 | svgs = fs.readdirSync(path.resolve(__dirname, './svg')).filter(function (f) {
|
72 | return f.endsWith('.svg');
|
73 | });
|
74 | _context2.next = 4;
|
75 | return _regenerator.default.awrap(prettier.resolveConfig(__dirname));
|
76 |
|
77 | case 4:
|
78 | _context2.t0 = _context2.sent;
|
79 |
|
80 | if (_context2.t0) {
|
81 | _context2.next = 7;
|
82 | break;
|
83 | }
|
84 |
|
85 | _context2.t0 = {};
|
86 |
|
87 | case 7:
|
88 | prettierOptions = _context2.t0;
|
89 | iconExports = [];
|
90 | svgs.forEach(function _callee(svgFilename) {
|
91 | var svgFile, componentName, svgFileContents, title, viewboxRegex, viewBox, result;
|
92 | return _regenerator.default.async(function _callee$(_context) {
|
93 | while (1) {
|
94 | switch (_context.prev = _context.next) {
|
95 | case 0:
|
96 | svgFile = svgFilename.split('.')[0];
|
97 | componentName = pascalCase(svgFile);
|
98 | iconExports.push("export {default as ".concat(componentName, "} from './").concat(svgFile, ".js';"));
|
99 | svgFileContents = fs.readFileSync(path.resolve(__dirname, "./svg/".concat(svgFilename)), 'utf8');
|
100 | title = removeChevronFromTitle(titleCase(svgFile));
|
101 | viewboxRegex = svgFileContents.match(/viewBox="([^"]+)"/);
|
102 | viewBox = null;
|
103 |
|
104 | if (viewboxRegex && viewboxRegex[1]) {
|
105 | viewBox = viewboxRegex[1];
|
106 | }
|
107 |
|
108 | result = iconTemplate.replace('%%ICON_PATH%%', reactify(svgFileContents)).replace(new RegExp('%%ICON_NAME%%', 'g'), componentName).replace(new RegExp('%%SVG_TITLE%%', 'g'), title).replace(new RegExp('%%SVG_VIEWBOX%%', 'g'), viewBox && viewboxRegex[1] ? "viewBox=\"".concat(viewBox, "\"") : '');
|
109 | fs.writeFileSync(path.resolve(__dirname, "./".concat(svgFile, ".js")), prettier.format(result, _objectSpread({
|
110 | parser: 'flow'
|
111 | }, prettierOptions)));
|
112 |
|
113 | case 10:
|
114 | case "end":
|
115 | return _context.stop();
|
116 | }
|
117 | }
|
118 | });
|
119 | });
|
120 | fs.writeFileSync(path.resolve(__dirname, "./icon-exports.js"), "/*\nCopyright (c) 2018-2020 Uber Technologies, Inc.\n\nThis source code is licensed under the MIT license found in the\nLICENSE file in the root directory of this source tree.\n*/\n// @flow\n".concat(iconExports.join('\n'), "\n"));
|
121 |
|
122 | console.log("Wrote ".concat(svgs.length, " icon(s)"));
|
123 |
|
124 | case 12:
|
125 | case "end":
|
126 | return _context2.stop();
|
127 | }
|
128 | }
|
129 | });
|
130 | }
|
131 |
|
132 | cleanOldIcons();
|
133 | generateNewIcons(); |
\ | No newline at end of file |