UNPKG

@wener/ui

Version:

108 lines (106 loc) 4.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const glob_1 = __importDefault(require("glob")); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const utils_1 = require("@wener/utils"); const utils_2 = require("./utils"); /* ts-node --project ./tsconfig.ts-node.json ./scripts/icons.ts */ async function generate(svgPath, compPath, utilPath) { let files = await new Promise((resolve, reject) => glob_1.default('*.tsx', { cwd: svgPath }, (e, v) => { if (e) { reject(e); } else { resolve(v); } })); files = files.filter((v) => !/index[.]/i.test(v)); console.log(files); const names = []; // files.ea for (let f of files) { const ext = path_1.default.extname(f); const basename = path_1.default.basename(f, ext); const name = utils_1.pascalCase(basename); names.push(name); if (basename !== name) { const from = path_1.default.join(svgPath, basename) + ext; const to = (f = path_1.default.join(svgPath, name) + ext); console.log(`renaming ${from} to ${to}`); fs_1.default.renameSync(from, to); } await gen({ svg: path_1.default.join(svgPath, f), svgImport: './' + path_1.default.join(path_1.default.relative(compPath, svgPath), f), name, comp: path_1.default.join(compPath, `${name}.tsx`), force: true, }); } names.sort(); fs_1.default.writeFileSync(path_1.default.join(utilPath, 'index.ts'), names .flatMap((v) => [ `export { default as ${v} } from './${path_1.default.relative(utilPath, compPath)}/${v}';`, `export { default as Svg${v} } from './svgr/${v}';`, ]) .join('\n') + '\n'); const resolveCase = names .map((v) => ` case '${v}':c = import('./${path_1.default.relative(utilPath, compPath)}/${v}');break;`) .join('\n'); const resolver = path_1.default.join(utilPath, 'iconsResolver.ts'); const rel = utils_2.replaceGenerated(fs_1.default.readFileSync(resolver).toString(), resolveCase); utils_2.processFileContent(path_1.default.join(utilPath, 'iconsResolverTypes.ts'), (v) => { return utils_2.replaceGenerated(v, `export const iconsResolverTypes: string[] = ${JSON.stringify(names)};`, 'types'); }); fs_1.default.writeFileSync(resolver, rel); } async function gen({ svg, comp, name, svgImport, force = Boolean(process.env.FORCE) }) { if (fs_1.default.existsSync(comp) && !force) { return; } console.log(`Generate ${name}`); fs_1.default.writeFileSync(comp, ` import {ForwardRefRenderFunction,forwardRef,createElement} from 'react'; import ${name}Svg from '${svgImport.replace(/[.]tsx$/, '')}' import {IconProps,IconComponent} from '../types' const ${name}: ForwardRefRenderFunction<any, IconProps> = (props, ref) => { return createElement(IconComponent, Object.assign({}, props, { ref, component: ${name}Svg })); }; ${name}.displayName = '${name}'; export default forwardRef(${name}); `.trimLeft()); // fs.writeFileSync( // comp, // ` // import React,{ForwardRefRenderFunction,forwardRef,createElement} from 'react'; // import ${name}Svg from '${svgImport.replace(/[.]tsx$/, '')}' // import {IconProps} from '../types' // import Icon from '@ant-design/icons'; // // const ${name}: React.FC<IconProps> = (props) => { // return createElement(Icon, Object.assign({}, props, { // component: ${name}Svg // })); // }; // // ${name}.displayName = '${name}'; // export default ${name}; // `.trimLeft(), // ); } async function main() { await generate('./src/icons/svgr', './src/icons/components', './src/icons'); } (async function run() { await main(); })(); //# sourceMappingURL=icons.js.map