AT Protocol lexicon schemas for Sifa professional profiles (id.sifa.*) sifa.id/
at main 43 lines 1.5 kB view raw
1/** 2 * Generate TypeScript types from lexicon schemas. 3 * 4 * Includes external lexicons (com.atproto.*, community.lexicon.*) that our 5 * schemas reference, so lex-cli can resolve all type references. 6 */ 7import { readdirSync } from 'node:fs'; 8import { join } from 'node:path'; 9import { execFileSync } from 'node:child_process'; 10 11const ROOT = new URL('..', import.meta.url).pathname; 12const LEXICONS_DIR = join(ROOT, 'lexicons'); 13const EXTERNAL_DIR = join(ROOT, 'external-lexicons'); 14const OUTPUT_DIR = join(ROOT, 'src', 'generated'); 15 16const EXCLUDED_FILES = ['authProfileAccess.json']; 17 18function findJsonFiles(dir) { 19 const results = []; 20 for (const entry of readdirSync(dir, { withFileTypes: true })) { 21 const fullPath = join(dir, entry.name); 22 if (entry.isDirectory()) { 23 results.push(...findJsonFiles(fullPath)); 24 } else if (entry.name.endsWith('.json') && !EXCLUDED_FILES.includes(entry.name)) { 25 results.push(fullPath); 26 } 27 } 28 return results; 29} 30 31const ownFiles = findJsonFiles(LEXICONS_DIR); 32const externalFiles = findJsonFiles(EXTERNAL_DIR); 33const allFiles = [...ownFiles, ...externalFiles]; 34 35console.log(`Found ${ownFiles.length} own + ${externalFiles.length} external lexicon files`); 36 37execFileSync('npx', ['lex', 'gen-server', OUTPUT_DIR, ...allFiles, '--yes'], { 38 cwd: ROOT, 39 stdio: 'inherit', 40}); 41 42console.log('Running fixup script...'); 43execFileSync('node', ['scripts/fixup-generated.js'], { cwd: ROOT, stdio: 'inherit' });