code formatted

This commit is contained in:
Filip Rojek 2022-07-30 22:44:24 +02:00
parent 564cd09d8b
commit 03fbb74171
23 changed files with 266 additions and 261 deletions

View File

@ -1,39 +1,25 @@
{ {
"env": { "env": {
"es2021": true, "es2021": true,
"node": true "node": true
}, },
"extends": [ "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
"eslint:recommended", "parser": "@typescript-eslint/parser",
"plugin:@typescript-eslint/recommended" "parserOptions": {
], "ecmaVersion": 6,
"parser": "@typescript-eslint/parser", "sourceType": "module"
"parserOptions": { },
"ecmaVersion": 6, "plugins": ["@typescript-eslint"],
"sourceType": "module" "rules": {
}, "indent": ["error", "tab"],
"plugins": [ "linebreak-style": ["error", "unix"],
"@typescript-eslint" "quotes": [
], "error",
"rules": { "single",
"indent": [ {
"error", "allowTemplateLiterals": true
"tab" }
], ],
"linebreak-style": [ "semi": ["error", "never"]
"error", }
"unix"
],
"quotes": [
"error",
"single",
{
"allowTemplateLiterals": true
}
],
"semi": [
"error",
"never"
]
}
} }

View File

@ -1,4 +1,4 @@
{ {
"require": ["ts-node/register"], "require": ["ts-node/register"],
"watch-files": ["./src/**/*.ts"] "watch-files": ["./src/**/*.ts"]
} }

15
.prettierrc Normal file
View File

@ -0,0 +1,15 @@
{
"tabWidth": 4,
"useTabs": true,
"singleQuote": true,
"semi": false,
"trailingComma": "none",
"jsxSingleQuote": true,
"jsxBracketSameLine": true,
"printWidth": 200,
"bracketSpacing": true,
"vueIndentScriptAndStyle": true,
"arrowParens": "always",
"bracketSameLine": false,
"endOfLine": "lf"
}

View File

