@craftnotion/init-project
Version:
A CLI tool to initialize a new project with AdonisJS, NextJS, NestJS, React Native, Strapi, TypeScript, Husky, Git-CZ and more.
155 lines (154 loc) • 6.03 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const inquirer_1 = __importDefault(require("inquirer"));
const base_1 = require("../base");
const functions_1 = require("../../functions");
class Nuxtjs extends base_1.Base {
static supportedPackageManagers = ['npm', 'yarn', 'pnpm'];
node = '18.0.0';
/**
* Base command for adonisjs
*/
packageManager;
projectName;
constructor(data) {
let { packageManager = 'npm', projectName } = data;
super(`npm init nuxt-app ${projectName}`);
this.packageManager = packageManager;
this.projectName = projectName;
}
async handle() {
const useTypeScript = await (0, functions_1.askUseTypeScript)();
const data = await inquirer_1.default.prompt([
{
type: 'list',
name: 'ui',
message: 'UI framework:',
choices: [
{ name: 'None', value: '' },
{ name: 'Ant Design Vue', value: 'ant-design-vue' },
{ name: 'BalmUI', value: 'balm-ui' },
{ name: 'Bootstrap Vue', value: 'bootstrap' },
{ name: 'Buefy', value: 'buefy' },
{ name: 'Chakra UI', value: 'chakra-ui' },
{ name: 'Element', value: 'element-ui' },
{ name: 'Oruga', value: 'oruga' },
{ name: 'Primevue', value: 'primevue' },
{ name: 'Tachyons', value: 'tachyons' },
{ name: 'Tailwind CSS', value: 'tailwind' },
{ name: 'Windi CSS', value: 'windicss' },
{ name: 'Vant', value: 'vant' },
{ name: 'View UI', value: 'view-ui' },
{ name: 'Vuetify.js', value: 'vuetify' },
],
default: 'none',
},
{
type: 'list',
name: 'template',
message: 'Template engine:',
choices: [
{ name: 'HTML', value: 'html' },
{ name: 'Pug', value: 'pug' },
],
default: 'html',
},
{
name: 'features',
message: 'Nuxt.js modules:',
type: 'checkbox',
choices: [
{ name: 'Axios - Promise based HTTP client', value: 'axios' },
{ name: 'Progressive Web App (PWA)', value: 'pwa' },
{ name: 'Content - Git-based headless CMS', value: 'content' },
],
default: [],
},
{
name: 'linter',
message: 'Linting tools:',
type: 'checkbox',
pageSize: 10,
choices: [
{ name: 'ESLint', value: 'eslint' },
{ name: 'Prettier', value: 'prettier' },
{ name: 'StyleLint', value: 'stylelint' },
],
default: [],
},
{
name: 'test',
message: 'Testing framework:',
type: 'list',
choices: [
{ name: 'None', value: 'none' },
{ name: 'Jest', value: 'jest' },
{ name: 'AVA', value: 'ava' },
{ name: 'WebdriverIO', value: 'webdriverio' },
{ name: 'Nightwatch', value: 'nightwatch' },
],
default: 'none',
},
{
name: 'mode',
message: 'Rendering mode:',
type: 'list',
choices: [
{ name: 'Universal (SSR / SSG)', value: 'universal' },
{ name: 'Single Page App', value: 'spa' },
],
default: 'universal',
},
{
name: 'target',
message: 'Deployment target:',
type: 'list',
choices: [
{ name: 'Server (Node.js hosting)', value: 'server' },
{ name: 'Static (Static/Jamstack hosting)', value: 'static' },
],
default: 'server',
},
{
name: 'devTools',
message: 'Development tools:',
type: 'checkbox',
choices: [
{
name: "jsconfig.json (Recommended for VS Code if you're not using typescript)",
value: 'jsconfig.json',
},
{ name: 'Semantic Pull Requests', value: 'semantic-pull-requests' },
{ name: 'Dependabot (For auto-updating dependencies, GitHub only)', value: 'dependabot' },
],
default: [],
},
{
when: ({ test, linter }) => test !== 'none' || linter.length > 0,
name: 'ci',
message: 'Continuous integration:',
type: 'list',
choices: [
{ name: 'None', value: 'none' },
{ name: 'GitHub Actions (GitHub only)', value: 'github-actions' },
{ name: 'Travis CI', value: 'travis-ci' },
{ name: 'CircleCI', value: 'circleci' },
],
default: 'none',
},
]);
this.updateCommand('alias', {
answers: JSON.stringify(JSON.stringify({
...data,
language: useTypeScript ? 'ts' : 'js',
pm: this.packageManager,
name: this.projectName,
})),
});
await this.scaffold();
}
}
exports.default = Nuxtjs;