@wener/ui
Version:
108 lines (106 loc) • 4.1 kB
JavaScript
;
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