Monorepo for Aesthetic.Computer aesthetic.computer
at main 84 lines 2.7 kB view raw
1#!/usr/bin/env node 2// Simple KidLisp Source Fetcher 3// Usage: ./get-source.mjs $cow 4// Just fetches and displays the raw source code of a KidLisp piece 5 6import https from 'https'; 7 8async function fetchSource(pieceName) { 9 // Remove $ prefix if present 10 const cleanName = pieceName.replace(/^\$/, ''); 11 12 const url = `https://localhost:8888/.netlify/functions/store-kidlisp?code=${cleanName}`; 13 14 return new Promise((resolve, reject) => { 15 // Allow self-signed certificates for localhost 16 const options = { 17 rejectUnauthorized: false 18 }; 19 20 https.get(url, options, (res) => { 21 let data = ''; 22 23 res.on('data', (chunk) => { 24 data += chunk; 25 }); 26 27 res.on('end', () => { 28 try { 29 const response = JSON.parse(data); 30 31 if (response.error) { 32 reject(new Error(`Piece '$${cleanName}' not found`)); 33 return; 34 } 35 36 if (!response.source) { 37 reject(new Error("Could not parse source code from response")); 38 return; 39 } 40 41 resolve(response.source); 42 } catch (error) { 43 reject(new Error("Could not parse JSON response")); 44 } 45 }); 46 }).on('error', (error) => { 47 reject(new Error(`Could not connect to local API (https://localhost:8888)\n Make sure the dev server is running with: npm run dev`)); 48 }); 49 }); 50} 51 52// Main script 53async function main() { 54 const args = process.argv.slice(2); 55 56 if (args.length === 0) { 57 console.log("Usage: get-source.mjs <piece-name>"); 58 console.log("Example: get-source.mjs $cow"); 59 console.log(" get-source.mjs cow"); 60 process.exit(1); 61 } 62 63 const pieceName = args[0]; 64 const displayName = pieceName.startsWith('$') ? pieceName : `$${pieceName}`; 65 66 try { 67 console.log(`📄 Source code for ${displayName}:`); 68 console.log("═".repeat(50)); 69 70 const source = await fetchSource(pieceName); 71 72 // Clean up source for display (replace \\n with actual newlines and basic unescaping) 73 const cleanSource = source.replace(/\\n/g, '\n').replace(/\\"/g, '"'); 74 75 console.log(cleanSource); 76 console.log("═".repeat(50)); 77 78 } catch (error) { 79 console.error(`❌ Error: ${error.message}`); 80 process.exit(1); 81 } 82} 83 84main().catch(console.error);