rewriting to oop and typescript

This commit is contained in:
Filip Rojek 2021-12-01 18:05:44 +01:00
parent 67d6029699
commit 1ebafbef49
123 changed files with 2129 additions and 5 deletions

39
.eslintrc.json Normal file
View File

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

4
.mocharc.json Normal file
View File

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

21
_old/LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Filip Rojek
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

37
_old/README.md Normal file
View File

@ -0,0 +1,37 @@
# Nork
Simple node.js tool that extends express projects.
- [About](#about)
- [Installation](#installation)
- [How to use](#how-to-use)
## 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.
## Installation
```
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:
```
npm install nork
```
## How to use
```
Usage: nork <command> [options]
Options:
-v, --version output the version number
-h, --help output usage information
Commands:
create [app-name] create a new project
create [app-name] -i create a new project in current directory
make controller [name] create a new controller
make middleware [name] create a new middleware
make model [name] create a new model
make route [name] create a new route
make test [name] create a new test
make view [name] create a new view
setup set up an existing project for nork
```

32
_old/package.json Normal file
View File

@ -0,0 +1,32 @@
{
"name": "nork",
"version": "1.2.1",
"description": "The best node.js 'framework' :)",
"main": "src/app.js",
"bin": "src/app.js",
"scripts": {
"start": "node src/app.js"
},
"keywords": [
"node",
"framework",
"express",
"mvc"
],
"author": "Filip Rojek",
"license": "MIT",
"dependencies": {
"colors": "^1.4.0",
"fs-extra": "^10.0.0",
"inquirer": "^8.1.2",
"pad": "^3.2.0"
},
"repository": {
"type": "git",
"url": "git+https://github.com/filiprojek/nork.git"
},
"bugs": {
"url": "https://github.com/filiprojek/nork/issues"
},
"homepage": "https://github.com/filiprojek/nork/blob/master/README.md"
}

View File

@ -0,0 +1,8 @@
const root_get = (req, res) => {
res.render('home')
return true
}
module.exports = {
root_get,
}

View File

@ -0,0 +1,10 @@
const { Router } = require('express')
const router = Router()
router.use((req, res, next) => {
console.log('Hi :)')
next()
})
module.exports = router

View File

@ -0,0 +1,17 @@
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const modelSchema = new Schema(
{
title: {
type: String,
required: true,
},
},
{
timestamps: true,
},
)
const ModelName = mongoose.model('ModelName', modelSchema)
module.exports = ModelName

View File

@ -0,0 +1,8 @@
const { Router } = require('express')
const rootController = require('../controllers/rootController')
const router = Router()
router.get('/', rootController.root_get)
module.exports = router

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>New Project</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans&display=swap" rel="stylesheet">
</head>
<body>
</body>
</html>

View File

@ -0,0 +1,8 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.root_get = void 0;
const root_get = (req, res) => {
res.render('home');
return true;
};
exports.root_get = root_get;

View File

@ -0,0 +1,6 @@
import { Request, Response } from 'express'
export const root_get = (req: Request, res: Response) => {
res.render('home')
return true
}

View File

@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

View File

@ -0,0 +1,4 @@
export interface interfaceName {
hello: string
world: boolean | null | undefined
}

View File

@ -0,0 +1,9 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.router = void 0;
const express_1 = require("express");
exports.router = (0, express_1.Router)();
exports.router.use((req, res, next) => {
console.log('Hi :)');
next();
});

View File

@ -0,0 +1,8 @@
import { Router, Request, Response, NextFunction } from 'express'
export const router = Router()
router.use((req: Request, res: Response, next: NextFunction) => {
console.log('Hi :)')
next()
})

View File

@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const mongoose_1 = require("mongoose");
const modelSchema = new mongoose_1.Schema({
title: {
type: String,
required: true,
},
}, {
timestamps: true,
});
exports.default = (0, mongoose_1.model)('ModelName', modelSchema);

View File

@ -0,0 +1,15 @@
import { Schema, model } from 'mongoose'
const modelSchema = new Schema<any>(
{
title: {
type: String,
required: true,
},
},
{
timestamps: true,
},
)
export default model('ModelName', modelSchema)

View File

@ -0,0 +1,26 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.router = void 0;
const express_1 = require("express");
const rootController = __importStar(require("@/controllers/rootController"));
exports.router = (0, express_1.Router)();
exports.router.get('/', rootController.root_get);

View File

@ -0,0 +1,6 @@
import { Router } from 'express'
import * as rootController from '@/controllers/rootController'
export const router = Router()
router.get('/', rootController.root_get)

View File

@ -0,0 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.helloWorld = void 0;
function helloWorld() {
console.log('hello world');
}
exports.helloWorld = helloWorld;

View File

@ -0,0 +1,3 @@
export function helloWorld() {
console.log('hello world')
}

View File

@ -0,0 +1,9 @@
const { getReq, getRes } = require('./modules/reqRes.module.js')
const { root_get } = require('../controllers/rootController.ts')
test('Home page render test', () => {
const req = getReq()
const res = getRes()
expect(root_get(req, res)).toBe(true)
})

View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>New Project</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans&display=swap" rel="stylesheet">
</head>
<body>
</body>
</html>

View File

@ -0,0 +1,2 @@
APP_PORT = 8080
DB_URI = 'mongodb://username:password@localhost:27017/database?authSource=admin'

107
_old/src/skeletons/express-js/.gitignore vendored Normal file
View File

@ -0,0 +1,107 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
.env.test
# parcel-bundler cache (https://parceljs.org/)
.cache
# Next.js build output
.next
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and *not* Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# package lock file
package-lock.json

View File

View File

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

View File

@ -0,0 +1,24 @@
{
"name": "project-name",
"version": "1.0.0",
"description": "",
"main": "src/app.js",
"scripts": {
"start": "node src/app.js",
"dev": "nodemon src/app.js",
"test": "jest"
},
"author": "",
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"ejs": "^3.1.6",
"express": "^4.17.1",
"mongoose": "^5.12.3",
"morgan": "^1.10.0"
},
"devDependencies": {
"jest": "^27.0.6"
}
}

View File

@ -0,0 +1,41 @@
const express = require('express')
const morgan = require('morgan')
const mongoose = require('mongoose')
const dotenv = require('dotenv').config()
const cors = require('cors')
const path = require('path')
const routes = require('./routes')
const middlewares = require('./middlewares')
const port = process.env.APP_PORT || 8080
const app = express()
// MongoDB
const dbURI = process.env.DB_URI
mongoose
.connect(dbURI, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true })
.then(result => {
console.log('connected to db')
app.listen(port, () => {
console.log(`server is running on http://localhost:${port}`)
})
})
.catch(err => {
console.log(err)
})
// View engine
app.set('view engine', 'ejs')
// Middlewares
app.use(middlewares)
app.set('views', path.join(__dirname, 'views'))
app.use(express.static(path.join(__dirname, 'public')))
app.use(cors())
app.use(morgan('dev'))
app.use(express.urlencoded({ extended: true }))
app.use(express.json())
// Routes
app.use(routes)

