Monorepo for Aesthetic.Computer
aesthetic.computer
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);