@ -1,22 +1,29 @@
# Nork # Nork
Simple node.js tool that extends express projects. Simple node.js tool that extends express projects.
- [About](#about) - [About](#about)
- [Installation](#installation) - [Installation](#installation)
- [How to use](#how-to-use) - [How to use](#how-to-use)
## About ## About
The point of this tool is to add to express some feeling of php framework Laravel. Primarily get simply express app into MVC architecture. The point of this tool is to add to express some feeling of php framework Laravel. Primarily get simply express app into MVC architecture.
## Installation ## Installation
``` ```
npm install -g nork npm install -g nork
``` ```
This will install nork globally. If you would like to install nork for only one project, you can also install it locally. For local installation: This will install nork globally. If you would like to install nork for only one project, you can also install it locally. For local installation:
```
npm install nork
``` ```
npm install nork
```
## How to use ## How to use
``` ```
Usage: nork <command> [options] Usage: nork <command> [options]

View File

@ -1 +1 @@
{"lang":"ts"} { "lang": "ts" }

View File

@ -1,58 +1,60 @@
{ {
"name": "nork", "name": "nork",
"version": "3.0.5", "version": "3.0.5",
"description": "The best node.js 'framework' :)", "description": "The best node.js 'framework' :)",
"main": "dist/app.js", "main": "dist/app.js",
"bin": "dist/app.js", "bin": "dist/app.js",
"types": "dist/app.d.ts", "types": "dist/app.d.ts",
"scripts": { "scripts": {
"start": "npm run start:prod", "start": "npm run start:prod",
"start:dev": "ts-node src/app.ts", "start:dev": "ts-node src/app.ts",
"start:prod": "node dist/app.js", "start:prod": "node dist/app.js",
"tsc": "tsc -p .", "tsc": "tsc -p .",
"clean": "rimraf dist", "clean": "rimraf dist",
"copy-assets": "ts-node src/utils/copyAssets", "copy-assets": "ts-node src/utils/copyAssets",
"build": "npm-run-all clean tsc copy-assets", "build": "npm-run-all clean tsc copy-assets",
"test": "mocha --config .mocharc.json --watch src/**/*.test.ts", "test": "mocha --config .mocharc.json --watch src/**/*.test.ts",
"prepublish": "npm-run-all build" "prepublish": "npm-run-all build",
}, "format": "npx prettier --write ."
"keywords": [ },
"node", "keywords": [
"framework", "node",
"express", "framework",
"mvc" "express",
], "mvc"
"author": "Filip Rojek", ],
"license": "MIT", "author": "Filip Rojek",
"dependencies": { "license": "MIT",
"colors":"1.4.0", "dependencies": {
"fs-extra": "^10.0.0", "colors": "1.4.0",
"inquirer": "^8.1.2", "fs-extra": "^10.0.0",
"pad": "^3.2.0" "inquirer": "^8.1.2",
}, "pad": "^3.2.0"
"devDependencies": { },
"@types/chai": "^4.2.22", "devDependencies": {
"@types/fs-extra": "^9.0.13", "@types/chai": "^4.2.22",
"@types/inquirer": "^8.1.3", "@types/fs-extra": "^9.0.13",
"@types/mocha": "^9.0.0", "@types/inquirer": "^8.1.3",
"@types/shelljs": "^0.8.11", "@types/mocha": "^9.0.0",
"@typescript-eslint/eslint-plugin": "^5.5.0", "@types/shelljs": "^0.8.11",
"@typescript-eslint/parser": "^5.5.0", "@typescript-eslint/eslint-plugin": "^5.5.0",
"chai": "^4.3.4", "@typescript-eslint/parser": "^5.5.0",
"eslint": "^8.3.0", "chai": "^4.3.4",
"mocha": "^9.1.3", "eslint": "^8.3.0",
"npm-run-all": "^4.1.5", "mocha": "^9.1.3",
"rimraf": "^3.0.2", "npm-run-all": "^4.1.5",
"shelljs": "^0.8.5", "prettier": "^2.7.1",
"ts-node": "^10.4.0", "rimraf": "^3.0.2",
"typescript": "^4.5.2" "shelljs": "^0.8.5",
}, "ts-node": "^10.4.0",
"repository": { "typescript": "^4.5.2"
"type": "git", },
"url": "git+https://github.com/filiprojek/nork.git" "repository": {
}, "type": "git",
"bugs": { "url": "git+https://github.com/filiprojek/nork.git"
"url": "https://github.com/filiprojek/nork/issues" },
}, "bugs": {
"homepage": "https://github.com/filiprojek/nork/blob/master/README.md" "url": "https://github.com/filiprojek/nork/issues"
},
"homepage": "https://github.com/filiprojek/nork/blob/master/README.md"
} }

View File

@ -1,36 +1,39 @@
/* spell-checker: disable */ /_ spell-checker: disable _/
# Todo: # Todo:
- [ ] auth jwt refresh token based system
- https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/
- [ ] version of nork control
- [ ] upgrade to newer version system
- [ ] updatnout make files (obzvlast modely a rozlisovat modely podle norkconfigu)
- [ ] vyzadovat aktualni verzi 3.#.# pro make commandy (pouzivaly se jiny predtim soubory)
- [ ] moznost vytvorit projekt bez db
- [ ] auth jwt refresh token based system
- https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/
- [ ] version of nork control
- [ ] upgrade to newer version system
- [ ] updatnout make files (obzvlast modely a rozlisovat modely podle norkconfigu)
- [ ] vyzadovat aktualni verzi 3.#.# pro make commandy (pouzivaly se jiny predtim soubory)
- [ ] moznost vytvorit projekt bez db
### 11-24-2021 ### 11-24-2021
- zacal jsem predelavat nork do OOP
- co jsem udelal: - zacal jsem predelavat nork do OOP
- [x] --help - co jsem udelal:
- [x] --version - [x] --help
- [x] setup - [x] --version
- [x] make - [x] setup
- [x] create - [x] make
- delam na tom - [x] create
- je treba dopsat par types a fixnout zbytek erroru - delam na tom
- zatim netestovana funkcnost - je treba dopsat par types a fixnout zbytek erroru
- zatim netestovana funkcnost
### 1-10-2022 ### 1-10-2022
- dodelal jsem create a otestoval ho
- [x] create - dodelal jsem create a otestoval ho
- [x] create
### 7-30-2022 ### 7-30-2022
- norkconfig se generuje lepe a actually ho pouzivam
- pri vytvareni projektu je mozne vybrat si orm (mongoose & sequlize)
- default modely pro db se kopiruji na zaklade parametru db z norkconfigu
- updatnutej ts skeleton
- dropnul jsem support pro js
- version update: 3.0.5 - norkconfig se generuje lepe a actually ho pouzivam
- pri vytvareni projektu je mozne vybrat si orm (mongoose & sequlize)
- default modely pro db se kopiruji na zaklade parametru db z norkconfigu
- updatnutej ts skeleton
- dropnul jsem support pro js
- version update: 3.0.5

View File

@ -14,7 +14,7 @@ export default class Create {
{ {
type: 'input', type: 'input',
name: 'project_name', name: 'project_name',
message: 'Enter project name:', message: 'Enter project name:'
}, },
{ {
type: 'list', type: 'list',
@ -22,8 +22,8 @@ export default class Create {
name: 'lang', name: 'lang',
choices: [ choices: [
{ name: 'Typescript', value: 'ts' }, { name: 'Typescript', value: 'ts' },
{ name: 'Javascript - DEPRECATED', value: 'js' }, { name: 'Javascript - DEPRECATED', value: 'js' }
], ]
}, },
{ {
type: 'list', type: 'list',
@ -32,24 +32,24 @@ export default class Create {
choices: [ choices: [
{ name: 'MongoDB - Mongoose', value: { db: 'mongodb', orm: 'mongoose' } }, { name: 'MongoDB - Mongoose', value: { db: 'mongodb', orm: 'mongoose' } },
{ name: 'MySQL - Sequelize', value: { db: 'mysql', orm: 'sequelize' } }, { name: 'MySQL - Sequelize', value: { db: 'mysql', orm: 'sequelize' } },
{ name: 'PostgreSQL - Sequelize', value: { db: 'postgresql', orm: 'sequelize' } }, { name: 'PostgreSQL - Sequelize', value: { db: 'postgresql', orm: 'sequelize' } }
], ]
}, },
{ {
type: 'input', type: 'input',
name: 'author', name: 'author',
message: 'Enter your name:', message: 'Enter your name:'
}, },
{ {
type: 'input', type: 'input',
name: 'email', name: 'email',
message: 'Enter your email:', message: 'Enter your email:'
}, },
{ {
type: 'input', type: 'input',
name: 'website', name: 'website',
message: 'Enter your website:', message: 'Enter your website:'
}, }
] ]
// remove first question if project name is already known // remove first question if project name is already known
if (projectName) questions.shift() if (projectName) questions.shift()
@ -61,7 +61,7 @@ export default class Create {
author: answers.author, author: answers.author,
database: answers.db, database: answers.db,
website: answers.website, website: answers.website,
email: answers.email, email: answers.email
} }
// copy skeleton to new project // copy skeleton to new project
@ -76,7 +76,7 @@ export default class Create {
const pkgJson = fs.readJsonSync(path.join(projectPath, 'package.json')) const pkgJson = fs.readJsonSync(path.join(projectPath, 'package.json'))
pkgJson.name = data.project_name pkgJson.name = data.project_name
pkgJson.author = `${data.author} <${data.email}> (${data.website})` pkgJson.author = `${data.author} <${data.email}> (${data.website})`
fs.writeFile(path.join(projectPath, 'package.json'), JSON.stringify(pkgJson, null, 2), err => { fs.writeFile(path.join(projectPath, 'package.json'), JSON.stringify(pkgJson, null, 2), (err) => {
if (err) return global.logError(err.message) if (err) return global.logError(err.message)
}) })

View File

@ -10,6 +10,6 @@ export interface Questions {
{ {
name: string name: string
value: string value: string
}, }
] ]
} }

View File

@ -4,5 +4,5 @@ const root_get = (req, res) => {
} }
module.exports = { module.exports = {
root_get, root_get
} }

