@idealyst/cli 1.0.33 → 1.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/templates/api/README.md +207 -0
  2. package/dist/templates/api/__tests__/api.test.ts +26 -0
  3. package/dist/templates/api/env.example +12 -0
  4. package/dist/templates/api/jest.config.js +23 -0
  5. package/dist/templates/api/jest.setup.js +9 -0
  6. package/dist/templates/api/package.json +62 -0
  7. package/dist/templates/api/prisma/schema.prisma +21 -0
  8. package/dist/templates/api/src/context.ts +23 -0
  9. package/dist/templates/api/src/controllers/UserController.ts +102 -0
  10. package/dist/templates/api/src/index.ts +14 -0
  11. package/dist/templates/api/src/lib/controller.ts +90 -0
  12. package/dist/templates/api/src/lib/middleware.ts +170 -0
  13. package/dist/templates/api/src/middleware/auth.ts +75 -0
  14. package/dist/templates/api/src/middleware/common.ts +103 -0
  15. package/dist/templates/api/src/router/index.ts +130 -0
  16. package/dist/templates/api/src/server.ts +50 -0
  17. package/dist/templates/api/src/trpc.ts +28 -0
  18. package/dist/templates/api/tsconfig.json +44 -0
  19. package/dist/templates/native/.yarnrc.yml +19 -0
  20. package/dist/templates/native/App.tsx +23 -0
  21. package/dist/templates/native/README.md +86 -0
  22. package/dist/templates/native/__tests__/App.test.tsx +156 -0
  23. package/dist/templates/native/__tests__/components.test.tsx +300 -0
  24. package/dist/templates/native/app.json +5 -0
  25. package/dist/templates/native/babel.config.js +10 -0
  26. package/dist/templates/native/index.js +6 -0
  27. package/dist/templates/native/jest.config.js +21 -0
  28. package/dist/templates/native/jest.setup.js +12 -0
  29. package/dist/templates/native/metro.config.js +27 -0
  30. package/dist/templates/native/package.json +44 -0
  31. package/dist/templates/native/src/App-with-trpc.tsx +59 -0
  32. package/dist/templates/native/src/utils/trpc.ts +127 -0
  33. package/dist/templates/native/tsconfig.json +30 -0
  34. package/dist/templates/shared/README.md +109 -0
  35. package/dist/templates/shared/__tests__/shared.test.ts +39 -0
  36. package/dist/templates/shared/jest.config.js +22 -0
  37. package/dist/templates/shared/package.json +50 -0
  38. package/dist/templates/shared/rollup.config.js +43 -0
  39. package/dist/templates/shared/src/index.ts +1 -0
  40. package/dist/templates/shared/tsconfig.json +25 -0
  41. package/dist/templates/web/README.md +90 -0
  42. package/dist/templates/web/__tests__/App.test.tsx +342 -0
  43. package/dist/templates/web/__tests__/components.test.tsx +564 -0
  44. package/dist/templates/web/index.html +13 -0
  45. package/dist/templates/web/jest.config.js +27 -0
  46. package/dist/templates/web/jest.setup.js +24 -0
  47. package/dist/templates/web/package.json +66 -0
  48. package/dist/templates/web/src/App-with-trpc.tsx +67 -0
  49. package/dist/templates/web/src/App.tsx +15 -0
  50. package/dist/templates/web/src/main.tsx +25 -0
  51. package/dist/templates/web/src/utils/trpc.ts +93 -0
  52. package/dist/templates/web/tsconfig.json +27 -0
  53. package/dist/templates/web/vite.config.ts +69 -0
  54. package/dist/templates/workspace/.devcontainer/devcontainer.json +140 -0
  55. package/dist/templates/workspace/.devcontainer/docker-compose.yml +74 -0
  56. package/dist/templates/workspace/.devcontainer/post-create.sh +89 -0
  57. package/dist/templates/workspace/.dockerignore +151 -0
  58. package/dist/templates/workspace/.env.example +36 -0
  59. package/dist/templates/workspace/.env.production +56 -0
  60. package/dist/templates/workspace/.yarnrc.yml +26 -0
  61. package/dist/templates/workspace/DOCKER.md +0 -0
  62. package/dist/templates/workspace/Dockerfile +93 -0
  63. package/dist/templates/workspace/README.md +179 -0
  64. package/dist/templates/workspace/docker/nginx/prod.conf +238 -0
  65. package/dist/templates/workspace/docker/nginx.conf +131 -0
  66. package/dist/templates/workspace/docker/postgres/init.sql +41 -0
  67. package/dist/templates/workspace/docker/prometheus/prometheus.yml +52 -0
  68. package/dist/templates/workspace/docker-compose.prod.yml +146 -0
  69. package/dist/templates/workspace/docker-compose.yml +144 -0
  70. package/dist/templates/workspace/jest.config.js +20 -0
  71. package/dist/templates/workspace/package.json +35 -0
  72. package/dist/templates/workspace/scripts/docker/db-backup.sh +230 -0
  73. package/dist/templates/workspace/scripts/docker/deploy.sh +212 -0
  74. package/dist/templates/workspace/scripts/docker-build.sh +151 -0
  75. package/dist/templates/workspace/scripts/test-runner.js +120 -0
  76. package/dist/templates/workspace/setup.sh +205 -0
  77. package/package.json +3 -2
