aboutsummaryrefslogtreecommitdiff
path: root/scripts/seed-data.ts
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-01-24 13:09:50 +0000
committerFuwn <[email protected]>2026-01-24 13:09:50 +0000
commit396acf3bbbe00a192cb0ea0a9ccf91b1d8d2850b (patch)
treeb9df4ca6a70db45cfffbae6fdd7252e20fb8e93c /scripts/seed-data.ts
downloadumami-396acf3bbbe00a192cb0ea0a9ccf91b1d8d2850b.tar.xz
umami-396acf3bbbe00a192cb0ea0a9ccf91b1d8d2850b.zip
Initial commitHEADmain
Created from https://vercel.com/new
Diffstat (limited to 'scripts/seed-data.ts')
-rw-r--r--scripts/seed-data.ts121
1 files changed, 121 insertions, 0 deletions
diff --git a/scripts/seed-data.ts b/scripts/seed-data.ts
new file mode 100644
index 0000000..82a0564
--- /dev/null
+++ b/scripts/seed-data.ts
@@ -0,0 +1,121 @@
+#!/usr/bin/env node
+/* eslint-disable no-console */
+
+/**
+ * Umami Sample Data Generator
+ *
+ * Generates realistic analytics data for local development and testing.
+ * Creates two demo websites:
+ * - Demo Blog: Low traffic (~100 sessions/month)
+ * - Demo SaaS: Average traffic (~500 sessions/day)
+ *
+ * Usage:
+ * npm run seed-data # Generate 30 days of data
+ * npm run seed-data -- --days 90 # Generate 90 days of data
+ * npm run seed-data -- --clear # Clear existing demo data first
+ * npm run seed-data -- --verbose # Show detailed progress
+ */
+
+import { seed, type SeedConfig } from './seed/index.js';
+
+function parseArgs(): SeedConfig {
+ const args = process.argv.slice(2);
+
+ const config: SeedConfig = {
+ days: 30,
+ clear: false,
+ verbose: false,
+ };
+
+ for (let i = 0; i < args.length; i++) {
+ const arg = args[i];
+
+ if (arg === '--days' && args[i + 1]) {
+ config.days = parseInt(args[i + 1], 10);
+ if (isNaN(config.days) || config.days < 1) {
+ console.error('Error: --days must be a positive integer');
+ process.exit(1);
+ }
+ i++;
+ } else if (arg === '--clear') {
+ config.clear = true;
+ } else if (arg === '--verbose' || arg === '-v') {
+ config.verbose = true;
+ } else if (arg === '--help' || arg === '-h') {
+ printHelp();
+ process.exit(0);
+ } else if (arg.startsWith('--days=')) {
+ config.days = parseInt(arg.split('=')[1], 10);
+ if (isNaN(config.days) || config.days < 1) {
+ console.error('Error: --days must be a positive integer');
+ process.exit(1);
+ }
+ }
+ }
+
+ return config;
+}
+
+function printHelp(): void {
+ console.log(`
+Umami Sample Data Generator
+
+Generates realistic analytics data for local development and testing.
+
+Usage:
+ npm run seed-data [options]
+
+Options:
+ --days <number> Number of days of data to generate (default: 30)
+ --clear Clear existing demo data before generating
+ --verbose, -v Show detailed progress
+ --help, -h Show this help message
+
+Examples:
+ npm run seed-data # Generate 30 days of data
+ npm run seed-data -- --days 90 # Generate 90 days of data
+ npm run seed-data -- --clear # Clear existing demo data first
+ npm run seed-data -- --days 7 -v # Generate 7 days with verbose output
+
+Generated Sites:
+ - Demo Blog: Low traffic (~90 sessions/month)
+ - Demo SaaS: Average traffic (~500 sessions/day) with revenue tracking
+
+Note:
+ This script is blocked from running in production environments
+ (NODE_ENV=production or cloud platforms like Vercel/Netlify/Railway).
+`);
+}
+
+function checkEnvironment(): void {
+ const nodeEnv = process.env.NODE_ENV;
+
+ if (nodeEnv === 'production') {
+ console.error('\nError: seed-data cannot run in production environment.');
+ console.error('This script is only for local development and testing.\n');
+ process.exit(1);
+ }
+
+ if (process.env.VERCEL || process.env.NETLIFY || process.env.RAILWAY_ENVIRONMENT) {
+ console.error('\nError: seed-data cannot run in cloud environments.');
+ console.error('This script is only for local development and testing.\n');
+ process.exit(1);
+ }
+}
+
+async function main(): Promise<void> {
+ console.log('\nUmami Sample Data Generator\n');
+
+ checkEnvironment();
+
+ const config = parseArgs();
+
+ try {
+ await seed(config);
+ } catch (error) {
+ console.error('\nError generating seed data:', error);
+ process.exit(1);
+ }
+}
+
+main();