create-gluestack
Version:
A CLI tool for easily initialising gluestack-ui and adding components to your projects.
140 lines • 5.16 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.main = main;
const prompts_1 = require("@clack/prompts");
const help_1 = require("./help");
const data_1 = __importDefault(require("./data"));
const chalk_1 = __importDefault(require("chalk"));
const utils_1 = require("./utils");
async function main(args) {
console.log(chalk_1.default.bold.magenta('\nWelcome to gluestack-ui v3!'));
console.log(chalk_1.default.yellow('Creating a new project with gluestack-ui v3.'));
const supportedFrameworkArgs = [
'--starter-kit-expo',
'--starter-kit-next',
'--universal',
];
const supportedPackagemanagers = ['npm', 'yarn', 'pnpm', 'bun'];
const supportedPackagemanagerArgs = supportedPackagemanagers.map((manager) => '--use-' + manager);
const supportedDocumentationArgs = ['--help', '-h'];
let selectedFramework = '';
let selectedPackageManager = '';
let projName = '';
if (args.length > 0) {
if (args.some((arg) => supportedDocumentationArgs.includes(arg))) {
(0, help_1.displayHelp)();
}
if (!args[0].startsWith('-')) {
projName = args[0];
args.shift();
}
args.forEach((arg) => {
if (supportedFrameworkArgs.includes(arg)) {
selectedFramework = arg.slice(2);
}
else if (supportedPackagemanagerArgs.includes(arg)) {
selectedPackageManager = arg.slice(6);
}
else {
console.log(`Unsupported argument: ${arg}\n`);
(0, help_1.displayHelp)();
}
});
}
process.on('SIGINT', function () {
(0, prompts_1.cancel)('Operation cancelled.');
process.exit(0);
});
let templateName = selectedFramework;
if (templateName === '') {
const { question, options } = data_1.default.options.framework.default;
// @ts-ignore
const frameworkSelection = await (0, prompts_1.select)({
message: question,
options: [...options],
});
// Handle cancellation
if ((0, prompts_1.isCancel)(frameworkSelection)) {
(0, prompts_1.cancel)('Operation cancelled.');
process.exit(0);
}
selectedFramework = frameworkSelection;
templateName = selectedFramework;
}
// Ensure templateName is a string before calling includes
if (typeof templateName !== 'string') {
console.error('Invalid template selection');
process.exit(1);
}
// Universal Template coming soon...
if (templateName.includes('universal')) {
console.log(chalk_1.default.bgGreen('\nComing Soon...\n'));
process.exit(0);
}
if (projName === '') {
const projectNameInput = await (0, prompts_1.text)({
message: 'Enter the name of your project: ',
placeholder: 'my-app',
defaultValue: 'my-app',
});
// Handle cancellation
if ((0, prompts_1.isCancel)(projectNameInput)) {
(0, prompts_1.cancel)('Operation cancelled.');
process.exit(0);
}
projName = projectNameInput;
}
templateName = `${templateName}`;
if (selectedPackageManager === '') {
const userPackageManager = process.env.npm_config_user_agent;
if (userPackageManager && userPackageManager.includes('bun')) {
selectedPackageManager = 'bun';
}
else if (userPackageManager && userPackageManager.includes('pnpm')) {
selectedPackageManager = 'pnpm';
}
else if (userPackageManager && userPackageManager.includes('yarn')) {
selectedPackageManager = 'yarn';
}
else {
selectedPackageManager = 'npm';
}
}
let message = '';
if (templateName.includes('universal')) {
message = 'a universal';
}
else if (templateName.includes('next')) {
message = 'a next-app-router';
}
else if (templateName.includes('expo')) {
message = 'an expo';
}
console.log(`⏳ Creating ${message} app. Hang tight, this may take a while...\n`);
try {
await (0, utils_1.cloneProject)(projName, templateName);
if (!templateName.includes('universal')) {
await (0, utils_1.installDependencies)(projName, selectedPackageManager);
}
await (0, utils_1.gitInit)(projName);
console.log(chalk_1.default.green('\nProject created successfully in ' + projName + ' folder.\n'));
}
catch (error) {
console.error('Failed to create project');
console.error(error.message);
process.exit(1);
}
}
// Execute the main function with command line arguments
if (require.main === module) {
const args = process.argv.slice(2);
main(args).catch((error) => {
console.error('Error:', error);
process.exit(1);
});
}
//# sourceMappingURL=index.js.map
;