mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-22 06:56:35 +00:00
feat(sdk): support for plugin icons
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
// Regenerates src/lucide-icon-names.ts from the lucide-react version installed at
|
||||
// the repo root. Run from plugin-sdk/: `node scripts/gen-lucide-icon-names.mjs`.
|
||||
//
|
||||
// The SDK ships no lucide dependency of its own (it is a dependency-light CLI), so
|
||||
// the name list is a checked-in snapshot rather than a runtime lookup — same shape
|
||||
// as KNOWN_ADDONS in src/manifest.ts.
|
||||
import { writeFileSync } from 'node:fs';
|
||||
import { createRequire } from 'node:module';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { dirname, join } from 'node:path';
|
||||
|
||||
const here = dirname(fileURLToPath(import.meta.url));
|
||||
const require = createRequire(join(here, '..', '..', 'package.json'));
|
||||
|
||||
const dynamicIconImports = require('lucide-react/dynamicIconImports.js');
|
||||
const iconsByKebabName = dynamicIconImports.default ?? dynamicIconImports;
|
||||
const { version } = require('lucide-react/package.json');
|
||||
|
||||
const toPascalCase = (kebab) =>
|
||||
kebab.split('-').map((part) => part[0].toUpperCase() + part.slice(1)).join('');
|
||||
|
||||
const names = Object.keys(iconsByKebabName).map(toPascalCase).sort();
|
||||
|
||||
const source = `// GENERATED — do not edit by hand.
|
||||
// Snapshot of every lucide icon name (lucide-react ${version}), used by
|
||||
// \`trek-plugin validate\` to WARN on a manifest \`icon\` lucide doesn't know —
|
||||
// never a hard error (the host falls back to Blocks, and a plugin built for a
|
||||
// newer TREK may name an icon this SDK predates). Regenerate with
|
||||
// \`node scripts/gen-lucide-icon-names.mjs\`.
|
||||
export const LUCIDE_ICON_NAMES: ReadonlySet<string> = new Set([
|
||||
${names.map((n) => ' ' + JSON.stringify(n) + ',').join('\n')}
|
||||
]);
|
||||
`;
|
||||
|
||||
writeFileSync(join(here, '..', 'src', 'lucide-icon-names.ts'), source);
|
||||
console.log(`wrote ${names.length} icon names from lucide-react ${version}`);
|
||||
Reference in New Issue
Block a user