Files
soroban-abacus-flashcards/packages/core/client/node/example-server.ts.disabled
Thomas Hallock 31df87d3fc fix: restore workspace dependencies and fix TypeScript errors
- Restore @soroban/core and @soroban/client dependencies in apps/web
- Correct workspace configuration to include all existing packages
- Disable problematic example-server.ts to fix TypeScript build
- Update Dockerfile to copy all required package.json files

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 09:08:46 -05:00

98 lines
2.6 KiB
Plaintext

/**
* Example TypeScript server using the Soroban generator
* This shows how to call the PDF generation directly from TypeScript
*/
import express from 'express';
import { SorobanGenerator } from './soroban-generator';
const app = express();
app.use(express.json());
// Initialize the generator once
const generator = new SorobanGenerator();
// Direct usage - just call the function from TypeScript
app.post('/api/generate-pdf', async (req, res) => {
try {
// Call the generator directly from TypeScript
const pdfBuffer = await generator.generate({
range: req.body.range || '0-9',
cardsPerPage: req.body.cardsPerPage || 6,
colorScheme: req.body.colorScheme || 'monochrome',
showCutMarks: req.body.showCutMarks || false,
// ... other config options
});
// Send PDF directly to client
res.contentType('application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=flashcards.pdf');
res.send(pdfBuffer);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Example: Generate specific sets programmatically
app.get('/api/presets/:preset', async (req, res) => {
try {
let config;
switch (req.params.preset) {
case 'basic':
config = { range: '0-9' };
break;
case 'counting-by-5':
config = { range: '0-100', step: 5 };
break;
case 'place-value':
config = {
range: '0-999',
colorScheme: 'place-value' as const,
coloredNumerals: true
};
break;
default:
return res.status(404).json({ error: 'Unknown preset' });
}
// Direct function call from TypeScript
const pdfBuffer = await generator.generate(config);
res.contentType('application/pdf');
res.send(pdfBuffer);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Simple usage in any async function
async function generateFlashcardsDirectly() {
const generator = new SorobanGenerator();
// Just call it like any TypeScript function
const pdfBuffer = await generator.generate({
range: '0-99',
cardsPerPage: 6,
colorScheme: 'place-value',
coloredNumerals: true
});
// Now you have the PDF as a Buffer, use it however you want
return pdfBuffer;
}
// Next.js API route example
export async function nextJsApiRoute(req: any, res: any) {
const generator = new SorobanGenerator();
// Direct call from TypeScript
const pdf = await generator.generate(req.body);
res.setHeader('Content-Type', 'application/pdf');
res.send(pdf);
}
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});