View File

@ -5,12 +5,12 @@ const modelSchema = new Schema(
{ {
title: { title: {
type: String, type: String,
required: true, required: true
}, }
}, },
{ {
timestamps: true, timestamps: true
}, }
) )
const ModelName = mongoose.model('ModelName', modelSchema) const ModelName = mongoose.model('ModelName', modelSchema)

View File

@ -4,12 +4,12 @@ const modelSchema = new Schema<any>(
{ {
title: { title: {
type: String, type: String,
required: true, required: true
}, }
}, },
{ {
timestamps: true, timestamps: true
}, }
) )
export default model('ModelName', modelSchema) export default model('ModelName', modelSchema)

View File

@ -13,8 +13,8 @@ export default class Setup {
name: 'lang', name: 'lang',
choices: [ choices: [
{ name: 'Typescript', value: 'ts' }, { name: 'Typescript', value: 'ts' },
{ name: 'Javascript', value: 'js' }, { name: 'Javascript', value: 'js' }
], ]
} }
const answers = await inquirer.prompt(Object(questions)) const answers = await inquirer.prompt(Object(questions))
fs.writeJsonSync(path.join(process.cwd(), './norkconfig.json'), answers) fs.writeJsonSync(path.join(process.cwd(), './norkconfig.json'), answers)

