feat(lucide-svelte): Aliased imports for direct imports (#2584)

* Add way to import aliased icons directly

* Format files

* Fix tests

* Format files
This commit is contained in:
Eric Fennis
2024-11-15 13:51:58 +01:00
committed by GitHub
parent 0f3fd12f16
commit 09cebe178d
8 changed files with 34 additions and 8 deletions

View File

@@ -36,7 +36,8 @@
}, },
"./icons/*": { "./icons/*": {
"types": "./dist/icons/*.svelte.d.ts", "types": "./dist/icons/*.svelte.d.ts",
"svelte": "./dist/icons/*.svelte" "svelte": "./dist/icons/*.js",
"default": "./dist/icons/*.js"
} }
}, },
"typings": "dist/lucide-svelte.d.ts", "typings": "dist/lucide-svelte.d.ts",
@@ -48,7 +49,7 @@
"build": "pnpm clean && pnpm copy:license && pnpm build:icons && pnpm build:package && pnpm build:license", "build": "pnpm clean && pnpm copy:license && pnpm build:icons && pnpm build:package && pnpm build:license",
"copy:license": "cp ../../LICENSE ./LICENSE", "copy:license": "cp ../../LICENSE ./LICENSE",
"clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.svelte && rm -f index.js", "clean": "rm -rf dist && rm -rf stats && rm -rf ./src/icons/*.svelte && rm -f index.js",
"build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mjs --exportFileName=index.ts --iconFileExtension=.svelte --importImportFileExtension=.svelte --withAliases --aliasesFileExtension=.ts --aliasImportFileExtension=.svelte --pretty=false", "build:icons": "build-icons --output=./src --templateSrc=./scripts/exportTemplate.mjs --exportFileName=index.ts --iconFileExtension=.svelte --importImportFileExtension=.svelte --separateIconFileExport --separateIconFileExportExtension=.ts --withAliases --aliasesFileExtension=.ts --separateAliasesFile --separateAliasesFileExtension=.ts --aliasImportFileExtension=.ts --pretty=false",
"build:package": "svelte-package --input ./src", "build:package": "svelte-package --input ./src",
"build:license": "node ./scripts/appendBlockComments.mjs", "build:license": "node ./scripts/appendBlockComments.mjs",
"test": "pnpm build:icons && vitest run", "test": "pnpm build:icons && vitest run",

View File