@@ -0,0 +1,151 @@
1
+ #!/bin/bash
2
+
3
+ # Docker build helper script for Idealyst workspace
4
+ # Handles common issues like missing yarn.lock files
5
+
6
+ set -e
7
+
8
+ # Colors for output
9
+ RED='\033[0;31m'
10
+ GREEN='\033[0;32m'
11
+ YELLOW='\033[1;33m'
12
+ BLUE='\033[0;34m'
13
+ NC='\033[0m' # No Color
14
+
15
+ echo -e "${BLUE}🐳 Idealyst Docker Build Helper${NC}"
16
+ echo ""
17
+
18
+ # Check if yarn.lock exists
19
+ if [ ! -f "yarn.lock" ]; then
20
+ echo -e "${YELLOW}⚠️ yarn.lock not found${NC}"
21
+ echo "This can cause Docker build failures with 'immutable' installs."
22
+ echo ""
23
+ read -p "Would you like to generate yarn.lock now? (y/N): " -n 1 -r
24
+ echo ""
25
+
26
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
27
+ echo -e "${BLUE}📦 Installing dependencies to generate yarn.lock...${NC}"
28
+ yarn install
29
+ echo -e "${GREEN}✅ yarn.lock generated${NC}"
30
+ else
31
+ echo -e "${YELLOW}⚠️ Continuing without yarn.lock (may cause build issues)${NC}"
32
+ fi
33
+ echo ""
34
+ fi
35
+
36
+ # Check if .env exists
37
+ if [ ! -f ".env" ]; then
38
+ echo -e "${YELLOW}⚠️ .env file not found${NC}"
39
+ if [ -f ".env.example" ]; then
40
+ read -p "Would you like to copy .env.example to .env? (y/N): " -n 1 -r
41
+ echo ""
42
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
43
+ cp .env.example .env
44
+ echo -e "${GREEN}✅ .env file created from .env.example${NC}"
45
+ echo -e "${YELLOW}📝 Please review and update .env with your settings${NC}"
46
+ fi
47
+ else
48
+ echo -e "${YELLOW}📝 Please create a .env file with your configuration${NC}"
49
+ fi
50
+ echo ""
51
+ fi
52
+
53
+ # Determine what to build
54
+ if [ $# -eq 0 ]; then
55
+ echo "What would you like to do?"
56
+ echo "1) Build and start development environment"
57
+ echo "2) Build and start production services"
58
+ echo "3) Build specific service"
59
+ echo "4) Just build (no start)"
60
+ echo ""
61
+ read -p "Choice (1-4): " -n 1 -r
62
+ echo ""
63
+
64
+ case $REPLY in
65
+ 1)
66
+ echo -e "${BLUE}🚀 Building and starting development environment...${NC}"
67
+ docker-compose build dev
68
+ docker-compose up -d postgres redis
69
+ docker-compose up dev
70
+ ;;
71
+ 2)
72
+ echo -e "${BLUE}🚀 Building and starting production services...${NC}"
73
+ docker-compose build
74
+ docker-compose up -d
75
+ ;;
76
+ 3)
77
+ echo "Available services: api, web, dev, postgres, redis"
78
+ read -p "Service name: " service
79
+ echo -e "${BLUE}🚀 Building ${service}...${NC}"
80
+ docker-compose build $service
81
+ ;;
82
+ 4)
83
+ echo -e "${BLUE}🏗️ Building all services...${NC}"
84
+ docker-compose build
85
+ ;;
86
+ *)
87
+ echo -e "${RED}❌ Invalid choice${NC}"
88
+ exit 1
89
+ ;;
90
+ esac
91
+ else
92
+ # Handle command line arguments
93
+ case "$1" in
94
+ "dev")
95
+ echo -e "${BLUE}🚀 Building and starting development environment...${NC}"
96
+ docker-compose build dev
97
+ docker-compose up -d postgres redis
98
+ docker-compose up dev
99
+ ;;
100
+ "prod"|"production")
101
+ echo -e "${BLUE}🚀 Building and starting production services...${NC}"
102
+ docker-compose build
103
+ docker-compose up -d
104
+ ;;
105
+ "build")
106
+ if [ -n "$2" ]; then
107
+ echo -e "${BLUE}🏗️ Building ${2}...${NC}"
108
+ docker-compose build $2
109
+ else
110
+ echo -e "${BLUE}🏗️ Building all services...${NC}"
111
+ docker-compose build
112
+ fi
113
+ ;;
114
+ "help"|"-h"|"--help")
115
+ echo "Usage: $0 [command] [service]"
116
+ echo ""
117
+ echo "Commands:"
118
+ echo " dev Build and start development environment"
119
+ echo " prod Build and start production services"
120
+ echo " build [svc] Build all services or specific service"
121
+ echo " help Show this help"
122
+ echo ""
123
+ echo "Services: api, web, dev, postgres, redis"
124
+ ;;
125
+ *)
126
+ echo -e "${RED}❌ Unknown command: $1${NC}"
127
+ echo "Use '$0 help' for usage information"
128
+ exit 1
129
+ ;;
130
+ esac
131
+ fi
132
+
133
+ echo ""
134
+ echo -e "${GREEN}🎉 Done!${NC}"
135
+
136
+ # Show helpful information
137
+ if docker-compose ps | grep -q "Up"; then
138
+ echo ""
139
+ echo -e "${BLUE}📋 Running services:${NC}"
140
+ docker-compose ps
141
+ echo ""
142
+ echo -e "${BLUE}🔗 Access your application:${NC}"
143
+ echo "• Web: http://localhost:3000"
144
+ echo "• API: http://localhost:3001"
145
+ echo "• Vite Dev: http://localhost:5173"
146
+ echo ""
147
+ echo -e "${BLUE}💡 Useful commands:${NC}"
148
+ echo "• View logs: docker-compose logs -f"
149
+ echo "• Stop services: docker-compose down"
150
+ echo "• Access dev container: docker-compose exec dev bash"
151
+ fi
@@ -0,0 +1,120 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Test runner script for Idealyst workspace
5
+ * Provides flexible test execution across all packages
6
+ */
7
+
8
+ const { execSync } = require('child_process');
9
+ const path = require('path');
10
+ const fs = require('fs');
11
+
12
+ const args = process.argv.slice(2);
13
+ const command = args[0] || 'test';
14
+
15
+ // Available commands
16
+ const commands = {
17
+ 'test': 'Run tests in all packages',
18
+ 'test:watch': 'Run tests in watch mode',
19
+ 'test:coverage': 'Run tests with coverage',
20
+ 'test:ci': 'Run tests in CI mode',
21
+ 'test:package': 'Run tests for a specific package (usage: test:package <package-name>)',
22
+ };
23
+
24
+ function showHelp() {
25
+ console.log('Idealyst Test Runner\n');
26
+ console.log('Available commands:');
27
+ Object.entries(commands).forEach(([cmd, desc]) => {
28
+ console.log(` ${cmd.padEnd(20)} ${desc}`);
29
+ });
30
+ console.log('\nExamples:');
31
+ console.log(' npm run test');
32
+ console.log(' npm run test:watch');
33
+ console.log(' npm run test:coverage');
34
+ console.log(' node scripts/test-runner.js test:package api');
35
+ }
36
+
37
+ function getPackages() {
38
+ const packagesDir = path.join(process.cwd(), 'packages');
39
+ if (!fs.existsSync(packagesDir)) {
40
+ return [];
41
+ }
42
+
43
+ return fs.readdirSync(packagesDir)
44
+ .filter(dir => {
45
+ const packageJsonPath = path.join(packagesDir, dir, 'package.json');
46
+ return fs.existsSync(packageJsonPath);
47
+ });
48
+ }
49
+
50
+ function runCommand(cmd, options = {}) {
51
+ try {
52
+ console.log(`Running: ${cmd}`);
53
+ execSync(cmd, {
54
+ stdio: 'inherit',
55
+ cwd: process.cwd(),
56
+ ...options
57
+ });
58
+ } catch (error) {
59
+ console.error(`Command failed: ${cmd}`);
60
+ process.exit(1);
61
+ }
62
+ }
63
+
64
+ function runTestsForPackage(packageName) {
65
+ const packages = getPackages();
66
+
67
+ if (!packages.includes(packageName)) {
68
+ console.error(`Package "${packageName}" not found.`);
69
+ console.log('Available packages:', packages.join(', '));
70
+ process.exit(1);
71
+ }
72
+
73
+ const packagePath = path.join('packages', packageName);
74
+ console.log(`Running tests for package: ${packageName}`);
75
+ runCommand(`yarn workspace @/* run test`, { cwd: packagePath });
76
+ }
77
+
78
+ // Main execution
79
+ switch (command) {
80
+ case 'help':
81
+ case '--help':
82
+ case '-h':
83
+ showHelp();
84
+ break;
85
+
86
+ case 'test':
87
+ console.log('Running tests in all packages...');
88
+ runCommand('yarn workspaces foreach --include "@/*" run test --passWithNoTests');
89
+ break;
90
+
91
+ case 'test:watch':
92
+ console.log('Running tests in watch mode...');
93
+ runCommand('yarn workspaces foreach --include "@/*" run test:watch');
94
+ break;
95
+
96
+ case 'test:coverage':
97
+ console.log('Running tests with coverage...');
98
+ runCommand('yarn workspaces foreach --include "@/*" run test:coverage');
99
+ break;
100
+
101
+ case 'test:ci':
102
+ console.log('Running tests in CI mode...');
103
+ runCommand('yarn workspaces foreach --include "@/*" --parallel run test --passWithNoTests --watchAll=false');
104
+ break;
105
+
106
+ case 'test:package':
107
+ const packageName = args[1];
108
+ if (!packageName) {
109
+ console.error('Package name is required for test:package command');
110
+ console.log('Usage: node scripts/test-runner.js test:package <package-name>');
111
+ process.exit(1);
112
+ }
113
+ runTestsForPackage(packageName);
114
+ break;
115
+
116
+ default:
117
+ console.error(`Unknown command: ${command}`);
118
+ console.log('Run with "help" to see available commands');
119
+ process.exit(1);
120
+ }
@@ -0,0 +1,205 @@
1
+ #!/bin/bash
2
+
3
+ # Quick setup script for Idealyst workspace
4
+ # Usage: ./setup.sh [development|production]
5
+
6
+ set -e
7
+
8
+ ENVIRONMENT=${1:-development}
9
+ PROJECT_NAME="{{packageName}}"
10
+
11
+ echo "🚀 Setting up Idealyst workspace..."
12
+ echo "Environment: $ENVIRONMENT"
13
+ echo "Project: $PROJECT_NAME"
14
+ echo ""
15
+
16
+ # Function to generate random password
17
+ generate_password() {
18
+ openssl rand -base64 32 | tr -d "=+/" | cut -c1-25
19
+ }
20
+
21
+ # Function to generate JWT secret
22
+ generate_jwt_secret() {
23
+ openssl rand -base64 64 | tr -d "=+/" | cut -c1-50
24
+ }
25
+
26
+ # Function to setup development environment
27
+ setup_development() {
28
+ echo "🔧 Setting up development environment..."
29
+
30
+ if [ ! -f ".env" ]; then
31
+ echo "📝 Creating .env from template..."
32
+ cp .env.example .env
33
+ echo "✅ Created .env file"
34
+ else
35
+ echo "⚠️ .env file already exists, skipping..."
36
+ fi
37
+
38
+ echo ""
39
+ echo "🐳 Starting development containers..."
40
+ if command -v docker-compose &> /dev/null; then
41
+ docker-compose up -d postgres redis
42
+ echo "✅ Database and Redis started"
43
+
44
+ echo "⏳ Waiting for services to be ready..."
45
+ sleep 10
46
+
47
+ echo "🚀 Starting development environment..."
48
+ echo "💡 You can now:"
49
+ echo " - Run 'docker-compose up -d dev' for full dev container"
50
+ echo " - Run 'yarn dev' for local development"
51
+ echo " - Open in VS Code and select 'Reopen in Container'"
52
+ else
53
+ echo "❌ Docker Compose not found. Please install Docker and Docker Compose."
54
+ exit 1
55
+ fi
56
+ }
57
+
58
+ # Function to setup production environment
59
+ setup_production() {
60
+ echo "🏭 Setting up production environment..."
61
+
62
+ if [ ! -f ".env" ]; then
63
+ echo "📝 Creating .env from production template..."
64
+ cp .env.production .env
65
+
66
+ # Generate secure passwords and secrets
67
+ echo "🔐 Generating secure credentials..."
68
+
69
+ DB_PASSWORD=$(generate_password)
70
+ JWT_SECRET=$(generate_jwt_secret)
71
+ SESSION_SECRET=$(generate_jwt_secret)
72
+ ENCRYPTION_KEY=$(openssl rand -base64 32 | cut -c1-32)
73
+ GRAFANA_PASSWORD=$(generate_password)
74
+
75
+ # Replace placeholders in .env file
76
+ sed -i "s/CHANGE_THIS_STRONG_PASSWORD/$DB_PASSWORD/g" .env
77
+ sed -i "s/CHANGE_THIS_VERY_STRONG_JWT_SECRET_MINIMUM_32_CHARACTERS/$JWT_SECRET/g" .env
78
+ sed -i "s/CHANGE_THIS_VERY_STRONG_SESSION_SECRET/$SESSION_SECRET/g" .env
79
+ sed -i "s/CHANGE_THIS_32_CHARACTER_ENCRYPTION_KEY/$ENCRYPTION_KEY/g" .env
80
+ sed -i "s/CHANGE_THIS_STRONG_PASSWORD/$GRAFANA_PASSWORD/g" .env
81
+
82
+ echo "✅ Created .env with secure credentials"
83
+ echo ""
84
+ echo "🔐 Generated Credentials (save these securely!):"
85
+ echo " Database Password: $DB_PASSWORD"
86
+ echo " JWT Secret: $JWT_SECRET"
87
+ echo " Grafana Password: $GRAFANA_PASSWORD"
88
+ echo ""
89
+ echo "⚠️ IMPORTANT: Edit .env to configure your domain and other settings!"
90
+
91
+ else
92
+ echo "⚠️ .env file already exists. Please verify production settings."
93
+ fi
94
+
95
+ echo ""
96
+ echo "📋 Production Checklist:"
97
+ echo " [ ] Edit .env with your domain name"
98
+ echo " [ ] Configure SSL certificates"
99
+ echo " [ ] Set up DNS records"
100
+ echo " [ ] Configure firewall rules"
101
+ echo " [ ] Set up monitoring (optional)"
102
+ echo ""
103
+ echo "🚀 Deploy with: ./scripts/docker/deploy.sh production"
104
+ }
105
+
106
+ # Function to check prerequisites
107
+ check_prerequisites() {
108
+ echo "🔍 Checking prerequisites..."
109
+
110
+ # Check Docker
111
+ if ! command -v docker &> /dev/null; then
112
+ echo "❌ Docker not found. Please install Docker."
113
+ exit 1
114
+ fi
115
+
116
+ # Check Docker Compose
117
+ if ! command -v docker-compose &> /dev/null; then
118
+ echo "❌ Docker Compose not found. Please install Docker Compose."
119
+ exit 1
120
+ fi
121
+
122
+ # Check if Docker is running
123
+ if ! docker info &> /dev/null; then
124
+ echo "❌ Docker is not running. Please start Docker."
125
+ exit 1
126
+ fi
127
+
128
+ echo "✅ Prerequisites check passed"
129
+ echo ""
130
+ }
131
+
132
+ # Function to show post-setup instructions
133
+ show_instructions() {
134
+ echo ""
135
+ echo "🎉 Setup complete!"
136
+ echo ""
137
+ echo "Next steps:"
138
+
139
+ if [ "$ENVIRONMENT" = "development" ]; then
140
+ echo " 1. Install dependencies: yarn install"
141
+ echo " 2. Start development:"
142
+ echo " - Full container: docker-compose up -d dev"
143
+ echo " - VS Code: Open in Container"
144
+ echo " - Local: yarn dev"
145
+ echo " 3. Access your app:"
146
+ echo " - Web: http://localhost:3000"
147
+ echo " - API: http://localhost:3001"
148
+ echo " - Database: postgresql://postgres:postgres@localhost:5432/idealyst_db"
149
+ else
150
+ echo " 1. Edit .env with your production settings"
151
+ echo " 2. Configure SSL certificates"
152
+ echo " 3. Deploy: ./scripts/docker/deploy.sh production"
153
+ echo " 4. Set up monitoring (optional)"
154
+ fi
155
+
156
+ echo ""
157
+ echo "📚 Documentation:"
158
+ echo " - DOCKER.md - Complete Docker guide"
159
+ echo " - TESTING.md - Testing documentation"
160
+ echo " - README.md - General workspace info"
161
+ echo ""
162
+ echo "🆘 Need help? Check the documentation or run:"
163
+ echo " ./scripts/docker/deploy.sh --help"
164
+ }
165
+
166
+ # Main setup process
167
+ main() {
168
+ check_prerequisites
169
+
170
+ case $ENVIRONMENT in
171
+ "development"|"dev")
172
+ setup_development
173
+ ;;
174
+ "production"|"prod")
175
+ setup_production
176
+ ;;
177
+ *)
178
+ echo "❌ Invalid environment. Use 'development' or 'production'"
179
+ echo "Usage: $0 [development|production]"
180
+ exit 1
181
+ ;;
182
+ esac
183
+
184
+ show_instructions
185
+ }
186
+
187
+ # Handle help
188
+ if [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]] || [[ "$1" == "help" ]]; then
189
+ echo "Idealyst Workspace Setup Script"
190
+ echo ""
191
+ echo "Usage: $0 [environment]"
192
+ echo ""
193
+ echo "Environments:"
194
+ echo " development (default) - Set up for local development"
195
+ echo " production - Set up for production deployment"
196
+ echo ""
197
+ echo "Examples:"
198
+ echo " $0 # Development setup"
199
+ echo " $0 development # Development setup"
200
+ echo " $0 production # Production setup"
201
+ echo ""
202
+ exit 0
203
+ fi
204
+
205
+ main
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idealyst/cli",
3
- "version": "1.0.33",
3
+ "version": "1.0.34",
4
4
  "description": "CLI tool for generating Idealyst Framework projects",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -18,7 +18,8 @@
18
18
  "access": "public"
19
19
  },
20
20
  "scripts": {
21
- "build": "tsc",
21
+ "build": "tsc && npm run copy-templates",
22
+ "copy-templates": "cp -r templates dist/",
22
23
  "test": "jest",
23
24
  "test:integration": "jest __tests__/integration.test.ts",
24
25
  "dev": "tsc --watch",