View File

@ -1,3 +1,3 @@
{ {
"lang": "js" "lang": "js"
} }

View File

@ -15,13 +15,13 @@ const app = express()
const dbURI = process.env.DB_URI const dbURI = process.env.DB_URI
mongoose mongoose
.connect(dbURI, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true }) .connect(dbURI, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true })
.then(result => { .then((result) => {
console.log('connected to db') console.log('connected to db')
app.listen(port, () => { app.listen(port, () => {
console.log(`server is running on http://localhost:${port}`) console.log(`server is running on http://localhost:${port}`)
}) })
}) })
.catch(err => { .catch((err) => {
console.log(err) console.log(err)
}) })

View File

@ -4,5 +4,5 @@ const root_get = (req, res) => {
} }
module.exports = { module.exports = {
root_get, root_get
} }

View File

@ -1 +1 @@
# Folder for utils and other config files # Folder for utils and other config files

View File

@ -11,5 +11,5 @@
"vueIndentScriptAndStyle": true, "vueIndentScriptAndStyle": true,
"arrowParens": "always", "arrowParens": "always",
"bracketSameLine": false, "bracketSameLine": false,
"endOfLine": "lf" "endOfLine": "lf"
} }

View File

@ -1,5 +1,5 @@
{ {
"lang": "ts", "lang": "ts",
"db": "", "db": "",
"orm": "" "orm": ""
} }

View File