View File

@ -0,0 +1,8 @@
const root_get = (req, res) => {
res.render('home')
return true
}
module.exports = {
root_get,
}

View File

@ -0,0 +1,8 @@
const { Router } = require('express')
const sayHiMiddleware = require('./sayHiMiddleware')
const router = Router()
router.use(sayHiMiddleware)
module.exports = router

View File

@ -0,0 +1,10 @@
const { Router } = require('express')
const router = Router()
router.use((req, res, next) => {
console.log('Hi :)')
next()
})
module.exports = router

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -0,0 +1,13 @@
const { Router } = require('express')
const rootRoutes = require('./rootRoutes')
const router = Router()
router.use(rootRoutes)
// 404
router.use((req, res) => {
res.status(404).send('E404')
})
module.exports = router

View File

@ -0,0 +1,8 @@
const { Router } = require('express')
const rootController = require('../controllers/rootController')
const router = Router()
router.get('/', rootController.root_get)
module.exports = router

View File

@ -0,0 +1,9 @@
const { getReq, getRes } = require('./modules/reqRes.module.js')
const { root_get } = require('../controllers/rootController.js')
test('Home page render test', () => {
const req = getReq()
const res = getRes()
expect(root_get(req, res)).toBe(true)
})

View File

@ -0,0 +1,16 @@
module.exports.getReq = () => {
const req = {}
req.body = {}
return req
}
module.exports.getRes = () => {
const res = {}
res.locals = {}
res.status = () => res
res.json = () => res
res.send = () => res
res.render = () => res
return res
}

View File

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

View File

