mirror of
https://github.com/lucide-icons/lucide.git
synced 2025-12-16 11:57:43 +01:00
* Lucide svelte (#1) * Update peerDependencies to support Svelte 5 * Bump svelte version * Bump @testing-library/svelte version * Remove alias in vitest.config.ts that causes tests to fail due to deprecated svelte/internal API * Convert to svelte 5 syntax * Bump vite & @sveltejs/vite-plugin-svelte version * Fix error during render when children prop is missing & fix components being mounted on the server during tests * Update test snapshots to reflect the differences in the html generated by svelte 5 * Convert class attribute to new array syntax with built-in clsx * Convert export template to svelte 5 syntax * Move svelte 5 to separate directory * Update snapshots * Update docs * fix(icon): change variable declaration from let to const in Icon.svelte * Lucide svelte (#1) (#2727) * Update peerDependencies to support Svelte 5 * Bump svelte version * Bump @testing-library/svelte version * Remove alias in vitest.config.ts that causes tests to fail due to deprecated svelte/internal API * Convert to svelte 5 syntax * Bump vite & @sveltejs/vite-plugin-svelte version * Fix error during render when children prop is missing & fix components being mounted on the server during tests * Update test snapshots to reflect the differences in the html generated by svelte 5 * Convert class attribute to new array syntax with built-in clsx * Convert export template to svelte 5 syntax * Revert changes in lucide-svelte library * Update package lock * Update test files * Formatting * Update clean command * Fix build * Update packages * update deps * Fix export script * Format code * Revert version number change in package json * Update workflows --------- Co-authored-by: Aurélien Richard <56389380+aurelienrichard@users.noreply.github.com>
65 lines
2.0 KiB
JavaScript
65 lines
2.0 KiB
JavaScript
import { lstatSync } from 'fs';
|
|
import { readdir, readFile, writeFile } from 'fs/promises';
|
|
import path from 'path';
|
|
import { getCurrentDirPath } from '@lucide/helpers';
|
|
import { getJSBanner } from './license.mjs';
|
|
|
|
const currentDir = getCurrentDirPath(import.meta.url);
|
|
const targetDirectory = path.join(currentDir, '../dist');
|
|
|
|
const files = await readdir(targetDirectory, {
|
|
recursive: true,
|
|
encoding: 'utf-8',
|
|
});
|
|
|
|
// eslint-disable-next-line no-restricted-syntax
|
|
for (const file of files) {
|
|
const filepath = path.join(targetDirectory, file);
|
|
const filestat = lstatSync(filepath);
|
|
|
|
// eslint-disable-next-line no-continue
|
|
if (filestat.isFile() === false || filestat.isDirectory()) continue;
|
|
|
|
// eslint-disable-next-line no-await-in-loop
|
|
const contents = await readFile(filepath, { encoding: 'utf-8' });
|
|
let newContents = contents;
|
|
const ext = path.extname(filepath);
|
|
let license;
|
|
|
|
if (/\.(js|mjs|cjs|ts)/.test(ext)) {
|
|
license = getJSBanner();
|
|
}
|
|
|
|
if (license) {
|
|
newContents = license + contents;
|
|
}
|
|
|
|
// Places icon block comment at the top of the Svelte component class
|
|
if (/icons\/(.*?)\.svelte\.d\.ts/.test(filepath)) {
|
|
const svelteFilepath = filepath.replace('.d.ts', '');
|
|
// eslint-disable-next-line no-await-in-loop
|
|
const svelteFileContents = await readFile(svelteFilepath, { encoding: 'utf-8' });
|
|
|
|
const blockCommentRegex = /\/\*\*\n\s\*\s(@component\s@name)[\s\S]*?\*\//;
|
|
const blockCommentMatch = blockCommentRegex.exec(svelteFileContents);
|
|
|
|
if (blockCommentMatch !== null) {
|
|
const blockComment = blockCommentMatch[0];
|
|
|
|
const exportClassRegex = /export default class (\w+) extends SvelteComponentTyped<(.*?)> {/;
|
|
|
|
if (exportClassRegex.test(newContents)) {
|
|
newContents = newContents.replace(
|
|
exportClassRegex,
|
|
`${blockComment}\nexport default class $1 extends SvelteComponentTyped<$2> {`,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (newContents !== contents) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
await writeFile(filepath, newContents, { encoding: 'utf-8' });
|
|
}
|
|
}
|