UNPKG

lina-infratech-cli

Version:

A CLI tool for Lina Infratech Developers

183 lines (162 loc) 4.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateConfigFiles = void 0; const tslib_1 = require("tslib"); const axios_1 = tslib_1.__importDefault(require("axios")); const child_process_1 = require("child_process"); const colors_1 = require("../utils/chalk/colors"); const messages_1 = require("../ui/messages"); const writer_1 = require("../utils/writer"); function generatePrettierConfig() { const fileName = '.prettierrc'; const content = `{ 'trailingComma': 'es5', 'semi': false, 'singleQuote': true, 'bracketSpacing': true, 'tabWidth': 2, 'useTabs': true, 'printWidth': 80, 'endOfLine': 'lf', }`; (0, writer_1.writeFile)(fileName, content); } function generateTsConfig() { const fileName = 'tsconfig.json'; const content = `{ "compilerOptions": { "incremental": true, "target": "es2016", "experimentalDecorators": true, "module": "commonjs", "allowJs": true, "checkJs": true, "declaration": true, "outDir": "./dist", "removeComments": true, "importHelpers": true, "allowSyntheticDefaultImports": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, "noImplicitAny": true, "strictNullChecks": true, "noUnusedLocals": true, "noUnusedParameters": true, "skipLibCheck": true } }`; (0, writer_1.writeFile)(fileName, content); } function generateNodemonJson() { const fileName = 'nodemon.json'; const content = { 'ignore': ['node_modules/**', 'dist/**'], }; (0, writer_1.writeFile)(fileName, JSON.stringify(content)); } function generateLinterFile() { const fileName = '.eslintrc.js'; const content = `module.exports = { env: { es6: true, node: true, }, extends: ['airbnb-base', 'prettier'], plugins: ['prettier'], globals: { Atomics: 'readonly', SharedArrayBuffer: 'readonly', }, parserOptions: { ecmaVersion: 2018, sourceType: 'module', }, rules: { 'no-new': 0, 'no-template-curly-in-string': 0, 'import/no-named-as-default': 0, 'prettier/prettier': 'error', 'class-methods-use-this': 'off', 'no-param-reassign': 'off', camelcase: 'off', 'no-unused-vars': ['error', { argsIgnorePattern: 'next' }], ident: ['error', 'tab'], }, plugins: ['@typescript-eslint/eslint-plugin'], extends: [ 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended', ], rules: { 'prettier/prettier': 0, }, root: true, env: { node: true, jest: true, }, }`; (0, writer_1.writeFile)(fileName, content); } function generateGitFiles() { return tslib_1.__awaiter(this, void 0, void 0, function* () { (0, child_process_1.execSync)('git init'); const fileName = '.gitignore'; let { data } = yield (0, axios_1.default)('https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore'); data += `*.swp\n.vscode\n.DS_Store`; (0, writer_1.writeFile)(fileName, data); }); } function generateDockerIgnore() { const fileName = '.dockerignore'; const content = '.git\nnode_modules\ndist\n.env*\ndevops'; (0, writer_1.writeFile)(fileName, content); } function generateDockerFiles() { generateDockerIgnore(); const fileName = 'Dockerfile'; const content = `################### # BUILD FOR LOCAL DEVELOPMENT ################### FROM node:18-alpine As development WORKDIR /usr/src/app COPY --chown=node:node package*.json ./ RUN npm ci COPY --chown=node:node . . USER node ################### # BUILD FOR PRODUCTION ################### FROM node:18-alpine As build WORKDIR /usr/src/app COPY --chown=node:node package*.json ./ COPY --chown=node:node --from=development /usr/src/app/node_modules ./node_modules COPY --chown=node:node . . RUN npm run build ENV NODE_ENV prod RUN npm ci --only=production && npm cache clean --force USER node ################### # PRODUCTION ################### FROM node:18-alpine As production COPY --chown=node:node --from=build /usr/src/app/node_modules ./node_modules COPY --chown=node:node --from=build /usr/src/app/dist ./dist CMD [ "node", "dist/src/server.js" ]`; (0, writer_1.writeFile)(fileName, content); (0, colors_1.logWarning)('You should change node:lts-alpine image to fixed NodeJS version.'); } function generateConfigFiles() { return tslib_1.__awaiter(this, void 0, void 0, function* () { console.log(messages_1.MESSAGES.GENERATE_CONFIG_FILES('prettier', 'typescript', 'docker', 'eslint', 'nodemon')); generatePrettierConfig(); generateTsConfig(); generateLinterFile(); generateNodemonJson(); generateDockerFiles(); yield generateGitFiles(); (0, colors_1.logSuccess)(messages_1.MESSAGES.CONFIG_FILES_OK); }); } exports.generateConfigFiles = generateConfigFiles;