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 +57 -0
- package/out/cli.js +176 -0
- package/out/cli.js.map +1 -0
- package/out/extension.js +61 -0
- package/out/extension.js.map +1 -0
- package/out/managers/GitManager.js +96 -0
- package/out/managers/GitManager.js.map +1 -0
- package/out/managers/ProjectManager.js +146 -0
- package/out/managers/ProjectManager.js.map +1 -0
- package/out/managers/TemplateManager.js +332 -0
- package/out/managers/TemplateManager.js.map +1 -0
- package/out/services/GitHubService.js +100 -0
- package/out/services/GitHubService.js.map +1 -0
- package/out/services/GitHubServiceCLI.js +56 -0
- package/out/services/GitHubServiceCLI.js.map +1 -0
- package/out/types.js +19 -0
- package/out/types.js.map +1 -0
- package/package.json +55 -0
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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"}
|
package/out/extension.js
ADDED
|
@@ -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
|
package/out/types.js.map
ADDED
|
@@ -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
|
+
}
|