pulse-cli
Version:
The Pulse CLI tool for pulse-server
111 lines • 4.91 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const figlet_1 = __importDefault(require("figlet"));
const chalk_1 = __importDefault(require("chalk"));
const fs_1 = __importDefault(require("fs"));
const child_process_1 = require("child_process");
const program = new commander_1.Command();
console.log(figlet_1.default.textSync('PulseCLI'));
program
.version('1.0.0')
.description('PulseCLI: A CLI tool for the PulseSDK. See https://pulsesdk.com for more information.');
program
.command('init')
.description('Initialize a new Pulse project')
.argument('name', 'The name of the project')
.action((name) => {
console.log(chalk_1.default.green(`Initializing a new Pulse project named ${name}`));
try {
fs_1.default.mkdirSync(name, { recursive: true });
fs_1.default.mkdirSync(name + '/src', { recursive: true });
}
catch (e) {
console.error(chalk_1.default.red(`Failed to create directory ${name}:`, e));
return;
}
const indexTemp = fs_1.default.readFileSync(__dirname + '/template/src/app.txt', 'utf8');
const packageTemp = fs_1.default.readFileSync(__dirname + '/template/package.txt', 'utf8');
const tsconfigTemp = fs_1.default.readFileSync(__dirname + '/template/tsconfig.txt', 'utf8');
const pulseConfig = fs_1.default.readFileSync(__dirname + '/template/pulse.txt', 'utf8');
fs_1.default.writeFile(name + '/src/app.ts', indexTemp, (err) => {
if (err) {
console.error(chalk_1.default.red(`Failed to write to ${name}/src/app.ts:`, err));
}
});
fs_1.default.writeFile(name + '/package.json', packageTemp, (err) => {
if (err) {
console.error(chalk_1.default.red(`Failed to write to ${name}/package.json:`, err));
}
});
fs_1.default.writeFile(name + '/tsconfig.json', tsconfigTemp, (err) => {
if (err) {
console.error(chalk_1.default.red(`Failed to write to ${name}/tsconfig.json:`, err));
}
});
fs_1.default.writeFile(name + '/pulse.toml', pulseConfig, (err) => {
if (err) {
console.error(chalk_1.default.red(`Failed to write to ${name}/pulse.toml:`, err));
}
});
console.log(chalk_1.default.green(`Successfully initialized a new Pulse project named ${name}`));
console.log(chalk_1.default.green(`Installing dependencies...`));
(0, child_process_1.exec)(`cd ${name} && npm install`, (err, stdout, stderr) => {
if (err) {
console.error(chalk_1.default.red(`Failed to install dependencies:`, err));
return;
}
console.log(chalk_1.default.green('Successfully installed dependencies'));
});
});
program
.command('gen-types')
.description('Create Typescript types in your target directory from your Pulse JSON Schema')
.argument('<from>', 'The path to the JSON Schema file')
.argument('<to>', 'The path to the output file')
.addHelpText('before', 'Example: gen-types schema.json ./src/types')
.action((from, to) => {
console.log(chalk_1.default.green(`Starting to clone types from ${from} to ${to}`));
// Read the JSON file
fs_1.default.readFile(from, 'utf8', (err, data) => {
if (err) {
console.error(chalk_1.default.red(`Failed to read from ${from}:`, err));
return;
}
try {
const jsonData = JSON.parse(data);
if (!Array.isArray(jsonData)) {
console.error(chalk_1.default.red(`Failed to parse JSON data:`, 'The JSON data is not an array'));
return;
}
let typeString = ``;
for (let i = 0; i < jsonData.length; i++) {
const name = jsonData[i].name;
const type = jsonData[i].type;
console.log(chalk_1.default.green(`Creating type ${name}`));
typeString += `export type ${name} = {\n`;
for (const [key, val] of Object.entries(type)) {
typeString += `\t${key}: ${val};\n`;
}
typeString += `}\n\n`;
}
fs_1.default.writeFile(to + '/pulse-types.ts', typeString, (err) => {
if (err) {
console.error(chalk_1.default.red(`Failed to write to ${to}:`, err));
}
else {
console.log(chalk_1.default.green(`Successfully cloned types to ${to}`));
}
});
}
catch (parseError) {
console.error(chalk_1.default.red('Failed to parse JSON data:', parseError));
}
});
});
program.parse();
//# sourceMappingURL=index.js.map