zerostart-cli 0.0.1

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.
package/README.md ADDED
@@ -0,0 +1,57 @@
1
+
2
+ # Project Starter AI - VS Code Extension
3
+
4
+ Create and deploy a complete project with one command.
5
+
6
+ ## Features
7
+
8
+ - **Start Project AI**: Command to define and scaffold a project.
9
+ - Supports **Node.js, React, Python, Java, C++**.
10
+ - Supports project types: **Web App, CLI Tool, DSA Practice, ML Project**.
11
+ - Automates:
12
+ - Folder structure creation.
13
+ - Initial Git setup (init, commit).
14
+ - GitHub Repository creation (public/private).
15
+ - Pushing initial code to GitHub.
16
+
17
+ ## Development Setup
18
+
19
+ 1. **Install Dependencies**:
20
+ ```bash
21
+ npm install
22
+ ```
23
+ *Note: This project relies on `vscode` types and `@octokit/rest`.*
24
+
25
+ 2. **Open in VS Code**:
26
+ ```bash
27
+ code .
28
+ ```
29
+
30
+ 3. **Run Extension**:
31
+ - Press `F5` to open a new Extension Development Host window.
32
+ - Run command `Start Project AI` from Command Palette (`Ctrl+Shift+P` or `Cmd+Shift+P`).
33
+
34
+ 4. **Package Extension**:
35
+ ```bash
36
+ npx vsce package
37
+ ```
38
+
39
+ ## Technical Details
40
+
41
+ - **Entry Point**: `src/extension.ts`
42
+ - **Logic**:
43
+ - `src/managers/ProjectManager.ts`: Orchestrates the flow.
44
+ - `src/managers/TemplateManager.ts`: Generates files.
45
+ - `src/managers/GitManager.ts`: Handles local git commands via `child_process`.
46
+ - `src/services/GitHubService.ts`: Interact with GitHub API using `Octokit` and `vscode.authentication`.
47
+
48
+ ## Dependencies
49
+
50
+ - `vscode`: VS Code Extension API.
51
+ - `@octokit/rest`: GitHub API client.
52
+ - `typescript`: Language support.
53
+
54
+ ## Known Issues
55
+
56
+ - Requires `git` to be installed and in PATH.
57
+ - Requires GitHub authentication (handled via VS Code).
package/out/cli.js ADDED
@@ -0,0 +1,176 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ const commander_1 = require("commander");
41
+ const inquirer_1 = __importDefault(require("inquirer"));
42
+ const path = __importStar(require("path"));
43
+ const fs = __importStar(require("fs"));
44
+ const ora_1 = __importDefault(require("ora"));
45
+ const chalk_1 = __importDefault(require("chalk"));
46
+ const types_1 = require("./types");
47
+ const TemplateManager_1 = require("./managers/TemplateManager");
48
+ const GitManager_1 = require("./managers/GitManager");
49
+ const GitHubServiceCLI_1 = require("./services/GitHubServiceCLI");
50
+ const program = new commander_1.Command();
51
+ program
52
+ .name('ZeroStart')
53
+ .description('Create and deploy a complete project with one command')
54
+ .version('0.0.1')
55
+ .argument('[projectName]', 'Name of the project')
56
+ .action(async (projectName) => {
57
+ try {
58
+ console.log(chalk_1.default.bold.cyan('ZeroStart: Project Starter AI\n'));
59
+ // 1. Get Project Name
60
+ if (!projectName) {
61
+ const answers = await inquirer_1.default.prompt([
62
+ {
63
+ type: 'input',
64
+ name: 'name',
65
+ message: 'Enter Project Name:',
66
+ validate: (input) => input.trim() !== '' ? true : 'Project name is required'
67
+ }
68
+ ]);
69
+ projectName = answers.name;
70
+ }
71
+ // 2. Get Details
72
+ const answers = await inquirer_1.default.prompt([
73
+ {
74
+ type: 'list',
75
+ name: 'language',
76
+ message: 'Select Programming Language:',
77
+ choices: Object.values(types_1.ProjectLanguage)
78
+ },
79
+ {
80
+ type: 'list',
81
+ name: 'type',
82
+ message: 'Select Project Type:',
83
+ choices: Object.values(types_1.ProjectType)
84
+ },
85
+ {
86
+ type: 'list',
87
+ name: 'visibility',
88
+ message: 'Select Repository Visibility:',
89
+ choices: ['Public', 'Private'],
90
+ default: 'Private'
91
+ },
92
+ {
93
+ type: 'confirm',
94
+ name: 'createRemote',
95
+ message: 'Create GitHub Repository?',
96
+ default: true
97
+ },
98
+ {
99
+ type: 'password',
100
+ name: 'githubToken',
101
+ message: 'Enter GitHub Personal Access Token (leave empty to skip remote):',
102
+ when: (answers) => answers.createRemote,
103
+ mask: '*'
104
+ }
105
+ ]);
106
+ const cwd = process.cwd();
107
+ const projectPath = path.join(cwd, projectName);
108
+ if (fs.existsSync(projectPath)) {
109
+ console.error(chalk_1.default.red(`Error: Directory ${projectName} already exists!`));
110
+ process.exit(1);
111
+ }
112
+ const config = {
113
+ name: projectName,
114
+ language: answers.language,
115
+ type: answers.type,
116
+ isTheRepoPublic: answers.visibility === 'Public',
117
+ description: `A ${answers.type} project in ${answers.language}`,
118
+ path: projectPath
119
+ };
120
+ const spinner = (0, ora_1.default)('Initializing...').start();
121
+ try {
122
+ // Managers
123
+ const templateManager = new TemplateManager_1.TemplateManager();
124
+ const gitManager = new GitManager_1.GitManager();
125
+ const gitHubService = answers.githubToken ? new GitHubServiceCLI_1.GitHubServiceCLI(answers.githubToken) : null;
126
+ // 0. Check Git
127
+ if (!await gitManager.checkGitInstalled()) {
128
+ spinner.fail('Git is not installed!');
129
+ return;
130
+ }
131
+ // 1. Structure
132
+ spinner.text = 'Generating project structure...';
133
+ await templateManager.createProjectStructure(config);
134
+ // 2. Git Init
135
+ spinner.text = 'Initializing Git...';
136
+ await gitManager.init(config.path);
137
+ await gitManager.commit(config.path, "Initial commit configured by ZeroStart");
138
+ // 3. GitHub
139
+ if (gitHubService && answers.createRemote) {
140
+ spinner.text = 'Creating GitHub Repository...';
141
+ const repoUrl = await gitHubService.createRepo(config);
142
+ if (repoUrl) {
143
+ spinner.text = 'Pushing to GitHub...';
144
+ await gitManager.addRemote(config.path, repoUrl);
145
+ await gitManager.push(config.path);
146
+ // Cleanup token if used in URL
147
+ if (repoUrl.includes('@github.com')) {
148
+ // Extract the clean URL for local config if possible, but keeping the token in remote is sometimes necessary for future pushes without auth helper.
149
+ // However, better practice is to not save token in .git/config on disk if possible.
150
+ // But for now, we leave it or strip it. Stripping it breaks push if no credential manager.
151
+ // We'll leave it but warn? Or just strip for "origin".
152
+ // ProjectManager.ts stripped it. I'll strip it too.
153
+ const cleanUrl = repoUrl.replace(/\/\/[^@]+@/, '//'); // simple replace //token@ -> //
154
+ await gitManager.setRemoteUrl(config.path, cleanUrl);
155
+ }
156
+ }
157
+ else {
158
+ spinner.warn('GitHub repository creation failed (check logs).');
159
+ }
160
+ }
161
+ spinner.succeed(chalk_1.default.green(`Project '${config.name}' created successfully!`));
162
+ console.log(chalk_1.default.cyan(`\nPath: ${config.path}`));
163
+ console.log(chalk_1.default.gray('To get started:'));
164
+ console.log(` cd ${projectName}`);
165
+ console.log(` code .`);
166
+ }
167
+ catch (error) {
168
+ spinner.fail(`Error: ${error.message}`);
169
+ }
170
+ }
171
+ catch (error) {
172
+ console.error(error);
173
+ }
174
+ });
175
+ program.parse(process.argv);
176
+ //# sourceMappingURL=cli.js.map
package/out/cli.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.activate = activate;
37
+ exports.deactivate = deactivate;
38
+ const vscode = __importStar(require("vscode"));
39
+ const ProjectManager_1 = require("./managers/ProjectManager");
40
+ function activate(context) {
41
+ console.log('Congratulations, your extension "ZeroStart" is now active!');
42
+ // Set default auto-select family attempt timeout to 1000ms if available
43
+ // This helps with connection issues in dual-stack (IPv4/IPv6) environments
44
+ try {
45
+ const net = require('net');
46
+ if (typeof net.setDefaultAutoSelectFamilyAttemptTimeout === 'function') {
47
+ net.setDefaultAutoSelectFamilyAttemptTimeout(1000);
48
+ console.log('Set default auto-select family attempt timeout to 1000ms');
49
+ }
50
+ }
51
+ catch (error) {
52
+ console.warn('Failed to set auto-select family attempt timeout:', error);
53
+ }
54
+ let disposable = vscode.commands.registerCommand('zerostart.create', async (projectName) => {
55
+ const projectManager = new ProjectManager_1.ProjectManager();
56
+ await projectManager.start(projectName);
57
+ });
58
+ context.subscriptions.push(disposable);
59
+ }
60
+ function deactivate() { }
61
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,4BAqBC;AAED,gCAAgC;AA1BhC,+CAAiC;AACjC,8DAA2D;AAE3D,SAAgB,QAAQ,CAAC,OAAgC;IACrD,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAE1E,wEAAwE;IACxE,2EAA2E;IAC3E,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,OAAO,GAAG,CAAC,wCAAwC,KAAK,UAAU,EAAE,CAAC;YACrE,GAAG,CAAC,wCAAwC,CAAC,IAAI,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QAC5E,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,kBAAkB,EAAE,KAAK,EAAE,WAAoB,EAAE,EAAE;QAChG,MAAM,cAAc,GAAG,IAAI,+BAAc,EAAE,CAAC;QAC5C,MAAM,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,UAAU,KAAK,CAAC"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.GitManager = void 0;
37
+ const cp = __importStar(require("child_process"));
38
+ const util = __importStar(require("util"));
39
+ const exec = util.promisify(cp.exec);
40
+ class GitManager {
41
+ async checkGitInstalled() {
42
+ try {
43
+ await exec('git --version');
44
+ return true;
45
+ }
46
+ catch (error) {
47
+ return false;
48
+ }
49
+ }
50
+ async init(cwd) {
51
+ try {
52
+ await exec('git init', { cwd });
53
+ }
54
+ catch (error) {
55
+ throw new Error(`Failed to initialize git: ${error.message}`);
56
+ }
57
+ }
58
+ async commit(cwd, message) {
59
+ try {
60
+ await exec('git add .', { cwd });
61
+ await exec(`git commit -m "${message}"`, { cwd });
62
+ // Ensure branch is main
63
+ await exec('git branch -M main', { cwd });
64
+ }
65
+ catch (error) {
66
+ // If no changes to commit, it might fail, which is okay but let's log/throw if critical
67
+ console.warn(`Git commit failed (might be empty): ${error.message}`);
68
+ }
69
+ }
70
+ async addRemote(cwd, url) {
71
+ try {
72
+ await exec(`git remote add origin ${url}`, { cwd });
73
+ }
74
+ catch (error) {
75
+ throw new Error(`Failed to add remote: ${error.message}`);
76
+ }
77
+ }
78
+ async push(cwd) {
79
+ try {
80
+ await exec('git push -u origin main', { cwd });
81
+ }
82
+ catch (error) {
83
+ throw new Error(`Failed to push to remote: ${error.message}`);
84
+ }
85
+ }
86
+ async setRemoteUrl(cwd, url) {
87
+ try {
88
+ await exec(`git remote set-url origin ${url}`, { cwd });
89
+ }
90
+ catch (error) {
91
+ console.warn(`Failed to set remote url: ${error.message}`);
92
+ }
93
+ }
94
+ }
95
+ exports.GitManager = GitManager;
96
+ //# sourceMappingURL=GitManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitManager.js","sourceRoot":"","sources":["../../src/managers/GitManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,kDAAoC;AACpC,2CAA6B;AAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAErC,MAAa,UAAU;IACZ,KAAK,CAAC,iBAAiB;QAC1B,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,GAAW;QACzB,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,OAAe;QAC5C,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACjC,MAAM,IAAI,CAAC,kBAAkB,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YAClD,wBAAwB;YACxB,MAAM,IAAI,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,wFAAwF;YACxF,OAAO,CAAC,IAAI,CAAC,uCAAuC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzE,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,GAAW;QAC3C,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,yBAAyB,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,GAAW;QACzB,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,yBAAyB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,GAAW;QAC9C,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,6BAA6B,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;CACJ;AArDD,gCAqDC"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ProjectManager = void 0;
37
+ const vscode = __importStar(require("vscode"));
38
+ const path = __importStar(require("path"));
39
+ const types_1 = require("../types");
40
+ const TemplateManager_1 = require("./TemplateManager");
41
+ const GitHubService_1 = require("../services/GitHubService");
42
+ const GitManager_1 = require("./GitManager");
43
+ class ProjectManager {
44
+ constructor() {
45
+ this.templateManager = new TemplateManager_1.TemplateManager();
46
+ this.gitHubService = new GitHubService_1.GitHubService();
47
+ this.gitManager = new GitManager_1.GitManager();
48
+ }
49
+ async start(initialName) {
50
+ try {
51
+ // 0. Check Prerequisites
52
+ if (!await this.gitManager.checkGitInstalled()) {
53
+ vscode.window.showErrorMessage('Git is required to use this extension. Please install Git and try again.');
54
+ return;
55
+ }
56
+ // 1. Get Project Name
57
+ let name = initialName;
58
+ if (!name) {
59
+ name = await vscode.window.showInputBox({
60
+ prompt: 'Enter Project Name',
61
+ placeHolder: 'my-awesome-project',
62
+ validateInput: (text) => {
63
+ return text && text.trim().length > 0 ? null : 'Project name is required';
64
+ }
65
+ });
66
+ }
67
+ if (!name)
68
+ return;
69
+ // 2. Get Programming Language
70
+ const language = await vscode.window.showQuickPick(Object.values(types_1.ProjectLanguage), {
71
+ placeHolder: 'Select Programming Language'
72
+ });
73
+ if (!language)
74
+ return;
75
+ // 3. Get Project Type
76
+ const type = await vscode.window.showQuickPick(Object.values(types_1.ProjectType), {
77
+ placeHolder: 'Select Project Type'
78
+ });
79
+ if (!type)
80
+ return;
81
+ // 4. Get GitHub Repository Visibility
82
+ const visibilityParts = ['Public', 'Private'];
83
+ const visibilitySelection = await vscode.window.showQuickPick(visibilityParts, {
84
+ placeHolder: 'Select Repository Visibility'
85
+ });
86
+ if (!visibilitySelection)
87
+ return;
88
+ const isPublic = visibilitySelection === 'Public';
89
+ // 5. Select Parent Folder
90
+ const folderResult = await vscode.window.showOpenDialog({
91
+ canSelectFiles: false,
92
+ canSelectFolders: true,
93
+ canSelectMany: false,
94
+ openLabel: 'Select Project Location'
95
+ });
96
+ if (!folderResult || folderResult.length === 0)
97
+ return;
98
+ const parentPath = folderResult[0].fsPath;
99
+ const projectPath = path.join(parentPath, name);
100
+ const config = {
101
+ name,
102
+ language: language,
103
+ type: type,
104
+ isTheRepoPublic: isPublic,
105
+ description: `A ${type} project in ${language}`,
106
+ path: projectPath
107
+ };
108
+ // Start Process
109
+ await vscode.window.withProgress({
110
+ location: vscode.ProgressLocation.Notification,
111
+ title: "Creating Project...",
112
+ cancellable: false
113
+ }, async (progress, token) => {
114
+ progress.report({ increment: 10, message: "Generating project structure..." });
115
+ await this.templateManager.createProjectStructure(config);
116
+ progress.report({ increment: 30, message: "Initializing Git..." });
117
+ await this.gitManager.init(config.path);
118
+ // Create initial commit
119
+ await this.gitManager.commit(config.path, "Initial commit configured by Project Starter AI");
120
+ progress.report({ increment: 50, message: "Creating GitHub Repository..." });
121
+ const repoUrl = await this.gitHubService.createRepo(config);
122
+ if (repoUrl && repoUrl.trim().length > 0) {
123
+ progress.report({ increment: 70, message: "Pushing to GitHub..." });
124
+ await this.gitManager.addRemote(config.path, repoUrl);
125
+ await this.gitManager.push(config.path);
126
+ // Clean up token from remote URL if it was injected
127
+ if (repoUrl.includes('x-access-token')) {
128
+ const cleanUrl = repoUrl.replace(/x-access-token:[^@]+@/, '');
129
+ await this.gitManager.setRemoteUrl(config.path, cleanUrl);
130
+ }
131
+ }
132
+ progress.report({ increment: 100, message: "Done!" });
133
+ });
134
+ const action = await vscode.window.showInformationMessage(`Project '${name}' created successfully!`, 'Open Project');
135
+ if (action === 'Open Project') {
136
+ const uri = vscode.Uri.file(projectPath);
137
+ await vscode.commands.executeCommand('vscode.openFolder', uri);
138
+ }
139
+ }
140
+ catch (error) {
141
+ vscode.window.showErrorMessage(`Error creating project: ${error.message}`);
142
+ }
143
+ }
144
+ }
145
+ exports.ProjectManager = ProjectManager;
146
+ //# sourceMappingURL=ProjectManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectManager.js","sourceRoot":"","sources":["../../src/managers/ProjectManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TemplateManager = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const types_1 = require("../types");
40
+ class TemplateManager {
41
+ async createProjectStructure(config) {
42
+ const root = config.path;
43
+ if (!fs.existsSync(root)) {
44
+ fs.mkdirSync(root, { recursive: true });
45
+ }
46
+ // Create standard files
47
+ this.createReadme(config);
48
+ this.createRoadmap(config);
49
+ this.createGitIgnore(config);
50
+ // Create type specific folders
51
+ this.createTypeSpecificStructure(config);
52
+ // Create language specific files
53
+ switch (config.language) {
54
+ case types_1.ProjectLanguage.NodeJS:
55
+ await this.createNodeJSStructure(config);
56
+ break;
57
+ case types_1.ProjectLanguage.Python:
58
+ await this.createPythonStructure(config);
59
+ break;
60
+ case types_1.ProjectLanguage.Java:
61
+ await this.createJavaStructure(config);
62
+ break;
63
+ case types_1.ProjectLanguage.CPP:
64
+ await this.createCPPStructure(config);
65
+ break;
66
+ case types_1.ProjectLanguage.React:
67
+ await this.createReactStructure(config);
68
+ break;
69
+ }
70
+ }
71
+ createTypeSpecificStructure(config) {
72
+ switch (config.type) {
73
+ case types_1.ProjectType.WebApp:
74
+ this.ensureDir(config.path, 'public');
75
+ this.ensureDir(config.path, 'assets');
76
+ break;
77
+ case types_1.ProjectType.CLITool:
78
+ this.ensureDir(config.path, 'bin');
79
+ break;
80
+ case types_1.ProjectType.DSAPractice:
81
+ this.ensureDir(config.path, 'problems');
82
+ this.ensureDir(config.path, 'solutions');
83
+ break;
84
+ case types_1.ProjectType.MLProject:
85
+ this.ensureDir(config.path, 'data');
86
+ this.ensureDir(config.path, 'notebooks');
87
+ this.ensureDir(config.path, 'models');
88
+ break;
89
+ }
90
+ }
91
+ ensureDir(root, dir) {
92
+ const fullPath = path.join(root, dir);
93
+ if (!fs.existsSync(fullPath))
94
+ fs.mkdirSync(fullPath, { recursive: true });
95
+ }
96
+ createReadme(config) {
97
+ const content = `# ${config.name}
98
+
99
+ ## Description
100
+ ${config.description}
101
+
102
+ ## Tech Stack
103
+ - Language: ${config.language}
104
+ - Type: ${config.type}
105
+
106
+ ## Installation
107
+ \`\`\`bash
108
+ # Clone the repository
109
+ git clone <repo-url>
110
+ cd ${config.name}
111
+
112
+ # Install dependencies
113
+ npm install # or pip install -r requirements.txt / mvn install
114
+ \`\`\`
115
+
116
+ ## Usage
117
+ \`\`\`bash
118
+ npm start # or python main.py / java -jar target/app.jar
119
+ \`\`\`
120
+
121
+ ## Future Scope
122
+ - Add more features
123
+ - Improve UI/UX
124
+ - optimize performance
125
+ `;
126
+ fs.writeFileSync(path.join(config.path, 'README.md'), content);
127
+ }
128
+ createRoadmap(config) {
129
+ const content = `# Roadmap for ${config.name}
130
+
131
+ - [ ] Initial Setup
132
+ - [ ] Core Features Implementation
133
+ - [ ] Testing & Debugging
134
+ - [ ] Documentation
135
+ - [ ] Deployment
136
+ `;
137
+ fs.writeFileSync(path.join(config.path, 'roadmap.md'), content);
138
+ }
139
+ createGitIgnore(config) {
140
+ let content = '';
141
+ switch (config.language) {
142
+ case types_1.ProjectLanguage.NodeJS:
143
+ case types_1.ProjectLanguage.React:
144
+ content = 'node_modules/\n.env\ndist/\nbuild/';
145
+ break;
146
+ case types_1.ProjectLanguage.Python:
147
+ content = '__pycache__/\n*.pyc\nvenv/\n.env';
148
+ break;
149
+ case types_1.ProjectLanguage.Java:
150
+ content = 'target/\n*.class\n.idea/\n*.iml';
151
+ break;
152
+ case types_1.ProjectLanguage.CPP:
153
+ content = 'build/\n*.o\n*.exe';
154
+ break;
155
+ }
156
+ fs.writeFileSync(path.join(config.path, '.gitignore'), content);
157
+ }
158
+ async createNodeJSStructure(config) {
159
+ const packageJson = {
160
+ name: config.name,
161
+ version: "1.0.0",
162
+ description: config.description,
163
+ main: "index.js",
164
+ scripts: {
165
+ start: "node index.js",
166
+ test: "echo \"Error: no test specified\" && exit 1"
167
+ },
168
+ keywords: [],
169
+ author: "",
170
+ license: "ISC"
171
+ };
172
+ fs.writeFileSync(path.join(config.path, 'package.json'), JSON.stringify(packageJson, null, 2));
173
+ fs.writeFileSync(path.join(config.path, 'index.js'), 'console.log("Hello, World!");');
174
+ }
175
+ async createPythonStructure(config) {
176
+ fs.writeFileSync(path.join(config.path, 'main.py'), 'print("Hello, World!")');
177
+ fs.writeFileSync(path.join(config.path, 'requirements.txt'), '# Add your dependencies here');
178
+ }
179
+ async createJavaStructure(config) {
180
+ const srcDir = path.join(config.path, 'src', 'main', 'java', 'com', 'example');
181
+ fs.mkdirSync(srcDir, { recursive: true });
182
+ const mainClass = `package com.example;
183
+
184
+ public class Main {
185
+ public static void main(String[] args) {
186
+ System.out.println("Hello, World!");
187
+ }
188
+ }`;
189
+ fs.writeFileSync(path.join(srcDir, 'Main.java'), mainClass);
190
+ const pomXml = `<project>
191
+ <modelVersion>4.0.0</modelVersion>
192
+ <groupId>com.example</groupId>
193
+ <artifactId>${config.name}</artifactId>
194
+ <version>1.0-SNAPSHOT</version>
195
+ </project>`;
196
+ fs.writeFileSync(path.join(config.path, 'pom.xml'), pomXml);
197
+ }
198
+ async createCPPStructure(config) {
199
+ const mainCpp = `#include <iostream>
200
+
201
+ int main() {
202
+ std::cout << "Hello, World!" << std::endl;
203
+ return 0;
204
+ }`;
205
+ fs.writeFileSync(path.join(config.path, 'main.cpp'), mainCpp);
206
+ const cmake = `cmake_minimum_required(VERSION 3.10)
207
+ project(${config.name})
208
+
209
+ set(CMAKE_CXX_STANDARD 11)
210
+
211
+ add_executable(${config.name} main.cpp)`;
212
+ fs.writeFileSync(path.join(config.path, 'CMakeLists.txt'), cmake);
213
+ }
214
+ async createReactStructure(config) {
215
+ // Minimal React Setup (using Vite structure conceptually but minimal for file generation speed)
216
+ // Assuming users will run 'npm install' later
217
+ const packageJson = {
218
+ name: config.name,
219
+ private: true,
220
+ version: "0.0.0",
221
+ type: "module",
222
+ scripts: {
223
+ dev: "vite",
224
+ build: "tsc && vite build",
225
+ preview: "vite preview"
226
+ },
227
+ dependencies: {
228
+ react: "^18.2.0",
229
+ "react-dom": "^18.2.0"
230
+ },
231
+ devDependencies: {
232
+ "@types/react": "^18.2.43",
233
+ "@types/react-dom": "^18.2.17",
234
+ "@vitejs/plugin-react": "^4.2.1",
235
+ "typescript": "^5.2.2",
236
+ "vite": "^5.0.8"
237
+ }
238
+ };
239
+ fs.writeFileSync(path.join(config.path, 'package.json'), JSON.stringify(packageJson, null, 2));
240
+ const src = path.join(config.path, 'src');
241
+ if (!fs.existsSync(src))
242
+ fs.mkdirSync(src);
243
+ fs.writeFileSync(path.join(src, 'App.tsx'), `
244
+ import React from 'react';
245
+
246
+ function App() {
247
+ return (
248
+ <div>
249
+ <h1>Hello React + Vite!</h1>
250
+ </div>
251
+ );
252
+ }
253
+
254
+ export default App;
255
+ `);
256
+ fs.writeFileSync(path.join(src, 'main.tsx'), `
257
+ import React from 'react'
258
+ import ReactDOM from 'react-dom/client'
259
+ import App from './App.tsx'
260
+
261
+ ReactDOM.createRoot(document.getElementById('root')!).render(
262
+ <React.StrictMode>
263
+ <App />
264
+ </React.StrictMode>,
265
+ )
266
+ `);
267
+ fs.writeFileSync(path.join(config.path, 'index.html'), `
268
+ <!doctype html>
269
+ <html lang="en">
270
+ <head>
271
+ <meta charset="UTF-8" />
272
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
273
+ <title>${config.name}</title>
274
+ </head>
275
+ <body>
276
+ <div id="root"></div>
277
+ <script type="module" src="/src/main.tsx"></script>
278
+ </body>
279
+ </html>
280
+ `);
281
+ fs.writeFileSync(path.join(config.path, 'vite.config.ts'), `
282
+ import { defineConfig } from 'vite'
283
+ import react from '@vitejs/plugin-react'
284
+
285
+ // https://vitejs.dev/config/
286
+ export default defineConfig({
287
+ plugins: [react()],
288
+ })
289
+ `);
290
+ fs.writeFileSync(path.join(config.path, 'tsconfig.json'), `
291
+ {
292
+ "compilerOptions": {
293
+ "target": "ES2020",
294
+ "useDefineForClassFields": true,
295
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
296
+ "module": "ESNext",
297
+ "skipLibCheck": true,
298
+
299
+ /* Bundler mode */
300
+ "moduleResolution": "bundler",
301
+ "allowImportingTsExtensions": true,
302
+ "resolveJsonModule": true,
303
+ "isolatedModules": true,
304
+ "noEmit": true,
305
+ "jsx": "react-jsx",
306
+
307
+ /* Linting */
308
+ "strict": true,
309
+ "noUnusedLocals": true,
310
+ "noUnusedParameters": true,
311
+ "noFallthroughCasesInSwitch": true
312
+ },
313
+ "include": ["src"],
314
+ "references": [{ "path": "./tsconfig.node.json" }]
315
+ }
316
+ `);
317
+ fs.writeFileSync(path.join(config.path, 'tsconfig.node.json'), `
318
+ {
319
+ "compilerOptions": {
320
+ "composite": true,
321
+ "skipLibCheck": true,
322
+ "module": "ESNext",
323
+ "moduleResolution": "bundler",
324
+ "allowSyntheticDefaultImports": true
325
+ },
326
+ "include": ["vite.config.ts"]
327
+ }
328
+ `);
329
+ }
330
+ }
331
+ exports.TemplateManager = TemplateManager;
332
+ //# sourceMappingURL=TemplateManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateManager.js","sourceRoot":"","sources":["../../src/managers/TemplateManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.GitHubService = void 0;
37
+ const vscode = __importStar(require("vscode"));
38
+ const rest_1 = require("@octokit/rest");
39
+ class GitHubService {
40
+ async getClient() {
41
+ if (this.octokit) {
42
+ return this.octokit;
43
+ }
44
+ const session = await vscode.authentication.getSession('github', ['repo', 'user'], { createIfNone: true });
45
+ this.octokit = new rest_1.Octokit({
46
+ auth: session.accessToken
47
+ });
48
+ return this.octokit;
49
+ }
50
+ async createRepo(config) {
51
+ try {
52
+ const client = await this.getClient();
53
+ // Get current user to avoid hardcoding or guessing
54
+ const { data: user } = await client.users.getAuthenticated();
55
+ // repository create in authenticated user's account
56
+ const { data: repo } = await client.repos.createForAuthenticatedUser({
57
+ name: config.name,
58
+ description: config.description,
59
+ private: !config.isTheRepoPublic,
60
+ auto_init: false // We will push our own init
61
+ });
62
+ // Add topics if possible (separate call usually or check docs, octokit create might support it?
63
+ // no, 'topics' is not in createRepo options usually, updateRepo is needed)
64
+ // But for MVP, skipping topics or doing update
65
+ if (config.type) {
66
+ try {
67
+ await client.repos.replaceAllTopics({
68
+ owner: user.login,
69
+ repo: config.name,
70
+ names: [config.type.toLowerCase().replace(/ /g, '-'), config.language.toLowerCase()]
71
+ });
72
+ }
73
+ catch (e) {
74
+ console.warn("Could not set topics", e);
75
+ }
76
+ }
77
+ // Return the clone URL. We can inject token for push if we want to be sure.
78
+ // But better to use the clone_url and let GitManager handle auth or inject token there.
79
+ // I'll return the URL with token for the initial push to ensure it works without prompting.
80
+ // CAREFUL: This token is in the remote URL.
81
+ // A safer way is to use the standard clone_url and assume credential helper,
82
+ // OR use the token but warn user.
83
+ // Given "Production Ready", relying on global git auth is better practice than baking tokens into .git/config.
84
+ // HOWEVER, for "One Command" automated experience, users might not have git cli auth set up.
85
+ // I will use the token method for reliability in this specific session, but it is a trade-off.
86
+ // Actually, cleaner is: return `https://x-access-token:${token}@github.com/${user.login}/${config.name}.git`
87
+ const session = await vscode.authentication.getSession('github', ['repo'], { createIfNone: false });
88
+ if (session) {
89
+ return `https://x-access-token:${session.accessToken}@github.com/${user.login}/${config.name}.git`;
90
+ }
91
+ return repo.clone_url;
92
+ }
93
+ catch (error) {
94
+ vscode.window.showErrorMessage(`GitHub API Error: ${error.message}`);
95
+ throw error;
96
+ }
97
+ }
98
+ }
99
+ exports.GitHubService = GitHubService;
100
+ //# sourceMappingURL=GitHubService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubService.js","sourceRoot":"","sources":["../../src/services/GitHubService.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+CAAiC;AACjC,wCAAwC;AAGxC,MAAa,aAAa;IAGd,KAAK,CAAC,SAAS;QACnB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3G,IAAI,CAAC,OAAO,GAAG,IAAI,cAAO,CAAC;YACvB,IAAI,EAAE,OAAO,CAAC,WAAW;SAC5B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAqB;QACzC,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YAEtC,mDAAmD;YACnD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAE7D,oDAAoD;YACpD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC;gBACjE,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,CAAC,MAAM,CAAC,eAAe;gBAChC,SAAS,EAAE,KAAK,CAAC,4BAA4B;aAChD,CAAC,CAAC;YAEH,iGAAiG;YACjG,2EAA2E;YAC3E,+CAA+C;YAC/C,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACd,IAAI,CAAC;oBACD,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC;wBAChC,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;qBACvF,CAAC,CAAC;gBACP,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACT,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;gBAC5C,CAAC;YACL,CAAC;YAED,4EAA4E;YAC5E,wFAAwF;YACxF,4FAA4F;YAC5F,4CAA4C;YAC5C,8EAA8E;YAC9E,kCAAkC;YAClC,+GAA+G;YAC/G,6FAA6F;YAC7F,+FAA+F;YAC/F,6GAA6G;YAE7G,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YACpG,IAAI,OAAO,EAAE,CAAC;gBACV,OAAO,0BAA0B,OAAO,CAAC,WAAW,eAAe,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC;YACvG,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC;QAE1B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;CACJ;AArED,sCAqEC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GitHubServiceCLI = void 0;
4
+ const rest_1 = require("@octokit/rest");
5
+ class GitHubServiceCLI {
6
+ constructor(token) {
7
+ this.token = token;
8
+ if (token) {
9
+ this.octokit = new rest_1.Octokit({
10
+ auth: token
11
+ });
12
+ }
13
+ }
14
+ getClient() {
15
+ if (!this.octokit) {
16
+ throw new Error("GitHub token not provided. Skipping GitHub operations.");
17
+ }
18
+ return this.octokit;
19
+ }
20
+ async createRepo(config) {
21
+ try {
22
+ const client = this.getClient();
23
+ // Get current user
24
+ const { data: user } = await client.users.getAuthenticated();
25
+ // repository create in authenticated user's account
26
+ const { data: repo } = await client.repos.createForAuthenticatedUser({
27
+ name: config.name,
28
+ description: config.description,
29
+ private: !config.isTheRepoPublic,
30
+ auto_init: false
31
+ });
32
+ if (config.type) {
33
+ try {
34
+ await client.repos.replaceAllTopics({
35
+ owner: user.login,
36
+ repo: config.name,
37
+ names: [config.type.toLowerCase().replace(/ /g, '-'), config.language.toLowerCase()]
38
+ });
39
+ }
40
+ catch (e) {
41
+ console.warn("Could not set topics", e);
42
+ }
43
+ }
44
+ // For CLI with PAT, we can inject the token for push
45
+ // https://<token>@github.com/user/repo.git
46
+ return `https://${this.token}@github.com/${user.login}/${config.name}.git`;
47
+ }
48
+ catch (error) {
49
+ console.error(`GitHub API Error: ${error.message}`);
50
+ // Don't throw, just return undefined so the process continues locally
51
+ return undefined;
52
+ }
53
+ }
54
+ }
55
+ exports.GitHubServiceCLI = GitHubServiceCLI;
56
+ //# sourceMappingURL=GitHubServiceCLI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubServiceCLI.js","sourceRoot":"","sources":["../../src/services/GitHubServiceCLI.ts"],"names":[],"mappings":";;;AACA,wCAAwC;AAGxC,MAAa,gBAAgB;IAGzB,YAAoB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAC7B,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,OAAO,GAAG,IAAI,cAAO,CAAC;gBACvB,IAAI,EAAE,KAAK;aACd,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAEO,SAAS;QACb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAqB;QACzC,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAEhC,mBAAmB;YACnB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAE7D,oDAAoD;YACpD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC;gBACjE,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,OAAO,EAAE,CAAC,MAAM,CAAC,eAAe;gBAChC,SAAS,EAAE,KAAK;aACnB,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACd,IAAI,CAAC;oBACD,MAAM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC;wBAChC,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;qBACvF,CAAC,CAAC;gBACP,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACT,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;gBAC5C,CAAC;YACL,CAAC;YAED,qDAAqD;YACrD,2CAA2C;YAC3C,OAAO,WAAW,IAAI,CAAC,KAAK,eAAe,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC;QAE/E,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACpD,sEAAsE;YACtE,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;CACJ;AAvDD,4CAuDC"}
package/out/types.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjectType = exports.ProjectLanguage = void 0;
4
+ var ProjectLanguage;
5
+ (function (ProjectLanguage) {
6
+ ProjectLanguage["NodeJS"] = "Node.js";
7
+ ProjectLanguage["React"] = "React";
8
+ ProjectLanguage["Python"] = "Python";
9
+ ProjectLanguage["Java"] = "Java";
10
+ ProjectLanguage["CPP"] = "C++";
11
+ })(ProjectLanguage || (exports.ProjectLanguage = ProjectLanguage = {}));
12
+ var ProjectType;
13
+ (function (ProjectType) {
14
+ ProjectType["WebApp"] = "Web App";
15
+ ProjectType["CLITool"] = "CLI Tool";
16
+ ProjectType["DSAPractice"] = "DSA Practice";
17
+ ProjectType["MLProject"] = "ML Project";
18
+ })(ProjectType || (exports.ProjectType = ProjectType = {}));
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AACA,IAAY,eAMX;AAND,WAAY,eAAe;IACvB,qCAAkB,CAAA;IAClB,kCAAe,CAAA;IACf,oCAAiB,CAAA;IACjB,gCAAa,CAAA;IACb,8BAAW,CAAA;AACf,CAAC,EANW,eAAe,+BAAf,eAAe,QAM1B;AAED,IAAY,WAKX;AALD,WAAY,WAAW;IACnB,iCAAkB,CAAA;IAClB,mCAAoB,CAAA;IACpB,2CAA4B,CAAA;IAC5B,uCAAwB,CAAA;AAC5B,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "zerostart-cli",
3
+ "displayName": "ZeroStart",
4
+ "bin": {
5
+ "zerostart": "./out/cli.js"
6
+ },
7
+ "description": "Create and deploy a complete project with one command.",
8
+ "version": "0.0.1",
9
+ "engines": {
10
+ "vscode": "^1.85.0"
11
+ },
12
+ "categories": [
13
+ "Other"
14
+ ],
15
+ "activationEvents": [],
16
+ "main": "./out/extension.js",
17
+ "contributes": {
18
+ "commands": [
19
+ {
20
+ "command": "zerostart.create",
21
+ "title": "ZeroStart"
22
+ }
23
+ ]
24
+ },
25
+ "scripts": {
26
+ "vscode:prepublish": "npm run compile",
27
+ "compile": "tsc -p ./",
28
+ "watch": "tsc -watch -p ./",
29
+ "pretest": "npm run compile && npm run lint",
30
+ "lint": "eslint src --ext ts",
31
+ "test": "node ./out/test/runTest.js"
32
+ },
33
+ "devDependencies": {
34
+ "@types/glob": "^8.1.0",
35
+ "@types/inquirer": "^9.0.9",
36
+ "@types/mocha": "^10.0.6",
37
+ "@types/node": "18.x",
38
+ "@types/ora": "^3.1.0",
39
+ "@types/vscode": "^1.85.0",
40
+ "@typescript-eslint/eslint-plugin": "^6.13.1",
41
+ "@typescript-eslint/parser": "^6.13.1",
42
+ "@vscode/test-electron": "^2.3.8",
43
+ "eslint": "^8.54.0",
44
+ "glob": "^10.3.10",
45
+ "mocha": "^10.2.0",
46
+ "typescript": "^5.3.2"
47
+ },
48
+ "dependencies": {
49
+ "@octokit/rest": "^19.0.13",
50
+ "chalk": "^4.1.2",
51
+ "commander": "^14.0.3",
52
+ "inquirer": "^9.3.8",
53
+ "ora": "^5.4.1"
54
+ }
55
+ }