@bayajidalam/apollo-cli 1.0.2 → 1.0.3

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.
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserSearchableFields = void 0;
4
+ exports.UserSearchableFields = [
5
+ // Add searchable fields here
6
+ ];
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserController = void 0;
4
+ exports.UserController = {
5
+ // Add controller methods here
6
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.UserRoutes = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ const router = express_1.default.Router();
9
+ exports.UserRoutes = router;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserService = void 0;
4
+ exports.UserService = {
5
+ // Add service methods here
6
+ };
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.userValidationSchema = void 0;
4
+ // import { z } from 'zod';
5
+ exports.userValidationSchema = {
6
+ // Add validation schemas here
7
+ };
package/dist/bin/index.js CHANGED
@@ -1,5 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
3
6
  Object.defineProperty(exports, "__esModule", { value: true });
4
7
  const commander_1 = require("commander");
5
8
  const generate_1 = require("../commands/generate");
@@ -7,8 +10,12 @@ const build_1 = require("../commands/build");
7
10
  const prisma_1 = require("../commands/prisma");
8
11
  const init_1 = require("../commands/init");
9
12
  const program = new commander_1.Command();
13
+ const fs_1 = __importDefault(require("fs"));
14
+ const path_1 = __importDefault(require("path"));
15
+ const packageJsonPath = path_1.default.join(__dirname, '../../package.json');
16
+ const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'));
10
17
  program
11
- .version('1.0.0')
18
+ .version(packageJson.version)
12
19
  .description('Apollo CLI Tool');
13
20
  program.addCommand(generate_1.generateCommand);
14
21
  program.addCommand(build_1.buildCommand);
@@ -10,6 +10,59 @@ const fs_extra_1 = __importDefault(require("fs-extra"));
10
10
  const path_1 = __importDefault(require("path"));
11
11
  const chalk_1 = __importDefault(require("chalk"));
12
12
  const child_process_1 = require("child_process");
13
+ // Helper function to get the latest version of a package from npm
14
+ async function getLatestVersion(packageName) {
15
+ try {
16
+ const version = (0, child_process_1.execSync)(`npm view ${packageName} version`, {
17
+ encoding: 'utf-8',
18
+ stdio: ['pipe', 'pipe', 'pipe']
19
+ }).trim();
20
+ return `^${version}`;
21
+ }
22
+ catch (error) {
23
+ console.warn(chalk_1.default.yellow(`⚠️ Could not fetch latest version for ${packageName}, using fallback`));
24
+ return 'latest';
25
+ }
26
+ }
27
+ // Fetch latest versions for all dependencies
28
+ async function getLatestDependencies() {
29
+ console.log(chalk_1.default.blue('📦 Fetching latest package versions...'));
30
+ const deps = ['express', 'cors', 'dotenv', 'http-status', '@prisma/client'];
31
+ const devDeps = ['typescript', 'ts-node-dev', '@types/node', '@types/express', '@types/cors', 'prisma', 'eslint', 'prettier'];
32
+ const [dependencies, devDependencies] = await Promise.all([
33
+ Promise.all(deps.map(async (dep) => [dep, await getLatestVersion(dep)])),
34
+ Promise.all(devDeps.map(async (dep) => [dep, await getLatestVersion(dep)]))
35
+ ]);
36
+ return {
37
+ dependencies: Object.fromEntries(dependencies),
38
+ devDependencies: Object.fromEntries(devDependencies)
39
+ };
40
+ }
41
+ // Detect available package managers
42
+ function detectPackageManagers() {
43
+ const all = ['npm', 'pnpm', 'yarn'];
44
+ const available = [];
45
+ all.forEach(pm => {
46
+ try {
47
+ (0, child_process_1.execSync)(`${pm} --version`, { stdio: 'ignore' });
48
+ available.push(pm);
49
+ }
50
+ catch {
51
+ // Package manager not available
52
+ }
53
+ });
54
+ return { available, all };
55
+ }
56
+ // Check if a package manager is installed
57
+ function isPackageManagerInstalled(pm) {
58
+ try {
59
+ (0, child_process_1.execSync)(`${pm} --version`, { stdio: 'ignore' });
60
+ return true;
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
13
66
  exports.initCommand = new commander_1.Command('init')
14
67
  .description('Initialize a new Apollo Gears project')
15
68
  .argument('[projectName]', 'Name of the project directory')
@@ -36,7 +89,9 @@ exports.initCommand = new commander_1.Command('init')
36
89
  try {
37
90
  // 2. Create Directory
38
91
  await fs_extra_1.default.ensureDir(projectRoot);
39
- // 3. Create Package.json
92
+ // 3. Fetch latest versions
93
+ const { dependencies, devDependencies } = await getLatestDependencies();
94
+ // 4. Create Package.json
40
95
  const packageJson = {
41
96
  name: projectName,
42
97
  version: "1.0.0",
@@ -53,26 +108,11 @@ exports.initCommand = new commander_1.Command('init')
53
108
  keywords: ["express", "prisma", "typescript", "apollo-gears"],
54
109
  author: "",
55
110
  license: "ISC",
56
- dependencies: {
57
- "express": "^4.18.2",
58
- "cors": "^2.8.5",
59
- "dotenv": "^16.3.1",
60
- "http-status": "^1.7.3",
61
- "@prisma/client": "^5.7.1"
62
- },
63
- devDependencies: {
64
- "typescript": "^5.3.3",
65
- "ts-node-dev": "^2.0.0",
66
- "@types/node": "^20.10.4",
67
- "@types/express": "^4.17.21",
68
- "@types/cors": "^2.8.17",
69
- "prisma": "^5.7.1",
70
- "eslint": "^8.55.0",
71
- "prettier": "^3.1.1"
72
- }
111
+ dependencies,
112
+ devDependencies
73
113
  };
74
114
  await fs_extra_1.default.writeJson(path_1.default.join(projectRoot, 'package.json'), packageJson, { spaces: 2 });
75
- // 4. Create tsconfig.json
115
+ // 5. Create tsconfig.json
76
116
  const tsconfig = {
77
117
  "compilerOptions": {
78
118
  "target": "ES2021",
@@ -89,19 +129,20 @@ exports.initCommand = new commander_1.Command('init')
89
129
  "exclude": ["node_modules"]
90
130
  };
91
131
  await fs_extra_1.default.writeJson(path_1.default.join(projectRoot, 'tsconfig.json'), tsconfig, { spaces: 2 });
92
- // 5. Create Scaffolding Folders
132
+ // 6. Create Scaffolding Folders
93
133
  const folders = [
94
134
  'src/app/modules',
95
135
  'src/app/middlewares',
96
136
  'src/app/routes',
97
137
  'src/app/utils',
98
138
  'src/app/errors',
99
- 'src/app/config'
139
+ 'src/app/config',
140
+ 'prisma'
100
141
  ];
101
142
  for (const folder of folders) {
102
143
  await fs_extra_1.default.ensureDir(path_1.default.join(projectRoot, folder));
103
144
  }
104
- // 6. Create Essential Files
145
+ // 7. Create Essential Files
105
146
  // src/server.ts
106
147
  const serverContent = `import app from './app';
107
148
  import config from './app/config';
@@ -152,14 +193,44 @@ export default {
152
193
  const envContent = `PORT=5000
153
194
  DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"`;
154
195
  await fs_extra_1.default.writeFile(path_1.default.join(projectRoot, '.env'), envContent);
196
+ // prisma/schema.prisma
197
+ const prismaSchemaContent = `generator client {
198
+ provider = "prisma-client-js"
199
+ }
200
+
201
+ datasource db {
202
+ provider = "postgresql"
203
+ url = env("DATABASE_URL")
204
+ }
205
+
206
+ model User {
207
+ id String @id @default(uuid())
208
+ email String @unique
209
+ name String?
210
+ createdAt DateTime @default(now())
211
+ updatedAt DateTime @updatedAt
212
+ }`;
213
+ await fs_extra_1.default.writeFile(path_1.default.join(projectRoot, 'prisma/schema.prisma'), prismaSchemaContent);
155
214
  // .gitignore
156
215
  const gitignoreContent = `node_modules
157
216
  dist
158
217
  .env`;
159
218
  await fs_extra_1.default.writeFile(path_1.default.join(projectRoot, '.gitignore'), gitignoreContent);
160
219
  console.log(chalk_1.default.green('\n✅ Project structure created successfully!'));
161
- // 7. Install Dependencies Prompt
162
- const { install } = await inquirer_1.default.prompt([
220
+ // 8. Package Manager & Install Dependencies Prompt
221
+ const { available, all } = detectPackageManagers();
222
+ const pmChoices = all.map(pm => ({
223
+ name: available.includes(pm) ? `${pm} ✓` : `${pm} (not installed)`,
224
+ value: pm
225
+ }));
226
+ const answers = await inquirer_1.default.prompt([
227
+ {
228
+ type: 'list',
229
+ name: 'packageManager',
230
+ message: 'Which package manager would you like to use?',
231
+ choices: pmChoices,
232
+ default: available[0] || 'npm'
233
+ },
163
234
  {
164
235
  type: 'confirm',
165
236
  name: 'install',
@@ -167,12 +238,34 @@ dist
167
238
  default: true
168
239
  }
169
240
  ]);
170
- if (install) {
171
- console.log(chalk_1.default.yellow('\n📦 Installing dependencies...'));
172
- (0, child_process_1.execSync)('npm install', { cwd: projectRoot, stdio: 'inherit' });
241
+ const packageManager = answers.packageManager;
242
+ const { install } = answers;
243
+ // Check if selected package manager is installed
244
+ if (install && !isPackageManagerInstalled(packageManager)) {
245
+ console.log(chalk_1.default.yellow(`\n⚠️ ${packageManager} is not installed on your system.`));
246
+ console.log(chalk_1.default.cyan(`Install it with: npm install -g ${packageManager}`));
247
+ console.log(chalk_1.default.cyan(`Falling back to npm...\n`));
248
+ const installCmd = 'npm install';
249
+ (0, child_process_1.execSync)(installCmd, { cwd: projectRoot, stdio: 'inherit' });
173
250
  console.log(chalk_1.default.green('\n✅ Dependencies installed!'));
251
+ const devCmd = 'npm run dev';
252
+ console.log(chalk_1.default.cyan(`\nTo get started:\n cd ${projectName}\n ${devCmd}\n`));
253
+ }
254
+ else if (install) {
255
+ console.log(chalk_1.default.yellow(`\n📦 Installing dependencies with ${packageManager}...`));
256
+ const installCmd = packageManager === 'yarn' ? 'yarn' : `${packageManager} install`;
257
+ (0, child_process_1.execSync)(installCmd, { cwd: projectRoot, stdio: 'inherit' });
258
+ console.log(chalk_1.default.green('\n✅ Dependencies installed!'));
259
+ const devCmd = packageManager === 'npm' ? 'npm run dev' :
260
+ packageManager === 'yarn' ? 'yarn dev' : 'pnpm dev';
261
+ console.log(chalk_1.default.cyan(`\nTo get started:\n cd ${projectName}\n ${devCmd}\n`));
262
+ }
263
+ else {
264
+ const devCmd = packageManager === 'npm' ? 'npm run dev' :
265
+ packageManager === 'yarn' ? 'yarn dev' : 'pnpm dev';
266
+ const installCmd = packageManager === 'yarn' ? 'yarn' : `${packageManager} install`;
267
+ console.log(chalk_1.default.cyan(`\nTo get started:\n cd ${projectName}\n ${installCmd} && ${devCmd}\n`));
174
268
  }
175
- console.log(chalk_1.default.cyan(`\nTo get started:\n cd ${projectName}\n ${install ? 'npm run dev' : 'npm install && npm run dev'}\n`));
176
269
  }
177
270
  catch (error) {
178
271
  console.error(chalk_1.default.red('❌ Initialization failed:'), error);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bayajidalam/apollo-cli",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "CLI tool for speed up backend projects",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -23,7 +23,7 @@
23
23
  ],
24
24
  "author": "Bayajid Alam Joyel",
25
25
  "repository": {
26
- "url": "https://github.com/BayajidAlam/apollo-cli"
26
+ "url": "git+https://github.com/BayajidAlam/apollo-cli.git"
27
27
  },
28
28
  "license": "ISC",
29
29
  "publishConfig": {