lucide-react - Generate types for all exported icons (#243)
* Generate types for all exported icons * renderUniqueKey will generate duplicate keys if the SVG attributse are identical. Fixed by adding an index attribute to the hash. * Revert "renderUniqueKey will generate duplicate keys if the SVG attributse are identical. Fixed by adding an index attribute to the hash." This reverts commit 1c42b39e * Update packages/lucide-react/build-types.js * Update packages/lucide-react/build-types.js Co-authored-by: Eric Fennis <eric.fennis@gmail.com>
This commit is contained in:
54
packages/lucide-react/build-types.js
Normal file
54
packages/lucide-react/build-types.js
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
const fs = require("fs")
|
||||||
|
const path = require("path")
|
||||||
|
const srcDirectory = path.join(__dirname, "dist")
|
||||||
|
|
||||||
|
// Declare type definitions
|
||||||
|
const typeDefinitions = `
|
||||||
|
/// <reference types="react" />
|
||||||
|
import { SVGAttributes } from 'react'
|
||||||
|
|
||||||
|
// Create interface extending SVGAttributes
|
||||||
|
export interface LucideProps extends Partial<React.SVGProps<SVGSVGElement>> {
|
||||||
|
color?: string
|
||||||
|
size?: string | number
|
||||||
|
stroke?: string | number
|
||||||
|
strokeWidth?: string | number
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generated icons
|
||||||
|
`
|
||||||
|
|
||||||
|
// Write type definitions to file
|
||||||
|
fs.writeFileSync(
|
||||||
|
path.join(srcDirectory, "index.d.ts"),
|
||||||
|
typeDefinitions,
|
||||||
|
"utf-8",
|
||||||
|
)
|
||||||
|
|
||||||
|
const iconsFolder = "./build/icons"
|
||||||
|
fs.readdir(iconsFolder, (err, files) => {
|
||||||
|
|
||||||
|
files.forEach(file => {
|
||||||
|
|
||||||
|
const fileName = file.replace(".js", "")
|
||||||
|
|
||||||
|
// Convert fileName to component name
|
||||||
|
const componentName = fileName.split("-")
|
||||||
|
.map(word => word[0].toUpperCase() + word.substr(1, word.length))
|
||||||
|
.join("")
|
||||||
|
|
||||||
|
// Declare component type
|
||||||
|
const exportTypeString = `export declare const ${componentName}: (props: LucideProps) => JSX.Element;\n`
|
||||||
|
|
||||||
|
// Add component to the types file
|
||||||
|
fs.appendFileSync(
|
||||||
|
path.join(srcDirectory, "index.d.ts"),
|
||||||
|
exportTypeString,
|
||||||
|
"utf-8",
|
||||||
|
)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log("Generated index.d.ts file with", files.length, "icons")
|
||||||
|
|
||||||
|
})
|
||||||
@@ -16,11 +16,13 @@
|
|||||||
"main:umd": "dist/umd/lucide-react.js",
|
"main:umd": "dist/umd/lucide-react.js",
|
||||||
"module": "dist/esm/lucide-react.js",
|
"module": "dist/esm/lucide-react.js",
|
||||||
"unpkg": "dist/umd/lucide-react.min.js",
|
"unpkg": "dist/umd/lucide-react.min.js",
|
||||||
|
"typings": "dist/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"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:es && yarn build:types && yarn build:bundles",
|
||||||
"clean": "rm -rf dist && rm -rf build",
|
"clean": "rm -rf dist && rm -rf build",
|
||||||
"build:move": "cp -av src build",
|
"build:move": "cp -av src build",
|
||||||
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-react/build --templateSrc=../packages/lucide-react/scripts/exportTemplate --camelizeAttrs --noDefaultAttrs --renderUniqueKey",
|
"build:icons": "yarn --cwd ../../ build:icons --output=../packages/lucide-react/build --templateSrc=../packages/lucide-react/scripts/exportTemplate --camelizeAttrs --noDefaultAttrs --renderUniqueKey",
|
||||||
|
"build:types": "node build-types.js",
|
||||||
"build:es": "yarn --cwd ../../ babel packages/lucide-react/build -d packages/lucide-react/dist/esm",
|
"build:es": "yarn --cwd ../../ babel packages/lucide-react/build -d packages/lucide-react/dist/esm",
|
||||||
"build:bundles": "yarn --cwd ../../ rollup -c packages/lucide-react/rollup.config.js",
|
"build:bundles": "yarn --cwd ../../ rollup -c packages/lucide-react/rollup.config.js",
|
||||||
"test": "jest"
|
"test": "jest"
|
||||||
|
|||||||
Reference in New Issue
Block a user