express-generator-typescript 2.0.14 → 2.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
## About
|
|
2
|
+
|
|
3
|
+
This project was created with [express-generator-typescript](https://github.com/seanpmaxwell/express-generator-typescript).
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## Available Scripts
|
|
7
|
+
|
|
8
|
+
### `npm run dev`
|
|
9
|
+
|
|
10
|
+
Run the server in development mode.
|
|
11
|
+
|
|
12
|
+
### `npm test`
|
|
13
|
+
|
|
14
|
+
Run all unit-tests with hot-reloading.
|
|
15
|
+
|
|
16
|
+
### `npm test -- --testFile="name of test file" (i.e. --testFile=Users).`
|
|
17
|
+
|
|
18
|
+
Run a single unit-test.
|
|
19
|
+
|
|
20
|
+
### `npm run test:no-reloading`
|
|
21
|
+
|
|
22
|
+
Run all unit-tests without hot-reloading.
|
|
23
|
+
|
|
24
|
+
### `npm run lint`
|
|
25
|
+
|
|
26
|
+
Check for linting errors.
|
|
27
|
+
|
|
28
|
+
### `npm run build`
|
|
29
|
+
|
|
30
|
+
Build the project for production.
|
|
31
|
+
|
|
32
|
+
### `npm start`
|
|
33
|
+
|
|
34
|
+
Run the production build (Must be built first).
|
|
35
|
+
|
|
36
|
+
### `npm start -- --env="name of env file" (default is production).`
|
|
37
|
+
|
|
38
|
+
Run production build with a different env file.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import bcrypt from 'bcrypt';
|
|
2
2
|
import StatusCodes from 'http-status-codes';
|
|
3
3
|
import supertest, { SuperTest, Test, Response } from 'supertest';
|
|
4
|
+
import logger from 'jet-logger';
|
|
4
5
|
|
|
5
6
|
import app from '@server';
|
|
6
7
|
import userRepo from '@repos/user-repo';
|
|
7
8
|
import envVars from '@shared/env-vars';
|
|
8
9
|
import User, { UserRoles } from '@models/user-model';
|
|
9
10
|
import { p as paths } from '@routes/auth-router';
|
|
10
|
-
import { pErr } from '@shared/functions';
|
|
11
11
|
import { pwdSaltRounds } from 'spec/support/login-agent';
|
|
12
12
|
import { UnauthorizedError } from '@shared/errors';
|
|
13
13
|
|
|
@@ -37,7 +37,7 @@ const msgs = {
|
|
|
37
37
|
const loginCreds = {
|
|
38
38
|
email: 'jsmith@gmail.com',
|
|
39
39
|
password: 'Password@1',
|
|
40
|
-
} as const;
|
|
40
|
+
} as const;
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
// **** Types **** //
|
|
@@ -73,7 +73,7 @@ describe('auth-router', () => {
|
|
|
73
73
|
// Call API
|
|
74
74
|
callApi(loginCreds)
|
|
75
75
|
.end((err: Error, res: Response) => {
|
|
76
|
-
|
|
76
|
+
!!err && logger.err(err);
|
|
77
77
|
expect(res.status).toBe(OK);
|
|
78
78
|
const cookie = res.headers['set-cookie'][0];
|
|
79
79
|
expect(cookie).toContain(envVars.cookieProps.key);
|
|
@@ -86,7 +86,7 @@ describe('auth-router', () => {
|
|
|
86
86
|
spyOn(userRepo, 'getOne').and.returnValue(Promise.resolve(null));
|
|
87
87
|
callApi(loginCreds)
|
|
88
88
|
.end((err: Error, res: Response) => {
|
|
89
|
-
|
|
89
|
+
!!err && logger.err(err);
|
|
90
90
|
expect(res.status).toBe(UNAUTHORIZED);
|
|
91
91
|
expect(res.body.error).toBe(UnauthorizedError.Msg);
|
|
92
92
|
done();
|
|
@@ -102,7 +102,7 @@ describe('auth-router', () => {
|
|
|
102
102
|
// Call API
|
|
103
103
|
callApi(loginCreds)
|
|
104
104
|
.end((err: Error, res: Response) => {
|
|
105
|
-
|
|
105
|
+
!!err && logger.err(err);
|
|
106
106
|
expect(res.status).toBe(UNAUTHORIZED);
|
|
107
107
|
expect(res.body.error).toBe(UnauthorizedError.Msg);
|
|
108
108
|
done();
|
|
@@ -114,7 +114,7 @@ describe('auth-router', () => {
|
|
|
114
114
|
spyOn(userRepo, 'getOne').and.throwError('Database query failed.');
|
|
115
115
|
callApi(loginCreds)
|
|
116
116
|
.end((err: Error, res: Response) => {
|
|
117
|
-
|
|
117
|
+
!!err && logger.err(err);
|
|
118
118
|
expect(res.status).toBe(BAD_REQUEST);
|
|
119
119
|
expect(res.body.error).toBeTruthy();
|
|
120
120
|
done();
|
|
@@ -129,7 +129,7 @@ describe('auth-router', () => {
|
|
|
129
129
|
it(msgs.goodLogout, (done) => {
|
|
130
130
|
agent.get(logoutPath)
|
|
131
131
|
.end((err: Error, res: Response) => {
|
|
132
|
-
|
|
132
|
+
!!err && logger.err(err);
|
|
133
133
|
expect(res.status).toBe(OK);
|
|
134
134
|
done();
|
|
135
135
|
});
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import supertest from 'supertest';
|
|
2
2
|
import StatusCodes from 'http-status-codes';
|
|
3
3
|
import { SuperTest, Test, Response } from 'supertest';
|
|
4
|
+
import logger from 'jet-logger';
|
|
4
5
|
|
|
5
6
|
import app from '@server';
|
|
6
7
|
import userRepo from '@repos/user-repo';
|
|
7
8
|
import User, { IUser } from '@models/user-model';
|
|
8
|
-
|
|
9
|
+
|
|
9
10
|
import { p as userPaths } from '@routes/user-router';
|
|
10
11
|
import loginAgent from '../support/login-agent';
|
|
11
12
|
import { ParamMissingError, UserNotFoundError, ValidatorFnError } from '@shared/errors';
|
|
@@ -98,7 +99,7 @@ describe('user-router', () => {
|
|
|
98
99
|
spyOn(userRepo, 'getAll').and.returnValue(ret);
|
|
99
100
|
// Call API
|
|
100
101
|
callApi().end((err: Error, res: Response) => {
|
|
101
|
-
|
|
102
|
+
!!err && logger.err(err);
|
|
102
103
|
expect(res.status).toBe(OK);
|
|
103
104
|
// Caste instance-objects to 'User' objects
|
|
104
105
|
const respUsers = res.body.users;
|
|
@@ -116,7 +117,7 @@ describe('user-router', () => {
|
|
|
116
117
|
// Call API
|
|
117
118
|
callApi()
|
|
118
119
|
.end((err: Error, res: Response) => {
|
|
119
|
-
|
|
120
|
+
!!err && logger.err(err);
|
|
120
121
|
expect(res.status).toBe(BAD_REQUEST);
|
|
121
122
|
expect(res.body.error).toBe(errMsg);
|
|
122
123
|
done();
|
|
@@ -139,7 +140,7 @@ describe('user-router', () => {
|
|
|
139
140
|
spyOn(userRepo, 'add').and.returnValue(Promise.resolve());
|
|
140
141
|
callApi(dummyUserData)
|
|
141
142
|
.end((err: Error, res: Response) => {
|
|
142
|
-
|
|
143
|
+
!!err && logger.err(err);
|
|
143
144
|
expect(res.status).toBe(CREATED);
|
|
144
145
|
expect(res.body.error).toBeUndefined();
|
|
145
146
|
done();
|
|
@@ -150,7 +151,7 @@ describe('user-router', () => {
|
|
|
150
151
|
it(msgs.addUserFailedMissingParam, (done) => {
|
|
151
152
|
callApi({})
|
|
152
153
|
.end((err: Error, res: Response) => {
|
|
153
|
-
|
|
154
|
+
!!err && logger.err(err);
|
|
154
155
|
expect(res.status).toBe(BAD_REQUEST);
|
|
155
156
|
expect(res.body.error).toBe(ValidatorFnError.Msg + 'instanceOf');
|
|
156
157
|
done();
|
|
@@ -164,7 +165,7 @@ describe('user-router', () => {
|
|
|
164
165
|
// Call API
|
|
165
166
|
callApi(dummyUserData)
|
|
166
167
|
.end((err: Error, res: Response) => {
|
|
167
|
-
|
|
168
|
+
!!err && logger.err(err);
|
|
168
169
|
expect(res.status).toBe(BAD_REQUEST);
|
|
169
170
|
expect(res.body.error).toBe(errMsg);
|
|
170
171
|
done();
|
|
@@ -187,7 +188,7 @@ describe('user-router', () => {
|
|
|
187
188
|
// Call api
|
|
188
189
|
callApi(dummyUserData)
|
|
189
190
|
.end((err: Error, res: Response) => {
|
|
190
|
-
|
|
191
|
+
!!err && logger.err(err);
|
|
191
192
|
expect(res.status).toBe(OK);
|
|
192
193
|
expect(res.body.error).toBeUndefined();
|
|
193
194
|
done();
|
|
@@ -198,7 +199,7 @@ describe('user-router', () => {
|
|
|
198
199
|
it(msgs.updateParamMissing, (done) => {
|
|
199
200
|
callApi({})
|
|
200
201
|
.end((err: Error, res: Response) => {
|
|
201
|
-
|
|
202
|
+
!!err && logger.err(err);
|
|
202
203
|
expect(res.status).toBe(BAD_REQUEST);
|
|
203
204
|
expect(res.body.error).toBe(ValidatorFnError.Msg + 'instanceOf');
|
|
204
205
|
done();
|
|
@@ -209,7 +210,7 @@ describe('user-router', () => {
|
|
|
209
210
|
it(msgs.updateUserNotFound, (done) => {
|
|
210
211
|
callApi(dummyUserData)
|
|
211
212
|
.end((err: Error, res: Response) => {
|
|
212
|
-
|
|
213
|
+
!!err && logger.err(err);
|
|
213
214
|
expect(res.status).toBe(UserNotFoundError.HttpStatus);
|
|
214
215
|
expect(res.body.error).toBe(UserNotFoundError.Msg);
|
|
215
216
|
done();
|
|
@@ -224,7 +225,7 @@ describe('user-router', () => {
|
|
|
224
225
|
// Call API
|
|
225
226
|
callApi(dummyUserData)
|
|
226
227
|
.end((err: Error, res: Response) => {
|
|
227
|
-
|
|
228
|
+
!!err && logger.err(err);
|
|
228
229
|
expect(res.status).toBe(BAD_REQUEST);
|
|
229
230
|
expect(res.body.error).toBe(updateErrMsg);
|
|
230
231
|
done();
|
|
@@ -248,7 +249,7 @@ describe('user-router', () => {
|
|
|
248
249
|
// Call api
|
|
249
250
|
callApi(5)
|
|
250
251
|
.end((err: Error, res: Response) => {
|
|
251
|
-
|
|
252
|
+
!!err && logger.err(err);
|
|
252
253
|
expect(res.status).toBe(OK);
|
|
253
254
|
expect(res.body.error).toBeUndefined();
|
|
254
255
|
done();
|
|
@@ -259,7 +260,7 @@ describe('user-router', () => {
|
|
|
259
260
|
it(msgs.deleteUserNotFound, (done) => {
|
|
260
261
|
callApi(-1)
|
|
261
262
|
.end((err: Error, res: Response) => {
|
|
262
|
-
|
|
263
|
+
!!err && logger.err(err);
|
|
263
264
|
expect(res.status).toBe(UserNotFoundError.HttpStatus);
|
|
264
265
|
expect(res.body.error).toBe(UserNotFoundError.Msg);
|
|
265
266
|
done();
|
|
@@ -274,7 +275,7 @@ describe('user-router', () => {
|
|
|
274
275
|
// Call API
|
|
275
276
|
callApi(1)
|
|
276
277
|
.end((err: Error, res: Response) => {
|
|
277
|
-
|
|
278
|
+
!!err && logger.err(err);
|
|
278
279
|
expect(res.status).toBe(BAD_REQUEST);
|
|
279
280
|
expect(res.body.error).toBe(deleteErrMsg);
|
|
280
281
|
done();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IUser } from '@models/user-model';
|
|
2
|
-
import
|
|
2
|
+
import sharedFns from '@shared/functions';
|
|
3
3
|
import orm from './mock-orm';
|
|
4
4
|
|
|
5
5
|
|
|
@@ -44,7 +44,7 @@ async function getAll(): Promise<IUser[]> {
|
|
|
44
44
|
*/
|
|
45
45
|
async function add(user: IUser): Promise<void> {
|
|
46
46
|
const db = await orm.openDb();
|
|
47
|
-
user.id = getRandomInt();
|
|
47
|
+
user.id = sharedFns.getRandomInt();
|
|
48
48
|
db.users.push(user);
|
|
49
49
|
return orm.saveDb(db);
|
|
50
50
|
}
|
|
@@ -1,20 +1,13 @@
|
|
|
1
|
-
import logger from 'jet-logger';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// **** Functions **** //
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Print an error object if it's truthy. Useful for testing.
|
|
8
|
-
*/
|
|
9
|
-
export function pErr(err?: Error): void {
|
|
10
|
-
if (!!err) {
|
|
11
|
-
logger.err(err);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
1
|
/**
|
|
16
2
|
* Get a random number between 1 and 1,000,000,000,000
|
|
17
3
|
*/
|
|
18
|
-
|
|
4
|
+
function getRandomInt(): number {
|
|
19
5
|
return Math.floor(Math.random() * 1_000_000_000_000);
|
|
20
6
|
}
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
// **** Export default **** //
|
|
10
|
+
|
|
11
|
+
export default {
|
|
12
|
+
getRandomInt,
|
|
13
|
+
} as const;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "express-generator-typescript",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.15",
|
|
4
4
|
"description": "Generate new Express applications similar to express-generate which but sets it up to use TypeScript instead",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"express-generator-typescript": "node bin/cli.js",
|