Generate index.d.ts when build (#269)
This commit is contained in:
@@ -10,3 +10,4 @@ stash
|
|||||||
coverage
|
coverage
|
||||||
stats
|
stats
|
||||||
*.log
|
*.log
|
||||||
|
index.d.ts
|
||||||
|
|||||||
+3
-2
@@ -18,10 +18,11 @@
|
|||||||
"sideEffects": false,
|
"sideEffects": false,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "babel-watch --watch src",
|
"start": "babel-watch --watch src",
|
||||||
"clean": "rimraf dist && rimraf build",
|
"clean": "rimraf dist && rimraf build && rimraf index.d.ts",
|
||||||
"build": "yarn clean && yarn build:move && yarn build:icons && yarn build:es && yarn build:bundles",
|
"build": "yarn clean && yarn build:move && yarn build:icons && yarn build:dts && yarn build:es && yarn build:bundles",
|
||||||
"build:move": "cp -av src build",
|
"build:move": "cp -av src build",
|
||||||
"build:icons": "npx babel-node ./scripts/buildIcons.js --presets @babel/env",
|
"build:icons": "npx babel-node ./scripts/buildIcons.js --presets @babel/env",
|
||||||
|
"build:dts": "npx babel-node ./scripts/buildDts.js --presets @babel/env",
|
||||||
"build:es": "babel build -d dist/esm",
|
"build:es": "babel build -d dist/esm",
|
||||||
"build:bundles": "rollup -c rollup.config.js",
|
"build:bundles": "rollup -c rollup.config.js",
|
||||||
"optimize": "npx babel-node ./scripts/optimizeSvgs.js --presets @babel/env",
|
"optimize": "npx babel-node ./scripts/optimizeSvgs.js --presets @babel/env",
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
import path from 'path';
|
||||||
|
|
||||||
|
import { readSvgDirectory, resetFile, appendFile, toPascalCase } from './helpers';
|
||||||
|
|
||||||
|
const ICONS_DIR = path.resolve(__dirname, '../icons');
|
||||||
|
const DTS_FILE_NAME = 'index.d.ts';
|
||||||
|
const DTS_FILE_ROOT = path.resolve(__dirname, '../');
|
||||||
|
|
||||||
|
resetFile(DTS_FILE_NAME, DTS_FILE_ROOT);
|
||||||
|
|
||||||
|
// Generates header of d.ts file include some types and functions
|
||||||
|
appendFile(
|
||||||
|
`
|
||||||
|
export type IconData = readonly [string, object, IconData?];
|
||||||
|
export type IconString = string;
|
||||||
|
|
||||||
|
export function createElement(ico: IconData): SVGSVGElement;
|
||||||
|
|
||||||
|
export declare const icons: { [key: string]: IconData };
|
||||||
|
|
||||||
|
// Generated icons
|
||||||
|
`,
|
||||||
|
DTS_FILE_NAME,
|
||||||
|
DTS_FILE_ROOT,
|
||||||
|
);
|
||||||
|
|
||||||
|
const svgFiles = readSvgDirectory(ICONS_DIR);
|
||||||
|
|
||||||
|
svgFiles.forEach(svgFile => {
|
||||||
|
const nameSvg = path.basename(svgFile, '.svg');
|
||||||
|
const namePascal = toPascalCase(nameSvg);
|
||||||
|
appendFile(`export declare const ${namePascal}: IconData;\n`, DTS_FILE_NAME, DTS_FILE_ROOT);
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(`Successfully generated '${DTS_FILE_NAME}'.`);
|
||||||
Reference in New Issue
Block a user