@ -0,0 +1,69 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>New Project</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans&display=swap" rel="stylesheet">
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: 'Open Sans', sans-serif;
}
.content {
width: 100vw;
height: 100vh;
display: flex;
justify-content: space-between;
padding-top: 5rem;
flex-direction: column;
}
footer, .welcome {
display: flex;
justify-content: center;
}
.welcome {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
img {
width: 200px;
padding-top: 2rem;
}
footer {
padding-bottom: 2rem;
text-align: center;
}
.logos {
display: flex;
align-items: center;
gap: 1rem;
}
</style>
</head>
<body>
<div class="content">
<div class="welcome">
<h1>Let's make something amazing!</h1>
<div class="logos">
<img src="/nodejs_logo.svg" alt="node.js logo">
<img src="/expressjs.png" alt="express.js logo">
</div>
</div>
<footer>
<div class="author">
<p>Made by </p><a href="http://www.filiprojek.cz">filiprojek.cz</a>
</div>
</footer>
</div>
</body>
</html>

107
_old/src/skeletons/express-ts/.gitignore vendored Normal file
View File

@ -0,0 +1,107 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
.env.test
# parcel-bundler cache (https://parceljs.org/)
.cache
# Next.js build output
.next
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and *not* Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# package lock file
package-lock.json

View File

@ -0,0 +1 @@
# New Project

View File

@ -0,0 +1,5 @@
/** @type {import('@ts-jest/dist/types').InitialOptionsTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
};

View File

@ -0,0 +1,3 @@
{
"lang": "ts"
}

View File

@ -0,0 +1,62 @@
{
"name": "project-name",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "node -r tsconfig-paths/register -r ts-node/register dist/server.js",
"dev": "nodemon src/server.ts",
"test": "jest",
"clean": "rimraf dist/*",
"copy-assets": "ts-node src/utils/copyAssets",
"tsc": "tsc -p .",
"build": "npm-run-all clean tsc copy-assets"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"colors": "^1.4.0",
"cookie-parser": "^1.4.5",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"ejs": "^3.1.6",
"express": "^4.17.1",
"fs-extra": "^10.0.0",
"mongoose": "^5.12.3",
"morgan": "^1.10.0"
},
"devDependencies": {
"@types/cookie-parser": "^1.4.2",
"@types/cors": "^2.8.10",
"@types/ejs": "^3.0.6",
"@types/express": "^4.17.11",
"@types/fs-extra": "^9.0.12",
"@types/jest": "^27.0.1",
"@types/mongoose": "^5.10.5",
"@types/morgan": "^1.9.2",
"@types/node": "^14.14.41",
"@types/shelljs": "^0.8.9",
"jest": "^27.0.6",
"npm-run-all": "^4.1.5",
"rimraf": "^3.0.2",
"shelljs": "^0.8.4",
"ts-jest": "^27.0.5",
"ts-node": "^9.1.1",
"tsconfig-paths": "^3.11.0",
"typescript": "^4.2.4"
},
"nodemonConfig": {
"ignore": [
"**/*.test.ts",
"**/*.spec.ts",
".git",
"node_modules"
],
"watch": [
"src"
],
"exec": "node -r tsconfig-paths/register -r ts-node/register ./src/server.ts",
"ext": "ts, js"
}
}

View File

@ -0,0 +1,2 @@
APP_PORT = 8080
DB_URI = 'mongodb://username:password@localhost:27017/database?authSource=admin'

View File

@ -0,0 +1,39 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.app = void 0;
const express_1 = __importDefault(require("express"));
const morgan_1 = __importDefault(require("morgan"));
const path_1 = __importDefault(require("path"));
const cors_1 = __importDefault(require("cors"));
const cookie_parser_1 = __importDefault(require("cookie-parser"));
const routes_1 = require("@/routes");
const middlewares_1 = require("@/middlewares");
const corsWhitelist = ['http://localhost:8080', 'http://localhost:6060'];
const corsOptions = {
origin: function (origin, callback) {
if (!origin || corsWhitelist.indexOf(origin) !== -1) {
callback(null, true);
}
else {
callback(new Error('Not allowed by CORS'));
}
},
optionsSuccessStatus: 200,
credentials: true,
};
exports.app = (0, express_1.default)();
// Middlewares
exports.app.use(middlewares_1.router);
exports.app.set('view engine', 'ejs');
exports.app.set('views', path_1.default.join(__dirname, 'views'));
exports.app.use((0, cors_1.default)(corsOptions));
exports.app.use((0, morgan_1.default)('dev'));
exports.app.use(express_1.default.urlencoded({ extended: true }));
exports.app.use(express_1.default.json());
exports.app.use(express_1.default.static(path_1.default.join(__dirname, 'public')));
exports.app.use((0, cookie_parser_1.default)());
// Routes
exports.app.use(routes_1.router);

