mirror of
https://github.com/lucide-icons/lucide.git
synced 2025-12-16 20:47:42 +01:00
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:
@@ -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",
|
||||||
|
|||||||
@@ -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 `/**
|
||||||
|
|||||||
@@ -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';
|
||||||
|
|||||||
@@ -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');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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];
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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];
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user