From 9ad51a07f4873e162d8a2d6ab1c4b8af4282d182 Mon Sep 17 00:00:00 2001 From: Dami Oyeniyi Date: Fri, 23 Oct 2026 15:45:06 +0100 Subject: [PATCH] fix(build-icons): support Windows paths in dynamic imports for template and metadata (#5058) Co-authored-by: grzdev --- tools/build-icons/cli.ts | 6 +++++- tools/build-icons/utils/getIconMetaData.ts | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/tools/build-icons/cli.ts b/tools/build-icons/cli.ts index 2c9fce7ac..55c11290e 100755 --- a/tools/build-icons/cli.ts +++ b/tools/build-icons/cli.ts @@ -1,6 +1,7 @@ #!/usr/bin/env node import fs from 'fs'; import path from 'path'; +import { pathToFileURL } from 'url'; import getArgumentOptions from 'minimist'; import { readSvgDirectory } from '@lucide/helpers'; @@ -76,7 +77,9 @@ async function buildIcons() { const icons = await renderIconsObject(svgFiles, ICONS_DIR, renderUniqueKey); - const { default: iconFileTemplate } = await import(path.resolve(process.cwd(), templateSrc)); + const { default: iconFileTemplate } = await import( + pathToFileURL(path.resolve(process.cwd(), templateSrc)).href + ); const iconMetaData = await getIconMetaData(ICONS_DIR); @@ -135,4 +138,5 @@ try { await buildIcons(); } catch (error) { console.error(error); + process.exitCode = 1; } diff --git a/tools/build-icons/utils/getIconMetaData.ts b/tools/build-icons/utils/getIconMetaData.ts index d835bb8e5..e3c0d94f8 100644 --- a/tools/build-icons/utils/getIconMetaData.ts +++ b/tools/build-icons/utils/getIconMetaData.ts @@ -1,4 +1,5 @@ import path from 'path'; +import { pathToFileURL } from 'url'; import { readSvgDirectory } from '@lucide/helpers'; import { type IconMetadata } from '../types.ts'; @@ -7,7 +8,9 @@ async function getIconMetaData(iconDirectory: string): Promise { /** eslint-disable */ - const file = await import(path.join(iconDirectory, jsonFile), { with: { type: 'json' } }); + const file = await import(pathToFileURL(path.join(iconDirectory, jsonFile)).href, { + with: { type: 'json' }, + }); return [path.basename(jsonFile, '.json'), file.default]; }), );