@ -1,73 +1,73 @@
{ {
"name": "project-name", "name": "project-name",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"main": "dist/server.js", "main": "dist/server.js",
"private": "true", "private": "true",
"keywords": [], "keywords": [],
"author": "", "author": "",
"repository": "github:username/repo", "repository": "github:username/repo",
"license": "ISC", "license": "ISC",
"scripts": { "scripts": {
"start": "node dist/server.js", "start": "node dist/server.js",
"start:dev": "nodemon src/server.ts", "start:dev": "nodemon src/server.ts",
"test": "jest", "test": "jest",
"clean": "rimraf dist/*", "clean": "rimraf dist/*",
"copy-assets": "npx ts-node src/utils/copyAssets", "copy-assets": "npx ts-node src/utils/copyAssets",
"tsc": "tsc -p .", "tsc": "tsc -p .",
"build": "npm-run-all clean tsc copy-assets", "build": "npm-run-all clean tsc copy-assets",
"format": "npx prettier --write ." "format": "npx prettier --write ."
}, },
"dependencies": { "dependencies": {
"colors": "1.4.0", "colors": "1.4.0",
"cookie-parser": "^1.4.5", "cookie-parser": "^1.4.5",
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^8.2.0", "dotenv": "^8.2.0",
"ejs": "^3.1.6", "ejs": "^3.1.6",
"express": "^4.17.1", "express": "^4.17.1",
"express-validator": "^6.14.2", "express-validator": "^6.14.2",
"fs-extra": "^10.0.0", "fs-extra": "^10.0.0",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"mongoose": "^5.12.3", "mongoose": "^5.12.3",
"pg": "^8.7.1", "pg": "^8.7.1",
"pg-hstore": "^2.3.4", "pg-hstore": "^2.3.4",
"sequelize": "^6.15.0" "sequelize": "^6.15.0"
}, },
"devDependencies": { "devDependencies": {
"@types/cookie-parser": "^1.4.2", "@types/cookie-parser": "^1.4.2",
"@types/cors": "^2.8.10", "@types/cors": "^2.8.10",
"@types/ejs": "^3.0.6", "@types/ejs": "^3.0.6",
"@types/express": "^4.17.11", "@types/express": "^4.17.11",
"@types/fs-extra": "^9.0.12", "@types/fs-extra": "^9.0.12",
"@types/jest": "^27.5.2", "@types/jest": "^27.5.2",
"@types/jsonwebtoken": "^8.5.8", "@types/jsonwebtoken": "^8.5.8",
"@types/mongoose": "^5.10.5", "@types/mongoose": "^5.10.5",
"@types/morgan": "^1.9.2", "@types/morgan": "^1.9.2",
"@types/node": "^14.14.41", "@types/node": "^14.14.41",
"@types/shelljs": "^0.8.9", "@types/shelljs": "^0.8.9",
"jest": "^27.0.6", "jest": "^27.0.6",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"shelljs": "^0.8.4", "shelljs": "^0.8.4",
"ts-jest": "^27.1.5", "ts-jest": "^27.1.5",
"ts-node": "^10.8.1", "ts-node": "^10.8.1",
"typescript": "^4.2.4", "typescript": "^4.2.4",
"morgan": "^1.10.0" "morgan": "^1.10.0"
}, },
"jest": { "jest": {
"preset": "ts-jest", "preset": "ts-jest",
"testEnvironment": "node" "testEnvironment": "node"
}, },
"nodemonConfig": { "nodemonConfig": {
"ignore": [ "ignore": [
"**/*.test.ts", "**/*.test.ts",
"**/*.spec.ts", "**/*.spec.ts",
".git", ".git",
"node_modules" "node_modules"
], ],
"watch": [ "watch": [
"src" "src"
], ],
"ext": "ts, js" "ext": "ts, js"
} }
} }

View File

@ -5,7 +5,7 @@
/* Basic Options */ /* Basic Options */
// "incremental": true, /* Enable incremental compilation */ // "incremental": true, /* Enable incremental compilation */
"target": "es6", "target": "es6",
/* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
"module": "commonjs", "module": "commonjs",

View File

@ -10,26 +10,26 @@ Instance.init(
type: DataTypes.UUID, type: DataTypes.UUID,
primaryKey: true, primaryKey: true,
allowNull: false, allowNull: false,
unique: true, unique: true
}, },
username: { username: {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: false, allowNull: false
}, },
password: { password: {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: false, allowNull: false
}, },
email: { email: {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: false, allowNull: false,
unique: true, unique: true
}, }
}, },
{ {
sequelize: db, sequelize: db,
tableName: path.basename(__filename).split('.')[0].toLowerCase(), tableName: path.basename(__filename).split('.')[0].toLowerCase()
}, }
) )
export default Instance export default Instance

View File

@ -1,23 +1,15 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "es6", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ "target": "es6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
"module": "commonjs", /* Specify what module code is generated. */ "module": "commonjs" /* Specify what module code is generated. */,
"outDir": "./dist", /* Specify an output folder for all emitted files. */ "outDir": "./dist" /* Specify an output folder for all emitted files. */,
"rootDir": "./src", /* Specify the root folder within your source files. */ "rootDir": "./src" /* Specify the root folder within your source files. */,
"strict": true, /* Enable all strict type-checking options. */ "strict": true /* Enable all strict type-checking options. */,
"baseUrl": "./", /* Base directory to resolve non-absolute module names. */ "baseUrl": "./" /* Base directory to resolve non-absolute module names. */,
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */,
"skipLibCheck": true, /* Skip type checking all .d.ts files. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */,
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
"declaration": true, "declaration": true
}, },
"exclude": [ "exclude": ["_old", "node_modules", "src/make-files", "src/skeletons", "src/tests", "src/interfaces", "src/utils"]
"_old",
"node_modules",
"src/make-files",
"src/skeletons",
"src/tests",
"src/interfaces",
"src/utils"
]
} }