- 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>
98 lines
2.6 KiB
Plaintext
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');
|
|
}); |