@@ -1,4 +1,4 @@
import pkg from '../package.json' assert { type: 'json' }; import pkg from '../package.json' with { type: 'json' };
export function getJSBanner() { export function getJSBanner() {
return `/** return `/**

View File

@@ -1,7 +1,7 @@
import plugins from '@lucide/rollup-plugins'; import plugins from '@lucide/rollup-plugins';
import replace from '@rollup/plugin-replace'; import replace from '@rollup/plugin-replace';
import dts from 'rollup-plugin-dts'; import dts from 'rollup-plugin-dts';
import pkg from './package.json' assert { type: 'json' }; import pkg from './package.json' with { type: 'json' };
const outputFileName = pkg.name; const outputFileName = pkg.name;
const outputDir = 'dist'; const outputDir = 'dist';

View File

@@ -14,6 +14,7 @@ export default async function generateAliasesFiles({
aliasImportFileExtension, aliasImportFileExtension,
aliasNamesOnly = false, aliasNamesOnly = false,
separateAliasesFile = false, separateAliasesFile = false,
separateAliasesFileExtension,
showLog = true, showLog = true,
}) { }) {
const iconsDistDirectory = path.join(outputDirectory, `icons`); const iconsDistDirectory = path.join(outputDirectory, `icons`);
@@ -96,8 +97,13 @@ export default async function generateAliasesFiles({
: ''; : '';
if (separateAliasesFile) { if (separateAliasesFile) {
const output = `export { default } from "./${iconName}"`; const output = `export { default } from "./${iconName}${
const location = path.join(iconsDistDirectory, `${alias.name}${iconFileExtension}`); separateAliasesFileExtension ? iconFileExtension : ''
}";\n`;
const location = path.join(
iconsDistDirectory,
`${alias.name}${separateAliasesFileExtension ?? iconFileExtension}`,
);
await fs.promises.writeFile(location, output, 'utf-8'); await fs.promises.writeFile(location, output, 'utf-8');
} }

View File

@@ -10,6 +10,8 @@ export default ({
template, template,
showLog = true, showLog = true,
iconFileExtension = '.js', iconFileExtension = '.js',
separateIconFileExport = false,
separateIconFileExportExtension,
pretty = true, pretty = true,
iconsDir, iconsDir,
iconMetaData, iconMetaData,
@@ -46,6 +48,7 @@ export default ({
deprecated, deprecated,
deprecationReason, deprecationReason,
}); });
const output = pretty const output = pretty
? prettier.format(elementTemplate, { ? prettier.format(elementTemplate, {
singleQuote: true, singleQuote: true,
@@ -56,6 +59,16 @@ export default ({
: elementTemplate; : elementTemplate;
await fs.promises.writeFile(location, output, 'utf-8'); await fs.promises.writeFile(location, output, 'utf-8');
if (separateIconFileExport) {
const output = `export { default } from "./${iconName}${iconFileExtension}";\n`;
const location = path.join(
iconsDistDirectory,
`${iconName}${separateIconFileExportExtension ?? iconFileExtension}`,
);
await fs.promises.writeFile(location, output, 'utf-8');
}
}); });
Promise.all(writeIconFiles) Promise.all(writeIconFiles)

View File

@@ -34,6 +34,9 @@ const {
aliasNamesOnly = false, aliasNamesOnly = false,
withDynamicImports = false, withDynamicImports = false,
separateAliasesFile = false, separateAliasesFile = false,
separateAliasesFileExtension = undefined,
separateIconFileExport = false,
separateIconFileExportExtension = undefined,
aliasesFileExtension = '.js', aliasesFileExtension = '.js',
aliasImportFileExtension = '', aliasImportFileExtension = '',
pretty = true, pretty = true,
@@ -59,6 +62,8 @@ async function buildIcons() {
template: iconFileTemplate, template: iconFileTemplate,
showLog: !silent, showLog: !silent,
iconFileExtension, iconFileExtension,
separateIconFileExport,
separateIconFileExportExtension,
pretty: JSON.parse(pretty), pretty: JSON.parse(pretty),
iconsDir: ICONS_DIR, iconsDir: ICONS_DIR,
iconMetaData, iconMetaData,
@@ -75,6 +80,7 @@ async function buildIcons() {
exportModuleNameCasing, exportModuleNameCasing,
aliasImportFileExtension, aliasImportFileExtension,
separateAliasesFile, separateAliasesFile,
separateAliasesFileExtension,
showLog: !silent, showLog: !silent,
}); });
} }

View File

@@ -5,7 +5,7 @@ async function getAliases(iconDirectory) {
const iconJsons = readSvgDirectory(iconDirectory, '.json'); const iconJsons = readSvgDirectory(iconDirectory, '.json');
const aliasesEntries = await Promise.all( const aliasesEntries = await Promise.all(
iconJsons.map(async (jsonFile) => { iconJsons.map(async (jsonFile) => {
const file = await import(path.join(iconDirectory, jsonFile), { assert: { type: 'json' } }); const file = await import(path.join(iconDirectory, jsonFile), { with: { type: 'json' } });
return [path.basename(jsonFile, '.json'), file.default]; return [path.basename(jsonFile, '.json'), file.default];
}), }),
); );

View File

@@ -6,7 +6,7 @@ async function getIconMetaData(iconDirectory) {
const aliasesEntries = await Promise.all( const aliasesEntries = await Promise.all(
iconJsons.map(async (jsonFile) => { iconJsons.map(async (jsonFile) => {
/** eslint-disable */ /** eslint-disable */
const file = await import(path.join(iconDirectory, jsonFile), { assert: { type: 'json' } }); const file = await import(path.join(iconDirectory, jsonFile), { with: { type: 'json' } });
return [path.basename(jsonFile, '.json'), file.default]; return [path.basename(jsonFile, '.json'), file.default];
}), }),
); );