Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/lukebennett88/luke-ui. ui.lukebennett.dev
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';import { tmpdir } from 'node:os';import { join } from 'node:path';import { afterEach, expect, test } from 'vite-plus/test';import { cleanGeneratedPropsPages } from './clean-generated-props-pages.js';
const testDirectories: Array<string> = [];
const GENERATOR_MARKER = '{/* Generated by scripts/generate-props-pages.ts. Do not edit. */}';
function generatedPropsMdx(): string { return `---\ntitle: Button\n---\n\n${GENERATOR_MARKER}\n`;}
afterEach(() => { for (const directory of testDirectories) { rmSync(directory, { force: true, recursive: true }); } testDirectories.length = 0;});
function createTempDir(): string { const directory = mkdtempSync(join(tmpdir(), 'luke-ui-clean-generated-props-')); testDirectories.push(directory); return directory;}
test('removes generator-owned props.mdx and meta.json and the now-empty directory', () => { const root = createTempDir(); const componentDir = join(root, 'actions', 'button'); mkdirSync(componentDir, { recursive: true }); writeFileSync(join(componentDir, 'props.mdx'), generatedPropsMdx()); writeFileSync(join(componentDir, 'meta.json'), '{}');
const result = cleanGeneratedPropsPages(root);
expect(result.removedCount).toBe(2); expect(existsSync(componentDir)).toBe(false);});
test('removes generated files but keeps directory when an unrelated sibling remains', () => { const root = createTempDir(); const componentDir = join(root, 'actions', 'button'); mkdirSync(componentDir, { recursive: true }); writeFileSync(join(componentDir, 'props.mdx'), generatedPropsMdx()); writeFileSync(join(componentDir, 'meta.json'), '{}'); writeFileSync(join(componentDir, 'notes.txt'), 'keep me');
const result = cleanGeneratedPropsPages(root);
expect(result.removedCount).toBe(2); expect(existsSync(componentDir)).toBe(true); expect(existsSync(join(componentDir, 'props.mdx'))).toBe(false); expect(existsSync(join(componentDir, 'meta.json'))).toBe(false); expect(existsSync(join(componentDir, 'notes.txt'))).toBe(true); expect(readFileSync(join(componentDir, 'notes.txt'), 'utf8')).toBe('keep me');});
test('leaves authored guides / unmarked props.mdx / standalone meta untouched', () => { const root = createTempDir(); const groupDir = join(root, 'actions'); const generatedDir = join(groupDir, 'button'); const authoredPropsDir = join(groupDir, 'link'); const standaloneMetaDir = join(groupDir, 'chip'); const emptyNotesDir = join(groupDir, 'notes-only'); mkdirSync(generatedDir, { recursive: true }); mkdirSync(authoredPropsDir, { recursive: true }); mkdirSync(standaloneMetaDir, { recursive: true }); mkdirSync(emptyNotesDir, { recursive: true }); writeFileSync(join(groupDir, 'button.mdx'), '# Button guide'); writeFileSync(join(groupDir, 'meta.json'), '{"pages": ["button"]}'); writeFileSync(join(generatedDir, 'props.mdx'), generatedPropsMdx()); writeFileSync(join(generatedDir, 'meta.json'), '{}'); writeFileSync(join(authoredPropsDir, 'props.mdx'), '# Authored props page'); writeFileSync(join(authoredPropsDir, 'meta.json'), '{"title": "Props"}'); writeFileSync(join(standaloneMetaDir, 'meta.json'), '{"pages": ["overview"]}'); writeFileSync(join(emptyNotesDir, 'notes.txt'), 'keep me');
const result = cleanGeneratedPropsPages(root);
expect(result.removedCount).toBe(2); expect(existsSync(generatedDir)).toBe(false); expect(existsSync(join(groupDir, 'button.mdx'))).toBe(true); expect(readFileSync(join(groupDir, 'button.mdx'), 'utf8')).toBe('# Button guide'); expect(existsSync(join(groupDir, 'meta.json'))).toBe(true); expect(readFileSync(join(groupDir, 'meta.json'), 'utf8')).toBe('{"pages": ["button"]}'); expect(existsSync(authoredPropsDir)).toBe(true); expect(readFileSync(join(authoredPropsDir, 'props.mdx'), 'utf8')).toBe('# Authored props page'); expect(readFileSync(join(authoredPropsDir, 'meta.json'), 'utf8')).toBe('{"title": "Props"}'); expect(existsSync(standaloneMetaDir)).toBe(true); expect(readFileSync(join(standaloneMetaDir, 'meta.json'), 'utf8')).toBe( '{"pages": ["overview"]}', ); expect(existsSync(emptyNotesDir)).toBe(true); expect(readFileSync(join(emptyNotesDir, 'notes.txt'), 'utf8')).toBe('keep me');});
test('is a no-op when the components directory does not exist', () => { const root = createTempDir();
const result = cleanGeneratedPropsPages(join(root, 'does-not-exist'));
expect(result.removedCount).toBe(0);});