kool-koala 1.4.0 → 1.5.1
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.
- package/bin/kool-koala.js +12 -1
- package/common/koalapp.d.ts +4 -3
- package/common/koalapp.js.map +1 -1
- package/controllers/rest-controller-base.d.ts +8 -8
- package/controllers/rest-controller-base.js.map +1 -1
- package/koalas/index.js +15 -6
- package/koalas/index.js.map +1 -1
- package/koalas/jumping-koala.d.ts +1 -0
- package/koalas/jumping-koala.js +63 -0
- package/koalas/jumping-koala.js.map +1 -0
- package/koalas/koala-ascii.d.ts +1 -0
- package/koalas/koala-ascii.js +8 -0
- package/koalas/koala-ascii.js.map +1 -0
- package/koalas/koala-rotated-ascii.d.ts +1 -0
- package/koalas/koala-rotated-ascii.js +20 -0
- package/koalas/koala-rotated-ascii.js.map +1 -0
- package/koalas/original-koala.d.ts +1 -0
- package/koalas/original-koala.js +13 -0
- package/koalas/original-koala.js.map +1 -0
- package/koalas/rotated-koala.d.ts +1 -0
- package/koalas/rotated-koala.js +11 -0
- package/koalas/rotated-koala.js.map +1 -0
- package/koalas/running-koala.d.ts +1 -0
- package/koalas/running-koala.js +33 -0
- package/koalas/running-koala.js.map +1 -0
- package/koalas/secret-koala.d.ts +1 -0
- package/koalas/secret-koala.js +43 -0
- package/koalas/secret-koala.js.map +1 -0
- package/middlewares/transaction-middleware.js +4 -0
- package/middlewares/transaction-middleware.js.map +1 -1
- package/package.json +4 -4
package/bin/kool-koala.js
CHANGED
|
@@ -1,2 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
require(
|
|
2
|
+
const yargs = require('yargs');
|
|
3
|
+
const { hideBin } = require('yargs/helpers');
|
|
4
|
+
const { printKoalaArt } = require('../index');
|
|
5
|
+
|
|
6
|
+
const argv = yargs(hideBin(process.argv))
|
|
7
|
+
.scriptName('npx kool-koala')
|
|
8
|
+
.command('*', 'Default command', (yargs) => {
|
|
9
|
+
printKoalaArt();
|
|
10
|
+
})
|
|
11
|
+
.usage('$0 [args]')
|
|
12
|
+
.help('h')
|
|
13
|
+
.alias('h', 'help').argv;
|
package/common/koalapp.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Next
|
|
1
|
+
import { Next } from 'koa';
|
|
2
2
|
import { Configuration } from './configuration';
|
|
3
3
|
import { RouterService } from '../services/router-service';
|
|
4
4
|
import { AuthenticableEntity } from '../types/entities/authenticable-entity';
|
|
5
5
|
import { DataSource } from 'typeorm';
|
|
6
6
|
import { AuthorizationService } from '../services';
|
|
7
7
|
import { StringEnum } from '../types/common/string-enum';
|
|
8
|
+
import { Context } from '../types/common/context';
|
|
8
9
|
export declare class KoalApp<U extends AuthenticableEntity, P extends StringEnum> {
|
|
9
10
|
private configuration;
|
|
10
11
|
private static instance;
|
|
@@ -27,7 +28,7 @@ export declare class KoalApp<U extends AuthenticableEntity, P extends StringEnum
|
|
|
27
28
|
registerEndpoints(): void;
|
|
28
29
|
start(callback?: (configuration: Configuration<U, P>) => void): Promise<void>;
|
|
29
30
|
stop(): void;
|
|
30
|
-
authorizationHeaderParser(context:
|
|
31
|
-
errorHandler(context:
|
|
31
|
+
authorizationHeaderParser(context: Context, next: Next): Promise<void>;
|
|
32
|
+
errorHandler(context: Context, next: Next): Promise<void>;
|
|
32
33
|
getAuthorizationService(): AuthorizationService<U, P>;
|
|
33
34
|
}
|
package/common/koalapp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/../src/common/koalapp.ts"],"names":[],"mappings":"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","file":"koalapp.js","sourcesContent":["import Koa, { Next, ParameterizedContext } 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 serve from \"koa-static\";\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';\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.registerStaticFileServerMiddleware();\n console.log(\"Static file server initialized.\");\n this.registerEndpoints();\n console.log(\"Endpoints registered.\");\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 registerStaticFileServerMiddleware() {\n this.koa.use(serve(path.join(__dirname, '../client', 'browser')));\n this.koa.use(serve(path.join(__dirname, '../../static')));\n this.koa.use(async (ctx, next) => {\n const requestPath = ctx.request.path;\n\n if (!requestPath.startsWith(this.configuration.getRestPrefix()) && !/\\.[a-z]+$/.test(requestPath)) {\n ctx.type = 'html';\n ctx.body = fs.createReadStream(path.join(__dirname, '../client', 'browser', 'index.html'));\n } else {\n await next();\n }\n });\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 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 if (this.server) {\n this.server.close();\n this.server = undefined;\n }\n }\n\n async authorizationHeaderParser(context: ParameterizedContext, next: Next) {\n const authHeader = context.headers.authorization;\n if (authHeader) {\n const token = authHeader.split(' ')[1];\n try {\n context.state.user = 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: ParameterizedContext, 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 serve from \"koa-static\";\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.registerStaticFileServerMiddleware();\n console.log(\"Static file server initialized.\");\n this.registerEndpoints();\n console.log(\"Endpoints registered.\");\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 registerStaticFileServerMiddleware() {\n this.koa.use(serve(path.join(__dirname, '../client', 'browser')));\n this.koa.use(serve(path.join(__dirname, '../../static')));\n this.koa.use(async (ctx, next) => {\n const requestPath = ctx.request.path;\n\n if (!requestPath.startsWith(this.configuration.getRestPrefix()) && !/\\.[a-z]+$/.test(requestPath)) {\n ctx.type = 'html';\n ctx.body = fs.createReadStream(path.join(__dirname, '../client', 'browser', 'index.html'));\n } else {\n await next();\n }\n });\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 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 if (this.server) {\n this.server.close();\n this.server = undefined;\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,8 +1,8 @@
|
|
|
1
|
-
import { ParameterizedContext } from "koa";
|
|
2
1
|
import { RepositoryBase } from "../database/repositories";
|
|
3
2
|
import { IdentifiableEntity } from "../types";
|
|
4
3
|
import { ControllerBase } from "./controller-base";
|
|
5
4
|
import { DeepPartial } from "typeorm";
|
|
5
|
+
import { Context } from "../types/common/context";
|
|
6
6
|
export declare abstract class RestControllerBase<T extends IdentifiableEntity, RouteType extends {
|
|
7
7
|
[J in keyof RouteType]: string;
|
|
8
8
|
}, PermissionType extends {
|
|
@@ -12,14 +12,14 @@ export declare abstract class RestControllerBase<T extends IdentifiableEntity, R
|
|
|
12
12
|
abstract getRepository(): RepositoryBase<T>;
|
|
13
13
|
registerEndpoints(): void;
|
|
14
14
|
protected getAuthorizationService(): import("..").AuthorizationService<import("../types").AuthenticableEntity, import("../types/common/string-enum").StringEnum>;
|
|
15
|
-
listEntities(context:
|
|
16
|
-
viewEntity(context:
|
|
17
|
-
createEntity(context:
|
|
18
|
-
editEntity(context:
|
|
19
|
-
deleteEntity(context:
|
|
15
|
+
listEntities(context: Context): Promise<void>;
|
|
16
|
+
viewEntity(context: Context): Promise<void>;
|
|
17
|
+
createEntity(context: Context): Promise<T>;
|
|
18
|
+
editEntity(context: Context): Promise<void>;
|
|
19
|
+
deleteEntity(context: Context): Promise<void>;
|
|
20
20
|
protected delete(entity: T): Promise<void>;
|
|
21
|
-
getEntities(context:
|
|
22
|
-
getById(context:
|
|
21
|
+
getEntities(context: Context): Promise<T[]>;
|
|
22
|
+
getById(context: Context): Promise<T>;
|
|
23
23
|
protected getListPermission(): PermissionType | undefined;
|
|
24
24
|
protected getViewPermission(): PermissionType | undefined;
|
|
25
25
|
protected getCreatePermission(): PermissionType | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/../src/controllers/rest-controller-base.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,oCAAuE;AACvE,uDAAmD;AACnD,sCAAgD;AAGhD,MAAsB,kBAMpB,SAAQ,gCAAc;IAGtB,iBAAiB;QACf,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IACS,uBAAuB;QAC/B,OAAO,gBAAO,CAAC,WAAW,EAAE,CAAC,uBAAuB,EAAE,CAAC;IACzD,CAAC;IACK,YAAY,CAAC,OAA6B;;YAC9C,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC3C,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAClG,CAAC;YACD,OAAO,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;KAAA;IACK,UAAU,CAAC,OAA6B;;YAC5C,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC3C,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAClG,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;YACxB,CAAC;iBACI,CAAC;gBACJ,OAAO,CAAC,MAAM,GAAG,mBAAU,CAAC,SAAS,CAAC;YACxC,CAAC;QACH,CAAC;KAAA;IACK,YAAY,CAAC,OAA6B;;YAC9C,IAAI,IAAI,CAAC,mBAAmB,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC7C,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACpG,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAqB,CAAC,CAAC;YAC1F,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC1B,MAAM,IAAI,iBAAS,CAAC,YAAY,EAAE,mBAAU,CAAC,WAAW,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAqB,CAAC,CAAC,CAAC;YACxH,OAAO,CAAC,MAAM,GAAG,mBAAU,CAAC,OAAO,CAAC;YACpC,OAAO,CAAC,IAAI,GAAG;gBACb,OAAO,EAAE,IAAI;gBACb,MAAM;aACP,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;IACK,UAAU,CAAC,OAA6B;;YAC5C,IAAI,IAAI,CAAC,iBAAiB,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC3C,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAClG,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,IAAmB,CAAC,CAAC;gBAC/F,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC1B,MAAM,IAAI,iBAAS,CAAC,YAAY,EAAE,mBAAU,CAAC,WAAW,CAAC,CAAC;gBAC5D,CAAC;gBACD,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,IAAmB,CAAC,CAAC,CAAC;gBAC/G,OAAO,CAAC,MAAM,GAAG,mBAAU,CAAC,EAAE,CAAA;gBAC9B,OAAO,CAAC,IAAI,GAAiB;oBAC3B,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;iBACI,CAAC;gBACJ,OAAO,CAAC,MAAM,GAAG,mBAAU,CAAC,SAAS,CAAC;YACxC,CAAC;QACH,CAAC;KAAA;IACK,YAAY,CAAC,OAA6B;;YAC9C,IAAI,IAAI,CAAC,mBAAmB,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC7C,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACpG,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;gBAC1D,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBAC1B,MAAM,IAAI,iBAAS,CAAC,YAAY,EAAE,mBAAU,CAAC,WAAW,CAAC,CAAC;gBAC5D,CAAC;gBACD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC1B,OAAO,CAAC,MAAM,GAAG,mBAAU,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,GAAiB;oBAC3B,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;iBACI,CAAC;gBACJ,OAAO,CAAC,MAAM,GAAG,mBAAU,CAAC,SAAS,CAAC;YACxC,CAAC;QACH,CAAC;KAAA;IACe,MAAM,CAAC,MAAS;;YAC9B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;KAAA;IACD,WAAW,CAAC,OAA6B;QACvC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,OAA6B;QACnC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IAES,iBAAiB;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IACS,iBAAiB;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IACS,mBAAmB;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IACS,iBAAiB;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IACS,mBAAmB;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAES,0BAA0B;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACS,0BAA0B;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACS,4BAA4B;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACS,0BAA0B;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACS,4BAA4B;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACe,kBAAkB,CAAC,IAAmB;;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IACe,iBAAiB,CAAC,MAAS,EAAE,IAAiB;;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IACe,kBAAkB,CAAC,MAAS;;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IACe,qBAAqB,CAAC,IAAmB;;YACvD,OAAO,IAAsB,CAAC;QAChC,CAAC;KAAA;IACe,qBAAqB,CAAC,MAAS,EAAE,IAAiB;;YAChE,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;CACF;AA/JD,gDA+JC","file":"rest-controller-base.js","sourcesContent":["import { ParameterizedContext } from \"koa\";\nimport { RepositoryBase } from \"../database/repositories\";\nimport { BaseResponse, ErrorBase, IdentifiableEntity } from \"../types\";\nimport { ControllerBase } from \"./controller-base\";\nimport { KoalApp, StatusCode } from \"../common\";\nimport { DeepPartial } from \"typeorm\";\n\nexport abstract class RestControllerBase<\n T extends IdentifiableEntity,\n RouteType extends { [J in keyof RouteType]: string },\n PermissionType extends { [K in keyof PermissionType]: string },\n CreateRequest extends any = Omit<T, 'id'>,\n EditRequest = T\n> extends ControllerBase {\n abstract getEndpoint(): RouteType[keyof RouteType];\n abstract getRepository(): RepositoryBase<T>;\n registerEndpoints(): void {\n if (this.shouldRegisterListEndpoint()) {\n this.router.get(this.getApiUrl(this.getEndpoint()), this.listEntities.bind(this));\n }\n if (this.shouldRegisterViewEndpoint()) {\n this.router.get(this.getApiUrl(`${this.getEndpoint()}/:id`), this.viewEntity.bind(this));\n }\n if (this.shouldRegisterCreateEndpoint()) {\n this.router.post(this.getApiUrl(this.getEndpoint()), this.createEntity.bind(this));\n }\n if (this.shouldRegisterEditEndpoint()) {\n this.router.put(this.getApiUrl(`${this.getEndpoint()}/:id`), this.editEntity.bind(this));\n }\n if (this.shouldRegisterDeleteEndpoint()) {\n this.router.delete(this.getApiUrl(`${this.getEndpoint()}/:id`), this.deleteEntity.bind(this));\n }\n }\n protected getAuthorizationService() {\n return KoalApp.getInstance().getAuthorizationService();\n }\n async listEntities(context: ParameterizedContext): Promise<void> {\n if (this.getListPermission() !== undefined) {\n await this.getAuthorizationService().userHasRight(context.state.user, this.getListPermission());\n }\n context.body = await this.getEntities(context);\n }\n async viewEntity(context: ParameterizedContext): Promise<void> {\n if (this.getViewPermission() !== undefined) {\n await this.getAuthorizationService().userHasRight(context.state.user, this.getViewPermission());\n }\n const entity = await this.getById(context);\n if (entity) {\n context.body = entity;\n }\n else {\n context.status = StatusCode.NOT_FOUND;\n }\n }\n async createEntity(context: ParameterizedContext): Promise<T> {\n if (this.getCreatePermission() !== undefined) {\n await this.getAuthorizationService().userHasRight(context.state.user, this.getCreatePermission());\n }\n const errorMessage = await this.entityCanBeCreated(context.request.body as CreateRequest);\n if (errorMessage !== null) {\n throw new ErrorBase(errorMessage, StatusCode.BAD_REQUEST);\n }\n const entity = await this.getRepository().save(await this.modifyEntityForCreate(context.request.body as CreateRequest));\n context.status = StatusCode.CREATED;\n context.body = {\n success: true,\n entity\n };\n return entity;\n }\n async editEntity(context: ParameterizedContext): Promise<void> {\n if (this.getEditPermission() !== undefined) {\n await this.getAuthorizationService().userHasRight(context.state.user, this.getEditPermission());\n }\n const entity = await this.getById(context);\n if (entity) {\n const errorMessage = await this.entityCanBeEdited(entity, context.request.body as EditRequest);\n if (errorMessage !== null) {\n throw new ErrorBase(errorMessage, StatusCode.BAD_REQUEST);\n }\n await this.getRepository().save(await this.modifyEntityForUpdate(entity, context.request.body as EditRequest));\n context.status = StatusCode.OK\n context.body = <BaseResponse>{\n success: true\n };\n }\n else {\n context.status = StatusCode.NOT_FOUND;\n }\n }\n async deleteEntity(context: ParameterizedContext) {\n if (this.getDeletePermission() !== undefined) {\n await this.getAuthorizationService().userHasRight(context.state.user, this.getDeletePermission());\n }\n const entity = await this.getById(context);\n if (entity) {\n const errorMessage = await this.entityCanBeDeleted(entity)\n if (errorMessage !== null) {\n throw new ErrorBase(errorMessage, StatusCode.BAD_REQUEST);\n }\n await this.delete(entity);\n context.status = StatusCode.OK;\n context.body = <BaseResponse>{\n success: true\n };\n }\n else {\n context.status = StatusCode.NOT_FOUND;\n }\n }\n protected async delete(entity: T) {\n await this.getRepository().delete(entity);\n }\n getEntities(context: ParameterizedContext): Promise<T[]> {\n return this.getRepository().getAll();\n }\n getById(context: ParameterizedContext): Promise<T> {\n return this.getRepository().getById(context.params.id);\n }\n\n protected getListPermission(): PermissionType | undefined {\n return undefined;\n }\n protected getViewPermission(): PermissionType | undefined {\n return undefined;\n }\n protected getCreatePermission(): PermissionType | undefined {\n return undefined;\n }\n protected getEditPermission(): PermissionType | undefined {\n return undefined;\n }\n protected getDeletePermission(): PermissionType | undefined {\n return undefined;\n }\n\n protected shouldRegisterListEndpoint(): boolean {\n return true;\n }\n protected shouldRegisterViewEndpoint(): boolean {\n return true;\n }\n protected shouldRegisterCreateEndpoint(): boolean {\n return true;\n }\n protected shouldRegisterEditEndpoint(): boolean {\n return true;\n }\n protected shouldRegisterDeleteEndpoint(): boolean {\n return true;\n }\n protected async entityCanBeCreated(body: CreateRequest): Promise<string | null> {\n return null;\n }\n protected async entityCanBeEdited(entity: T, body: EditRequest): Promise<string | null> {\n return null;\n }\n protected async entityCanBeDeleted(entity: T): Promise<string | null> {\n return null;\n }\n protected async modifyEntityForCreate(body: CreateRequest): Promise<DeepPartial<T>> {\n return body as DeepPartial<T>;\n }\n protected async modifyEntityForUpdate(entity: T, body: EditRequest): Promise<T> {\n return entity;\n }\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/../src/controllers/rest-controller-base.ts"],"names":[],"mappings":"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","file":"rest-controller-base.js","sourcesContent":["import { RepositoryBase } from \"../database/repositories\";\nimport { BaseResponse, ErrorBase, IdentifiableEntity } from \"../types\";\nimport { ControllerBase } from \"./controller-base\";\nimport { KoalApp, StatusCode } from \"../common\";\nimport { DeepPartial } from \"typeorm\";\nimport { Context } from \"../types/common/context\";\n\nexport abstract class RestControllerBase<\n T extends IdentifiableEntity,\n RouteType extends { [J in keyof RouteType]: string },\n PermissionType extends { [K in keyof PermissionType]: string },\n CreateRequest extends any = Omit<T, 'id'>,\n EditRequest = T\n> extends ControllerBase {\n abstract getEndpoint(): RouteType[keyof RouteType];\n abstract getRepository(): RepositoryBase<T>;\n registerEndpoints(): void {\n if (this.shouldRegisterListEndpoint()) {\n this.router.get(this.getApiUrl(this.getEndpoint()), this.listEntities.bind(this));\n }\n if (this.shouldRegisterViewEndpoint()) {\n this.router.get(this.getApiUrl(`${this.getEndpoint()}/:id`), this.viewEntity.bind(this));\n }\n if (this.shouldRegisterCreateEndpoint()) {\n this.router.post(this.getApiUrl(this.getEndpoint()), this.createEntity.bind(this));\n }\n if (this.shouldRegisterEditEndpoint()) {\n this.router.put(this.getApiUrl(`${this.getEndpoint()}/:id`), this.editEntity.bind(this));\n }\n if (this.shouldRegisterDeleteEndpoint()) {\n this.router.delete(this.getApiUrl(`${this.getEndpoint()}/:id`), this.deleteEntity.bind(this));\n }\n }\n protected getAuthorizationService() {\n return KoalApp.getInstance().getAuthorizationService();\n }\n async listEntities(context: Context): Promise<void> {\n if (this.getListPermission() !== undefined) {\n await this.getAuthorizationService().userHasRight(context.state.user, this.getListPermission());\n }\n context.body = await this.getEntities(context);\n }\n async viewEntity(context: Context): Promise<void> {\n if (this.getViewPermission() !== undefined) {\n await this.getAuthorizationService().userHasRight(context.state.user, this.getViewPermission());\n }\n const entity = await this.getById(context);\n if (entity) {\n context.body = entity;\n }\n else {\n context.status = StatusCode.NOT_FOUND;\n }\n }\n async createEntity(context: Context): Promise<T> {\n if (this.getCreatePermission() !== undefined) {\n await this.getAuthorizationService().userHasRight(context.state.user, this.getCreatePermission());\n }\n const errorMessage = await this.entityCanBeCreated(context.request.body as CreateRequest);\n if (errorMessage !== null) {\n throw new ErrorBase(errorMessage, StatusCode.BAD_REQUEST);\n }\n const entity = await this.getRepository().save(await this.modifyEntityForCreate(context.request.body as CreateRequest));\n context.status = StatusCode.CREATED;\n context.body = {\n success: true,\n entity\n };\n return entity;\n }\n async editEntity(context: Context): Promise<void> {\n if (this.getEditPermission() !== undefined) {\n await this.getAuthorizationService().userHasRight(context.state.user, this.getEditPermission());\n }\n const entity = await this.getById(context);\n if (entity) {\n const errorMessage = await this.entityCanBeEdited(entity, context.request.body as EditRequest);\n if (errorMessage !== null) {\n throw new ErrorBase(errorMessage, StatusCode.BAD_REQUEST);\n }\n await this.getRepository().save(await this.modifyEntityForUpdate(entity, context.request.body as EditRequest));\n context.status = StatusCode.OK\n context.body = <BaseResponse>{\n success: true\n };\n }\n else {\n context.status = StatusCode.NOT_FOUND;\n }\n }\n async deleteEntity(context: Context) {\n if (this.getDeletePermission() !== undefined) {\n await this.getAuthorizationService().userHasRight(context.state.user, this.getDeletePermission());\n }\n const entity = await this.getById(context);\n if (entity) {\n const errorMessage = await this.entityCanBeDeleted(entity)\n if (errorMessage !== null) {\n throw new ErrorBase(errorMessage, StatusCode.BAD_REQUEST);\n }\n await this.delete(entity);\n context.status = StatusCode.OK;\n context.body = <BaseResponse>{\n success: true\n };\n }\n else {\n context.status = StatusCode.NOT_FOUND;\n }\n }\n protected async delete(entity: T) {\n await this.getRepository().delete(entity);\n }\n getEntities(context: Context): Promise<T[]> {\n return this.getRepository().getAll();\n }\n getById(context: Context): Promise<T> {\n return this.getRepository().getById(context.params.id);\n }\n\n protected getListPermission(): PermissionType | undefined {\n return undefined;\n }\n protected getViewPermission(): PermissionType | undefined {\n return undefined;\n }\n protected getCreatePermission(): PermissionType | undefined {\n return undefined;\n }\n protected getEditPermission(): PermissionType | undefined {\n return undefined;\n }\n protected getDeletePermission(): PermissionType | undefined {\n return undefined;\n }\n\n protected shouldRegisterListEndpoint(): boolean {\n return true;\n }\n protected shouldRegisterViewEndpoint(): boolean {\n return true;\n }\n protected shouldRegisterCreateEndpoint(): boolean {\n return true;\n }\n protected shouldRegisterEditEndpoint(): boolean {\n return true;\n }\n protected shouldRegisterDeleteEndpoint(): boolean {\n return true;\n }\n protected async entityCanBeCreated(body: CreateRequest): Promise<string | null> {\n return null;\n }\n protected async entityCanBeEdited(entity: T, body: EditRequest): Promise<string | null> {\n return null;\n }\n protected async entityCanBeDeleted(entity: T): Promise<string | null> {\n return null;\n }\n protected async modifyEntityForCreate(body: CreateRequest): Promise<DeepPartial<T>> {\n return body as DeepPartial<T>;\n }\n protected async modifyEntityForUpdate(entity: T, body: EditRequest): Promise<T> {\n return entity;\n }\n}"]}
|
package/koalas/index.js
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.printKoalaArt = printKoalaArt;
|
|
4
|
+
const jumping_koala_1 = require("./jumping-koala");
|
|
5
|
+
const original_koala_1 = require("./original-koala");
|
|
6
|
+
const rotated_koala_1 = require("./rotated-koala");
|
|
7
|
+
const running_koala_1 = require("./running-koala");
|
|
8
|
+
const secret_koala_1 = require("./secret-koala");
|
|
4
9
|
function printKoalaArt() {
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
const koalas = [
|
|
11
|
+
original_koala_1.originalKoala,
|
|
12
|
+
rotated_koala_1.rotatedKoala,
|
|
13
|
+
running_koala_1.runningKoala,
|
|
14
|
+
jumping_koala_1.jumpingKoala
|
|
15
|
+
];
|
|
16
|
+
if (Math.random() < 0.07) {
|
|
17
|
+
koalas.push(secret_koala_1.secretKoala);
|
|
18
|
+
}
|
|
19
|
+
koalas[Math.floor(Math.random() * koalas.length)]();
|
|
11
20
|
}
|
|
12
21
|
|
|
13
22
|
//# sourceMappingURL=index.js.map
|
package/koalas/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/../src/koalas/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"sources":["../src/../src/koalas/index.ts"],"names":[],"mappings":";;AAMA,sCAWC;AAjBD,mDAA+C;AAC/C,qDAAiD;AACjD,mDAA+C;AAC/C,mDAA+C;AAC/C,iDAA6C;AAE7C,SAAgB,aAAa;IAC3B,MAAM,MAAM,GAAG;QACb,8BAAa;QACb,4BAAY;QACZ,4BAAY;QACZ,4BAAY;KACb,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,0BAAW,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC","file":"index.js","sourcesContent":["import { jumpingKoala } from \"./jumping-koala\";\nimport { originalKoala } from \"./original-koala\";\nimport { rotatedKoala } from \"./rotated-koala\";\nimport { runningKoala } from \"./running-koala\";\nimport { secretKoala } from \"./secret-koala\";\n\nexport function printKoalaArt(): void {\n const koalas = [\n originalKoala,\n rotatedKoala,\n runningKoala,\n jumpingKoala\n ];\n if (Math.random() < 0.07) {\n koalas.push(secretKoala);\n }\n koalas[Math.floor(Math.random() * koalas.length)]();\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function jumpingKoala(): void;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.jumpingKoala = jumpingKoala;
|
|
4
|
+
const koala_ascii_1 = require("./koala-ascii");
|
|
5
|
+
const koala_rotated_ascii_1 = require("./koala-rotated-ascii");
|
|
6
|
+
function jumpingKoala() {
|
|
7
|
+
console.clear();
|
|
8
|
+
let koalaPosition = 0;
|
|
9
|
+
let maxOutputWidth = process !== undefined && process.stdout !== undefined ? process.stdout.columns : 54;
|
|
10
|
+
let koalaDirection = 1;
|
|
11
|
+
let koalaAltitude = 0;
|
|
12
|
+
let maxKoalaAltitude = 5;
|
|
13
|
+
let koalaAscending = true;
|
|
14
|
+
let ascensionSpeed = 0.4;
|
|
15
|
+
let boundaryThreshold = 0.7;
|
|
16
|
+
const printKoala = () => {
|
|
17
|
+
console.clear();
|
|
18
|
+
let basicKoala = koalaDirection > 0 ? koala_rotated_ascii_1.koalaRotatedAscii : koala_ascii_1.koalaAscii;
|
|
19
|
+
let koalaWidth = basicKoala.split("\n").reduce((max, line) => {
|
|
20
|
+
return Math.max(max, line.length);
|
|
21
|
+
}, 0);
|
|
22
|
+
let maxKoalaPosition = maxOutputWidth - koalaWidth;
|
|
23
|
+
let i = 0;
|
|
24
|
+
for (; i < maxKoalaAltitude - koalaAltitude; i++) {
|
|
25
|
+
console.log();
|
|
26
|
+
}
|
|
27
|
+
console.log(basicKoala.split("\n").map((line) => {
|
|
28
|
+
return " ".repeat(koalaPosition) + line;
|
|
29
|
+
}).join("\n"));
|
|
30
|
+
koalaPosition += koalaDirection;
|
|
31
|
+
if (koalaDirection > 0 && koalaPosition >= maxKoalaPosition) {
|
|
32
|
+
koalaDirection = koalaDirection * -1;
|
|
33
|
+
}
|
|
34
|
+
else if (koalaDirection < 0 && koalaPosition <= 0) {
|
|
35
|
+
koalaDirection = koalaDirection * -1;
|
|
36
|
+
}
|
|
37
|
+
if (koalaAscending && koalaAltitude < maxKoalaAltitude) {
|
|
38
|
+
koalaAltitude += (maxKoalaAltitude - koalaAltitude) * ascensionSpeed;
|
|
39
|
+
if (koalaAltitude >= maxKoalaAltitude - boundaryThreshold) {
|
|
40
|
+
koalaAscending = !koalaAscending;
|
|
41
|
+
}
|
|
42
|
+
if (koalaAltitude > maxKoalaAltitude) {
|
|
43
|
+
koalaAltitude = maxKoalaAltitude;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else if (!koalaAscending && koalaAltitude > 0) {
|
|
47
|
+
koalaAltitude -= (maxKoalaAltitude - koalaAltitude) * ascensionSpeed;
|
|
48
|
+
if (koalaAltitude <= boundaryThreshold) {
|
|
49
|
+
koalaAscending = !koalaAscending;
|
|
50
|
+
}
|
|
51
|
+
if (koalaAltitude < 0) {
|
|
52
|
+
koalaAltitude = 0;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
for (let j = 0; j < maxKoalaAltitude - i; j++) {
|
|
56
|
+
console.log();
|
|
57
|
+
}
|
|
58
|
+
console.log("‾".repeat(maxKoalaPosition + koalaWidth));
|
|
59
|
+
};
|
|
60
|
+
setInterval(printKoala, 100);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=jumping-koala.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/../src/koalas/jumping-koala.ts"],"names":[],"mappings":"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","file":"jumping-koala.js","sourcesContent":["import { koalaAscii } from \"./koala-ascii\";\nimport { koalaRotatedAscii } from \"./koala-rotated-ascii\";\n\nexport function jumpingKoala() {\n console.clear();\n let koalaPosition = 0;\n let maxOutputWidth = process !== undefined && process.stdout !== undefined ? process.stdout.columns : 54;\n let koalaDirection = 1;\n let koalaAltitude = 0;\n let maxKoalaAltitude = 5;\n let koalaAscending = true;\n let ascensionSpeed = 0.4;\n let boundaryThreshold = 0.7;\n const printKoala = () => {\n console.clear();\n let basicKoala = koalaDirection > 0 ? koalaRotatedAscii : koalaAscii;\n let koalaWidth = basicKoala.split(\"\\n\").reduce((max, line) => {\n return Math.max(max, line.length);\n }, 0);\n let maxKoalaPosition = maxOutputWidth - koalaWidth;\n let i = 0;\n for (; i < maxKoalaAltitude - koalaAltitude; i++) {\n console.log();\n }\n console.log(basicKoala.split(\"\\n\").map((line) => {\n return \" \".repeat(koalaPosition) + line;\n }).join(\"\\n\"));\n koalaPosition += koalaDirection;\n if (koalaDirection > 0 && koalaPosition >= maxKoalaPosition) {\n koalaDirection = koalaDirection * -1;\n }\n else if (koalaDirection < 0 && koalaPosition <= 0) {\n koalaDirection = koalaDirection * -1;\n }\n if (koalaAscending && koalaAltitude < maxKoalaAltitude) {\n koalaAltitude += (maxKoalaAltitude - koalaAltitude) * ascensionSpeed;\n if (koalaAltitude >= maxKoalaAltitude - boundaryThreshold) {\n koalaAscending = !koalaAscending;\n }\n if (koalaAltitude > maxKoalaAltitude) {\n koalaAltitude = maxKoalaAltitude;\n }\n }\n else if (!koalaAscending && koalaAltitude > 0) {\n koalaAltitude -= (maxKoalaAltitude - koalaAltitude) * ascensionSpeed;\n if (koalaAltitude <= boundaryThreshold) {\n koalaAscending = !koalaAscending;\n }\n if (koalaAltitude < 0) {\n koalaAltitude = 0;\n }\n }\n for (let j = 0; j < maxKoalaAltitude - i; j++) {\n console.log();\n }\n console.log(\"‾\".repeat(maxKoalaPosition + koalaWidth));\n };\n setInterval(printKoala, 100);\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const koalaAscii = "(\\__/)\n(o.o )\n(> < )";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/../src/koalas/koala-ascii.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG;;OAEnB,CAAC","file":"koala-ascii.js","sourcesContent":["export const koalaAscii = `(\\\\__/)\n(o.o )\n(> < )`; "]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const koalaRotatedAscii: string;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.koalaRotatedAscii = void 0;
|
|
4
|
+
const koala_ascii_1 = require("./koala-ascii");
|
|
5
|
+
exports.koalaRotatedAscii = koala_ascii_1.koalaAscii.split("\n").map((line) => {
|
|
6
|
+
const characterConterparts = {
|
|
7
|
+
'(': ')',
|
|
8
|
+
')': '(',
|
|
9
|
+
'<': '>',
|
|
10
|
+
'>': '<',
|
|
11
|
+
'/': '\\',
|
|
12
|
+
'\\': '/'
|
|
13
|
+
};
|
|
14
|
+
const rotatedLine = line.split("").map((originalCharacter) => {
|
|
15
|
+
return characterConterparts[originalCharacter] || originalCharacter;
|
|
16
|
+
}).reverse().join("");
|
|
17
|
+
return rotatedLine;
|
|
18
|
+
}).join("\n");
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=koala-rotated-ascii.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/../src/koalas/koala-rotated-ascii.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;AAE9B,QAAA,iBAAiB,GAAG,wBAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;IACnE,MAAM,oBAAoB,GAA8B;QACtD,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,GAAG;KACV,CAAC;IACF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,iBAAiB,EAAE,EAAE;QAC3D,OAAO,oBAAoB,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,CAAC;IACtE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtB,OAAO,WAAW,CAAC;AACrB,CAAC,CACA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC","file":"koala-rotated-ascii.js","sourcesContent":["import { koalaAscii } from \"./koala-ascii\";\n\nexport const koalaRotatedAscii = koalaAscii.split(\"\\n\").map((line) => {\n const characterConterparts: { [key: string]: string } = {\n '(': ')',\n ')': '(',\n '<': '>',\n '>': '<',\n '/': '\\\\',\n '\\\\': '/'\n };\n const rotatedLine = line.split(\"\").map((originalCharacter) => {\n return characterConterparts[originalCharacter] || originalCharacter;\n }).reverse().join(\"\");\n return rotatedLine;\n}\n).join(\"\\n\");"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function originalKoala(): void;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.originalKoala = originalKoala;
|
|
4
|
+
function originalKoala() {
|
|
5
|
+
const koalaAscii = `
|
|
6
|
+
(\\__/)
|
|
7
|
+
(o.o ) KOOL KOALA
|
|
8
|
+
(> < )
|
|
9
|
+
`;
|
|
10
|
+
console.log(koalaAscii);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=original-koala.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/../src/koalas/original-koala.ts"],"names":[],"mappings":";;AAAA,sCAOC;AAPD,SAAgB,aAAa;IAC3B,MAAM,UAAU,GAAG;;;;GAIlB,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC1B,CAAC","file":"original-koala.js","sourcesContent":["export function originalKoala() {\n const koalaAscii = `\n (\\\\__/)\n (o.o ) KOOL KOALA\n (> < )\n `;\n console.log(koalaAscii);\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function rotatedKoala(): void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rotatedKoala = rotatedKoala;
|
|
4
|
+
const koala_rotated_ascii_1 = require("./koala-rotated-ascii");
|
|
5
|
+
function rotatedKoala() {
|
|
6
|
+
const koalaLines = koala_rotated_ascii_1.koalaRotatedAscii.split('\n');
|
|
7
|
+
koalaLines[Math.floor(koalaLines.length / 2)] += ' KOOL KOALA';
|
|
8
|
+
console.log(koalaLines.join('\n'));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=rotated-koala.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/../src/koalas/rotated-koala.ts"],"names":[],"mappings":";;AAEA,oCAIC;AAND,+DAA0D;AAE1D,SAAgB,YAAY;IAC1B,MAAM,UAAU,GAAG,uCAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrC,CAAC","file":"rotated-koala.js","sourcesContent":["import { koalaRotatedAscii } from \"./koala-rotated-ascii\";\n\nexport function rotatedKoala() {\n const koalaLines = koalaRotatedAscii.split('\\n');\n koalaLines[Math.floor(koalaLines.length / 2)] += ' KOOL KOALA';\n console.log(koalaLines.join('\\n'));\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runningKoala(): void;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runningKoala = runningKoala;
|
|
4
|
+
const koala_ascii_1 = require("./koala-ascii");
|
|
5
|
+
const koala_rotated_ascii_1 = require("./koala-rotated-ascii");
|
|
6
|
+
function runningKoala() {
|
|
7
|
+
console.clear();
|
|
8
|
+
let koalaPosition = 0;
|
|
9
|
+
const maxOutputWidth = process !== undefined && process.stdout !== undefined ? process.stdout.columns : 50;
|
|
10
|
+
let koalaDirection = 1;
|
|
11
|
+
const printKoala = () => {
|
|
12
|
+
console.clear();
|
|
13
|
+
let basicKoala = koalaDirection > 0 ? koala_rotated_ascii_1.koalaRotatedAscii : koala_ascii_1.koalaAscii;
|
|
14
|
+
let koalaWidth = basicKoala.split("\n").reduce((max, line) => {
|
|
15
|
+
return Math.max(max, line.length);
|
|
16
|
+
}, 0);
|
|
17
|
+
const maxKoalaPosition = maxOutputWidth - koalaWidth;
|
|
18
|
+
console.log(basicKoala.split("\n").map((line) => {
|
|
19
|
+
return " ".repeat(koalaPosition) + line;
|
|
20
|
+
}).join("\n"));
|
|
21
|
+
koalaPosition += koalaDirection;
|
|
22
|
+
if (koalaDirection > 0 && koalaPosition >= maxKoalaPosition) {
|
|
23
|
+
koalaDirection = koalaDirection * -1;
|
|
24
|
+
}
|
|
25
|
+
else if (koalaDirection < 0 && koalaPosition <= 0) {
|
|
26
|
+
koalaDirection = koalaDirection * -1;
|
|
27
|
+
}
|
|
28
|
+
console.log("‾".repeat(maxKoalaPosition + koalaWidth));
|
|
29
|
+
};
|
|
30
|
+
setInterval(printKoala, 100);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=running-koala.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/../src/koalas/running-koala.ts"],"names":[],"mappings":";;AAKA,oCAyBC;AA9BD,+CAA2C;AAC3C,+DAA0D;AAI1D,SAAgB,YAAY;IAC1B,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,cAAc,GAAG,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3G,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,UAAU,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,uCAAiB,CAAC,CAAC,CAAC,wBAAU,CAAC;QACrE,IAAI,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,MAAM,gBAAgB,GAAG,cAAc,GAAG,UAAU,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9C,OAAO,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;QAC1C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACf,aAAa,IAAI,cAAc,CAAC;QAChC,IAAI,cAAc,GAAG,CAAC,IAAI,aAAa,IAAI,gBAAgB,EAAE,CAAC;YAC5D,cAAc,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;aACI,IAAI,cAAc,GAAG,CAAC,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YAClD,cAAc,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,GAAG,UAAU,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC;IACF,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC","file":"running-koala.js","sourcesContent":["import { koalaAscii } from \"./koala-ascii\";\nimport { koalaRotatedAscii } from \"./koala-rotated-ascii\";\nimport { originalKoala } from \"./original-koala\";\nimport { rotatedKoala } from \"./rotated-koala\";\n\nexport function runningKoala() {\n console.clear();\n let koalaPosition = 0;\n const maxOutputWidth = process !== undefined && process.stdout !== undefined ? process.stdout.columns : 50;\n let koalaDirection = 1;\n const printKoala = () => {\n console.clear();\n let basicKoala = koalaDirection > 0 ? koalaRotatedAscii : koalaAscii;\n let koalaWidth = basicKoala.split(\"\\n\").reduce((max, line) => {\n return Math.max(max, line.length);\n }, 0);\n const maxKoalaPosition = maxOutputWidth - koalaWidth;\n console.log(basicKoala.split(\"\\n\").map((line) => {\n return \" \".repeat(koalaPosition) + line;\n }).join(\"\\n\"));\n koalaPosition += koalaDirection;\n if (koalaDirection > 0 && koalaPosition >= maxKoalaPosition) {\n koalaDirection = koalaDirection * -1;\n }\n else if (koalaDirection < 0 && koalaPosition <= 0) {\n koalaDirection = koalaDirection * -1;\n }\n console.log(\"‾\".repeat(maxKoalaPosition + koalaWidth));\n };\n setInterval(printKoala, 100);\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function secretKoala(): void;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.secretKoala = secretKoala;
|
|
4
|
+
const koala_rotated_ascii_1 = require("./koala-rotated-ascii");
|
|
5
|
+
function secretKoala() {
|
|
6
|
+
console.clear();
|
|
7
|
+
const messages = [
|
|
8
|
+
'',
|
|
9
|
+
'Oh!',
|
|
10
|
+
'Hello there!',
|
|
11
|
+
'You found me!',
|
|
12
|
+
'I am the koala!',
|
|
13
|
+
'Sekret koala!',
|
|
14
|
+
'We didn\'t met.',
|
|
15
|
+
'Okay?',
|
|
16
|
+
'Capisce?',
|
|
17
|
+
];
|
|
18
|
+
let messageIndex = 0;
|
|
19
|
+
const minFrameLength = 1000;
|
|
20
|
+
const framLengthPerChar = 100;
|
|
21
|
+
const calculateFrameLength = (message) => {
|
|
22
|
+
const frameLength = message.length * framLengthPerChar;
|
|
23
|
+
return Math.max(frameLength, minFrameLength);
|
|
24
|
+
};
|
|
25
|
+
const printKoala = () => {
|
|
26
|
+
console.clear();
|
|
27
|
+
const koalaLines = koala_rotated_ascii_1.koalaRotatedAscii.split('\n');
|
|
28
|
+
koalaLines[Math.floor(koalaLines.length / 2)] += ' ' + messages[messageIndex];
|
|
29
|
+
console.log(koalaLines.join('\n'));
|
|
30
|
+
messageIndex++;
|
|
31
|
+
if (messageIndex < messages.length) {
|
|
32
|
+
setTimeout(printKoala, calculateFrameLength(messages[messageIndex]));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
setTimeout(() => {
|
|
36
|
+
console.clear();
|
|
37
|
+
}, calculateFrameLength(messages[messages.length - 1]));
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
setTimeout(printKoala, calculateFrameLength(messages[messageIndex]));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=secret-koala.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/../src/koalas/secret-koala.ts"],"names":[],"mappings":";;AAEA,kCAoCC;AAtCD,+DAA0D;AAE1D,SAAgB,WAAW;IACzB,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,QAAQ,GAAG;QACf,EAAE;QACF,KAAK;QACL,cAAc;QACd,eAAe;QACf,iBAAiB;QACjB,eAAe;QACf,iBAAiB;QACjB,OAAO;QACP,UAAU;KACX,CAAC;IACF,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,cAAc,GAAG,IAAI,CAAC;IAC5B,MAAM,iBAAiB,GAAG,GAAG,CAAC;IAC9B,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAE,EAAE;QAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,iBAAiB,CAAC;QACvD,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/C,CAAC,CAAA;IACD,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,uCAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,YAAY,EAAE,CAAC;QACf,IAAI,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnC,UAAU,CAAC,UAAU,EAAE,oBAAoB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACtE,CAAC;aACI,CAAC;YACJ,UAAU,CAAC,GAAG,EAAE;gBACd,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC;IACF,UAAU,CAAC,UAAU,EAAE,oBAAoB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC","file":"secret-koala.js","sourcesContent":["import { koalaRotatedAscii } from \"./koala-rotated-ascii\";\n\nexport function secretKoala() {\n console.clear();\n const messages = [\n '',\n 'Oh!',\n 'Hello there!',\n 'You found me!',\n 'I am the koala!',\n 'Sekret koala!',\n 'We didn\\'t met.',\n 'Okay?',\n 'Capisce?',\n ];\n let messageIndex = 0;\n const minFrameLength = 1000;\n const framLengthPerChar = 100;\n const calculateFrameLength = (message: string) => {\n const frameLength = message.length * framLengthPerChar;\n return Math.max(frameLength, minFrameLength);\n }\n const printKoala = () => {\n console.clear();\n const koalaLines = koalaRotatedAscii.split('\\n');\n koalaLines[Math.floor(koalaLines.length / 2)] += ' ' + messages[messageIndex];\n console.log(koalaLines.join('\\n'));\n messageIndex++;\n if (messageIndex < messages.length) {\n setTimeout(printKoala, calculateFrameLength(messages[messageIndex]))\n }\n else {\n setTimeout(() => {\n console.clear();\n }, calculateFrameLength(messages[messages.length - 1]));\n }\n };\n setTimeout(printKoala, calculateFrameLength(messages[messageIndex]));\n}"]}
|
|
@@ -12,6 +12,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.transactionMiddleware = void 0;
|
|
13
13
|
const common_1 = require("../common");
|
|
14
14
|
const transactionMiddleware = (context, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
15
|
+
if (!common_1.KoalApp.getInstance().getConfiguration().getDatabase()) {
|
|
16
|
+
yield next();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
15
19
|
const queryRunner = common_1.KoalApp.getInstance().getDatabaseConnection().createQueryRunner();
|
|
16
20
|
context.state.queryRunner = queryRunner;
|
|
17
21
|
queryRunner.startTransaction();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/../src/middlewares/transaction-middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,sCAAoC;AAE7B,MAAM,qBAAqB,GAAsB,CAAO,OAAO,EAAE,IAAI,EAAE,EAAE;IAC9E,MAAM,WAAW,GAAG,gBAAO,CAAC,WAAW,EAAE,CAAC,qBAAqB,EAAE,CAAC,iBAAiB,EAAE,CAAC;IACtF,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IACxC,WAAW,CAAC,gBAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,WAAW,CAAC,iBAAiB,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;QACxC,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC,CAAA,CAAC;
|
|
1
|
+
{"version":3,"sources":["../src/../src/middlewares/transaction-middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,sCAAoC;AAE7B,MAAM,qBAAqB,GAAsB,CAAO,OAAO,EAAE,IAAI,EAAE,EAAE;IAC9E,IAAI,CAAC,gBAAO,CAAC,WAAW,EAAE,CAAC,gBAAgB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5D,MAAM,IAAI,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,MAAM,WAAW,GAAG,gBAAO,CAAC,WAAW,EAAE,CAAC,qBAAqB,EAAE,CAAC,iBAAiB,EAAE,CAAC;IACtF,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;IACxC,WAAW,CAAC,gBAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,WAAW,CAAC,iBAAiB,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,WAAW,CAAC,mBAAmB,EAAE,CAAC;QACxC,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC,CAAA,CAAC;AAjBW,QAAA,qBAAqB,yBAiBhC","file":"transaction-middleware.js","sourcesContent":["import { Middleware } from \"koa\";\nimport { State } from \"../types/common/state\";\nimport { KoalApp } from \"../common\";\n\nexport const transactionMiddleware: Middleware<State> = async (context, next) => {\n if (!KoalApp.getInstance().getConfiguration().getDatabase()) {\n await next();\n return;\n }\n const queryRunner = KoalApp.getInstance().getDatabaseConnection().createQueryRunner();\n context.state.queryRunner = queryRunner;\n queryRunner.startTransaction();\n try {\n await next();\n await queryRunner.commitTransaction();\n } catch (error) {\n await queryRunner.rollbackTransaction();\n throw error;\n } finally {\n await queryRunner.release();\n }\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kool-koala",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
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,8 +57,7 @@
|
|
|
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"
|
|
61
|
-
"yargs": "^17.7.2"
|
|
60
|
+
"ts-node": "^10.9.2"
|
|
62
61
|
},
|
|
63
62
|
"config": {
|
|
64
63
|
"commitizen": {
|
|
@@ -76,6 +75,7 @@
|
|
|
76
75
|
"koa-router": "^13.0.1",
|
|
77
76
|
"koa-static": "^5.0.0",
|
|
78
77
|
"reflect-metadata": "^0.2.2",
|
|
79
|
-
"typeorm": "^0.3.22"
|
|
78
|
+
"typeorm": "^0.3.22",
|
|
79
|
+
"yargs": "^17.7.2"
|
|
80
80
|
}
|
|
81
81
|
}
|