kool-koala 1.7.2 → 1.8.0

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.
@@ -1,11 +1,11 @@
1
- import { Next } from 'koa';
2
- import { Configuration } from './configuration';
3
- import { RouterService } from '../services/router-service';
4
- import { AuthenticableEntity } from '../types/entities/authenticable-entity';
5
- import { DataSource } from 'typeorm';
6
- import { AuthorizationService } from '../services';
7
- import { StringEnum } from '../types/common/string-enum';
8
- import { Context } from '../types/common/context';
1
+ import { Next } from "koa";
2
+ import { Configuration } from "./configuration";
3
+ import { RouterService } from "../services/router-service";
4
+ import { AuthenticableEntity } from "../types/entities/authenticable-entity";
5
+ import { DataSource } from "typeorm";
6
+ import { AuthorizationService } from "../services";
7
+ import { StringEnum } from "../types/common/string-enum";
8
+ import { Context } from "../types/common/context";
9
9
  export declare class KoalApp<U extends AuthenticableEntity, P extends StringEnum> {
10
10
  private configuration;
11
11
  private static instance;
package/common/koalapp.js CHANGED
@@ -74,14 +74,16 @@ class KoalApp {
74
74
  }
75
75
  catch (error) {
76
76
  console.log("Error during database initialization...", error);
77
- throw new Error('Error during application intialization...');
77
+ throw new Error("Error during application intialization...");
78
78
  }
79
79
  });
80
80
  }
