diff --git a/.gitignore b/.gitignore index c123791..85261bc 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ stash coverage stats *.log +index.d.ts diff --git a/package.json b/package.json index 0e8791e..7e23896 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,11 @@ "sideEffects": false, "scripts": { "start": "babel-watch --watch src", - "clean": "rimraf dist && rimraf build", - "build": "yarn clean && yarn build:move && yarn build:icons && yarn build:es && yarn build:bundles", + "clean": "rimraf dist && rimraf build && rimraf index.d.ts", + "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: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:bundles": "rollup -c rollup.config.js", "optimize": "npx babel-node ./scripts/optimizeSvgs.js --presets @babel/env", diff --git a/scripts/buildDts.js b/scripts/buildDts.js new file mode 100644 index 0000000..5dc2799 --- /dev/null +++ b/scripts/buildDts.js @@ -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}'.`);