ArangoDB MCP Server
- dev
const fs = require('fs');
const path = require('path');
class SeededRandom {
constructor(seed = 1) {
this.seed = seed;
}
// Simple implementation of a seeded random number generator
random() {
const x = Math.sin(this.seed++) * 10000;
return x - Math.floor(x);
}
// Get random integer between min and max (inclusive)
getRandomInt(min, max) {
return Math.floor(this.random() * (max - min + 1)) + min;
}
// Generate random string of specified length
generateRandomString(length) {
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
let result = '';
for (let i = 0; i < length; i++) {
result += chars.charAt(Math.floor(this.random() * chars.length));
}
return result;
}
}
function generateUsers(count = 100, rng) {
const users = [];
const roles = ['user', 'admin', 'editor', 'viewer'];
const domains = ['example.com', 'test.com', 'demo.org', 'sample.net'];
for (let i = 0; i < count; i++) {
const firstName = `User${i + 1}`;
const lastName = rng.generateRandomString(8);
const email = `${firstName.toLowerCase()}.${lastName}@${domains[i % domains.length]}`;
users.push({
_key: `user${i + 1}`,
firstName,
lastName,
email,
role: roles[i % roles.length],
createdAt: new Date(Date.now() - rng.getRandomInt(0, 365 * 24 * 60 * 60 * 1000)).toISOString(),
isActive: rng.random() > 0.1,
preferences: {
newsletter: rng.random() > 0.5,
notifications: rng.random() > 0.3,
theme: rng.random() > 0.5 ? 'light' : 'dark'
}
});
}
return users;
}
function generateProducts(count = 200, rng) {
const products = [];
const categories = ['Electronics', 'Books', 'Clothing', 'Home & Garden', 'Sports'];
const conditions = ['New', 'Like New', 'Used', 'Refurbished'];
for (let i = 0; i < count; i++) {
const name = `Product ${rng.generateRandomString(8)}`;
const category = categories[i % categories.length];
const basePrice = rng.getRandomInt(10, 1000);
products.push({
_key: `product${i + 1}`,
name,
category,
description: `Description for ${name}`,
price: basePrice,
salePrice: rng.random() > 0.7 ? basePrice * 0.8 : null,
condition: conditions[i % conditions.length],
specifications: {
weight: rng.getRandomInt(1, 100),
dimensions: {
length: rng.getRandomInt(5, 50),
width: rng.getRandomInt(5, 50),
height: rng.getRandomInt(5, 50)
}
},
inStock: rng.getRandomInt(0, 100),
tags: [category.toLowerCase(), conditions[i % conditions.length].toLowerCase()],
lastUpdated: new Date(Date.now() - rng.getRandomInt(0, 30 * 24 * 60 * 60 * 1000)).toISOString()
});
}
return products;
}
// Get seed from command line argument or use default
const seed = parseInt(process.argv[2]) || 12345;
console.log(`Using seed: ${seed}`);
const rng = new SeededRandom(seed);
// Ensure data directory exists
const dataDir = path.join(__dirname, 'data');
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir);
}
// Generate and save user data
const users = generateUsers(100, rng);
fs.writeFileSync(
path.join(dataDir, 'users.json'),
JSON.stringify(users, null, 2)
);
console.log('Generated users.json with', users.length, 'users');
// Generate and save product data
const products = generateProducts(200, rng);
fs.writeFileSync(
path.join(dataDir, 'products.json'),
JSON.stringify(products, null, 2)
);
console.log('Generated products.json with', products.length, 'products');