View File

@ -0,0 +1,36 @@
import express from 'express'
import morgan from 'morgan'
import path from 'path'
import cors from 'cors'
import cookieParser from 'cookie-parser'
import { router as routes } from '@/routes'
import { router as middlewares } from '@/middlewares'
const corsWhitelist = ['http://localhost:8080', 'http://localhost:6060']
const corsOptions = {
origin: function (origin: any, callback: any) {
if (!origin || corsWhitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
},
optionsSuccessStatus: 200,
credentials: true,
}
export const app = express()
// Middlewares
app.use(middlewares)
app.set('view engine', 'ejs')
app.set('views', path.join(__dirname, 'views'))
app.use(cors(corsOptions))
app.use(morgan('dev'))
app.use(express.urlencoded({ extended: true }))
app.use(express.json())
app.use(express.static(path.join(__dirname, 'public')))
app.use(cookieParser())
// Routes
app.use(routes)

View File

@ -0,0 +1,8 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.root_get = void 0;
const root_get = (req, res) => {
res.render('home');
return true;
};
exports.root_get = root_get;

View File

@ -0,0 +1,6 @@
import { Request, Response } from 'express'
export const root_get = (req: Request, res: Response) => {
res.render('home')
return true
}

View File

@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

View File

@ -0,0 +1,4 @@
export interface ErrType {
code: number
message: string
}

View File

@ -0,0 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.router = void 0;
const express_1 = require("express");
const sayHiMiddleware_1 = require("@/middlewares/sayHiMiddleware");
exports.router = (0, express_1.Router)();
exports.router.use(sayHiMiddleware_1.router);

View File

@ -0,0 +1,6 @@
import { Router } from 'express'
import { router as sayHiMiddleware } from '@/middlewares/sayHiMiddleware'
export const router = Router()
router.use(sayHiMiddleware)

View File

@ -0,0 +1,9 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.router = void 0;
const express_1 = require("express");
exports.router = (0, express_1.Router)();
exports.router.use((req, res, next) => {
console.log('Hi :)');
next();
});

View File

@ -0,0 +1,9 @@
import { Router, Request, Response, NextFunction } from 'express'
export const router = Router()
router.use((req: Request, res: Response, next: NextFunction) => {
console.log('Hi :)')
next()
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -0,0 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.router = void 0;
const express_1 = require("express");
const rootRoutes_1 = require("./rootRoutes");
exports.router = (0, express_1.Router)();
exports.router.use(rootRoutes_1.router);
// 404
exports.router.use((req, res) => {
res.status(404).send('E404');
});

View File

@ -0,0 +1,11 @@
import { Request, Response, Router } from 'express'
import { router as rootRoutes } from './rootRoutes'
export const router = Router()
router.use(rootRoutes)
// 404
router.use((req: Request, res: Response) => {
res.status(404).send('E404')
})

View File

@ -0,0 +1,26 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.router = void 0;
const express_1 = require("express");
const rootController = __importStar(require("@/controllers/rootController"));
exports.router = (0, express_1.Router)();
exports.router.get('/', rootController.root_get);

View File

@ -0,0 +1,6 @@
import { Router } from 'express'
import * as rootController from '@/controllers/rootController'
export const router = Router()
router.get('/', rootController.root_get)

View File

@ -0,0 +1,27 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const mongoose_1 = __importDefault(require("mongoose"));
const app_1 = require("@/app");
const environment_1 = __importDefault(require("@/utils/environment"));
const globalService_1 = require("@/services/globalService");
const port = environment_1.default.APP_PORT || 8080;
// MongoDB
const dbURI = environment_1.default.DB_URI;
mongoose_1.default
.connect(dbURI, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
})
.then(() => {
new globalService_1.Succ(200, 'connected to db');
app_1.app.listen(port, () => {
new globalService_1.Succ(200, `Server is listening on http://localhost:${port}`);
});
})
.catch((err) => {
new globalService_1.Err(500, err);
});

View File

@ -0,0 +1,24 @@
import mongoose from 'mongoose'
import { app } from '@/app'
import config from '@/utils/environment'
import { Err, Succ } from '@/services/globalService'
const port: Number = config.APP_PORT || 8080
// MongoDB
const dbURI: string = config.DB_URI
mongoose
.connect(dbURI, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
})
.then(() => {
new Succ(200, 'connected to db')
app.listen(port, () => {
new Succ(200, `Server is listening on http://localhost:${port}`)
})
})
.catch((err: any) => {
new Err(500, err)
})

View File

@ -0,0 +1,37 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Succ = exports.Err = void 0;
const colors_1 = __importDefault(require("colors"));
class Err {
constructor(code, message) {
this.code = code;
this.message = message;
this.drop();
}
drop() {
console.log(colors_1.default.bgRed(`${this.code}`) + colors_1.default.bgBlack.red(` ${this.message}`));
return {
code: this.code,
message: this.message,
};
}
}
exports.Err = Err;
class Succ {
constructor(code, message) {
this.code = code;
this.message = message;
this.drop();
}
drop() {
console.log(colors_1.default.bgGreen.black(`${this.code}`) + colors_1.default.green.bgBlack(` ${this.message}`));
return {
code: this.code,
message: this.message,
};
}
}
exports.Succ = Succ;

View File

@ -0,0 +1,40 @@
import colors from 'colors'
import { ErrType } from '@/interfaces/globalInterface'
export class Err implements ErrType {
code: number
message: string
constructor(code: number, message: string) {
this.code = code
this.message = message
this.drop()
}
drop() {
console.log(colors.bgRed(`${this.code}`) + colors.bgBlack.red(` ${this.message}`))
return {
code: this.code,
message: this.message,
}
}
}
export class Succ {
code: number
message: string
constructor(code: number, message: string) {
this.code = code
this.message = message
this.drop()
}
drop() {
console.log(colors.bgGreen.black(`${this.code}`) + colors.green.bgBlack(` ${this.message}`))
return {
code: this.code,
message: this.message,
}
}
}

View File

@ -0,0 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.helloWorld = void 0;
const helloWorld = () => {
console.log('hello world');
};
exports.helloWorld = helloWorld;

View File

@ -0,0 +1,3 @@
export const helloWorld = () => {
console.log('hello world')
}

View File

@ -0,0 +1,9 @@
const { getReq, getRes } = require('./modules/reqRes.module.js')
const { root_get } = require('../controllers/rootController.ts')
test('Home page render test', () => {
const req = getReq()
const res = getRes()
expect(root_get(req, res)).toBe(true)
})

View File

@ -0,0 +1,16 @@
module.exports.getReq = () => {
const req = {}
req.body = {}
return req
}
module.exports.getRes = () => {
const res = {}
res.locals = {}
res.status = () => res
res.json = () => res
res.send = () => res
res.render = () => res
return res
}

View File

@ -0,0 +1,27 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const shell = __importStar(require("shelljs"));
// Copy all the view templates
shell.cp('-R', 'src/views', 'dist/');
shell.cp('-R', 'src/public', 'dist/');
shell.cp('-R', 'src/models', 'dist/');
shell.cp('-u', 'src/.env', 'dist/');

View File

@ -0,0 +1,7 @@
import * as shell from 'shelljs'
// Copy all the view templates
shell.cp('-R', 'src/views', 'dist/')
shell.cp('-R', 'src/public', 'dist/')
shell.cp('-R', 'src/models', 'dist/')
shell.cp('-u', 'src/.env', 'dist/')

View File

@ -0,0 +1,11 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
require('dotenv').config({ path: path_1.default.join(__dirname, '../.env') });
exports.default = {
APP_PORT: Number(process.env.APP_PORT),
DB_URI: String(process.env.DB_URI),
};

View File

@ -0,0 +1,7 @@
import path from 'path'
require('dotenv').config({ path: path.join(__dirname, '../.env') })
export default {
APP_PORT: Number(process.env.APP_PORT),
DB_URI: String(process.env.DB_URI),
}

View File

@ -0,0 +1,69 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>New Project</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans&display=swap" rel="stylesheet">
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: 'Open Sans', sans-serif;
}
.content {
width: 100vw;
height: 100vh;
display: flex;
justify-content: space-between;
padding-top: 5rem;
flex-direction: column;
}
footer, .welcome {
display: flex;
justify-content: center;
}
.welcome {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
img {
width: 200px;
padding-top: 2rem;
}
footer {
padding-bottom: 2rem;
text-align: center;
}
.logos {
display: flex;
align-items: center;
gap: 1rem;
}
</style>
</head>
<body>
<div class="content">
<div class="welcome">
<h1>Let's make something amazing!</h1>
<div class="logos">
<img src="/nodejs_logo.svg" alt="node.js logo">
<img src="/expressjs.png" alt="express.js logo">
</div>
</div>
<footer>
<div class="author">
<p>Made by </p><a href="http://www.filiprojek.cz">filiprojek.cz</a>
</div>
</footer>
</div>
</body>
</html>

View File

@ -0,0 +1,85 @@
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Basic Options */
// "incremental": true, /* Enable incremental compilation */
"target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
// "lib": [], /* Specify library files to be included in the compilation. */
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */
// "declaration": true, /* Generates corresponding '.d.ts' file. */
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
// "sourceMap": true, /* Generates corresponding '.map' file. */
// "outFile": "./", /* Concatenate and emit output to single file. */
"outDir": "./dist", /* Redirect output structure to the directory. */
"rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
// "composite": true, /* Enable project compilation */
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
// "removeComments": true, /* Do not emit comments to output. */
// "noEmit": true, /* Do not emit outputs. */
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
/* Strict Type-Checking Options */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* Enable strict null checks. */
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
/* Additional Checks */
// "noUnusedLocals": true, /* Report errors on unused locals. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
// "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */
/* Module Resolution Options */
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
"baseUrl": "./", /* Base directory to resolve non-absolute module names. */
"paths": {
"@/*": ["src/","src/*"],
"@dist/*": ["dist/*"],
"@controllers/*": ["src/controllers/"],
"@interfaces/*": ["src/interfaces/*"],
"@middlewares/*": ["src/middlewares/*"],
"@models/*": ["src/models/*"],
"@public/*": ["src/public/*"],
"@routes/*": ["src/routes/*"],
"@services/*": ["src/services/*"],
"@test/*": ["src/test/*"],
"@utils/*": ["src/utils/*"],
"@validators/*": ["src/validators/*"],
"@views/*": ["src/views/*"],
},
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */
// "types": [], /* Type declaration files to be included in compilation. */
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
/* Source Map Options */
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
/* Experimental Options */
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
/* Advanced Options */
"skipLibCheck": true, /* Skip type checking of declaration files. */
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
}
}

