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/*": {
"types": "./dist/icons/*.svelte.d.ts",
"svelte": "./dist/icons/*.svelte"
"svelte": "./dist/icons/*.js",
"default": "./dist/icons/*.js"
}
},
"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",
"copy:license": "cp ../../LICENSE ./LICENSE",
"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:license": "node ./scripts/appendBlockComments.mjs",
"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() {
return `/**

View File

@@ -1,7 +1,7 @@
import plugins from '@lucide/rollup-plugins';
import replace from '@rollup/plugin-replace';
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 outputDir = 'dist';

View File

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

View File

@@ -10,6 +10,8 @@ export default ({
template,
showLog = true,
iconFileExtension = '.js',
separateIconFileExport = false,
separateIconFileExportExtension,
pretty = true,
iconsDir,
iconMetaData,
@@ -46,6 +48,7 @@ export default ({
deprecated,
deprecationReason,
});
const output = pretty
? prettier.format(elementTemplate, {
singleQuote: true,
@@ -56,6 +59,16 @@ export default ({
: elementTemplate;
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)

View File

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

View File

@@ -5,7 +5,7 @@ async function getAliases(iconDirectory) {
const iconJsons = readSvgDirectory(iconDirectory, '.json');
const aliasesEntries = await Promise.all(
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];
}),
);

View File

@@ -6,7 +6,7 @@ async function getIconMetaData(iconDirectory) {
const aliasesEntries = await Promise.all(
iconJsons.map(async (jsonFile) => {
/** 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];
}),
);