81
81
  setupDatabaseConnection() {
82
82
  return __awaiter(this, void 0, void 0, function* () {
83
83
  if (this.configuration.getDatabase()) {
84
- this.databaseConnection = yield this.configuration.getDatabase().dataSource.initialize();
84
+ this.databaseConnection = yield this.configuration
85
+ .getDatabase()
86
+ .dataSource.initialize();
85
87
  yield this.databaseConnection.runMigrations();
86
88
  }
87
89
  });
@@ -103,7 +105,7 @@ class KoalApp {
103
105
  if (!configs)
104
106
  return;
105
107
  this.koa.use((ctx, next) => __awaiter(this, void 0, void 0, function* () {
106
- var _a, _b;
108
+ var _a, _b, _c, _d;
107
109
  const requestPath = ctx.request.path.replace(/^\//, "");
108
110
  let fileServed = false;
109
111
  for (const staticFilesConfig of configs) {
@@ -112,23 +114,38 @@ class KoalApp {
112
114
  : path_1.default.join(path_1.default.dirname(require.main.filename), staticFilesConfig.folder);
113
115
  const filePath = path_1.default.join(staticFilesPath, requestPath);
114
116
  if (fs_1.default.existsSync(filePath) && fs_1.default.statSync(filePath).isFile()) {
115
- ctx.type = path_1.default.extname(filePath).slice(1) || "application/octet-stream";
117
+ ctx.type =
118
+ path_1.default.extname(filePath).slice(1) || "application/octet-stream";
116
119
  const stat = fs_1.default.statSync(filePath);
117
120
  ctx.set("Content-Length", stat.size.toString());
118
121
  ctx.body = fs_1.default.createReadStream(filePath);
119
122
  fileServed = true;
120
123
  break;
121
124
  }
125
+ if (fs_1.default.existsSync(filePath) && fs_1.default.statSync(filePath).isDirectory()) {
126
+ const defaultFile = (_a = staticFilesConfig.defaultFile) !== null && _a !== void 0 ? _a : "index.html";
127
+ const indexFilePath = path_1.default.join(filePath, defaultFile);
128
+ if (fs_1.default.existsSync(indexFilePath) &&
129
+ fs_1.default.statSync(indexFilePath).isFile()) {
130
+ ctx.type = (_b = staticFilesConfig.defaultFileMimeType) !== null && _b !== void 0 ? _b : "text/html";
131
+ const stat = fs_1.default.statSync(indexFilePath);
132
+ ctx.set("Content-Length", stat.size.toString());
133
+ ctx.body = fs_1.default.createReadStream(indexFilePath);
134
+ fileServed = true;
135
+ break;
136
+ }
137
+ }
122
138
  }
123
139
  if (!fileServed) {
124
140
  for (const staticFilesConfig of configs) {
125
141
  const staticFilesPath = path_1.default.isAbsolute(staticFilesConfig.folder)
126
142
  ? staticFilesConfig.folder
127
143
  : path_1.default.join(path_1.default.dirname(require.main.filename), staticFilesConfig.folder);
128
- const defaultFile = (_a = staticFilesConfig.defaultFile) !== null && _a !== void 0 ? _a : "index.html";
144
+ const defaultFile = (_c = staticFilesConfig.defaultFile) !== null && _c !== void 0 ? _c : "index.html";
129
145
  const defaultFilePath = path_1.default.join(staticFilesPath, defaultFile);
130
- if (fs_1.default.existsSync(defaultFilePath) && fs_1.default.statSync(defaultFilePath).isFile()) {
131
- ctx.type = (_b = staticFilesConfig.defaultFileMimeType) !== null && _b !== void 0 ? _b : "text/html";
146
+ if (fs_1.default.existsSync(defaultFilePath) &&
147
+ fs_1.default.statSync(defaultFilePath).isFile()) {
148
+ ctx.type = (_d = staticFilesConfig.defaultFileMimeType) !== null && _d !== void 0 ? _d : "text/html";
132
149
  const stat = fs_1.default.statSync(defaultFilePath);
133
150
  ctx.set("Content-Length", stat.size.toString());
134
151
  ctx.body = fs_1.default.createReadStream(defaultFilePath);
@@ -178,16 +195,16 @@ class KoalApp {
178
195
  return __awaiter(this, void 0, void 0, function* () {
179
196
  const authHeader = context.headers.authorization;
180
197
  if (authHeader) {
181
- const token = authHeader.split(' ')[1];
198
+ const token = authHeader.split(" ")[1];
182
199
  try {
183
- context.state.user = jsonwebtoken_1.default.verify(token, this.configuration.getJwtParameters().secretKey);
200
+ context.state.user = (jsonwebtoken_1.default.verify(token, this.configuration.getJwtParameters().secretKey));
184
201
  yield next();
185
202
  }
186
203
  catch (error) {
187
204
  context.status = status_code_1.StatusCode.UNAUTHORIZED;
188
205
  context.body = {
189
206
  success: false,
190
- message: 'Invalid token'
207
+ message: "Invalid token",
191
208
  };
192
209
  }
193
210
  }
@@ -206,14 +223,14 @@ class KoalApp {
206
223
  context.status = error.getStatusCode();
207
224
  context.body = {
208
225
  success: false,
209
- message: error.message
226
+ message: error.message,
210
227
  };
211
228
  }
212
229
  else {
213
230
  console.log(error);
214
231
  context.status = status_code_1.StatusCode.INTERNAL_SERVER_ERROR;
215
232
  context.body = {
216
- success: false
233
+ success: false,
217
234
  };
218
235
  }
219
236
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/../src/common/koalapp.ts"],"names":[],"mappings":"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","file":"koalapp.js","sourcesContent":["import Koa, { Next } from 'koa';\nimport { Configuration } from './configuration';\nimport { RouterService } from '../services/router-service';\nimport { AuthenticableEntity } from '../types/entities/authenticable-entity';\nimport { DataSource } from 'typeorm';\nimport { StatusCode } from './status-code';\nimport jwt from 'jsonwebtoken';\nimport bodyParser from 'koa-bodyparser';\nimport { BaseResponse, ErrorBase } from '../types';\nimport path from \"path\";\nimport fs from \"fs\";\nimport { AuthorizationService } from '../services';\nimport { StringEnum } from '../types/common/string-enum';\nimport { errorHandlerMiddleware } from '../middlewares/error-handler-middleware';\nimport { transactionMiddleware } from '../middlewares/transaction-middleware';\nimport { Server } from 'http';\nimport { Context } from '../types/common/context';\n\nexport class KoalApp<\n U extends AuthenticableEntity,\n P extends StringEnum\n> {\n private static instance: KoalApp<any, any>;\n\n private koa = new Koa();\n private routerService: RouterService;\n private databaseConnection: DataSource;\n\n private server: Server;\n\n private authorizationService: AuthorizationService<U, P>;\n\n private constructor(private configuration: Configuration<U, P>) {\n }\n\n public static getInstance<\n T extends AuthenticableEntity,\n Q extends StringEnum\n >(configuration?: Configuration<T, Q>): KoalApp<T, Q> {\n if (!KoalApp.instance) {\n if (!configuration) {\n throw new Error(\"Configuration is required\");\n }\n KoalApp.instance = new KoalApp(configuration!);\n }\n return KoalApp.instance;\n }\n\n public static async resetInstance() {\n await KoalApp.getInstance().getDatabaseConnection().destroy();\n KoalApp.instance = undefined;\n }\n\n public getConfiguration(): Configuration<U, P> {\n return this.configuration;\n }\n\n public getRouterService(): RouterService {\n return this.routerService;\n }\n\n public getDatabaseConnection(): DataSource {\n return this.databaseConnection;\n }\n async initialize() {\n try {\n await this.setupDatabaseConnection();\n console.log(\"Database connection initialized.\");\n this.setupErrorHandler();\n console.log(\"Error handler initialized.\");\n this.setupTransaction();\n console.log(\"Transaction starter middleware initialized.\");\n this.koa.use(this.authorizationHeaderParser.bind(this));\n console.log(\"Authorization header parser initialized.\");\n this.koa.use(bodyParser());\n console.log(\"Body parser initialized.\");\n this.registerMiddlewaresFromConfiguration();\n console.log(\"Middlewares registered from configuration.\");\n this.registerEndpoints();\n console.log(\"Endpoints registered.\");\n this.registerStaticFileServerMiddleware();\n console.log(\"Static file server initialized.\");\n } catch (error) {\n console.log(\"Error during database initialization...\", error);\n throw new Error('Error during application intialization...');\n }\n }\n async setupDatabaseConnection() {\n if (this.configuration.getDatabase()) {\n this.databaseConnection = await this.configuration.getDatabase().dataSource.initialize();\n await this.databaseConnection.runMigrations();\n }\n }\n setupErrorHandler() {\n this.koa.use(errorHandlerMiddleware);\n }\n setupTransaction() {\n this.koa.use(transactionMiddleware);\n }\n\n registerEndpoints() {\n this.routerService = new RouterService(\n this.configuration.getControllers()\n );\n this.koa\n .use(this.routerService.getRoutes())\n .use(this.routerService.allowedMethods());\n }\n\n registerStaticFileServerMiddleware() {\n const configs = this.configuration.getStaticFilesConfiguration();\n if (!configs) return;\n\n this.koa.use(async (ctx: Context, next: () => Promise<void>) => {\n const requestPath = ctx.request.path.replace(/^\\//, \"\");\n let fileServed = false;\n\n for (const staticFilesConfig of configs) {\n const staticFilesPath = path.isAbsolute(staticFilesConfig.folder)\n ? staticFilesConfig.folder\n : path.join(path.dirname(require.main.filename), staticFilesConfig.folder);\n\n const filePath = path.join(staticFilesPath, requestPath);\n\n if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {\n ctx.type = path.extname(filePath).slice(1) || \"application/octet-stream\";\n const stat = fs.statSync(filePath);\n ctx.set(\"Content-Length\", stat.size.toString());\n ctx.body = fs.createReadStream(filePath);\n fileServed = true;\n break;\n }\n }\n\n if (!fileServed) {\n for (const staticFilesConfig of configs) {\n const staticFilesPath = path.isAbsolute(staticFilesConfig.folder)\n ? staticFilesConfig.folder\n : path.join(path.dirname(require.main.filename), staticFilesConfig.folder);\n const defaultFile = staticFilesConfig.defaultFile ?? \"index.html\";\n const defaultFilePath = path.join(staticFilesPath, defaultFile);\n\n if (fs.existsSync(defaultFilePath) && fs.statSync(defaultFilePath).isFile()) {\n ctx.type = staticFilesConfig.defaultFileMimeType ?? \"text/html\";\n const stat = fs.statSync(defaultFilePath);\n ctx.set(\"Content-Length\", stat.size.toString());\n ctx.body = fs.createReadStream(defaultFilePath);\n fileServed = true;\n break;\n }\n }\n }\n\n if (!fileServed) {\n await next();\n }\n });\n }\n\n registerMiddlewaresFromConfiguration() {\n for (const middleware of this.configuration.getMiddlewares() || []) {\n this.koa.use(middleware);\n }\n }\n\n async start(callback?: (configuration: Configuration<U, P>) => void) {\n this.server = this.koa.listen(this.configuration.getPort(), () => {\n if (callback) {\n callback(this.configuration);\n }\n });\n }\n\n stop() {\n return new Promise<void>((resolve, reject) => {\n if (this.server) {\n this.server.close((error) => {\n if (!error) {\n resolve();\n }\n else {\n reject();\n }\n });\n this.server = undefined;\n }\n else {\n reject();\n }\n });\n }\n\n async authorizationHeaderParser(context: Context, next: Next) {\n const authHeader = context.headers.authorization;\n if (authHeader) {\n const token = authHeader.split(' ')[1];\n try {\n context.state.user = <AuthenticableEntity>jwt.verify(token, this.configuration.getJwtParameters().secretKey);\n await next();\n } catch (error) {\n context.status = StatusCode.UNAUTHORIZED;\n context.body = {\n success: false,\n message: 'Invalid token'\n }\n }\n }\n else {\n await next();\n }\n }\n\n async errorHandler(context: Context, next: Next) {\n try {\n await next();\n } catch (error) {\n if (error instanceof ErrorBase) {\n context.status = error.getStatusCode();\n context.body = <BaseResponse>{\n success: false,\n message: error.message\n };\n }\n else {\n console.log(error);\n context.status = StatusCode.INTERNAL_SERVER_ERROR;\n context.body = <BaseResponse>{\n success: false\n };\n }\n }\n }\n\n getAuthorizationService() {\n return this.authorizationService;\n }\n}"]}
1
+ {"version":3,"sources":["../src/../src/common/koalapp.ts"],"names":[],"mappings":"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","file":"koalapp.js","sourcesContent":["import Koa, { Next } from \"koa\";\nimport { Configuration } from \"./configuration\";\nimport { RouterService } from \"../services/router-service\";\nimport { AuthenticableEntity } from \"../types/entities/authenticable-entity\";\nimport { DataSource } from \"typeorm\";\nimport { StatusCode } from \"./status-code\";\nimport jwt from \"jsonwebtoken\";\nimport bodyParser from \"koa-bodyparser\";\nimport { BaseResponse, ErrorBase } from \"../types\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { AuthorizationService } from \"../services\";\nimport { StringEnum } from \"../types/common/string-enum\";\nimport { errorHandlerMiddleware } from \"../middlewares/error-handler-middleware\";\nimport { transactionMiddleware } from \"../middlewares/transaction-middleware\";\nimport { Server } from \"http\";\nimport { Context } from \"../types/common/context\";\n\nexport class KoalApp<U extends AuthenticableEntity, P extends StringEnum> {\n private static instance: KoalApp<any, any>;\n\n private koa = new Koa();\n private routerService: RouterService;\n private databaseConnection: DataSource;\n\n private server: Server;\n\n private authorizationService: AuthorizationService<U, P>;\n\n private constructor(private configuration: Configuration<U, P>) {}\n\n public static getInstance<\n T extends AuthenticableEntity,\n Q extends StringEnum\n >(configuration?: Configuration<T, Q>): KoalApp<T, Q> {\n if (!KoalApp.instance) {\n if (!configuration) {\n throw new Error(\"Configuration is required\");\n }\n KoalApp.instance = new KoalApp(configuration!);\n }\n return KoalApp.instance;\n }\n\n public static async resetInstance() {\n await KoalApp.getInstance().getDatabaseConnection().destroy();\n KoalApp.instance = undefined;\n }\n\n public getConfiguration(): Configuration<U, P> {\n return this.configuration;\n }\n\n public getRouterService(): RouterService {\n return this.routerService;\n }\n\n public getDatabaseConnection(): DataSource {\n return this.databaseConnection;\n }\n async initialize() {\n try {\n await this.setupDatabaseConnection();\n console.log(\"Database connection initialized.\");\n this.setupErrorHandler();\n console.log(\"Error handler initialized.\");\n this.setupTransaction();\n console.log(\"Transaction starter middleware initialized.\");\n this.koa.use(this.authorizationHeaderParser.bind(this));\n console.log(\"Authorization header parser initialized.\");\n this.koa.use(bodyParser());\n console.log(\"Body parser initialized.\");\n this.registerMiddlewaresFromConfiguration();\n console.log(\"Middlewares registered from configuration.\");\n this.registerEndpoints();\n console.log(\"Endpoints registered.\");\n this.registerStaticFileServerMiddleware();\n console.log(\"Static file server initialized.\");\n } catch (error) {\n console.log(\"Error during database initialization...\", error);\n throw new Error(\"Error during application intialization...\");\n }\n }\n async setupDatabaseConnection() {\n if (this.configuration.getDatabase()) {\n this.databaseConnection = await this.configuration\n .getDatabase()\n .dataSource.initialize();\n await this.databaseConnection.runMigrations();\n }\n }\n setupErrorHandler() {\n this.koa.use(errorHandlerMiddleware);\n }\n setupTransaction() {\n this.koa.use(transactionMiddleware);\n }\n\n registerEndpoints() {\n this.routerService = new RouterService(this.configuration.getControllers());\n this.koa\n .use(this.routerService.getRoutes())\n .use(this.routerService.allowedMethods());\n }\n\n registerStaticFileServerMiddleware() {\n const configs = this.configuration.getStaticFilesConfiguration();\n if (!configs) return;\n\n this.koa.use(async (ctx: Context, next: () => Promise<void>) => {\n const requestPath = ctx.request.path.replace(/^\\//, \"\");\n let fileServed = false;\n\n for (const staticFilesConfig of configs) {\n const staticFilesPath = path.isAbsolute(staticFilesConfig.folder)\n ? staticFilesConfig.folder\n : path.join(\n path.dirname(require.main.filename),\n staticFilesConfig.folder\n );\n\n const filePath = path.join(staticFilesPath, requestPath);\n\n if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {\n ctx.type =\n path.extname(filePath).slice(1) || \"application/octet-stream\";\n const stat = fs.statSync(filePath);\n ctx.set(\"Content-Length\", stat.size.toString());\n ctx.body = fs.createReadStream(filePath);\n fileServed = true;\n break;\n }\n\n if (fs.existsSync(filePath) && fs.statSync(filePath).isDirectory()) {\n const defaultFile = staticFilesConfig.defaultFile ?? \"index.html\";\n const indexFilePath = path.join(filePath, defaultFile);\n\n if (\n fs.existsSync(indexFilePath) &&\n fs.statSync(indexFilePath).isFile()\n ) {\n ctx.type = staticFilesConfig.defaultFileMimeType ?? \"text/html\";\n const stat = fs.statSync(indexFilePath);\n ctx.set(\"Content-Length\", stat.size.toString());\n ctx.body = fs.createReadStream(indexFilePath);\n fileServed = true;\n break;\n }\n }\n }\n\n if (!fileServed) {\n for (const staticFilesConfig of configs) {\n const staticFilesPath = path.isAbsolute(staticFilesConfig.folder)\n ? staticFilesConfig.folder\n : path.join(\n path.dirname(require.main.filename),\n staticFilesConfig.folder\n );\n const defaultFile = staticFilesConfig.defaultFile ?? \"index.html\";\n const defaultFilePath = path.join(staticFilesPath, defaultFile);\n\n if (\n fs.existsSync(defaultFilePath) &&\n fs.statSync(defaultFilePath).isFile()\n ) {\n ctx.type = staticFilesConfig.defaultFileMimeType ?? \"text/html\";\n const stat = fs.statSync(defaultFilePath);\n ctx.set(\"Content-Length\", stat.size.toString());\n ctx.body = fs.createReadStream(defaultFilePath);\n fileServed = true;\n break;\n }\n }\n }\n\n if (!fileServed) {\n await next();\n }\n });\n }\n\n registerMiddlewaresFromConfiguration() {\n for (const middleware of this.configuration.getMiddlewares() || []) {\n this.koa.use(middleware);\n }\n }\n\n async start(callback?: (configuration: Configuration<U, P>) => void) {\n this.server = this.koa.listen(this.configuration.getPort(), () => {\n if (callback) {\n callback(this.configuration);\n }\n });\n }\n\n stop() {\n return new Promise<void>((resolve, reject) => {\n if (this.server) {\n this.server.close((error) => {\n if (!error) {\n resolve();\n } else {\n reject();\n }\n });\n this.server = undefined;\n } else {\n reject();\n }\n });\n }\n\n async authorizationHeaderParser(context: Context, next: Next) {\n const authHeader = context.headers.authorization;\n if (authHeader) {\n const token = authHeader.split(\" \")[1];\n try {\n context.state.user = <AuthenticableEntity>(\n jwt.verify(token, this.configuration.getJwtParameters().secretKey)\n );\n await next();\n } catch (error) {\n context.status = StatusCode.UNAUTHORIZED;\n context.body = {\n success: false,\n message: \"Invalid token\",\n };\n }\n } else {\n await next();\n }\n }\n\n async errorHandler(context: Context, next: Next) {\n try {\n await next();\n } catch (error) {\n if (error instanceof ErrorBase) {\n context.status = error.getStatusCode();\n context.body = <BaseResponse>{\n success: false,\n message: error.message,\n };\n } else {\n console.log(error);\n context.status = StatusCode.INTERNAL_SERVER_ERROR;\n context.body = <BaseResponse>{\n success: false,\n };\n }\n }\n }\n\n getAuthorizationService() {\n return this.authorizationService;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { DeepPartial, FindManyOptions, FindOneOptions, FindOptionsRelations, FindOptionsWhere, QueryRunner, Repository } from "typeorm";
1
+ import { DeepPartial, DeleteResult, FindManyOptions, FindOneOptions, FindOptionsRelations, FindOptionsWhere, QueryRunner, Repository } from "typeorm";
2
2
  import { IdentifiableEntity } from "../../types";
3
3
  export declare abstract class RepositoryBase<T extends IdentifiableEntity> {
4
4
  private _repository;
@@ -10,7 +10,9 @@ export declare abstract class RepositoryBase<T extends IdentifiableEntity> {
10
10
  getOneWhere(options: FindOneOptions<T>): Promise<T>;
11
11
  getById(id: number, relations?: FindOptionsRelations<T>): Promise<T>;
12
12
  save(entity: T | DeepPartial<T>): Promise<DeepPartial<T> & T>;
13
- delete(entity: T): Promise<import("typeorm").DeleteResult>;
14
- deleteWhere(where?: FindOptionsWhere<T>): Promise<import("typeorm").DeleteResult>;
15
- deleteAll(): Promise<import("typeorm").DeleteResult>;
13
+ delete(entity: T): Promise<DeleteResult>;
14
+ deleteWhere(where?: FindOptionsWhere<T>): Promise<DeleteResult>;
15
+ deleteAll(): Promise<DeleteResult> | Promise<void>;
16
+ createQueryBuilder<R = T>(): import("typeorm").SelectQueryBuilder<T>;
17
+ getColumnNameFromProperty(propertyName: keyof T): string;
16
18
  }
@@ -5,7 +5,9 @@ const common_1 = require("../../common");
5
5
  class RepositoryBase {
6
6
  constructor(queryRunner) {
7
7
  if (queryRunner === undefined) {
8
- this._repository = common_1.KoalApp.getInstance().getDatabaseConnection().getRepository(this.getEntityType());
8
+ this._repository = common_1.KoalApp.getInstance()
9
+ .getDatabaseConnection()
10
+ .getRepository(this.getEntityType());
9
11
  }
10
12
  else {
11
13
  this._repository = queryRunner.manager.getRepository(this.getEntityType());
@@ -26,9 +28,9 @@ class RepositoryBase {
26
28
  getById(id, relations) {
27
29
  return this.getRepository().findOne({
28
30
  where: {
29
- id
31
+ id,
30
32
  },
31
- relations
33
+ relations,
32
34
  });
33
35
  }
34
36
  save(entity) {
@@ -41,7 +43,13 @@ class RepositoryBase {
41
43
  return this.getRepository().delete(where);
42
44
  }
43
45
  deleteAll() {
44
- return this.deleteWhere({});
46
+ return this.getRepository().deleteAll();
47
+ }
48
+ createQueryBuilder() {
49
+ return this.getRepository().createQueryBuilder();
50
+ }
51
+ getColumnNameFromProperty(propertyName) {
52
+ return this.getRepository().metadata.findColumnWithPropertyName(propertyName).databaseName;
45
53
  }
46
54
  }
47
55
  exports.RepositoryBase = RepositoryBase;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/../src/database/repositories/repository-base.ts"],"names":[],"mappings":";;;AAEA,yCAAuC;AAEvC,MAAsB,cAAc;IAElC,YAAY,WAAyB;QACnC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,WAAW,GAAG,gBAAO,CAAC,WAAW,EAAE,CAAC,qBAAqB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACvG,CAAC;aACI,CAAC;YACJ,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,QAAQ,CAAC,OAA2B;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,WAAW,CAAC,OAA0B;QACpC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,EAAU,EAAE,SAAmC;QACrD,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAoB;YACrD,KAAK,EAAE;gBACL,EAAE;aACH;YACD,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,MAA0B;QAC7B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,CAAC,MAAS;QACd,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,WAAW,CAAC,KAA2B;QACrC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,SAAS;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF;AA3CD,wCA2CC","file":"repository-base.js","sourcesContent":["import { DeepPartial, FindManyOptions, FindOneOptions, FindOptionsRelations, FindOptionsWhere, QueryRunner, Repository } from \"typeorm\";\nimport { IdentifiableEntity } from \"../../types\";\nimport { KoalApp } from \"../../common\";\n\nexport abstract class RepositoryBase<T extends IdentifiableEntity> {\n private _repository: Repository<T>;\n constructor(queryRunner?: QueryRunner) {\n if (queryRunner === undefined) {\n this._repository = KoalApp.getInstance().getDatabaseConnection().getRepository(this.getEntityType());\n }\n else {\n this._repository = queryRunner.manager.getRepository(this.getEntityType());\n }\n }\n getRepository() {\n return this._repository;\n }\n abstract getEntityType(): new () => T;\n getAll() {\n return this._repository.find();\n }\n getWhere(options: FindManyOptions<T>) {\n return this._repository.find(options);\n }\n getOneWhere(options: FindOneOptions<T>) {\n return this._repository.findOne(options);\n }\n getById(id: number, relations?: FindOptionsRelations<T>) {\n return this.getRepository().findOne(<FindOneOptions<T>>{\n where: {\n id\n },\n relations\n });\n }\n save(entity: T | DeepPartial<T>) {\n return this.getRepository().save(entity);\n }\n delete(entity: T) {\n return this.getRepository().delete(entity.id);\n }\n deleteWhere(where?: FindOptionsWhere<T>) {\n return this.getRepository().delete(where);\n }\n deleteAll() {\n return this.deleteWhere({});\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/../src/database/repositories/repository-base.ts"],"names":[],"mappings":";;;AAWA,yCAAuC;AAEvC,MAAsB,cAAc;IAElC,YAAY,WAAyB;QACnC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,WAAW,GAAG,gBAAO,CAAC,WAAW,EAAE;iBACrC,qBAAqB,EAAE;iBACvB,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,CAClD,IAAI,CAAC,aAAa,EAAE,CACrB,CAAC;QACJ,CAAC;IACH,CAAC;IACD,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,QAAQ,CAAC,OAA2B;QAClC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,WAAW,CAAC,OAA0B;QACpC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,EAAU,EAAE,SAAmC;QACrD,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAoB;YACrD,KAAK,EAAE;gBACL,EAAE;aACH;YACD,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,MAA0B;QAC7B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,CAAC,MAAS;QACd,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,WAAW,CAAC,KAA2B;QACrC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,CAAC;IAC1C,CAAC;IACD,kBAAkB;QAChB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,kBAAkB,EAAE,CAAC;IACnD,CAAC;IACD,yBAAyB,CAAC,YAAqB;QAC7C,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,YAAsB,CAAC,CAAC,YAAY,CAAC;IACvG,CAAC;CACF;AApDD,wCAoDC","file":"repository-base.js","sourcesContent":["import {\n DeepPartial,\n DeleteResult,\n FindManyOptions,\n FindOneOptions,\n FindOptionsRelations,\n FindOptionsWhere,\n QueryRunner,\n Repository,\n} from \"typeorm\";\nimport { IdentifiableEntity } from \"../../types\";\nimport { KoalApp } from \"../../common\";\n\nexport abstract class RepositoryBase<T extends IdentifiableEntity> {\n private _repository: Repository<T>;\n constructor(queryRunner?: QueryRunner) {\n if (queryRunner === undefined) {\n this._repository = KoalApp.getInstance()\n .getDatabaseConnection()\n .getRepository(this.getEntityType());\n } else {\n this._repository = queryRunner.manager.getRepository(\n this.getEntityType()\n );\n }\n }\n getRepository() {\n return this._repository;\n }\n abstract getEntityType(): new () => T;\n getAll() {\n return this._repository.find();\n }\n getWhere(options: FindManyOptions<T>) {\n return this._repository.find(options);\n }\n getOneWhere(options: FindOneOptions<T>) {\n return this._repository.findOne(options);\n }\n getById(id: number, relations?: FindOptionsRelations<T>) {\n return this.getRepository().findOne(<FindOneOptions<T>>{\n where: {\n id,\n },\n relations,\n });\n }\n save(entity: T | DeepPartial<T>) {\n return this.getRepository().save(entity);\n }\n delete(entity: T) {\n return this.getRepository().delete(entity.id);\n }\n deleteWhere(where?: FindOptionsWhere<T>) {\n return this.getRepository().delete(where);\n }\n deleteAll(): Promise<DeleteResult> | Promise<void> {\n return this.getRepository().deleteAll();\n }\n createQueryBuilder<R = T>() {\n return this.getRepository().createQueryBuilder();\n }\n getColumnNameFromProperty(propertyName: keyof T): string {\n return this.getRepository().metadata.findColumnWithPropertyName(propertyName as string).databaseName;\n }\n}\n"]}
@@ -9,5 +9,5 @@ export declare abstract class SoftDeletableRepositoryBase<T extends Identifiable
9
9
  getById(id: number, relations?: FindOptionsRelations<T>, withDeleted?: boolean): Promise<T>;
10
10
  delete(entity: T, hardDelete?: boolean): Promise<DeleteResult>;
11
11
  deleteWhere(where?: FindOptionsWhere<T>, hardDelete?: boolean): Promise<DeleteResult>;
12
- deleteAll(hardDelete?: boolean): Promise<DeleteResult>;
12
+ deleteAll(hardDelete?: boolean): Promise<DeleteResult> | Promise<void>;
13
13
  }
@@ -5,7 +5,7 @@ const repository_base_1 = require("./repository-base");
5
5
  class SoftDeletableRepositoryBase extends repository_base_1.RepositoryBase {
6
6
  getAll(withDeleted = false) {
7
7
  return this.getRepository().find({
8
- withDeleted
8
+ withDeleted,
9
9
  });
10
10
  }
11
11
  getWhere(options, withDeleted = false) {
@@ -19,10 +19,10 @@ class SoftDeletableRepositoryBase extends repository_base_1.RepositoryBase {
19
19
  getById(id, relations, withDeleted = false) {
20
20
  return this.getRepository().findOne({
21
21
  where: {
22
- id
22
+ id,
23
23
  },
24
24
  relations,
25
- withDeleted
25
+ withDeleted,
26
26
  });
27
27
  }
28
28
  delete(entity, hardDelete = false) {
@@ -42,7 +42,12 @@ class SoftDeletableRepositoryBase extends repository_base_1.RepositoryBase {
42
42
  }
43
43
  }
44
44
  deleteAll(hardDelete = false) {
45
- return this.deleteWhere({}, hardDelete);
45
+ if (!hardDelete) {
46
+ return this.getRepository().deleteAll();
47
+ }
48
+ else {
49
+ return this.getRepository().clear();
50
+ }
46
51
  }
47
52
  }
48
53
  exports.SoftDeletableRepositoryBase = SoftDeletableRepositoryBase;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/../src/database/repositories/soft-deletable-repository-base.ts"],"names":[],"mappings":";;;AACA,uDAAmD;AAInD,MAAsB,2BAA0E,SAAQ,gCAAiB;IAC9G,MAAM,CAAC,cAAuB,KAAK;QAC1C,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC;YAC/B,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAEQ,QAAQ,CAAC,OAA2B,EAAE,cAAuB,KAAK;QACzE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;QAClC,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAEQ,WAAW,CAAC,OAA0B,EAAE,cAAuB,KAAK;QAC3E,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;QAClC,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEQ,OAAO,CAAC,EAAU,EAAE,SAAmC,EAAE,cAAuB,KAAK;QAC5F,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAoB;YACrD,KAAK,EAAE;gBACL,EAAE;aACH;YACD,SAAS;YACT,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAEQ,MAAM,CAAC,MAAS,EAAE,aAAsB,KAAK;QACpD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;aACI,CAAC;YACJ,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAEQ,WAAW,CAAC,KAA2B,EAAE,aAAsB,KAAK;QAC3E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;aACI,CAAC;YACJ,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAEQ,SAAS,CAAC,aAAsB,KAAK;QAC5C,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC1C,CAAC;CACF;AAhDD,kEAgDC","file":"soft-deletable-repository-base.js","sourcesContent":["import { DeleteResult, FindManyOptions, FindOneOptions, FindOptionsRelations, FindOptionsWhere } from \"typeorm\";\nimport { RepositoryBase } from \"./repository-base\";\nimport { SoftDeletable } from \"../entities\";\nimport { IdentifiableEntity } from \"../../types\";\n\nexport abstract class SoftDeletableRepositoryBase<T extends IdentifiableEntity & SoftDeletable> extends RepositoryBase<T> {\n override getAll(withDeleted: boolean = false) {\n return this.getRepository().find({\n withDeleted\n });\n }\n\n override getWhere(options: FindManyOptions<T>, withDeleted: boolean = false) {\n options.withDeleted = withDeleted;\n return super.getWhere(options);\n }\n\n override getOneWhere(options: FindOneOptions<T>, withDeleted: boolean = false) {\n options.withDeleted = withDeleted;\n return super.getOneWhere(options);\n }\n\n override getById(id: number, relations?: FindOptionsRelations<T>, withDeleted: boolean = false) {\n return this.getRepository().findOne(<FindOneOptions<T>>{\n where: {\n id\n },\n relations,\n withDeleted\n });\n }\n\n override delete(entity: T, hardDelete: boolean = false) {\n if (!hardDelete) {\n return this.getRepository().softDelete(entity.id);\n }\n else {\n return this.getRepository().delete(entity.id);\n }\n }\n\n override deleteWhere(where?: FindOptionsWhere<T>, hardDelete: boolean = false) {\n if (!hardDelete) {\n return this.getRepository().softDelete(where);\n }\n else {\n return this.getRepository().delete(where);\n }\n }\n\n override deleteAll(hardDelete: boolean = false): Promise<DeleteResult> {\n return this.deleteWhere({}, hardDelete);\n }\n}"]}
1
+ {"version":3,"sources":["../src/../src/database/repositories/soft-deletable-repository-base.ts"],"names":[],"mappings":";;;AAOA,uDAAmD;AAInD,MAAsB,2BAEpB,SAAQ,gCAAiB;IAChB,MAAM,CAAC,cAAuB,KAAK;QAC1C,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC;YAC/B,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAEQ,QAAQ,CAAC,OAA2B,EAAE,cAAuB,KAAK;QACzE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;QAClC,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAEQ,WAAW,CAClB,OAA0B,EAC1B,cAAuB,KAAK;QAE5B,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;QAClC,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEQ,OAAO,CACd,EAAU,EACV,SAAmC,EACnC,cAAuB,KAAK;QAE5B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAoB;YACrD,KAAK,EAAE;gBACL,EAAE;aACH;YACD,SAAS;YACT,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAEQ,MAAM,CAAC,MAAS,EAAE,aAAsB,KAAK;QACpD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAEQ,WAAW,CAClB,KAA2B,EAC3B,aAAsB,KAAK;QAE3B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAEQ,SAAS,CAChB,aAAsB,KAAK;QAE3B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;CACF;AAhED,kEAgEC","file":"soft-deletable-repository-base.js","sourcesContent":["import {\n DeleteResult,\n FindManyOptions,\n FindOneOptions,\n FindOptionsRelations,\n FindOptionsWhere,\n} from \"typeorm\";\nimport { RepositoryBase } from \"./repository-base\";\nimport { SoftDeletable } from \"../entities\";\nimport { IdentifiableEntity } from \"../../types\";\n\nexport abstract class SoftDeletableRepositoryBase<\n T extends IdentifiableEntity & SoftDeletable\n> extends RepositoryBase<T> {\n override getAll(withDeleted: boolean = false) {\n return this.getRepository().find({\n withDeleted,\n });\n }\n\n override getWhere(options: FindManyOptions<T>, withDeleted: boolean = false) {\n options.withDeleted = withDeleted;\n return super.getWhere(options);\n }\n\n override getOneWhere(\n options: FindOneOptions<T>,\n withDeleted: boolean = false\n ) {\n options.withDeleted = withDeleted;\n return super.getOneWhere(options);\n }\n\n override getById(\n id: number,\n relations?: FindOptionsRelations<T>,\n withDeleted: boolean = false\n ) {\n return this.getRepository().findOne(<FindOneOptions<T>>{\n where: {\n id,\n },\n relations,\n withDeleted,\n });\n }\n\n override delete(entity: T, hardDelete: boolean = false) {\n if (!hardDelete) {\n return this.getRepository().softDelete(entity.id);\n } else {\n return this.getRepository().delete(entity.id);\n }\n }\n\n override deleteWhere(\n where?: FindOptionsWhere<T>,\n hardDelete: boolean = false\n ) {\n if (!hardDelete) {\n return this.getRepository().softDelete(where);\n } else {\n return this.getRepository().delete(where);\n }\n }\n\n override deleteAll(\n hardDelete: boolean = false\n ): Promise<DeleteResult> | Promise<void> {\n if (!hardDelete) {\n return this.getRepository().deleteAll();\n } else {\n return this.getRepository().clear();\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kool-koala",
3
- "version": "1.7.2",
3
+ "version": "1.8.0",
4
4
  "description": "Full-stack framework to create NodeJS applications on server side and Angular applications on the client side with ease.",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -57,12 +57,11 @@
57
57
  "rimraf": "^6.0.1",
58
58
  "semantic-release": "^24.2.3",
59
59
  "sqlite3": "^5.1.7",
60
- "ts-node": "^10.9.2"
60
+ "ts-node": "^10.9.2",
61
+ "typeorm": "^0.3.25"
61
62
  },
62
- "config": {
63
- "commitizen": {
64
- "path": "./node_modules/cz-git"
65
- }
63
+ "peerDependencies": {
64
+ "typeorm": "^0.3.25"
66
65
  },
67
66
  "dependencies": {
68
67
  "@types/koa": "^2.15.0",
@@ -74,7 +73,11 @@
74
73
  "koa-bodyparser": "^4.4.1",
75
74
  "koa-router": "^13.0.1",
76
75
  "reflect-metadata": "^0.2.2",
77
- "typeorm": "^0.3.22",
78
76
  "yargs": "^17.7.2"
77
+ },
78
+ "config": {
79
+ "commitizen": {
80
+ "path": "./node_modules/cz-git"
81
+ }
79
82
  }
80
83
  }