1
norkconfig.json Normal file
View File

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

View File

@ -1,11 +1,15 @@
{ {
"name": "nork", "name": "nork",
"version": "1.2.1", "version": "2.0.0.1",
"description": "The best node.js 'framework' :)", "description": "The best node.js 'framework' :)",
"main": "src/app.js", "main": "dist/app.js",
"bin": "src/app.js", "bin": "dist/app.js",
"scripts": { "scripts": {
"start": "node src/app.js" "start": "npm run start:prod",
"start:dev": "ts-node src/app.ts",
"start:prod": "node dist/app.js",
"build": "rimraf dist && tsc -p .",
"test": "mocha --config .mocharc.json --watch src/**/*.test.ts"
}, },
"keywords": [ "keywords": [
"node", "node",
@ -21,6 +25,20 @@
"inquirer": "^8.1.2", "inquirer": "^8.1.2",
"pad": "^3.2.0" "pad": "^3.2.0"
}, },
"devDependencies": {
"@types/chai": "^4.2.22",
"@types/fs-extra": "^9.0.13",
"@types/inquirer": "^8.1.3",
"@types/mocha": "^9.0.0",
"@typescript-eslint/eslint-plugin": "^5.5.0",
"@typescript-eslint/parser": "^5.5.0",
"chai": "^4.3.4",
"eslint": "^8.3.0",
"mocha": "^9.1.3",
"rimraf": "^3.0.2",
"ts-node": "^10.4.0",
"typescript": "^4.5.2"
},
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/filiprojek/nork.git" "url": "git+https://github.com/filiprojek/nork.git"

10
progress-blog.md Normal file
View File

@ -0,0 +1,10 @@
/* spell-checker: disable */
### 11-24-2021
- zacal jsem predelavat nork do OOP
- co jsem udelal:
- [x] --help
- [x] --version
- [x] setup
- [x] make
- [ ] create

9
src/app.ts Normal file
View File

@ -0,0 +1,9 @@
import Routes from './routes'
export class App {
constructor() {
Routes.router()
}
}
new App()

6
src/controllers/test.ts Normal file
View File

@ -0,0 +1,6 @@
import { Request, Response } from 'express'
export const root_get = (req: Request, res: Response) => {
res.render('home')
return true
}

View File

@ -0,0 +1,6 @@
import { Request, Response } from 'express'
export const root_get = (req: Request, res: Response) => {
res.render('home')
return true
}

16
src/global.ts Normal file
View File

@ -0,0 +1,16 @@
import colors from 'colors'
export default class Global {
static logSuccess = (msg: boolean | string = false): string => {
if (!msg) {
msg = 'Success!'
}
console.log(colors.cyan(String(msg)))
return String(msg)
}
static logError(errorMsg: string) {
console.log(colors.bgYellow.red(errorMsg))
return
}
}

66
src/help.ts Normal file
View File

@ -0,0 +1,66 @@
import pad from 'pad'
import colors from 'colors'
export default class Help {
constructor() {
// this.logHelp()
}
// log help & returns status in string for tests
static makeHelp(): string {
const spc = 27
return `
Usage: make:[component]
${pad(' make controller [name]', spc)} create a new controller
${pad(' make middleware [name]', spc)} create a new middleware
${pad(' make model [name]', spc)} create a new model
${pad(' make route [name]', spc)} create a new route
${pad(' make test [name]', spc)} create a new test
${pad(' make view [name]', spc)} create a new view
`
}
static allHelp(): string {
const spc = 27
return `
Usage: nork <command> [options]
Options:
${pad(' -v, --version', spc)} output the version number
${pad(' -h, --help', spc)} output usage information
Commands:
${pad(' create [app-name]', spc)} create a new project
${pad(' create [app-name] -i', spc)} create a new project in current directory
${pad(' make controller [name]', spc)} create a new controller
${pad(' make interface [name]', spc)} create a new interface
${pad(' make middleware [name]', spc)} create a new middleware
${pad(' make model [name]', spc)} create a new model
${pad(' make route [name]', spc)} create a new route
${pad(' make service [name]', spc)} create a new service
${pad(' make test [name]', spc)} create a new test
${pad(' make view [name]', spc)} create a new view
${pad(' setup', spc)} set up an existing project for nork
Run ${colors.cyan('nork help <command>')} for detailed usage of given command.
`
}
static specificHelp(specific: string): string {
return `Usage: ${specific} [options]`
}
static logHelp = (specific: boolean | string = false): string => {
if (specific) {
// log specific help
if (specific == 'make') {
return this.makeHelp()
}
// else return specific help
return this.specificHelp(String(specific))
}
// if nothing return help all
return this.allHelp()
}
}

View File

@ -0,0 +1,3 @@
export interface Norkcfg {
lang: string
}

View File

@ -0,0 +1,15 @@
export interface Questions {
type: string
message: string
name: string
choices: [
{
name: string
value: string
},
{
name: string
value: string
},
]
}

4
src/interfaces/test.ts Normal file
View File

@ -0,0 +1,4 @@
export interface interfaceName {
hello: string
world: boolean | null | undefined
}

View File

@ -0,0 +1,4 @@
export interface interfaceName {
hello: string
world: boolean | null | undefined
}

76
src/make.ts Normal file
View File

@ -0,0 +1,76 @@
import path from 'path'
import fs from 'fs-extra'
import global from './global'
import { Norkcfg } from './interfaces/GlobalInterface'
export default class Make {
static component(component: string) {
// const norkcfg = require(path.join(process.cwd(), 'norkconfig.json'))
const norkcfg: Norkcfg = fs.readJsonSync(path.join(process.cwd(), 'norkconfig.json'))
const tsComponents = ['controller', 'middleware', 'route', 'service']
if (tsComponents.includes(component)) {
const src = path.join(__dirname, './make-files/express-' + norkcfg.lang + '/' + component + '.' + norkcfg.lang)
const dest = path.join(process.cwd(), './src/' + component + 's' + '/' + process.argv[4] + '.' + norkcfg.lang)
try {
fs.copySync(src, dest, { overwrite: false, errorOnExist: true })
} catch (err: any) {
return global.logError(err.message)
}
return global.logSuccess()
}
if (component == 'model') {
const src = path.join(__dirname, './make-files/express-' + norkcfg.lang + '/' + component + '.' + norkcfg.lang)
const dest = path.join(process.cwd(), './src/' + component + 's' + '/' + process.argv[4] + '.' + norkcfg.lang)
try {
fs.copySync(src, dest, { overwrite: false, errorOnExist: true })
} catch (err: any) {
return global.logError(err.message)
}
return global.logSuccess()
}
if (component == 'view') {
const src = path.join(__dirname, './make-files/express-' + norkcfg.lang + '/' + component + '.ejs')
const dest = path.join(process.cwd(), './src/' + component + 's' + '/' + process.argv[4] + '.ejs')
try {
fs.copySync(src, dest, { overwrite: false, errorOnExist: true })
} catch (err: any) {
return global.logError(err.message)
}
return global.logSuccess()
}
if (component == 'test') {
const src = path.join(__dirname, './make-files/express-' + norkcfg.lang + '/' + component + '.js')
const dest = path.join(process.cwd(), './src/' + component + 's' + '/' + process.argv[4] + '.test.js')
try {
fs.copySync(src, dest, { overwrite: false, errorOnExist: true })
} catch (err: any) {
return global.logError(err.message)
}
return global.logSuccess()
}
if (component == 'interface') {
if (norkcfg.lang != 'ts') {
return global.logError('error - this is typescript only component')
}
const src = path.join(__dirname, './make-files/express-' + norkcfg.lang + '/' + component + '.ts')
const dest = path.join(process.cwd(), './src/' + component + 's' + '/' + process.argv[4] + '.ts')
try {
fs.copySync(src, dest, { overwrite: false, errorOnExist: true })
} catch (err: any) {
return global.logError(err.message)
}
return global.logSuccess()
}
return global.logError(`error - unknown component ${component}`)
}
}

8
src/middlewares/test.ts Normal file
View File

@ -0,0 +1,8 @@
import { Router, Request, Response, NextFunction } from 'express'
export const router = Router()
router.use((req: Request, res: Response, next: NextFunction) => {
console.log('Hi :)')
next()
})

View File

@ -0,0 +1,8 @@
import { Router, Request, Response, NextFunction } from 'express'
export const router = Router()
router.use((req: Request, res: Response, next: NextFunction) => {
console.log('Hi :)')
next()
})

15
src/models/test.ts Normal file
View File

@ -0,0 +1,15 @@
import { Schema, model } from 'mongoose'
const modelSchema = new Schema<any>(
{
title: {
type: String,
required: true,
},
},
{
timestamps: true,
},
)
export default model('ModelName', modelSchema)

15
src/models/undefined.ts Normal file
View File

@ -0,0 +1,15 @@
import { Schema, model } from 'mongoose'
const modelSchema = new Schema<any>(
{
title: {
type: String,
required: true,
},
},
{
timestamps: true,
},
)
export default model('ModelName', modelSchema)

41
src/routes.ts Normal file
View File

@ -0,0 +1,41 @@
import Help from './help'
import Version from './version'
import Setup from './setup'
import Make from './make'
export default class Routes {
static router(): string {
if (process.argv[2] == 'help' || process.argv[2] == '-h' || process.argv[2] == '--help') {
if (process.argv[3]) {
console.log(Help.logHelp(process.argv[3]))
return 'specific help'
}
console.log(Help.logHelp())
return 'all help'
}
if (process.argv[2] == '-v' || process.argv[2] == '--version') {
console.log(Version.show())
return 'version'
}
if (process.argv[2] == 'setup') {
if (process.argv[3] != 'test') {
Setup.setup()
}
return 'setup'
}
if (process.argv[2] == 'make') {
if (process.argv[3]) {
if (process.argv[4] != 'test') {
Make.component(process.argv[3])
}
return `make ${process.argv[3]}`
}
}
console.log(Help.logHelp())
return 'all help'
}
}

6
src/routes/test.ts Normal file
View File

@ -0,0 +1,6 @@
import { Router } from 'express'
import * as rootController from '@/controllers/rootController'
export const router = Router()
router.get('/', rootController.root_get)

6
src/routes/undefined.ts Normal file
View File

@ -0,0 +1,6 @@
import { Router } from 'express'
import * as rootController from '@/controllers/rootController'
export const router = Router()
router.get('/', rootController.root_get)

3
src/services/test.ts Normal file
View File

@ -0,0 +1,3 @@
export function helloWorld() {
console.log('hello world')
}

Some files were not shown because too many files have changed in this diff Show More